3.Minio环境搭建
🏠 官方文档:https://docs.min.io/docs/
🏠 中文文档:http://docs.minio.org.cn/docs/
minio支持多种server启动模式:
3.1 单机部署
minio server的standalone模式,即要管理的磁盘都在host本地。该启动模式一般仅用于实验环境
、测试环境的验证
和学习使用
。在standalone模式下,还可以分为non-erasure code mode和erasurecode mode。
3.1.1 non-erasure code mode
在此启动模式下,对于每一份对象数据,minio直接在data下面存储这份数据,不会建立副本,也不会启用纠删码机制。因此,这种模式无论是服务实例还是磁盘都是“单点”,无任何高可用保障,磁盘损坏就表示数据丢失。
3.1.2 erasure code mode
此模式为minio server实例传入多个本地磁盘参数。一旦遇到多于一个磁盘参数,minio server会自动启用erasure code mode。erasure code对磁盘的个数是有要求的,如不满足要求,实例启动将失败。 erasure code启用后,要求传给minio server的endpoint(standalone模式下,即本地磁盘上的目录)至少为4个。
3.1.3 基于centos7
🏠 文档地址:https://min.io/docs/minio/linux/index.html
操作系统 | CPU架构 | 地址 |
GNU/Linux | 64-bit Intel | http://dl.minio.org.cn/server/minio/release/linux-amd64/mini |
# 1.创建一个目录,将我们下载的minio放在该目录下 mkdir /usr/local/soft # 2.定位到创建的目录 cd /usr/local/soft # 3.下载minio wget -q http://dl.minio.org.cn/server/minio/release/linux-amd64/minio # 4.放开权限 chmod +x minio # 5.启动minio server服务,指定数据存储目录/mnt/data ./minio server /mnt/data
使用 ctrl + c
即可退出minio服务。
默认用户名密码minioadmin:minioadmin,修改默认用户名密码可以使用:
export MINIO_ROOT_USER=admin export 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.65.129:50000/dashboard
登录:http://192.168.65.129:50000/login
注意需要先放开9000和50000两个端口:
# 1.放开防火墙9000端口 firewall-cmd --zone=public --add-port=9000/tcp --permanent # 2.放开防火墙50000端口 firewall-cmd --zone=public --add-port=50000/tcp --permanent # 3.重启防火墙 systemctl restart firewalld.service
3.1.4 基于docker
对外暴露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自定义用户名密码
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
3.1.5 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 \ -e "MINIO_ROOT_USER=admin" \ -e "MINIO_ROOT_PASSWORD=12345678" \ -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"
3.2 分布式集群部署
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
3.2.1 分布式存储可靠性常用方法
分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。
3.2.1.1 冗余
冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本 备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如 Hadoop 的文件系统(3个副本),Redis 的集群,MySQL 的主备模式等。
3.2.1.2 校验
校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如 TCP 协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的 RAID技术,纠删码(Erasure Code)技术等。MinIO 采用的就是纠删码技术。
3.2.2 分布式Minio优势
3.2.2.1 数据保护
分布式Minio采用 纠删码来防范多个节点宕机和位衰减 bit rot
。
分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
3.2.2.2 高可用
单机Minio服务存在单点故障,相反,如果是一个有N块硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。
例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。
3.2.2.3 一致性
Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write
一致性模型。
3.2.3 运行分布式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处于实验阶段,请悠着点使用。
3.2.3.1 8个节点,每节点1块盘
启动分布式Minio实例,8个节点,每节点1块盘,需要在8个节点上都运行下面的命令:
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
3.2.3.2 4节点,每节点4块盘
启动分布式Minio实例,4节点,每节点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
3.2.4 使用Docker Compose部署MinIO
🏠 说明文档:https://docs.min.io/docs/deploy-minio-on-docker-compose.html
要在Docker Compose上部署分布式MinIO,请下载docker-compose.yaml和nginx.conf到你当前的工作目录。
docker-compose pull docker-compose up
3.2.5 扩展现有的分布式集群
例如我们是通过区的方式启动MinIO集群,命令行如下:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=12345678 minio server http://host{1...32}/export{1...32}
MinIO支持通过命令,指定新的集群来扩展现有集群(纠删码模式),命令行如下:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=12345678 minio server http://host{1...32}/export{1...32} http://host{33...64}/export{1...32}
现在整个集群就扩展了1024个磁盘,总磁盘变为2048个,新的对象上传请求会自动分配到最少使用的集群上。通过以上扩展策略,您就可以按需扩展您的集群。重新配置后重启集群,会立即在集群中生效,并对现有集群无影响。如上命令中,我们可以把原来的集群看做一个区,新增集群看做另一个区,新对
象按每个区域中的可用空间比例放置在区域中。在每个区域内,基于确定性哈希算法确定位置。
说明: 您添加的每个区域必须具有与原始区域相同的磁盘数量(纠删码集)大小,以便维持相同的数据冗余SLA。 例如,第一个区有8个磁盘,您可以将集群扩展为16个、32个或1024个磁盘的区域,您只需确保部署的SLA是原始区域的倍数即可。