DevOps—Ubuntu22下安装MinIO集群

概述

minio是一个比ceph更轻的存储管理服务,它可以部署在Kubernetes及各种操作系统下。对于Java程序来说,最常有的就是两种使用方法,使用Linux或Kubernetes来集群部署。

Minio的集群其实就是多节点、多驱动器部署,用英文的说法:Multi-Node Multi-Drive,简称:MNMD。

Minio强烈建议,使用XFS格式的磁盘构成的直连式(使用scsi电缆)的JBOD磁盘阵列来作为其后端存储。

前置条件

1、防火墙

在ubuntu操作系统下,默认的情况下并没有安装防火墙,但是在Centos或Fedora的操作系统中,默认是启动防火墙的,因此要么就关闭防火墙,要么就加入过滤条件。

关闭防火墙

systemctl disable firewalld
systemctl stop firewalld

或者加入过滤条件

firewall-cmd --permanent --zone=public --add-port=9000/tcp
firewall-cmd --reload

2、关闭SeLinux

Ubuntu操作系统是没有启用SeLinux的,Centos及Fedora是需要事先关闭它的。

vim /etc/selinux/config
    SELINUX=disabled
#重新启动
reboot

3、Kernel要求

一定要注意:Kernel的版本一定不能低于4.0.0,可以使用如下命令查看自己的服务器的操作系统下集成的kernel的版本是多少:

cat /proc/verion
或
uname -r

硬件条件

主机名IP地址
minio1.dokbok.com192.168.3.36
minio2.dokbok.com192.168.3.37
minio3.dokbok.com192.168.3.38

主机名配置如下,注意此处只列举了minio1服务器的主机名配置文件

127.0.0.1	minio1.dokbok.com

192.168.3.36	minio1.dokbok.com
192.168.3.37	minio2.dokbok.com
192.168.3.38	minio3.dokbok.com

192.168.3.11	minio.dokbok.com

所有的操作系统目前均于ubuntu22.04,每一台服务器上都有三块未格式化或者可以格式化的磁盘。

mkfs.xfs /dev/sdb -L DISK1 -f
#如果你的服务器中存在多个磁盘,请按照上面的格式更改应的编号格式即可
mkfs.xfs /dev/sdc -L DISK2 -f
mkfs.xfs /dev/sdd -L DISK3 -f

并在/etc/fstab中进行配置,如下:

LABEL=DISK1      /mnt/disk1     xfs     defaults,noatime  0       2
LABEL=DISK2      /mnt/disk2     xfs     defaults,noatime  0       2
LABEL=DISK3      /mnt/disk3     xfs     defaults,noatime  0       2

磁盘状态如下图:

安装软件

在第一个节点上下载minio.deb,然后拷贝到其他节点后再进行安装。

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20221212192727.0.0_amd64.deb -O minio.deb 
#在各个节点上安装
dpkg -i minio.deb

创建minio的数据文件夹并赋权限:

mkdir /mnt/disk1
mkdir /mnt/disk2
mkdir /mnt/disk3

chown -R minio-user.minio-user /mnt/disk1
chown -R minio-user /mnt/disk2
chown -R minio-user /mnt/disk3

配置

1、配置minio服务的负载均衡(集群间通讯-基于9000端口的http服务)

集群环境启动的时候,各个节点间需要互相通讯。我们需要配置一个minio服务的负载均衡点,如果不配负载均衡的话就需要指定某一个节点,只有等到该节点启动成功后其他节点才会连入集群。使用nginx配置负载均衡后,所有节点可以一并启动(可以互相查找并连接)。

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream minio-9000 {
        server 192.168.3.36:9000;
        server 192.168.3.37:9000;
        server 192.168.3.38:9000;
    }
    server {
        listen       9000;
        server_name  minio.dokbok.com;

        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-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Host $http_host;

            proxy_connect_timeout 300;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
            chunked_transfer_encoding off;

            proxy_pass http://minio-9000;
        }
    }
}

2、配置对外的UI服务(基于9001端口的http服务)

http {
    include       mime.types;
    default_type  application/octet-stream;

    upstream minio{
        server 192.168.3.36:9001;
        server 192.168.3.37:9001;
        server 192.168.3.38:9001;
    }
    server {
        listen       443  ssl;
        server_name  minio.dokbok.com;

        ignore_invalid_headers off;
        client_max_body_size 0;
        proxy_buffering off;

        ssl_certificate ssl/dokbok_com.pem;
        ssl_certificate_key ssl/dokbok_com.key;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers on;

        location / {
            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 {
        listen 80;
        server_name minio.dokbok.com;
        rewrite ^(.*)$  https://$host$1 permanent;
    }
}

3、创建minio启动配置文件

vim /etc/default/minio

MINIO_VOLUMES="http://minio{1...3}.dokbok.com:9000/mnt/disk{1...3}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=tdjgamtam

# 此处的值是上述配置的nginx负载均衡的ip地址及端口
MINIO_SERVER_URL="http://minio.dokbok.com:9000"

4、配置minio服务

vim /lib/systemd/system/minio.service

[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

配置服务

systemctl enable minio
systemctl start minio

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注