赞
踩
搭建一个含有两个minio集群的联邦集群
ip | 名称 |
---|---|
192.168.80.128 | minio01 |
192.168.80.129 | minio02 |
1.准备两台干净的机器,做实验我使用的是2台初始化的vmware虚拟机,本身20G的磁盘空间大小,增加四块磁盘,之后需要四块磁盘进行挂载,大小2G(做实验可以不用那么大,大于1G即可)。
虚拟机搭建和硬盘挂载 可以借鉴这位老哥的步骤:https://blog.csdn.net/m0_71578648/article/details/132836904
etcd是一个开源的分布式键值对存储服务,在联邦中用于记录bucket的IP地址,联邦内的各个集群的数据存储以及一致性维护仍然由各个集群自行管理,联邦只是对外提供一个整体逻辑视图。通过连接到联邦中任一集群的任一节点,可以查询并访问联邦内所有集群的全部数据。
当一个应用访问MinIO的时候,联邦通过etcd定位到bucket实际所在的集群,在进行数据访问,联邦对外屏蔽了bucket的IP查找和定位过程,在逻辑上形成统一的整体提供服务。可以理解为etcd实现了类似路由寻址的功能。
为了避免单点故障,etcd集群建议配置为三个节点。(实验先用两个构成etcd集群)
https://www.simaek.com/archives/196/
ip | 名称 |
---|---|
192.168.80.128 | etcd01 |
192.168.80.129 | etcd02 |
采用将其他的etcd服务器挨个添加进集群
1.在服务器A上运行一个ETCD实例,节点取名为node1,注意其状态为new,“-initial-cluster”中只有自己的IP
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--name etcd \
--restart=always \
quay.io/coreos/etcd:latest \
etcd \
-name node1 \
-advertise-client-urls http://192.168.80.128:2379 \
-initial-advertise-peer-urls http://192.168.80.128:2380 \
-listen-client-urls http://0.0.0.0:2379 \
-listen-peer-urls http://0.0.0.0:2380 \
-initial-cluster-token etcd-cluster \
-initial-cluster "node1=http://192.168.80.128:2380" \
-initial-cluster-state new
2.在服务器A的ETCD服务上,通过调用API添加一个新的节点:192.168.80.129
curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.168.80.129:2380"]}'
3.在服务器B上运行一个ETCD实例,取名为node2,注意其状态为existing,“-initial-cluster”中有前一个IP及自己的IP
docker run -d \
-p 2379:2379 \
-p 2380:2380 \
--name etcd \
--restart=always \
quay.io/coreos/etcd:latest \
etcd \
-name node2 \
-advertise-client-urls http://192.168.80.129:2379 \
-initial-advertise-peer-urls http://192.168.80.129:2380 \
-listen-client-urls http://0.0.0.0:2379 \
-listen-peer-urls http://0.0.0.0:2380 \
-initial-cluster-token etcd-cluster \
-initial-cluster "node1=http://192.168.80.128:2380,node2=http://192.168.80.129:2380" \
-initial-cluster-state existing
3.集群验证。在集群中的每台机器上查看members,得出的结果应该是相同的
[root@localhost user]# curl -L http://127.0.0.1:2379/v2/members
{"members":[{"id":"8205a4421651062e","name":"node1","peerURLs":["http://192.168.80.128:2380"],"clientURLs":["http://192.168.80.128:2379"]},{"id":"c09e8da39804cf06","name":"node2","peerURLs":["http://192.168.80.129:2380"],"clientURLs":["http://192.168.80.129:2379"]}]}
(懒得再建虚拟机了,理论上etcd和minio集群最好不放在同一批服务器中,单独部署)
ip | 名称 |
---|---|
192.168.80.128 | minio01 |
192.168.80.129 | minio02 |
第一个minio集群 ip为192.168.80.128
docker run --name minio01 -d --restart=always \ -e "MINIO_ROOT_USER=minio" \ -e "MINIO_ROOT_PASSWORD=minio123456" \ -e "MINIO_ETCD_ENDPOINTS=http://192.168.80.128:2380,http://192.168.80.129:2380" \ -e "MINIO_PUBLIC_IPS=192.168.80.128" \ -e "MINIO_SERVER_URL=http://192.168.80.128:9000" \ -e "MINIO_DOMAIN=mydomain.com" \ -v /minio/minio1:/data/minio1 \ -v /minio/minio2:/data/minio2 \ -v /minio/minio3:/data/minio3 \ -v /minio/minio4:/data/minio4 \ -v /minio/docker/config:/root/.minio \ -v /etc/localtime:/etc/localtime:ro \ --network host \ minio/minio:latest server http://192.168.80.128:9000/data/minio{1...4} \ --address "192.168.80.128:9000" \ --console-address ":9090"
新增一个ip为192.168.80.129的集群
docker run --name minio02 -d --restart=always \ -e "MINIO_ROOT_USER=minio" \ -e "MINIO_ROOT_PASSWORD=minio123456" \ -e "MINIO_ETCD_ENDPOINTS=http://192.168.80.128:2380,http://192.168.80.129:2380" \ -e "MINIO_PUBLIC_IPS=192.168.80.129" \ -e "MINIO_SERVER_URL=http://192.168.80.129:9000" \ -e "MINIO_DOMAIN=mydomain.com" \ -v /minio/minio1:/data/minio1 \ -v /minio/minio2:/data/minio2 \ -v /minio/minio3:/data/minio3 \ -v /minio/minio4:/data/minio4 \ -v /minio/docker/config:/root/.minio \ -v /etc/localtime:/etc/localtime:ro \ --network host \ minio/minio server http://192.168.80.129:9000/data/minio{1...4} \ --address "192.168.80.129:9000" \ --console-address ":9090"
下面是每个参数的含义: --name minio01:设置容器的名称为 minio01。 -d:在后台运行容器。 --restart=always:设置容器在退出时总是重新启动。 -e "MINIO_ROOT_USER=minio":设置 MinIO 的根用户为 minio。 -e "MINIO_ROOT_PASSWORD=minio123456":设置 MinIO 的根用户密码为 minio123456。 -e "MINIO_ETCD_ENDPOINTS=http://192.168.80.128:2380,http://192.168.80.129:2380":设置 MinIO 连接的 etcd 的端点地址为 http://192.168.80.128:2380 和 http://192.168.80.129:2380。 -e "MINIO_PUBLIC_IPS=192.168.80.128":设置 MinIO 公开访问的 IP 地址为 192.168.80.128。 -e "MINIO_SERVER_URL=http://192.168.80.128:9000":设置 MinIO 的服务器 URL 为 http://192.168.80.128:9000。 -e "MINIO_DOMAIN=mydomain.com":设置 MinIO 的域名为 mydomain.com。 -v /minio/minio1:/data/minio1:将本地目录 /minio/minio1 挂载到容器内的 /data/minio1,用于存储 MinIO 的数据。 -v /minio/minio2:/data/minio2:将本地目录 /minio/minio2 挂载到容器内的 /data/minio2。 -v /minio/minio3:/data/minio3:将本地目录 /minio/minio3 挂载到容器内的 /data/minio3。 -v /minio/minio4:/data/minio4:将本地目录 /minio/minio4 挂载到容器内的 /data/minio4。 -v /minio/docker/config:/root/.minio:将本地目录 /minio/docker/config 挂载到容器内的 /root/.minio,用于存储 MinIO 的配置文件。 -v /etc/localtime:/etc/localtime:ro:将本地系统的时区设置挂载到容器内的 /etc/localtime,以保持时间同步。 --network host:使用主机网络模式。 minio/minio:latest:使用 MinIO 的最新版本。 server http://192.168.80.128:9000/data/minio{1...4}:指定 MinIO 服务器的数据存储路径。 --address "192.168.80.128:9000":设置 MinIO 的服务器地址为 192.168.80.128:9000。 --console-address ":9090":设置 MinIO 控制台的地址为 :9090。
要注意的是:
MINIO_ETCD_ENDPOINTS参数需与搭建的ETCD集群所有节点IP相对应;
MINIO_PUBLIC_IPS参数则为该集群的所有节点IP;
MINIO_DOMAIN参数必须进行配置,即使你并不通过域名访问存储桶,否则联邦无法生效,只有MINIO_DOMAIN参数值相同的集群,才会组成联邦。
创建成功后就可以登录minio控制台进行查看是否成功了
当在192.168.80.128的集群上新增一个名为new的桶时,192.168.80.129的控制台也能够通过etcd读取到。(注意要将桶的access policy设置为public才能共享)
并且两个集群都可以向该桶中查看、删除、上传或者下载文档。
错误总结
错误1:minio安装 运行后显示:Fatal glibc error: CPU does not support x86-64-v2
解决方案:
使用 /minio/minio:${release}-cpuv1
例如:minio/minio:RELEASE.2024-02-17T01-15-57Z-cpuv1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。