准备工作
-
安装centos7.9.2009版本的linux系统,关闭selinux和firewalld
-
克隆8台物理机作为minio的集群机器
-
克隆2物理机用作配置高可用+负载均衡,安装keepalived配置高可用和安装nginx配置负载均衡(还有反向代理)
-
配置完成10台物理机器的静态IP和DNS,修改完成主机名和hosts文件
-
10台机器同时安装docker,并设置开机启动
-
修改主机名:minio集群机器名字:minio1-8;2台nginx机器:nginx1-2(keepalived和nginx在同一台机器上)
-
修改hosts,如下:(如果有内部的DNS服务器,映射了内部的域名,可以不配置)
- 192.168.1.61 minio1
- 192.168.1.62 minio2
- 192.168.1.63 minio3
- 192.168.1.64 minio4
- 192.168.1.65 minio5
- 192.168.1.66 minio6
- 192.168.1.67 minio7
- 192.168.1.68 minio8
- 192.168.1.71 nginx1
- 192.168.1.72 nginx2
- 192.168.1.80 www.minio-api.com #VIP虚拟主机,可以和下面的是同一台机器,也可以分开
- 192.168.1.80 www.minio-console.com #VIP虚拟主机,可以和上面的是同一台机器,也可以分开
-
minio集群机器拉取镜像:docker pull minio/minio:latest
-
2台nginx机器拉去镜像:docker pull nginx:latest;keepalived使用原生安装或docker安装或自定义制作docker镜像(因为docker仓库中的版本很老了,所以我这里采用的自定义),建议原生安装就行了
-
如果是非 docker 方式集群,原生linux,操作类似,下载linux二进制文件进行启动,具体参考官网说明
-
8台minio集群物理机需要在同一网段内,用不同的云服务器测试失败(可能是云服务器端口和权限开放问题),同一云服务器可以使用云服务器内部的ip地址(一般都是内网通畅的)
启动容器
8台物理机同时启动同一docker容器,命令如下:
docker run -itd --name minio --restart always --net=host --privileged=true -e "MINIO_ROOT_USER=root" -e "MINIO_ROOT_PASSWORD=admin123" -e "MINIO_SERVER_URL=http://www.minio-api.com" -e "MINIO_BROWSER_REDIRECT_URL=http://www.minio-console.com" -e "TZ=Asia/Shanghai" -v /home/minio/data1:/data1 -v /home/minio/data2:/data2 -v /home/minio/data3:/data3 -v /home/minio/data4:/data4 -v /home/minio/data5:/data5 -v /home/minio/data6:/data6 -v /home/minio/data7:/data7 -v /home/minio/data8:/data8 -v /home/minio/config:/root/.minio minio/minio server http://minio{1...8}/data{1...8} --console-address ":9090" -address ":9000"
- 命令解释:
- -it:命令行交互模式
- -d:后台运行
- --name minio:容器名minio
- --restart always:容器开机启动,也即容器随着docker服务启动而启动,如果docker服务是开机启动,就是开机启动
- --net=host:docker容器使用主机网络模式
- --privileged=true:使用root权限
- -e "":指定环境变量,比如:用户名、密码、时区
- -e "MINIO_SERVER_URL=http://负载均衡机器域名/IP:端口":设置api访问域名
- -e "MINIO_BROWSER_REDIRECT_URL=http://负载均衡机器域名/IP:端口" :设置控制台访问域名
- -v /xxx:/ccc:挂在容器目录到宿主机中
- http://minio{1...8}/data{1...8}:指定服务器和磁盘
- --console-address ":9090" -address ":9000"指定控制台端口和api端口
- 启动成功后,可以分别访问192.168.1.61~192.168.1.68,八台物理机的服务。这里随便选取一台http://192.168.1.61:9090,登录进去查看服务情况
- 服务都正常,集群就成功了。
- 失败使用docker logs -f minio 查看日志
- 这时如果直接访问某一单一机器的api地址会跳转到http://www.minio-console.com,等后续配置完成就可访问
配置nginx
目的是提供一个主入口,让所有的服务都能分发到。
nginx.conf配置如下:
#运行nginx的用户
user nginx;
#启动进程设置成和CPU数量相等
worker_processes 1;
#全局错误日志及PID文件的位置
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
#工作模式及连接数上限
events {
#单个后台work进程最大并发数设置为1024
worker_connections 1024;
}
http {
#设定mime类型
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#设置连接超时的事件
keepalive_timeout 65;
#开启GZIP压缩
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
default.conf,配置如下:
upstream minioconsoleserver{
server 192.168.1.61:9090 weight=1; #负载均衡配置,策略权重
server 192.168.1.62:9090 weight=1;
server 192.168.1.63:9090 weight=1;
server 192.168.1.64:9090 weight=1;
server 192.168.1.65:9090 weight=1;
server 192.168.1.66:9090 weight=1;
server 192.168.1.67:9090 weight=1;
server 192.168.1.68:9090 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name www.minio-console.com;
location / {
proxy_pass http://minioconsoleserver;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header ServerIP $upstream_addr; #在响应头中显示实际负载的服务IP和端口
add_header ServerCode $upstream_status; #在响应头中显示实际负载的状态码
}
}
upstream minioapiserver{
server 192.168.1.61:9000 weight=1;
server 192.168.1.62:9000 weight=1;
server 192.168.1.63:9000 weight=1;
server 192.168.1.64:9000 weight=1;
server 192.168.1.65:9000 weight=1;
server 192.168.1.66:9000 weight=1;
server 192.168.1.67:9000 weight=1;
server 192.168.1.68:9000 weight=1;
}
server {
listen 80;
listen [::]:80;
server_name www.minio-api.com;
location / {
proxy_pass http://minioapiserver;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header ServerIP $upstream_addr; #在响应头中显示实际负载的服务IP和端口
add_header ServerCode $upstream_status; #在响应头中显示实际负载的状态码
}
}
启动nginx容器
docker run -itd --name=nginx -p 80:80 -p 443:443 --restart=always -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/conf.d/:/etc/nginx/conf.d/ -v /home/nginx/logs/:/var/log/nginx/ -v /home/nginx/html/:/usr/share/nginx/html -e TZ=Asia/Shanghai nginx
注意:这里两台nginx配置一模一样,这里就不赘述
配置keepalived
keepalived配置:原生安装和docker安装、自定义制作docker镜像
安装步骤不赘述,安装好了之后编写配置文件,如下:
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 75
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass admin123
}
virtual_ipaddress {
192.168.1.75
}
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 75
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass admin123
}
virtual_ipaddress {
192.168.1.75
}
}
标题:minio分布式集群搭建
作者:JayGao
地址:https://www.jaygao.top/articles/2022/10/31/1667204236090.html
版权:版权JayGao所有,如需转载,请注明出处
捐赠: