Compartir tecnología

Implementar un clúster minio en ubuntu

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Introducción al clúster minio

Documentación oficial:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

Esta solución utiliza MinIO implementado en una configuración multinodo y multicontrolador (MNMD) o "distribuida". Las implementaciones de MNMD brindan rendimiento, disponibilidad y escalabilidad de nivel empresarial y son la topología recomendada para todas las cargas de trabajo de producción.

Las implementaciones de MNMD admiten configuraciones de codificación de borrado que pueden tolerar la pérdida de hasta la mitad de los nodos o unidades en la implementación mientras continúan brindando servicio a las operaciones de lectura.
Insertar descripción de la imagen aquí

Requisitos de implementación del clúster

  • La configuración mínima oficialmente recomendada es de 4 servidores, cada servidor tiene 4 discos, para que minio pueda tener alta disponibilidad.
  • Se recomienda utilizar una partición separada como directorio de almacenamiento de datos de minio. No puede utilizar el directorio de la partición raíz como directorio de almacenamiento de datos de minio, pero puede crear cuatro directorios normales con solo un disco independiente por nodo.
  • MinIO no admite nombres de host o direcciones IP no consecutivos para implementaciones distribuidas. Puede utilizar /etc/hosts en cada nodo para configurar un esquema DNS simple que admita notación extendida.
  • Los sistemas de múltiples nodos deben mantener la fecha y la hora sincronizadas para mantener una operación e interacción estables entre nodos.

Implementar un clúster minio en ubuntu

La planificación de nodos y la planificación de discos son las siguientes. Cada nodo prepara cuatro discos:

Nombre del nodoIP del nodomini discopunto de montajeSistema operativo
minio1.ejemplo.com192.168.72.51/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/datos1 /var/lib/minio/datos2 /var/lib/minio/datos3 /var/lib/minio/datos4Ubuntu22.04
minio2.ejemplo.com192.168.72.52/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/datos1 /var/lib/minio/datos2 /var/lib/minio/datos3 /var/lib/minio/datos4Ubuntu22.04
minio3.ejemplo.com192.168.72.53/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/datos1 /var/lib/minio/datos2 /var/lib/minio/datos3 /var/lib/minio/datos4Ubuntu22.04
minio4.ejemplo.com192.168.72.54/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/datos1 /var/lib/minio/datos2 /var/lib/minio/datos3 /var/lib/minio/datos4Ubuntu22.04
lb1.ejemplo.com192.168.72.55--Ubuntu22.04
lb2.ejemplo.com192.168.72.56--Ubuntu22.04
VIP192.168.72.100---

Descripción: La dirección VIP se resuelve enminio.example.comEl nombre de dominio sirve como entrada unificada.

  • La dirección de acceso a la API de minio es:http://minio.example.com
  • La dirección de acceso a la consola minio es:http://minio.example.com/minio/ui

La arquitectura del clúster es la siguiente:
Insertar descripción de la imagen aquí

Preparar nodo

Todos los nodos minio están configurados con nombres de host respectivamente.

hostnamectl set-hostname minio1.example.com
hostnamectl set-hostname minio2.example.com
hostnamectl set-hostname minio3.example.com
hostnamectl set-hostname minio4.example.com
  • 1
  • 2
  • 3
  • 4

Todos los nodos minio se configuran con resolución de hosts por separado.

cat >/etc/hosts<<EOF
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Todos los tiempos de configuración de los nodos minio están sincronizados.
Los sistemas de múltiples nodos de Minio deben mantener la fecha y la hora sincronizadas para mantener una operación e interacción estables entre nodos.

apt install -y chrony
systemctl enable --now chrony
timedatectl set-timezone Asia/Shanghai
  • 1
  • 2
  • 3

preparar disco

Cada nodo monta 4 discos, de los cuales sda es el disco del sistema:

root@minio1:~# lsblk -d -n -o NAME | grep '^sd'
sda
sdb
sdc
sdd
sde
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

En cada nodo, cree cuatro directorios para montar las cuatro unidades:

sudo mkdir -p /var/lib/minio/data1
sudo mkdir -p /var/lib/minio/data2
sudo mkdir -p /var/lib/minio/data3
sudo mkdir -p /var/lib/minio/data4
  • 1
  • 2
  • 3
  • 4

En cada nodo, formatee el disco en el sistema de archivos XFS:

sudo mkfs.xfs /dev/sdb -L DISK1
sudo mkfs.xfs /dev/sdc -L DISK2
sudo mkfs.xfs /dev/sdd -L DISK3
sudo mkfs.xfs /dev/sde -L DISK4
  • 1
  • 2
  • 3
  • 4

Configurar el montaje automático

cat >>/etc/fstab<<EOF
LABEL=DISK1      /var/lib/minio/data1     xfs     defaults,noatime  0       2
LABEL=DISK2      /var/lib/minio/data2     xfs     defaults,noatime  0       2
LABEL=DISK3      /var/lib/minio/data3     xfs     defaults,noatime  0       2
LABEL=DISK4      /var/lib/minio/data4     xfs     defaults,noatime  0       2
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

montar todo en /etc/fstab Sistema de archivos definido en el archivo pero aún no montado

sudo mount -av
  • 1

Confirme que el sistema de archivos esté montado correctamente

root@minio1:~# df -hT
......
/dev/sdb                     xfs    100G  746M  100G   1% /var/lib/minio/data1
/dev/sdc                     xfs    100G  746M  100G   1% /var/lib/minio/data2
/dev/sdd                     xfs    100G  746M  100G   1% /var/lib/minio/data3
/dev/sde                     xfs    100G  746M  100G   1% /var/lib/minio/data4
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Instalar minio

Instale MinIO usando el paquete deb en cada nodo por separado

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio_20240704142545.0.0_amd64.deb -O minio.deb
sudo dpkg -i minio.deb
  • 1
  • 2

usar groupadd yuseradd Comandos para crear usuarios y grupos.

groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /var/lib/minio
  • 1
  • 2
  • 3

Crear archivo de entorno de servicio

existir /etc/default/minio Crear archivos de entorno. El servicio MinIO utiliza este archivo como MinIO yminio.service La fuente de todas las variables de entorno utilizadas por el archivo.

cat >/etc/default/minio<<EOF
MINIO_VOLUMES="http://minio{1...4}.example.com:9000/var/lib/minio/data{1...4}/minio"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=Minio@123456
MINIO_BROWSER_REDIRECT_URL="http://minio.example.com/minio/ui"
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Emita el siguiente comando en cada nodo de la implementación para iniciar el servicio MinIO. Se deben ejecutar varios nodos en secuencia al mismo tiempo.

sudo systemctl restart minio.service
  • 1

Confirme que el servicio esté en línea y ejecutándose correctamente usando el siguiente comando:

sudo systemctl status minio.service
journalctl -f -u minio.service
  • 1
  • 2

Abra la consola MinIO

Abra un navegador y acceda al puerto. :9001 cualquier nombre de host MinIO para abrir la página de inicio de sesión de la consola MinIO.Por ejemplo

http://minio1.example.com:9001
  • 1

Utilizar el minio_root_user yminio_root_password Acceso.

Puede utilizar la consola MinIO para realizar tareas de administración generales, como administración de identidades y acceso, monitoreo de registros y métricas o configuración del servidor. Cada servidor MinIO contiene su propia consola MinIO integrada.

Configurar el equilibrio de carga

Documentación oficial:https://min.io/docs/minio/linux/integrations/configurar-nginx-proxy-con-minio.html

usarnginxykeepalivedPara lograr el equilibrio de carga, prepare 2 servidores como nodos de equilibrio de carga.

Configure el nombre de host en el nodo lb respectivamente.

hostnamectl set-hostname lb1.example.com
hostnamectl set-hostname lb2.example.com
  • 1
  • 2

Configure la resolución de los hosts en el nodo lb respectivamente.

cat >/etc/hosts<<EOF
192.168.72.55 lb1.example.com
192.168.72.56 lb2.example.com
192.168.72.51 minio1.example.com
192.168.72.52 minio2.example.com
192.168.72.53 minio3.example.com
192.168.72.54 minio4.example.com
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Instale nginx y keepalived en 2 nodos:

apt install -y nginx keepalived
  • 1

Cree un archivo de configuración nginx, modifique la dirección del servidor y personalice el puerto de escucha, preste atención a las modificacionesserver_nameparámetro:

cat > /etc/nginx/conf.d/minio-lb.conf <<'EOF'
upstream minio_s3 {
   least_conn;
   server minio1.example.com:9000;
   server minio2.example.com:9000;
   server minio3.example.com:9000;
   server minio4.example.com:9000;
}

upstream minio_console {
   least_conn;
   server minio1.example.com:9001;
   server minio2.example.com:9001;
   server minio3.example.com:9001;
   server minio4.example.com:9001;
}

server {
   listen       80;
   listen  [::]:80;
   server_name  minio.example.com;

   # 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;
   # 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 https://minio_s3; # This uses the upstream directive definition to load balance
   }
   
   location /minio/ui/ {
      rewrite ^/minio/ui/(.*) /$1 break;
      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 websockets in MinIO versions released after January 2023
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
      # Uncomment the following line to set the Origin request to an empty string
      # proxy_set_header Origin '';

      chunked_transfer_encoding off;

      proxy_pass https://minio_console; # This uses the upstream directive definition to load balance
   }
}
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73

Iniciar el servicio nginx

systemctl restart nginx
  • 1

Cree un archivo de configuración keepalived y modifíquelo de acuerdo con el entorno realinterfaceyvirtual_ipaddressParámetros, los dos nodos tienen la misma configuración:

cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived

global_defs {
   router_id minio
   vrrp_version 2
   vrrp_garp_master_delay 1
   script_user root
   enable_script_security 
}

vrrp_script chk_nginx {
    script       "/usr/bin/killall -0 nginx"
    timeout 3
    interval 3   # check every 1 second
    fall 2       # require 2 failures for KO
    rise 2       # require 2 successes for OK
}

vrrp_instance lb-minio {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.72.100
    }
    track_script {
        chk_nginx
    }
}
EOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

Iniciar el servicio keepalvied

systemctl restart keepalived
  • 1

Ver la dirección VIP generada

root@lb1:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:9a:92:75 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 192.168.72.55/24 brd 192.168.72.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.72.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe9a:9275/64 scope link 
       valid_lft forever preferred_lft forever
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

conexión de prueba

En la máquina que necesita acceder a minio, configure la resolución de los hosts

echo "192.168.72.100 minio.example.com" >>/etc/hosts
  • 1

Acceso al navegador a la consola minio

http://minio.example.com/minio/ui/
  • 1

Ver información de métricas:
Insertar descripción de la imagen aquí

Instale el cliente minio en cualquier máquina

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/
  • 1
  • 2
  • 3

Configurar cliente minio

mc alias set myminio http://minio.example.com minioadmin Minio@123456
  • 1

Ver el estado del clúster a través de la interfaz API

root@ubuntu:~# mc admin info myminio
●  minio1.example.com:9000
   Uptime: 25 minutes 
   Version: 2024-07-04T14:25:45Z
   Network: 4/4 OK 
   Drives: 4/4 OK 
   Pool: 1

●  minio2.example.com:9000
   Uptime: 25 minutes 
   Version: 2024-07-04T14:25:45Z
   Network: 4/4 OK 
   Drives: 4/4 OK 
   Pool: 1

●  minio3.example.com:9000
   Uptime: 25 minutes 
   Version: 2024-07-04T14:25:45Z
   Network: 4/4 OK 
   Drives: 4/4 OK 
   Pool: 1

●  minio4.example.com:9000
   Uptime: 25 minutes 
   Version: 2024-07-04T14:25:45Z
   Network: 4/4 OK 
   Drives: 4/4 OK 
   Pool: 1

Pools:
   1st, Erasure sets: 1, Drives per erasure set: 16

16 drives online, 0 drives offline
root@ubuntu:~#  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

Referirse a:https://elma365.com/es/ayuda/cluster-minio.html