MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储。 它是与 Amazon S3 云存储服务兼容的 API。 使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。

0x00 单机部署

使用以下命令在运行 64 位 Intel/AMD 架构的 Linux 主机上运行独立的 MinIO 服务器。将 /data替换为您希望 MinIO 存储数据的驱动器或目录的路径。

1
2
3
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
./minio server /data --console-address:10000

/data替换为您希望 MinIO 存储数据的驱动器或目录的路径。

下表列出了支持的架构。 将 wget URL 替换为您的 Linux 主机的架构。

架构 下载地址
64-bit Intel/AMD https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
64-bit ARM https://dl.minio.org.cn/server/minio/release/linux-arm64/minio
64-bit PowerPC LE (ppc64le) https://dl.minio.org.cn/server/minio/release/linux-ppc64le/minio
IBM Z-Series (S390X) https://dl.minio.org.cn/server/minio/release/linux-s390x/minio

MinIO 部署开始使用默认的 root 凭据 minioadmin:minioadmin 。您可以使用 MinIO 控制台测试部署,这是一个内置在 MinIO 服务器中的基于 Web 的嵌入式对象浏览器。将主机上运行的 Web 浏览器指向 http://127.0.0.1:9000 并使用 root 凭据登录。您可以使用浏览器来创建桶、上传对象以及浏览 MinIO 服务器的内容。

0x01 分布式部署

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

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

0x010 启动分布式Minio

启动一个分布式Minio实例,只需在所有其它节点运行单机部署同样的命令。

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

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

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

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

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

1
2
3
4
5
6
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
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

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

1
2
3
4
5
6
7
8
9
10
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
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

扩展现有的分布式集群
例如我们是通过区的方式启动MinIO集群,命令行如下:

1
2
3
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...32}/export{1...32}

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

1
2
3
export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://host{1...32}/export{1...32} http://host{33...64}/export{1...32}

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

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

0x011 验证

验证是否部署成功,使用浏览器访问Minio服务或者使用mc。多个节点的存储容量和就是分布式Minio的存储容量。

0x02 部署建议

允许防火墙的端口访问,默认情况下,MinIO 使用端口 9000 来侦听传入连接。如果您的平台默认阻止该端口,您可能需要启用对该端口的访问。

0x020 ufw

对于启用了 ufw 的主机(基于 Debian 的发行版),您可以使用 ufw 命令来允许流量到特定端口。使用以下命令允许访问端口 9000

1
ufw allow 9000

下面的命令启用所有传入端口的流量,范围从 9000 到 9010。

1
ufw allow 9000:9010/tcp

0x021 防火墙-cmd

对于启用了 firewall-cmd (CentOS) 的主机,您可以使用 firewall-cmd 命令来允许特定端口的流量。 使用以下命令允许访问端口 9000 。

1
firewall-cmd --get-active-zones

此命令获取活动区域。 现在,将端口规则应用于上面返回的相关区域。 例如,如果区域是 public ,请使用

1
firewall-cmd --zone=public --add-port=9000/tcp --permanent

请注意,“permanent”确保规则在防火墙启动、重启或重新加载时是持久的。 最后重新加载防火墙以使更改生效。

1
firewall-cmd --reload

0x022 iptables

对于启用了 iptables 的主机(RHEL、CentOS 等),您可以使用 iptables 命令来启用进入特定端口的所有流量。 使用以下命令允许 访问 9000 端口

1
2
iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
service iptables restart

下面的命令启用所有传入端口的流量,范围从 9000 到 9010。

1
2
iptables -A INPUT -p tcp --dport 9000:9010 -j ACCEPT
service iptables restart