写点什么

Minio 环境搭建

用户头像
程序员Fox
关注
发布于: 刚刚
Minio环境搭建

官方文档:https://docs.min.io/docs/

中文文档:http://docs.minio.org.cn/docs/ (没有及时更新,容易被坑)

minio 支持多种 server 启动模式:

2.1 单机部署

minio server 的 standalone 模式,即要管理的磁盘都在 host 本地。该启动模式一般仅用于实验环境、测试环境的验证和学习使用。在 standalone 模式下,还可以分为 non-erasure code mode erasure code mode

non-erasure code mode

​ 在此启动模式下,对于每一份对象数据,minio 直接在 data 下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。

erasure code mode

​ 此模式为 minio server 实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server 会自动启用 erasure code modeerasure code 对磁盘的个数是有要求的,如不满足要求,实例启动将失败。 erasure code 启用后,要求传给 minio server 的 endpoint(standalone 模式下,即本地磁盘上的目录)至少为 4 个。

基于 centos7


wget  -q  http://dl.minio.org.cn/server/minio/release/linux-amd64/miniochmod +x minio#启动minio server服务,指定数据存储目录/mnt/data./minio server /mnt/data
复制代码


默认用户名密码 minioadmin:minioadmin,修改默认用户名密码可以使用:

export MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=12345678
复制代码

默认的配置目录是 ${HOME}/.minio,可以通过--config-dir 命令自定义配置目录:

./minio server --config-dir /mnt/config /mnt/data
复制代码

控制台监听端口是动态生成的,可以通过--console-address ":port"指定静态端口

./minio server --console-address ":50000" /mnt/data
复制代码


访问 minio 控制台: http://192.168.3.14:50000/dashboard


基于 docker

docker run -p 9000:9000 --name minio \  -v /mnt/data:/data \  -v /mnt/config:/root/.minio \  minio/minio server /data
复制代码

存在问题: 浏览器无法访问 minio 控制台,因为没有对外暴露控制台端口

对外暴露 minio 控制台的端口,通过--console-address ":50000"指定控制台端口为静态端口

docker run -p 9000:9000 -p 50000:50000 --name minio \  -v /mnt/data:/data \  -v /mnt/config:/root/.minio \  minio/minio server --console-address ":50000" /data
复制代码


访问 minio 控制台: http://192.168.3.14:50000/


MinIO 自定义用户名密码

docker run -d -p 9000:9000 -p 50000:50000 --name minio \  -e "MINIO_ROOT_USER=admin" \  -e "MINIO_ROOT_PASSWORD=12345678" \  -v /mnt/data:/data \  -v /mnt/config:/root/.minio \  minio/minio server --console-address ":50000" /data 
复制代码

minio 纠删码模式

​ Minio 使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。


​ 纠删码是一种恢复丢失和损坏数据的数学算法, Minio 采用 Reed-Solomon code 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

使用 Minio Docker 镜像,在 8 块盘中启动 Minio 服务:

docker run -d -p 9000:9000 -p 50000:50000 --name minio \  -v /mnt/data1:/data1 \  -v /mnt/data2:/data2 \  -v /mnt/data3:/data3 \  -v /mnt/data4:/data4 \  -v /mnt/data5:/data5 \  -v /mnt/data6:/data6 \  -v /mnt/data7:/data7 \  -v /mnt/data8:/data8 \  minio/minio server /data{1...8} --console-address ":50000" 
复制代码

2.2 分布式集群部署

分布式 Minio 可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。

分布式存储可靠性常用方法

分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。

冗余

冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如 Hadoop 的文件系统(3 个副本),Redis 的集群,MySQL 的主备模式等。

校验

校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID 技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。

分布式 Minio 优势

数据保护

分布式 Minio 采用 纠删码来防范多个节点宕机和位衰减bit rot


分布式 Minio 至少需要 4 个硬盘,使用分布式 Minio 自动引入了纠删码功能。

高可用

单机 Minio 服务存在单点故障,相反,如果是一个有 N 块硬盘的分布式 Minio,只要有 N/2 硬盘在线,你的数据就是安全的。不过你需要至少有 N/2+1 个硬盘来创建新的对象。


例如,一个 16 节点的 Minio 集群,每个节点 16 块硬盘,就算 8 台服務器宕机,这个集群仍然是可读的,不过你需要 9 台服務器才能写数据。

一致性

Minio 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

运行分布式 Minio

​ 启动一个分布式 Minio 实例,你只需要把硬盘位置做为参数传给 minio server 命令即可,然后,你需要在所有其它节点运行同样的命令。


  • 分布式 Minio 里所有的节点需要有同样的 access 秘钥和 secret 秘钥,这样这些节点才能建立联接。为了实现这个,你需要在执行 minio server 命令之前,先将 access 秘钥和 secret 秘钥 export 成环境变量。新版本使用 MINIO_ROOT_USER&MINIO_ROOT_PASSWORD。

  • 分布式 Minio 使用的磁盘里必须是干净的,里面没有数据。

  • 下面示例里的 IP 仅供示例参考,你需要改成你真实用到的 IP 和文件夹路径。

  • ==分布式 Minio 里的节点时间差不能超过 3 秒,你可以使用NTP 来保证时间一致。==

  • 在 Windows 下运行分布式 Minio 处于实验阶段,请悠着点使用。

8 个节点,每节点 1 块盘

启动分布式 Minio 实例,8 个节点,每节点 1 块盘,需要在 8 个节点上都运行下面的命令:

export MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=12345678minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \               http://192.168.1.13/export3 http://192.168.1.14/export4 \               http://192.168.1.15/export5 http://192.168.1.16/export6 \               http://192.168.1.17/export7 http://192.168.1.18/export8
复制代码


4 节点,每节点 4 块盘

启动分布式 Minio 实例,4 节点,每节点 4 块盘,需要在 4 个节点上都运行下面的命令

export MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=12345678minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \               http://192.168.1.11/export3 http://192.168.1.11/export4 \               http://192.168.1.12/export1 http://192.168.1.12/export2 \               http://192.168.1.12/export3 http://192.168.1.12/export4 \               http://192.168.1.13/export1 http://192.168.1.13/export2 \               http://192.168.1.13/export3 http://192.168.1.13/export4 \               http://192.168.1.14/export1 http://192.168.1.14/export2 \               http://192.168.1.14/export3 http://192.168.1.14/export4
复制代码


通过脚本方式启动

执行脚本后查看日志和进程


测试上传:

存储结构

使用 Docker Compose 部署 MinIO

https://docs.min.io/docs/deploy-minio-on-docker-compose.html


要在 Docker Compose 上部署分布式 MinIO,请下载docker-compose.yamlnginx.conf到你当前的工作目录。

docker-compose pulldocker-compose up
复制代码

扩展现有的分布式集群

例如我们是通过区的方式启动 MinIO 集群,命令行如下:

export MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=12345678minio server http://host{1...32}/export{1...32}
复制代码

MinIO 支持通过命令,指定新的集群来扩展现有集群(纠删码模式),命令行如下:

export MINIO_ROOT_USER=adminexport MINIO_ROOT_PASSWORD=12345678minio server http://host{1...32}/export{1...32} http://host{33...64}/export{1...32}
复制代码

现在整个集群就扩展了 1024 个磁盘,总磁盘变为 2048 个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,您就可以按需扩展您的集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。如上命令中,我们可以把原来的集群看做一个区,新增集群看做另一个区,新对象按每个区域中的可用空间比例放置在区域中。在每个区域内,基于确定性哈希算法确定位置。

说明: 您添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余 SLA。 例如,第一个区有 8 个磁盘,您可以将集群扩展为 16 个、32 个或 1024 个磁盘的区域,您只需确保部署的 SLA 是原始区域的倍数即可。


基于 nginx 实现 loadbalancer

upstream minio {        server 192.168.3.14:9001;        server 192.168.3.14:9002;        server 192.168.3.14:9003;        server 192.168.3.14:9004;    }
upstream console { ip_hash; server 192.168.3.14:50001; server 192.168.3.14:50002; server 192.168.3.14:50003; server 192.168.3.14:50004; }
server { listen 9000; listen [::]:9000; server_name localhost;
# To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off;
location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off;
proxy_pass http://minio; } } server { listen 50000; listen [::]:50000; server_name localhost;
# To allow special characters in headers ignore_invalid_headers off; # Allow any size file to be uploaded. # Set to a value such as 1000m; to restrict file size to a specific value client_max_body_size 0; # To disable buffering proxy_buffering off;
location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 300; # Default is HTTP/1, keepalive is only enabled in HTTP/1.1 proxy_http_version 1.1; proxy_set_header Connection ""; chunked_transfer_encoding off;
proxy_pass http://console; } }
复制代码


2.3 Minio 客户端使用

MinIO Client (mc)为 ls,cat,cp,mirror,diff,find 等 UNIX 命令提供了一种替代方案。它支持文件系统和兼容 Amazon S3 的云存储服务(AWS Signature v2 和 v4)。

ls       列出文件和文件夹。mb       创建一个存储桶或一个文件夹。cat      显示文件和对象内容。pipe     将一个STDIN重定向到一个对象或者文件或者STDOUT。share    生成用于共享的URL。cp       拷贝文件和对象。mirror   给存储桶和文件夹做镜像。find     基于参数查找文件。diff     对两个文件夹或者存储桶比较差异。rm       删除文件和对象。events   管理对象通知。watch    监视文件和对象的事件。policy   管理访问策略。config   管理mc配置文件。update   检查软件更新。version  输出版本信息。
复制代码


部署客户端 mc


wget  http://dl.minio.org.cn/client/mc/release/linux-amd64/mcchmod +x mc./mc --helpmv mc /usr/local/sbin/
复制代码

配置 mc

mc将所有的配置信息都存储在~/.mc/config.json文件中

# 查询mc host配置mc config host ls# 添加minio服务    mc config host add minio-server http://192.168.3.14:9000 admin 12345678# 删除hostmc config host remove minio-server
复制代码


mc 命令使用

上传下载

# 查询minio服务上的所有buckets(文件和文件夹)mc ls minio-server
# 下载文件mc cp minio-server/tulingmall/fox/fox.jpg /tmp/ #删除文件mc rm minio-server/tulingmall/fox/fox.jpg#上传文件mc cp zookeeper.out minio-server/tulingmall/
复制代码



Bucket 管理
# 创建bucketmc mb minio-server/bucket01# 删除bucketmc rb minio-server/bucket02# bucket不为空,可以强制删除   慎用mc rb --force minio-server/bucket01
复制代码




#查询bucket03磁盘使用情况mc du minio-server/bucket03
复制代码


mc admin 使用

MinIO Client(mc)提供了“ admin”子命令来对您的 MinIO 部署执行管理任务。

service     服务重启并停止所有MinIO服务器update      更新更新所有MinIO服务器info        信息显示MinIO服务器信息user        用户管理用户group       小组管理小组policy      MinIO服务器中定义的策略管理策略config      配置管理MinIO服务器配置heal        修复MinIO服务器上的磁盘,存储桶和对象profile     概要文件生成概要文件数据以进行调试top         顶部提供MinIO的顶部统计信息trace       跟踪显示MinIO服务器的http跟踪console     控制台显示MinIO服务器的控制台日志prometheus  Prometheus管理Prometheus配置kms         kms执行KMS管理操作
复制代码


用户管理
mc admin user --help#新建用户mc admin user add minio-server foxmc admin user add minio-server fox02 12345678#查看用户mc admin user list minio-server#禁用用户mc admin user disable minio-server fox02#启用用户mc admin user disable minio-server fox02#查看用户信息mc admin user info minio-server fox#删除用户mc admin user remove minio-server fox02
复制代码


策略管理

policy 命令,用于添加,删除,列出策略,获取有关策略的信息并为 MinIO 服务器上的用户设置策略。

mc admin policy --help#列出MinIO上的所有固定策略mc admin policy list minio-server# 查看plicy信息mc admin policy info minio-server readwrite
复制代码



添加新的策略

编写策略文件:/root/tulingmall.json

{ "Version": "2012-10-17", "Statement": [  {   "Effect": "Allow",   "Action": [    "s3:GetBucketLocation",    "s3:GetObject"   ],   "Resource": [    "arn:aws:s3:::tulingmall"   ]  },{   "Effect": "Allow",   "Action": [    "s3:*"   ],   "Resource": [    "arn:aws:s3:::tulingmall/*"   ]  } ]}
复制代码

"Action": [

"s3:GetBucketLocation",

"s3:ListBucket",

"s3:GetObject",

"s3:PutObject",

"s3:DeleteObject"

]

将 tulingmall.json 添加到策略数据库

# 添加新的策略mc admin policy add minio-server tulingmall-admin /root/tulingmall.jsonmc admin policy list minio-server
复制代码



mc admin user add minio-server fox03 12345678# 设置用户的访问策略mc admin policy set minio-server tulingmall-admin user=fox03
复制代码


测试:fox03/12345678 登录 minio 控制台http://192.168.3.14:50000/,只能操作 tulingmall 的 bucket


发布于: 刚刚阅读数: 2
用户头像

程序员Fox

关注

思想比技术更重要,有术无道止于术 2019.03.12 加入

多年中间件开发经验,擅长分布式,微服务架构技术,精通各大源码框架,源码控,喜欢分享技术

评论

发布
暂无评论
Minio环境搭建