Technologieaustausch

Stellen Sie einen Minio-Cluster auf Ubuntu bereit

2024-07-12

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

Einführung in den Minio-Cluster

Offizielle Dokumentation:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

Diese Lösung verwendet MinIO, das in einer Multi-Node-Multi-Driver- (MNMD) oder „verteilten“ Konfiguration bereitgestellt wird. MNMD-Bereitstellungen bieten Leistung, Verfügbarkeit und Skalierbarkeit auf Unternehmensniveau und sind die empfohlene Topologie für alle Produktions-Workloads.

MNMD-Bereitstellungen unterstützen Erasure-Coding-Konfigurationen, die den Verlust von bis zur Hälfte der Knoten oder Laufwerke in der Bereitstellung tolerieren können, während Lesevorgänge weiterhin ausgeführt werden.
Fügen Sie hier eine Bildbeschreibung ein

Anforderungen für die Clusterbereitstellung

  • Die offiziell empfohlene Mindestkonfiguration beträgt 4 Server, jeder Server verfügt über 4 Festplatten, sodass Minio hochverfügbar ist.
  • Es wird empfohlen, eine separate Partition als Datenspeicherverzeichnis von minio zu verwenden. Sie können das Verzeichnis der Root-Partition nicht als Datenspeicherverzeichnis von minio verwenden, aber Sie können vier reguläre Verzeichnisse mit nur einer unabhängigen Festplatte pro Knoten erstellen.
  • MinIO unterstützt keine nicht aufeinanderfolgenden Hostnamen oder IP-Adressen für verteilte Bereitstellungen. Sie können /etc/hosts auf jedem Knoten verwenden, um ein einfaches DNS-Schema einzurichten, das die erweiterte Notation unterstützt.
  • Systeme mit mehreren Knoten müssen Uhrzeit und Datum synchron halten, um einen stabilen Betrieb und eine stabile Interaktion zwischen den Knoten zu gewährleisten.

Stellen Sie einen Minio-Cluster auf Ubuntu bereit

Die Knotenplanung und die Festplattenplanung sind wie folgt: Jeder Knoten bereitet vier Festplatten vor:

KnotennameKnoten-IPMinio-DiskEinhängepunktBetriebssystem
minio1.example.com192.168.72.51/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio2.example.com192.168.72.52/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio3.example.com192.168.72.53/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
minio4.example.com192.168.72.54/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/data1 /var/lib/minio/data2 /var/lib/minio/data3 /var/lib/minio/data4Ubuntu22.04
lb1.example.com192.168.72.55--Ubuntu22.04
lb2.example.com192.168.72.56--Ubuntu22.04
VIP192.168.72.100---

Beschreibung: Die VIP-Adresse wird aufgelöstminio.example.comDer Domainname dient als einheitlicher Zugang.

  • Die Minio-API-Zugriffsadresse lautet:http://minio.example.com
  • Die Zugriffsadresse der Minio-Konsole lautet:http://minio.example.com/minio/ui

Die Clusterarchitektur ist wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Knoten vorbereiten

Alle Minio-Knoten werden jeweils mit Hostnamen konfiguriert.

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

Alle Minio-Knoten werden separat mit Host-Auflösung konfiguriert.

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

Die Konfigurationszeiten aller Minio-Knoten werden synchronisiert.
Minio-Systeme mit mehreren Knoten müssen Zeit und Datum synchronisieren, um einen stabilen Betrieb und eine stabile Interaktion zwischen den Knoten zu gewährleisten.

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

Diskette vorbereiten

Jeder Knoten mountet 4 Festplatten, von denen sda die Systemfestplatte ist:

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

Erstellen Sie auf jedem Knoten vier Verzeichnisse, um die vier Laufwerke bereitzustellen:

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

Formatieren Sie auf jedem Knoten die Festplatte mit dem XFS-Dateisystem:

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

Konfigurieren Sie die automatische Bereitstellung

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

alles einbauen /etc/fstab Dateisystem in der Datei definiert, aber noch nicht gemountet

sudo mount -av
  • 1

Bestätigen Sie, dass das Dateisystem ordnungsgemäß gemountet ist

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

Minio installieren

Installieren Sie MinIO mithilfe des Deb-Pakets auf jedem Knoten separat

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

verwenden groupadd Unduseradd Befehle zum Erstellen von Benutzern und Gruppen

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

Erstellen Sie eine Dienstumgebungsdatei

existieren /etc/default/minio Umgebungsdateien erstellen. Der MinIO-Dienst verwendet diese Datei als MinIO undminio.service Die Quelle aller von der Datei verwendeten Umgebungsvariablen.

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

Geben Sie den folgenden Befehl auf jedem Knoten in der Bereitstellung aus, um den MinIO-Dienst zu starten. Mehrere Knoten müssen gleichzeitig nacheinander ausgeführt werden.

sudo systemctl restart minio.service
  • 1

Bestätigen Sie mit dem folgenden Befehl, dass der Dienst online ist und ordnungsgemäß ausgeführt wird:

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

Öffnen Sie die MinIO-Konsole

Öffnen Sie einen Browser und greifen Sie auf den Port zu :9001 Geben Sie einen beliebigen MinIO-Hostnamen ein, um die Anmeldeseite der MinIO-Konsole zu öffnen.Zum Beispiel

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

Benutzen Sie die minio_root_user Undminio_root_password Anmeldung.

Mit der MinIO-Konsole können Sie allgemeine Verwaltungsaufgaben wie Identitäts- und Zugriffsverwaltung, Metrik- und Protokollüberwachung oder Serverkonfiguration ausführen. Jeder MinIO-Server enthält seine eigene eingebettete MinIO-Konsole.

Konfigurieren Sie den Lastausgleich

Offizielle Dokumentation:https://min.io/docs/minio/linux/integrations/setup-nginx-proxy-with-minio.html

verwendennginxUndkeepalivedUm einen Lastausgleich zu erreichen, bereiten Sie zwei Server als Lastausgleichsknoten vor.

Konfigurieren Sie jeweils den Hostnamen auf dem lb-Knoten.

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

Konfigurieren Sie die Hostauflösung jeweils auf dem lb-Knoten.

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

Installieren Sie Nginx und Keepalived auf 2 Knoten:

apt install -y nginx keepalived
  • 1

Erstellen Sie eine Nginx-Konfigurationsdatei, ändern Sie die Serveradresse und passen Sie den Listen-Port an. Achten Sie auf Änderungenserver_nameParameter:

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

Starten Sie den Nginx-Dienst

systemctl restart nginx
  • 1

Erstellen Sie eine Keepalived-Konfigurationsdatei und ändern Sie sie entsprechend der tatsächlichen UmgebunginterfaceUndvirtual_ipaddressParameter, die beiden Knoten haben die gleiche Konfiguration:

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

Starten Sie den Keepalvied-Dienst

systemctl restart keepalived
  • 1

Sehen Sie sich die generierte VIP-Adresse an

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

Testverbindung

Konfigurieren Sie auf dem Computer, der auf Minio zugreifen muss, die Hostauflösung

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

Browserzugriff auf die Minio-Konsole

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

Metrikinformationen anzeigen:
Fügen Sie hier eine Bildbeschreibung ein

Installieren Sie den Minio-Client auf einem beliebigen Computer

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

Konfigurieren Sie den Minio-Client

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

Clusterstatus über die API-Schnittstelle anzeigen

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

beziehen auf:https://elma365.com/en/help/minio-cluster.html