MinIO(单机、集群)Docker、Docker-compose快速搭建

前言

让你去搭建一套本地分布式文件存储系统你会选择什么?

FastDfs,估计是大多数人的选择,但是复杂的集群搭建,没有一个完善的页面才做让很多人头秃,我也是这大多数人的一员。研究FastDfs集群搭建,寻找合适的开源的页面化可整合FastDfs系统,在进行接口改造,一整套下来差点没被开除。正发愁的时候发现了一篇文章一个简单易用的文件上传系统,打开一看就是今天主角MinIO

 

为什么要使用MinIO

  • 轻便、简单、易使用
    • 轻量化,占用内存少,安装方便,界面化操作使用更便捷
  • 高性能
    • MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
  • 可扩展
    • MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
  • 与Amazon S3 兼容
    • 亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品

Docker快速搭建单机版MinIO

  • Docker搭建单机版
docker run -d --restart=always \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -v /mnt/data/miniodata:/data \
   -e "MINIO_ROOT_USER=minioadmin" \
   -e "MINIO_ROOT_PASSWORD=minioadmin" \
   quay.io/minio/minio server /data --console-address ":9090"

Docker快速搭建MinIO纠删码模式

  • 什么是纠删码

    • 纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复,是不是很NB
  • Docker搭建MinIO纠删码模式

    • docker run -d --restart=always \
       -p 9000:9000 --name minio \
      -p 9090:9090 \
        -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 \
         -e "MINIO_ROOT_USER=minioadmin" \
         -e "MINIO_ROOT_PASSWORD=minioadmin" \
        quay.io/minio/minio server /data1 /data2 /data3 /data4 /data5 /data6 /data7 /data8   --console-address ":9090"
      

      很简单,只需要自己挂不同的盘就可以,启动完成后登录访问可以看到如下界面表明安装成功

Docker-compose快速搭建MinIO集群

  • 环境准备

    • 我这边准备四台机子,hostName分别为:adobe1、adobe2、adobe3、adobe4            使用命令nano /etc/hostname   或者 vi /etc/hostname,修改后重启
    • Docker-compose就不用多说了,不会的可以参考https://blog.csdn.net/AdobePeng/article/details/117701508
    • 需要挂载盘,反正每台机子上面最少挂一个,我挂了两个,在不同的盘上新建文件夹data1、data2
    • 目录结构如下
      • [root@adobe1 miniodata]# ls
        data1  data2  docker-compose.yml  nginx.conf
        
    • 将该文件夹复制到其他三台虚拟机上
  • docker-compose.yml

    • version: '3.7'
      
      # Settings and configurations that are common for all containers
      x-minio-common: &minio-common
        image: quay.io/minio/minio:RELEASE.2022-05-08T23-50-31Z
        command: server --console-address ":9001" http://adobe{1...4}/data{1...2}
        network_mode: "host"
        expose:
          - "9000"
          - "9001"
      #  ports:
      #    - "9000:9000"
      #    - "9001:9001"
        environment:
          MINIO_ROOT_USER: minioadmin
          MINIO_ROOT_PASSWORD: minioadmin
        healthcheck:
          test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
          interval: 30s
          timeout: 20s
          retries: 3
      
      # starts 4 docker containers running minio server instances.
      # using nginx reverse proxy, load balancing, you can access
      # it through port 9000.
      services:
        minio1:
          <<: *minio-common
          hostname: minio1
          volumes:
            - /miniodata/data1:/data1
            - /miniodata/data2:/data2
      
        minio2:
          <<: *minio-common
          hostname: minio2
          volumes:
            - /miniodata/data1:/data1
            - /miniodata/data2:/data2
      
        minio3:
          <<: *minio-common
          hostname: minio3
          volumes:
            - /miniodata/data1:/data1
            - /miniodata/data2:/data2
      
        minio4:
          <<: *minio-common
          hostname: minio4
          volumes:
            - /miniodata/data1:/data1
            - /miniodata/data2:/data2
      
        nginx:
          image: nginx:1.19.2-alpine
          hostname: nginx
          network_mode: "host"
          volumes:
            - ./nginx.conf:/etc/nginx/nginx.conf:ro
          ports:
            - "9090:9090"
            - "9091:9091"
          depends_on:
            - minio1
            - minio2
            - minio3
            - minio4
      

  • nginx.conf

    • user  nginx;
      worker_processes  auto;
      
      error_log  /var/log/nginx/error.log warn;
      pid        /var/run/nginx.pid;
      
      events {
          worker_connections  4096;
      }
      
      http {
          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;
          keepalive_timeout  65;
      
          # include /etc/nginx/conf.d/*.conf;
      
          upstream adobe {
              server adobe1:9000;
              server adobe2:9000;
              server adobe3:9000;
              server adobe4:9000;
          }
      
          upstream console {
              ip_hash;
              server adobe1:9001;
              server adobe2:9001;
              server adobe3:9001;
              server adobe4:9001;
          }
      
          server {
              listen       9090;
              listen  [::]:9090;
              server_name  localhost;
      
              # To allow special characters in headers
              ignore_invalid_headers off;
              # Allow any size file to be uploaded.
              # Set to a value such as 1000m; to restrict file size to a specific value
              client_max_body_size 0;
              # To disable buffering
              proxy_buffering off;
              proxy_request_buffering off;
      
              location / {
                  proxy_set_header Host $http_host;
                  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_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://adobe;
              }
          }
      
          server {
              listen       9091;
              listen  [::]:9091;
              server_name  localhost;
      
              # To allow special characters in headers
              ignore_invalid_headers off;
              # Allow any size file to be uploaded.
              # Set to a value such as 1000m; to restrict file size to a specific value
              client_max_body_size 0;
              # To disable buffering
              proxy_buffering off;
              proxy_request_buffering off;
      
              location / {
                  proxy_set_header Host $http_host;
                  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 X-NginX-Proxy true;
      
                  # This is necessary to pass the correct IP to be hashed
                  real_ip_header X-Real-IP;
      
                  proxy_connect_timeout 300;
                  
                  # To support websocket
                  proxy_http_version 1.1;
                  proxy_set_header Upgrade $http_upgrade;
                  proxy_set_header Connection "upgrade";
                  
                  chunked_transfer_encoding off;
      
                  proxy_pass http://console;
              }
          }
      }
      

    • 启动

      • 如果使用Xshell的话,可以打卡四台机子,然后选择 工具=>发送键输入到所有对话,可以在四台机子上面同时执行命令

      •  

        [root@adobe1 miniodata]# docker-compose up -d
        Creating miniodata_minio2_1 ... done
        Creating miniodata_minio3_1 ... done
        Creating miniodata_minio4_1 ... done
        Creating miniodata_minio1_1 ... done
        Creating miniodata_nginx_1  ... done
        [root@adobe1 miniodata]# 
        

        启动完成,输入链接http://adobe1:9091/login

      • 用户名:minioadmin 密码:minioadmin

      • 最后到监控页面查看节点是否正常,出现如下图,说明启动成功

      •  

结束

        从官网写的还算清楚,但是还是需要自己调试。尤其集群搭建,按照上面步骤来,应该是没问题的。期间遇到防火墙问题,自行选择直接关闭还是开启指定端口

        有问题请留言

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值