MinIO 新版配置
官方文档
MinIO | The MinIO Quickstart Guide
单节点部署
通过二进制文件部署
# 正常直接通过
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
$ ./minio server /opt/data
# 启动后,会发现用户名密码默认为 minioadmin,并且 console 监听的是一个动态的端口,下次访问端口会发生变化。
# 配置用户名密码
$ export MINIO_ROOT_USER = admin
$ export MINIO_ROOT_PASSWORD = 12345678
# 默认的配置目录是${HOME}/.minio,可以通过 --config-dir 命令自定义配置目录
$ ./minio server -config-dir /mnt/config /opt/data
# 默认服务端口家是 9000,可以通过 --address ":port" 指定静态端口
$ ./minio server --address ":9000" /opt/data
# 控制台监听端口是动态生成的,可以通过 --console-address ":port" 指定静态端口
./minio server --console-address ":5000" /opt/data
基于 Docker
$ docker run -p 9000:9000 --name minio \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server /data
存在问题:浏览器无法访问 minio 控制台,因为没有对外暴露控制台对外暴露控制台端口
$ docker run -p 9000:9000 -p 5000:5000 --name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server --console-address ":5000" /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 5000:5000 --name minio \
-v /opt/data1:/data1 \
-v /opt/data2:/data2 \
-v /opt/data3:/data3 \
-v /opt/data4:/data4 \
-v /opt/data5:/data5 \
-v /opt/data6:/data6 \
-v /opt/data7:/data7 \
-v /opt/data8:/data8 \
minio/minio server /data{1...8} --console-address ":5000"
分布式集群部署
分布式 Minio 可以让你将多块硬盘(甚至是在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 Minio 避免了单点故障。
分布式 Minio 优势
数据保护
分布式 Minio 采用纠删码来防范多个节点宕机和位衰减 bit rot。
分布式 Minio 至少需要四块硬盘,使用分布式 Minio 自动引入了纠删码功能。
高可用
单机节点存在单点故障,相反,如果是一个有 N 块硬盘的分布式 MinIO,只要有 N/2 块硬盘在线,你的数据就是安全的。不过你需要有 N/2 + 1 个硬盘来创建新的对象。
例如,一个 16 个节点的 MinIO 集群,每个节点 16 块硬盘,就算 8 台服务器宕机,这个集群仍然是可读的,不过需要有 9 题啊服务器才能写数据
一致性
MinIO 在分布式和单机模式下,所有读写操作都严格遵守 read-adter-write 一致性模型
运行分布式 MioIO
启动一个分布式 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 块硬盘,需要在每个节点上都运行下面的命令
export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
minio 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 块硬盘
export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
minio 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
export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
MINIO_HOME = /usr/local/soft
MINIO_HOST = 192.168.3.14
for i in {01..04}; do
nohup ${MINIO_HOME}/minio server --address ":90${i}" --console-address ":50${i}" http://${MINIO_HOST}:9001/mnt/data01 http://${MINIO_HOST}:9002/mnt/data02 http://${MINIO_HOST}:9003/mnt/data03 http://${MINIO_HOST}:9004/mnt/data04 > ${MINIO_HOME}/minio-90${i}.log 2>&1 &
done
基于 nginx 实现 loadbalance
upstream minio {
server 192.168.33.161:9000;
server 192.168.33.162:9000;
server 192.168.33.163:9000;
server 192.168.33.164:9000;
}
upstream console {
ip_hash;
server 192.168.33.161:5000;
server 192.168.33.162:5000;
server 192.168.33.163:5000;
server 192.168.33.164:5000;
}
server {
listen 9000;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_connect_timeout 300;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_ignore_client_abort on;
proxy_pass http://minio;
}
}
server {
listen 5000;
server_name localhost;
ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_connect_timeout 300;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_ignore_client_abort on;
proxy_pass http://console;
}
}
MinIO 客户端 mc 使用
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 删除文件夹或者对象
enents 管理对象通知
watch 监视文件和对象的事件
policy 管理访问策略
config 管理 mc 配置文件
update 检查软件更新
version 输出版本信息
部署客户端 mc
$ wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
$ chmod +x mc
$ ./mc --help
配置 mc
mc 将所有的配置信息都存储在~/.minio/config.json
文件中
# 查询 mc host 配置
$ mc config host ls
# 添加 minio 服务
$ mc config host add minio-server http://192.168.33.160:9000 admin 12345678
# 删除 host
$ mc config host remove minio-server
mc 具体命令操作参考官方文档即可。
本作品采用《CC 协议》,转载必须注明作者和本文链接