내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이 솔루션은 MNMD(다중 노드 다중 드라이버) 또는 "분산" 구성으로 배포된 MinIO를 사용합니다. MNMD 배포는 엔터프라이즈급 성능, 가용성 및 확장성을 제공하며 모든 프로덕션 워크로드에 권장되는 토폴로지입니다.
MNMD 배포는 읽기 작업을 계속 서비스하면서 배포에 있는 노드 또는 드라이브의 최대 절반까지 손실을 허용할 수 있는 삭제 코딩 구성을 지원합니다.
클러스터 배포 요구 사항
노드 계획 및 디스크 계획은 다음과 같습니다. 각 노드는 4개의 디스크를 준비합니다.
노드 이름 | 노드 IP | 미니 디스크 | 마운트 포인트 | 운영 체제 |
---|---|---|---|---|
미니오1.예제.com | 192.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.예제.com | 192.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.예제.com | 192.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.예제.com | 192.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.예제.com | 192.168.72.55 | - | - | 우분투22.04 |
lb2.예제.com | 192.168.72.56 | - | - | 우분투22.04 |
요인 | 192.168.72.100 | - | - | - |
설명: VIP 주소는 다음으로 확인됩니다.minio.example.com
도메인 이름은 통일된 입구 역할을 합니다.
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
모든 미니오 노드는 호스트 해상도로 별도로 구성됩니다.
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
모든 미니오 노드 구성 시간이 동기화됩니다.
미니오 다중 노드 시스템은 안정적인 노드 간 작동 및 상호 작용을 유지하기 위해 시간과 날짜를 동기화해야 합니다.
apt install -y chrony
systemctl enable --now chrony
timedatectl set-timezone Asia/Shanghai
각 노드는 4개의 디스크를 마운트하며 그 중 sda가 시스템 디스크입니다.
root@minio1:~# lsblk -d -n -o NAME | grep '^sd'
sda
sdb
sdc
sdd
sde
각 노드에서 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
각 노드에서 개별적으로 디스크를 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
자동 마운트 구성
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
모두 장착 /etc/fstab
파일에 정의되어 있지만 아직 마운트되지 않은 파일 시스템
sudo mount -av
파일 시스템이 올바르게 마운트되었는지 확인
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
각 노드에 별도로 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
사용 groupadd
그리고useradd
사용자 및 그룹을 생성하는 명령
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /var/lib/minio
존재하다 /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
MinIO 서비스를 시작하려면 배포의 각 노드에서 다음 명령을 실행하세요. 여러 노드를 동시에 순차적으로 실행해야 합니다.
sudo systemctl restart minio.service
다음 명령을 사용하여 서비스가 온라인 상태이고 제대로 실행되고 있는지 확인합니다.
sudo systemctl status minio.service
journalctl -f -u minio.service
브라우저를 열고 포트에 접속하세요 :9001
MinIO 콘솔 로그인 페이지를 열려면 MinIO 호스트 이름을 선택하세요.예를 들어
http://minio1.example.com:9001
사용 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
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
2개의 노드에 nginx 및 keepalived를 설치합니다.
apt install -y nginx keepalived
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
nginx 서비스 시작
systemctl restart nginx
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
Keepalvied 서비스 시작
systemctl restart keepalived
생성된 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
Minio에 액세스해야 하는 시스템에서 호스트 해상도를 구성합니다.
echo "192.168.72.100 minio.example.com" >>/etc/hosts
브라우저 액세스 미니오 콘솔
http://minio.example.com/minio/ui/
측정항목 정보 보기:
모든 컴퓨터에 미니 클라이언트 설치
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/
미니 클라이언트 구성
mc alias set myminio http://minio.example.com minioadmin Minio@123456
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:~#