MinIO 集群搭建

部署 MinIO 4 节点分布式服务,并用 nginx 作 Web 负载均衡

一、通过二进制文件部署

环境

# 四台虚拟机以及一台 Nginx 虚拟机:
master          192.168.0.100
mimio-node-1    192.168.0.101
mimio-node-2    192.168.0.102
mimio-node-3    192.168.0.103
mimio-node-4    192.168.0.104

# 前置步骤,已完成下载可执行程序(服务器和客户端):
wget https://dl.min.io/server/minio/release/linux-amd64/minio
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x minio && ln minio /bin
chmod +x mc && ln mc /bin

MinIO 集群搭建

MinIO 集群搭建

1.1、环境准备

# 1、打开防火墙端口 9000:
$ firewall-cmd -permanent --zone=public --add-port=9000/tcp
$ firewall-cmd --reload
# 2、修改 /etc/hosts,更新每台虚拟机hostname和IP的对应关系
$ sudo hostnamectl set-hotname xxx
$ sudo vim /etc/hosts

192.168.122.160 master
192.168.122.161 minio-node-1
192.168.122.162 minio-node-2
192.168.122.163 minio-node-3
192.168.122.164 minio-node-4

# 尝试直接通过名称来ping
ping minio-node-1

# 3、修改系统最大文件数
$ echo "* soft nofile 65535" >> /etc/security/limits.conf
$ echo "* hard nofile 65535" >> /etc/security/limits.conf

1.2、启动集群

# 1、每台虚拟机创建四个存储目录用于提供存储空间
$ mkdir /opt/data1 /opt/data2 /opt/data3 /opt/data4

# 2、设置自定义的访问密钥:
$ export MINIO_ACCESS_KEY=minio2021
$ export MINIO_SECRET_KEY=test123

# 3、每台虚拟机运行如下命令启动多节点分布式环境
$ minio server http://minio-node-{1...4}/opt/data{1...4}

# 4、客户端 mc 简单测试
$ mc config host add minio http://minio-node-1:9000 minio2021 test123
$ mc mb minio/media # 创建存储桶
$ mc cp ~/Downloads/test.mp4 minio/medis # 上传一个文件
$ mc ls minio/media # 查看上传文件结果

1.3、nginx 负载均衡

# 配置 nginx 负载均衡,指定用 8800 端口访问
# 1、安装 nginx 并在防火墙打开8800
$ sudo apt update
$ sudo apt install nginx
$ sudo firewall-cmd --permanent --zone=public --add-port=9900/tcp
$ sudo firewall-cmd --reload

# 2、安装 selinux 工具包并配置 selinux,允许8800端口
# 3、编辑负载均衡配置文件,取代default配置文件,重启nginx并测试登陆。
$ sudo vim /etc/nginx/nginx.conf

负载均衡配置如下

upstream http_minio {
    server 192.168.122.161:9000;
    server 192.168.122.162:9000;
    server 192.168.122.163:9000;
    server 192.168.122.164:9000;
}

server {
    listen      8800;
    server_name localhost;

    ignore_invalid_headers  off;
    client_max_body_size    0;
    proxy_buffering         off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $http_x_forwarded_proto;

        proxy_connect_timeout   300;
        proxy_http_version      1.1;
        chunked_transfer_encoding   off;
        proxy_ignore_client_abort   on;

        proxy_pass  http://http_minio;
    }
}
# 启动nginx
$ sudo nginx
$ systemctl staus nginx

注意

如果使用 MinIO 的 Java Sdk 对集群,在 nginx 负载均衡时,server 的 proxy_set_header 的 HOST,需要和 minio client 创建的保持一致,与签名时候的url就保持一致了。不然会签名错误 !!!

The request signature we calculated does not match the signature you provided. Check your key and signing method.

MinIO 集群搭建

二、通过 Docker

2.1、开通服务器 ip_forward 功能

# 第一项主要是开启系统的 ipv4 转发
$ cat >> /etc/sysctl.conf <<- 'EOF'
> net.ipv4.ip_forward=1
> vm.max_map_count=655360
> EOF

# 重新加载文件
$ sudo sysctl -p
net.ipv4.ip_forward = 1
vm.max_map_count = 655360

2.2、创建 Macvlan31 网络,让每个容器都拥有独立 ip

$ docker network create -d macvlan \
# 子网掩码
--subnet=192.168.120.0/24 \
# 容器获取到 ip 地址的范围
--ip-range=192.168.120.0/24 \
# 网关 ip
--gateway=192.168.120.1 \
# 使用哪个网卡绑定
-o parent=ens33 \
macvlan33

# 查看网络模式
$ docker network ls

3.3、创建三个 Macvlan 容器 192.168.120.21~23,构建 Macvlan 应用集群

$ docker run -d --name minio-21 \
--restart=always \
--network macvlan33 --ip=192.168.120.21 \
-v /data/config:/root/.minio
-v /data/n21/export1:/export1 \
-v /data/n21/export2:/export2 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=test123" \
minio/minio server --address ":9000" --console-address ":5000" http://192.168.120.2{1...3}/export{1...2}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!