基于Docker的Minio集群部署

基于Docker的Minio集群部署

  • 概述
    • 环境
    • NTP时间同步
      • 服务端
      • 客户端
    • Minio集群
    • Nginx负载均衡

概述

能搜到这篇文章的同学,相信已对Minio有了一定的认识,关于Minio的介绍本文就不在赘述了,详细请参考Minio的英文官网(PS:中文网站不一定是最新的版本),关于Docker的安装部署及Docker指令的基础含义也请参考其他大神的博文,本文旨在实现基于Docker的Minio集群部署,以下所有命令均在管理员权限下执行

环境

IP 服务 操作系统
192.168.5.1 minio-1 CentOS 7.9
192.168.5.2 minio-2 CentOS 7.9
192.168.5.3 minio-3 CentOS 7.9
192.168.5.4 minio-4 CentOS 7.9
192.168.5.5 nginx CentOS 7.9

NTP时间同步

Minio集群需要各个节点的时间保持同步,故选择NTP作为时间同步服务,这里将 minio-1192.168.5.1)节点作为同步服务端

服务端

  • 安装ntp
yum install ntp ntpdate –y
  • 启动ntp服务
systemctl start ntpd
  • 服务端修改配置文件
vim /etc/ntp.conf

#注释掉其他上游时间服务器
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

#本机作为服务端
#配置时间服务器为本地的ntpd Server服务器
#以本地时间为主,可以设置其他网络时间,但这里主要是针对无网络情况
server 127.127.1.1
fudge 127.127.1.1 stratum 10
  • 重启ntp服务
systemctl restart ntpd
  • 查看端口 UDP123
ss -lnu
  • 查看ntp状态
ntpq -p
  • 设置开机启动
systemctl enable ntpd
  • 开放UDP 123端口
firewall-cmd --permanent --zone=public --add-port=123/udp
firewall-cmd --reload

客户端

客户端分别为192.168.5.2192.168.5.3192.168.5.4,以下操作在各个客户端一致

  • 安装ntp
yum install ntp ntpdate –y
  • 手动同步一次
/usr/sbin/ntpdate -u 192.168.5.1
  • 修改配置文件
vim /etc/ntp.conf

#注释掉其他上游时间服务器
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

#配置允许上游时间服务器主动修改本机的时间
restrict 192.168.5.1 nomodify notrap noquery
#配置上游时间服务器为本地的ntpd Server服务器
server 192.168.5.1
fudge 192.168.5.1 stratum 10
  • 启动ntp服务
systemctl start ntpd
  • 设置开机启动
systemctl enable ntpd
  • 查看状态
ntpq -p

Minio集群

节点分别为192.168.5.1192.168.5.2192.168.5.3192.168.5.4,以下操作除创建容器外,均可在各个节点同步执行,注意docker部署集群模式时必须指定-–net=host参数,使用主机网络,采用端口映射无法创建集群

  • 拉取minio的镜像
# 2022年10月24日版
docker pull minio/minio:RELEASE.2022-10-24T18-35-07Z
  • 配置本地解析
vim /etc/hosts

#完整内容如下
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.5.1 minio-1
192.168.5.2 minio-2
192.168.5.3 minio-3
192.168.5.4 minio-4
  • 创建文件夹
mkdir -p /data/minio/{update,bakup}
  • 创建容器
    以下命令,分别在对应节点进行创建容器
# minio-1(192.168.5.1)
docker run -d --name minio-01 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.5.1:9000 \
--console-address '0.0.0.0:9999' http://minio-{1...4}/data{1...2}

# minio-2(192.168.5.2)
docker run -d --name minio-02 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.5.2:9000 \
--console-address '0.0.0.0:9999'  http://minio-{1...4}/data{1...2}

#minio-3(192.168.5.3)
docker run -d --name minio-03 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 minio/minio:latest server \
--address 192.168.5.3:9000 \
--console-address '0.0.0.0:9999'  http://minio-{1...4}/data{1...2}

#minio-4(192.168.5.4)
docker run -d --name minio-04 --restart=always --net=host \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /data/minio/update:/data1 \
-v /data/minio/bakup:/data2 \
minio/minio:latest server \
--address 192.168.5.4:9000 \
--console-address '0.0.0.0:9999'  http://minio-{1...4}/data{1...2}
  • 各个节点开放端口90009999
firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --permanent --zone=public --add-port=9999/tcp
firewall-cmd --reload

可登录任意一个节点的IP:9999进行看板访问
账号admin密码admin123

Nginx负载均衡

Nginx也采用Docker进行部署,节点IP为192.168.5.5

  • 创建nginx文件夹
mkdir -p /data/nginx
  • 创建nginx配置文件
touch /data/ngixn/nginx.conf
  • nginx完整配置
worker_processes auto;

events {
    worker_connections 1024;
}

http {
    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

    #Minio代理,设置文件上传上限
    client_max_body_size 1000m;

    #Minio 服务负载均衡
    upstream minio-server	{
        server  192.168.5.1:9000 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.2:9000 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.3:9000 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.4:9000 weight=25 max_fails=2 fail_timeout=30s;
    }


    #控制台负载均衡
    upstream minio-console	{
        server  192.168.5.1:9999 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.2:9999 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.3:9999 weight=25 max_fails=2 fail_timeout=30s;
        server  192.168.5.4:9999 weight=25 max_fails=2 fail_timeout=30s;
    }
    
    #Minio服务
    server {  
        listen       9030;
        server_name  minio-server;
        
        # 允许在标头中使用特殊字符
        ignore_invalid_headers off;
        # 允许任何大小的文件上传。
        # 设置为1000m等值;将文件大小限制为特定值
        client_max_body_size 1000m;
        # 禁用缓冲
        proxy_buffering off;
 
        location / {  
            root   html;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;

            proxy_connect_timeout 300;
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;
             
            proxy_pass   http://minio-server;
        }
    }
    
    #Minio控制台
    server {  
        listen       9040;
        server_name  minio-console;
        
        # 允许在标头中使用特殊字符
        ignore_invalid_headers off;
        # 允许任何大小的文件上传。
        # 设置为1000m等值;将文件大小限制为特定值
        client_max_body_size 1000m;
        # 禁用缓冲
        proxy_buffering off;

        location / {  
            root   html;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;

            proxy_connect_timeout 300;
            # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;

            proxy_pass   http://minio-console;
        }
    }
}
  • 创建dockerfile
touch /data/nginx/dockerfile
  • dockerfile完整配置
#设置容器基础镜像
FROM nginx
#换掉原有的nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf 
#输出完成
RUN echo 'build image ok!'
  • 构建镜像
cd /data/nginx/
#注意最后有个点
#注意最后有个点
#注意最后有个点
docker build -t minio-balance:20221025-1 .
  • 删除上次创建容器
docker rm -f minio-balance
  • 创建容器
docker run -p 9030:9030 -p 9040:9040 \
--restart=always --name minio-balance -d minio-balance:20221025-1
  • 开放端口90309040
firewall-cmd --permanent --zone=public --add-port=9030/tcp
firewall-cmd --permanent --zone=public --add-port=9040/tcp
firewall-cmd --reload

访问http://192.168.5.5:9040可查看Minio看板

如果这篇文档对你的学习或工作有所帮助还请留下一个免费的赞!谢谢!

你可能感兴趣的:(后端开发,docker,linux,中间件,服务器)