Centos7 上源码,docker,可执行文件等多种方式搭建Minio集群

Minio 官方文档

概述

Docker方式可以直接部署成功,源码方式可以部署成功, 可执行文件目前没有测试成功,而且Minio官网本身推荐使用docker + k8s方式进行部署

描述:Minio集群至少需要四个节点才可以,至于分盘可以是4块,8块,这里我们生产环境没有这么多服务器,分别在两台服务器每台服务器一个节点,每个节点一块磁盘,默认使用的是纠删码模式,可以实现一个服务器的数据丢失,是没问题的,如果其中一台服务器宕机,则整体不可用,集群情况下是支持一半服务器宕机数据可读,不能上传,n/2+1服务在线可以实现读写功能

搭建方式

Docker构建

  • 这里需要注意我使用的这个版本只需要提供一个端口即可,不需要特殊提供ui的访问页面

  • 这里用的是Minio官网提供的以往版本

    docker pull minio/minio:RELEASE.2021-01-16T02-19-44Z
    
  • docker 中所有镜像地址,总有一个你想要的
    https://hub.docker.com/r/minio/minio

  • 通过下面命令可以让我们启动一个节点的服务,如果是开发环境可以这么玩,但是这不是我们想要的

    docker run -p 9000:9000 --name minio -d   minio/minio:RELEASE.2021-01-16T02-19-44Z server /data
    
  • 单节点方式指定登录密码

    docker run  -d -p 9000:9000 --name minio  -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE"   -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" minio/minio:RELEASE.2021-01-16T02-19-44Z server /data  
    
  • 挂载磁盘的方式

    docker run   -p 9000:9000  -d   --name minio  -v ~/minio/data:/data   -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE"   -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"  minio/minio:RELEASE.2021-01-16T02-19-44Z server /data  
    
  • 这里可以通过docker+minio的命令搭建集群,具体命令可以通过docker + minio的命令进行组合

基于docker-compose构建分布式集群环境
  • 这里我们集群搭建使用docker-compose进行,官方不建议使用docker-compose作为生产环境,推荐k8s
安装docker-compose
  • 根据Githu下载命令,此命令下载最新的文件,这是国内镜像:
    sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    
  • 设置执行权限
    sudo chmod +x /usr/local/bin/docker-compose
    
  • 查看版本
    docker-compose --version
    
  • 输出一下完成安装:
    在这里插入图片描述
安装Minio相关服务
  • minio-docker-compose文件
version: '3.7'

# Settings and configurations that are common for all containers
x-minio-common: &minio-common
  image: quay.io/minio/minio:RELEASE.2022-07-30T05-21-40Z
  command: server --console-address ":9001" http://minio{1...4}/data{1...2}
  expose:
    - "9000"
    - "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:
      - data1-1:/data1
      - data1-2:/data2

  minio2:
    <<: *minio-common
    hostname: minio2
    volumes:
      - data2-1:/data1
      - data2-2:/data2

  minio3:
    <<: *minio-common
    hostname: minio3
    volumes:
      - data3-1:/data1
      - data3-2:/data2

  minio4:
    <<: *minio-common
    hostname: minio4
    volumes:
      - data4-1:/data1
      - data4-2:/data2

  nginx:
    image: nginx:1.19.2-alpine
    hostname: nginx
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "9000:9000"
      - "9001:9001"
    depends_on:
      - minio1
      - minio2
      - minio3
      - minio4

## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
  data1-1:
  data1-2:
  data2-1:
  data2-2:
  data3-1:
  data3-2:
  data4-1:
  data4-2:
  • nginx 负载配置文件
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 minio {
        server minio1:9000;
        server minio2:9000;
        server minio3:9000;
        server minio4:9000;
    }

    upstream console {
        ip_hash;
        server minio1:9001;
        server minio2:9001;
        server minio3:9001;
        server minio4:9001;
    }

    server {
        listen       9000;
        listen  [::]:9000;
        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://minio;
        }
    }

    server {
        listen       9001;
        listen  [::]:9001;
        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;
        }
    }
}

使用Centos7 裸机源码方式构建Minio服务

  • 源码构建需要依赖go语言相关环境,这个go语言的环境具体需要根据minio提供的版本进行安装,否则安装低版本不能执行,高版本打出来的包可能会执行出错,重新打包执行即可,我这个版本需要依赖的go环境是1.15以上版本,根据他这个安装即可,我所看的文档地址: https://github.com/minio/minio/tree/RELEASE.2021-01-16T02-19-44Z

  • 注意点:
    在这里插入图片描述

    1. 如果系统中有低于1.18的环境执行如下删除命令:
      # 删除目录
      sudo rm -rf /usr/local/go
      # 删除软连接
      sudo rm -rf /usr/bin/go
      
    2. 安装go命令如下,具体版本可以自行调整:https://blog.csdn.net/qq_46497658/article/details/125098604
  • 源码构建命令,我们这里用的是以往的版本进行构建,新版本的功能差别还是蛮大的,具体的版本可以通过minio的GitHub查看,这个打包命令是go1.18的,其他版本可能会报错:

     GO111MODULE=on go install github.com/minio/minio@RELEASE.2021-01-16T02-19-44Z
    
  • Minio Github地址:
    github.com/minio

  • 这里远程构建可能会执行失败的解决方案

    • 安装git

       yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
      
    • 下载源码,这个镜像放到了我的git里面国内拉取更快:

      git clone https://gitee.com/li_chun_shengcc/minio.git
      
    • 切换git你想要的版本

    • 执行相关命令就行打包,这里可以联系博主:

      QQ :1697383273

  • 这里构建完之后会把可执行文件输出到你的go环境中,我机器中的地址如下:

    /opt/go/bin/minio
    
  • 单台启动命令:

    ./minio server /data
    
  • 这里默认的访问端口也账号密码会输出到面板中

  • 如果是本地环境可以关闭防火墙,相关命令如下:

    # 设置开机禁用防火墙:
    systemctl disable firewalld.service
    #关闭防火墙:
    systemctl stop firewalld
    #检查防火墙状态:
    systemctl status firewalld
    
集群搭建
  1. 设置环境变量

    vi /etc/profile
    
  2. 将Minio密码设置到环境变量中,每个节点都需要设置

    export MINIO_ROOT_USER=lixiansheng
    export MINIO_ROOT_PASSWORD=lixiansheng
    
  3. 刷新环境变量配置

    source /etc/profile
    
  4. 分别在每台机器上执行相同命令,我这里两个节点,分了五块磁盘,机器1两块,机器2三块

    # 前台启动方式
    minio server http://192.168.159.104/export1 http://192.168.159.104/export http://192.168.159.100/export1 http://192.168.159.100/export2 http://192.168.159.100/export3
    #后台启动方式
    nohup ./minio server http://ip1/export1 http://ip2/export1 > ./minio.log 2>&1 &
    
  5. 访问其中一台服务的端口9000就可以看到ui端,最简单的方式在从外层搭建一层负载,Nginx OpenRestry都可以

可执行文件构建

此方式 Centos 会提示此二进制文件不能执行🤯
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值