MinIO 分布式部署

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

分布式 MinIO 的好处

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

数据保护

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

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

高可用

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

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

注意:只要遵守分布式 MinIO 的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。

一致性

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

示例

在前面章节已经介绍了如 MinIO 单机模式的搭建,MinIO 分布式搭建的流程和单机模式基本一致。MinIO 服务基于命令行传入的参数自动切换成单机模式还是分布式模式。

怎样启动分布式 MinIO?

MinIO 分布式模式只需要把硬盘位置做为参数传给 minio server 命令即可;然后,你需要在所有其它节点运行同样的命令。

注意:

  • 分布式 MinIO 里所有的节点需要有同样的 Access key 和 Secret key,这样这些节点才能建立联接。你需要在执行 minio server 命令之前,先将 Access key 和 Secret key 使用 export 导成环境变量。

  • 分布式 MinIO 使用的磁盘里必须是空磁盘,不能存在任何其他文件或数据。

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

  • Windows下的分布式 MinIO 还处于实验阶段,不建议使用于生产环境。

示例1

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

Linux 和 macOS

export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=mypassword
export MINIO_PROMETHEUS_AUTH_TYPE="public"
export MINIO_DOMAIN=hxstrive.com
./minio server http://192.168.31.201/export1 \
             http://192.168.31.202/export2 \
             http://192.168.31.203/export3 \
             http://192.168.31.204/export4

注意:在 Linux 系统中,如果使用 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY 环境变量将得到如下告警信息:

WARNING: MINIO_ACCESS_KEY and MINIO_SECRET_KEY are deprecated.
         Please use MINIO_ROOT_USER and MINIO_ROOT_PASSWORD

推荐使用 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 替换 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY。

Windows

set MINIO_ACCESS_KEY=root
set MINIO_SECRET_KEY=mypassword
set MINIO_PROMETHEUS_AUTH_TYPE="public"
set MINIO_DOMAIN=hxstrive.com
minio.exe server http://192.168.31.201/D:/data ^
                 http://192.168.31.202/D:/data ^
                 http://192.168.31.203/D:/data ^
                 http://192.168.31.204/D:/data

注意,在 minio server 后面指定的服务器地址必须是大于等于4的偶数,否则将抛出如下错误:

ERROR Invalid command line arguments: Incorrect number of endpoints provided [http://192.168.31.11/D:/data http://192.168.31.12/D:/data http://192.168.31.13/D:/data]
      > Please provide an even number of endpoints greater or equal to 4
      HINT:
        For more information, please refer to https://docs.min.io/docs/minio-erasure-code-quickstart-guide

在 Linux 上面运行上面实例,运行效果如下图:

使用浏览器访问任意一个服务器的 9000 端口,创建桶,删除文件。然后查看结果,如下图:

示例2

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

GNU/Linux 和 macOS

export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=mypassword
export MINIO_PROMETHEUS_AUTH_TYPE="public"
export MINIO_DOMAIN=hxstrive.com
./minio server http://192.168.31.201/export1 http://192.168.31.201/export2 \
               http://192.168.31.201/export3 http://192.168.31.201/export4 \
               http://192.168.31.202/export1 http://192.168.31.202/export2 \
               http://192.168.31.202/export3 http://192.168.31.202/export4 \
               http://192.168.31.203/export1 http://192.168.31.203/export2 \
               http://192.168.31.203/export3 http://192.168.31.203/export4 \
               http://192.168.31.204/export1 http://192.168.31.204/export2 \
               http://192.168.31.204/export3 http://192.168.31.204/export4

Windows

export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=mypassword
export MINIO_PROMETHEUS_AUTH_TYPE="public"
export MINIO_DOMAIN=hxstrive.com
minio.exe server  http://192.168.31.201/C:/data1 http://192.168.31.201/C:/data2 ^
                  http://192.168.31.201/C:/data3 http://192.168.31.201/C:/data4 ^
                  http://192.168.31.202/C:/data1 http://192.168.31.202/C:/data2 ^
                  http://192.168.31.202/C:/data3 http://192.168.31.202/C:/data4 ^
                  http://192.168.31.203/C:/data1 http://192.168.31.203/C:/data2 ^
                  http://192.168.31.203/C:/data3 http://192.168.31.203/C:/data4 ^                  
                  http://192.168.31.204/C:/data1 http://192.168.31.204/C:/data2 ^
                  http://192.168.31.204/C:/data3 http://192.168.31.204/C:/data4

扩展现有的分布式集群

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

export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=mypassword
export MINIO_PROMETHEUS_AUTH_TYPE="public"
export MINIO_DOMAIN=hxstrive.com
minio server http://host{1...32}/export{1...32}

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

export MINIO_ROOT_USER=root
export MINIO_ROOT_PASSWORD=mypassword
export MINIO_PROMETHEUS_AUTH_TYPE="public"
export MINIO_DOMAIN=hxstrive.com
minio server http://host{1...32}/export{1...32} http://host{33...64}/export{1...32}

现在整个集群就扩展了1024个磁盘,总磁盘变为2048个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,您就可以按需扩展您的集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。

如上面命令中,我们可以把原来的集群看做一个区,新增集群看做另一个区,新对象按每个区域中的可用空间比例放置在区域中。在每个区域内,基于确定性哈希算法确定位置。

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

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号