Skip to main content

🌐 Triển Khai MinIO Federation

📋 Tổng Quan

MinIO Federation cho phép tổng hợp dung lượng từ nhiều cụm MinIO độc lập thành một hệ thống lưu trữ thống nhất. Ví dụ:

  • Cụm HN: 500GB
  • Cụm HCM: 500GB
  • Cụm DN: 500GB => Tổng dung lượng khả dụng: 1.5TB

🏗️ Kiến Trúc Hệ Thống

💻 Yêu Cầu Hệ Thống

Phần Cứng (Cho Mỗi Node)

Thành phầnTối thiểuKhuyến nghị
CPU2 cores4+ cores
RAM4GB8GB+
Disk100GB SSD500GB+ SSD
Network1Gbps10Gbps

Phần Mềm

# Kiểm tra phiên bản OS
lsb_release -a
# Output cần >= Ubuntu 20.04

# Kiểm tra Docker version
docker --version
# Output cần >= 20.10.x

# Kiểm tra Docker Compose version
docker-compose --version
# Output cần >= 2.x

🚀 Triển Khai

1. Chuẩn Bị Môi Trường

Thực hiện trên tất cả các node:

# Cài đặt dependencies
sudo apt update
sudo apt install -y docker.io docker-compose

# Tạo thư mục lưu trữ
sudo mkdir -p /mnt/data/minio /mnt/data/config
sudo chown -R 1000:1000 /mnt/data/

2. Triển Khai MinIO Server

Tạo file docker-compose.yml trên mỗi node:

version: "3.7"

services:
minio:
image: quay.io/minio/minio:latest
container_name: minio
ports:
- "9000:9000" # API port
- "9001:9001" # Console port
environment:
MINIO_ROOT_USER: "admin"
MINIO_ROOT_PASSWORD: "StrongPassword123" # Thay đổi mật khẩu này
MINIO_SITE_NAME: "${SITE_NAME:-minio-site-1}" # Unique cho mỗi site
MINIO_SITE_REGION: "${SITE_REGION:-hanoi}" # Region của site
volumes:
- /mnt/data/minio:/data
- /mnt/data/config:/root/.minio
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: unless-stopped

3. Khởi Động Dịch Vụ

# Khởi động MinIO
docker-compose up -d

# Kiểm tra logs
docker-compose logs -f

# Kiểm tra container status
docker ps

4. Cấu Hình Federation

a. Trên Federation Console (192.168.1.100)

  1. Truy cập console: http://192.168.1.100:9001
  2. Đăng nhập với thông tin:
    • Username: admin
    • Password: StrongPassword123

b. Thêm Các Cụm Vào Federation

Trong Console, điều hướng đến:

  1. Settings > Federation
  2. Click "Add Site"
  3. Nhập thông tin cho từng cụm:
# Cluster Hà Nội
Name: minio-hanoi
Endpoint: http://192.168.1.11:9000
Access Key: admin
Secret Key: StrongPassword123

# Cluster HCM
Name: minio-hcm
Endpoint: http://192.168.2.11:9000
Access Key: admin
Secret Key: StrongPassword123

# Cluster Đà Nẵng
Name: minio-danang
Endpoint: http://192.168.3.11:9000
Access Key: admin
Secret Key: StrongPassword123

5. Cấu Hình Storage Pool

a. Tạo Storage Pool Configuration

Tạo file cấu hình pool /etc/minio/federation/storage-pool.json:

{
"version": "1",
"pools": [
{
"name": "large-storage-pool",
"servers": [
"minio-hanoi",
"minio-hcm",
"minio-danang"
],
"capacity": "1.5TB",
"quota": {
"enabled": true,
"max_size": "1.5TB"
}
}
]
}

b. Áp Dụng Cấu Hình Pool

# Áp dụng cấu hình pool
mc admin config set minio-fed federation storage_pool=/etc/minio/federation/storage-pool.json

# Restart service để áp dụng thay đổi
mc admin service restart minio-fed

🚀 Sử Dụng Storage Pool

1. Tạo và Sử Dụng Bucket

# Tạo bucket mới với storage pool
mc mb --pool large-storage-pool minio-fed/large-bucket

# Upload file - MinIO sẽ tự động phân bố dữ liệu
mc cp large-file.zip minio-fed/large-bucket/

# Upload nhiều file
mc cp --recursive media-folder/ minio-fed/large-bucket/
tip

Với cấu hình này:

  • Tổng dung lượng khả dụng là 1.5TB
  • MinIO tự động phân bố dữ liệu giữa các cụm
  • Không cần quan tâm file được lưu ở cụm nào
  • Hỗ trợ tự động cân bằng tải

2. Kiểm Tra Sử Dụng

# Xem thông tin bucket
mc ls minio-fed/large-bucket

# Kiểm tra dung lượng đã sử dụng
mc du minio-fed/large-bucket

# Xem phân bố dữ liệu
mc admin info minio-fed --json | jq '.info.backend.usage'

📊 Monitoring Dung Lượng

1. Theo Dõi Sử Dụng

# Kiểm tra tổng dung lượng đã sử dụng
mc admin info minio-fed

# Kiểm tra chi tiết từng cụm
mc admin cluster info minio-fed

2. Cảnh Báo Dung Lượng

# Thiết lập cảnh báo khi đạt 80% dung lượng
mc admin policy create minio-fed storage-alert \
--threshold-percent=80 \
--threshold-action="webhook,slack" \
--webhook-endpoint="http://alert.example.com/storage"

🔍 Xử Lý Sự Cố

1. Vấn Đề Dung Lượng

  • Kiểm tra phân bố dữ liệu giữa các cụm
  • Xác nhận tổng dung lượng khả dụng
  • Theo dõi tốc độ tăng trưởng dữ liệu

2. Performance Issues

  • Kiểm tra network latency giữa các cụm
  • Theo dõi CPU và memory usage
  • Tối ưu cấu hình cache

📚 Tài Liệu Tham Khảo