기술나눔

우분투에 미니오 클러스터 배포

2024-07-12

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

미니오 클러스터 소개

공식 문서:https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html

이 솔루션은 MNMD(다중 노드 다중 드라이버) 또는 "분산" 구성으로 배포된 MinIO를 사용합니다. MNMD 배포는 엔터프라이즈급 성능, 가용성 및 확장성을 제공하며 모든 프로덕션 워크로드에 권장되는 토폴로지입니다.

MNMD 배포는 읽기 작업을 계속 서비스하면서 배포에 있는 노드 또는 드라이브의 최대 절반까지 손실을 허용할 수 있는 삭제 코딩 구성을 지원합니다.
여기에 이미지 설명을 삽입하세요.

클러스터 배포 요구 사항

  • 공식적으로 권장되는 최소 구성은 서버 4대이며, 각 서버에는 디스크 4개가 있으므로 minio의 가용성이 높아집니다.
  • minio의 데이터 저장 디렉터리는 별도의 파티션을 사용하는 것이 좋습니다. 루트 파티션의 디렉터리는 minio의 데이터 저장 디렉터리로 사용할 수 없습니다. 단, 노드당 하나의 독립 디스크만으로 4개의 일반 디렉터리를 생성할 수 있습니다.
  • MinIO는 분산 배포를 위해 연속되지 않은 호스트 이름이나 IP 주소를 지원하지 않습니다. 각 노드에서 /etc/hosts를 사용하여 확장 표기법을 지원하는 간단한 DNS 체계를 설정할 수 있습니다.
  • 다중 노드 시스템은 노드 간 안정적인 운영 및 상호 작용을 유지하기 위해 시간과 날짜를 동기화해야 합니다.

우분투에 미니오 클러스터 배포

노드 계획 및 디스크 계획은 다음과 같습니다. 각 노드는 4개의 디스크를 준비합니다.

노드 이름노드 IP미니 디스크마운트 포인트운영 체제
미니오1.예제.com192.168.72.51/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/데이터1 /var/lib/minio/데이터2 /var/lib/minio/데이터3 /var/lib/minio/데이터4우분투22.04
미니오2.예제.com192.168.72.52/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/데이터1 /var/lib/minio/데이터2 /var/lib/minio/데이터3 /var/lib/minio/데이터4우분투22.04
미니오3.예제.com192.168.72.53/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/데이터1 /var/lib/minio/데이터2 /var/lib/minio/데이터3 /var/lib/minio/데이터4우분투22.04
미니오4.예제.com192.168.72.54/dev/sdb /dev/sdc /dev/sdd /dev/sde/var/lib/minio/데이터1 /var/lib/minio/데이터2 /var/lib/minio/데이터3 /var/lib/minio/데이터4우분투22.04
lb1.예제.com192.168.72.55--우분투22.04
lb2.예제.com192.168.72.56--우분투22.04
요인192.168.72.100---

설명: VIP 주소는 다음으로 확인됩니다.minio.example.com도메인 이름은 통일된 입구 역할을 합니다.

  • minio API 액세스 주소는 다음과 같습니다.http://minio.example.com
  • 미니오 콘솔 액세스 주소는 다음과 같습니다:http://minio.example.com/minio/ui

클러스터 아키텍처는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.

노드 준비

모든 미니오 노드는 각각 호스트 이름으로 구성됩니다.

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

모든 미니오 노드는 호스트 해상도로 별도로 구성됩니다.

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

모든 미니오 노드 구성 시간이 동기화됩니다.
미니오 다중 노드 시스템은 안정적인 노드 간 작동 및 상호 작용을 유지하기 위해 시간과 날짜를 동기화해야 합니다.

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

디스크 준비

각 노드는 4개의 디스크를 마운트하며 그 중 sda가 시스템 디스크입니다.

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

각 노드에서 4개의 드라이브를 마운트할 4개의 디렉터리를 만듭니다.

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

각 노드에서 개별적으로 디스크를 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

자동 마운트 구성

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

모두 장착 /etc/fstab 파일에 정의되어 있지만 아직 마운트되지 않은 파일 시스템

sudo mount -av
  • 1

파일 시스템이 올바르게 마운트되었는지 확인

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

미니오 설치

각 노드에 별도로 deb 패키지를 사용하여 MinIO를 설치합니다.

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

사용 groupadd 그리고useradd 사용자 및 그룹을 생성하는 명령

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

서비스 환경 파일 생성

존재하다 /etc/default/minio 환경 파일을 만듭니다. MinIO 서비스는 이 파일을 MinIO로 사용하고minio.service 파일에서 사용되는 모든 환경 변수의 소스입니다.

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

MinIO 서비스를 시작하려면 배포의 각 노드에서 다음 명령을 실행하세요. 여러 노드를 동시에 순차적으로 실행해야 합니다.

sudo systemctl restart minio.service
  • 1

다음 명령을 사용하여 서비스가 온라인 상태이고 제대로 실행되고 있는지 확인합니다.

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

MinIO 콘솔 열기

브라우저를 열고 포트에 접속하세요 :9001 MinIO 콘솔 로그인 페이지를 열려면 MinIO 호스트 이름을 선택하세요.예를 들어

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

사용 minio_root_user 그리고minio_root_password 로그인.

MinIO 콘솔을 사용하여 ID 및 액세스 관리, 지표 및 로그 모니터링, 서버 구성과 같은 일반 관리 작업을 수행할 수 있습니다. 각 MinIO 서버에는 자체 내장형 MinIO 콘솔이 포함되어 있습니다.

부하 분산 구성

공식 문서:https://min.io/docs/minio/linux/integrations/nginx-proxy-with-minio 설치.html

사용nginx그리고keepalived로드 밸런싱을 위해서는 2대의 서버를 로드 밸런싱 노드로 준비하세요.

lb 노드에 각각 호스트 이름을 구성합니다.

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

lb 노드에서 각각 호스트 확인을 구성합니다.

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

2개의 노드에 nginx 및 keepalived를 설치합니다.

apt install -y nginx keepalived
  • 1

nginx 구성 파일 생성, 서버 주소 수정 및 청취 포트 사용자 정의, 수정 사항에 주의server_name매개변수:

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

nginx 서비스 시작

systemctl restart nginx
  • 1

Keepalived 구성 파일을 생성하고 실제 환경에 맞게 수정합니다.interface그리고virtual_ipaddress매개변수, 두 노드의 구성은 동일합니다.

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

Keepalvied 서비스 시작

systemctl restart keepalived
  • 1

생성된 VIP 주소 보기

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

연결 테스트

Minio에 액세스해야 하는 시스템에서 호스트 해상도를 구성합니다.

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

브라우저 액세스 미니오 콘솔

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

측정항목 정보 보기:
여기에 이미지 설명을 삽입하세요.

모든 컴퓨터에 미니 클라이언트 설치

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

미니 클라이언트 구성

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

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

인용하다:https://elma365.com/ko/help/minio-cluster.html