Triển khai MinIO single-node

1. Tổng quan

Bài viết này hướng dẫn triển khai MinIO single-node để thử nghiệm bằng Docker, đồng thời bổ sung các kinh nghiệm thực tế: tổ chức thư mục, bảo mật, khởi tạo bucket/người dùng, kiểm tra hoạt động, sao lưu và gợi ý lộ trình nâng cấp lên distributed mode sau khi thử nghiệm ổn định.

2. Kiến trúc thử nghiệm

[Client tools]
   |-- mc / awscli / s3cmd
   v
+-------------------------------+
|        MinIO (Container)      |
|  API :9000  Console :9001     |
|  Data volume -> ./minio_data  |
+-------------------------------+
  • Mô hình 1 node, 1 volume dùng để thử nghiệm (dev/test).
  • Không có reverse proxy/Gateway; client truy cập trực tiếp vào cổng 9000 (S3) và 9001 (Console).

3. Thông tin OS

shell> lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy

4. Cài đặt Docker.

# Set proxy
export {http,https}_proxy=http://10.237.7.250:3128
export no_proxy="localhost,127.0.0.1,10.237.7.0/24"

# Installation of Docker on all nodes
apt-get update
apt-get install ca-certificates curl gnupg lsb-release -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update
apt-get install docker-ce docker-ce-cli containerd.io -y
chmod 666 /var/run/docker.sock

curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

# Configuration Proxy for Docker on all nodes
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf << 'OEF'
[Service]
Environment="HTTP_PROXY=http://10.237.7.250:3128" "HTTPS_PROXY=http://10.237.7.250:3128" "NO_PROXY=localhost,127.0.0.1,10.237.7.0/24"
OEF
systemctl daemon-reload
systemctl restart docker

5. Deploy Minio

Tạo thư mục data cho Minio.

mkdir -p ~/minio/data
cd ~/minio/data

Cấu hình docker-compose hiện tại (của bạn)

cat > ~/minio/data/docker-compose.yml << 'OEF'
version: '3.8'

services:
  minio:
    image: quay.io/minio/minio
    container_name: minio
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    command: server /data --console-address ":9001"
    volumes:
      - ./minio_data:/data
OEF

Khởi chạy.

docker-compose up -d

Verify

shell> docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
minio               "/usr/bin/docker-ent…"   minio               running             0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp

6. Truy cập S3 API: http://<host>:9000

Trang chủ hiện ra

Giao diện sau khi login thành công.

Hiện tại chưa có bucket nào, bạn có thể tạo từ giao diện hoặc từ CLI (xem phần tiếp)

7. Khởi tạo nhanh bằng MinIO Client (mc)

7.1. Cài đặt mc trên máy host (hoặc chạy container minio/mc).

wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc
chmod +x /usr/local/bin/mc

7.2. Kết nối alias

shell> mc alias set local http://10.237.7.77:9000 minioadmin minioadmin
mc: Configuration written to `/root/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/root/.mc/share`.
mc: Initialized share uploads `/root/.mc/share/uploads.json` file.
mc: Initialized share downloads `/root/.mc/share/downloads.json` file.
Added `local` successfully.

Check Info

shell> mc admin info local
●  10.237.7.77:9000
   Uptime: 6 minutes
   Version: 2025-07-23T15:54:02Z
   Network: 1/1 OK
   Drives: 1/1 OK
   Pool: 1

┌──────┬───────────────────────┬─────────────────────┬──────────────┐
│ Pool │ Drives Usage          │ Erasure stripe size │ Erasure sets │
│ 1st  │ 17.7% (total: 44 GiB) │ 1                   │ 1            │
└──────┴───────────────────────┴─────────────────────┴──────────────┘

1 drive online, 0 drives offline, EC:0

7.3. Tạo user ứng dụng

shell> mc admin user add local hoanghd my_password
Added user `hoanghd` successfully.

Gán policy readwrite sẵn có

shell> mc admin policy attach local readwrite --user hoanghd
Attached Policies: [readwrite]
To User: hoanghd

7.4. Tạo Service Account (thuộc về hoanghd) với AK/SK chỉ định

shell> mc admin user svcacct add local hoanghd \
  --access-key ZG8H2PM3W0A4ADD9GSY0 \
  --secret-key 'UFRW7od0ps+KTsSvGeiQPGk+GEv1BLnPwJnGgze+'
Access Key: ZG8H2PM3W0A4ADD9GSY0
Secret Key: UFRW7od0ps+KTsSvGeiQPGk+GEv1BLnPwJnGgze+
Expiration: no-expiry

Tạo alias khác để dùng AK/SK của service account:

shell> mc alias set lab http://10.237.7.77:9000 \
  ZG8H2PM3W0A4ADD9GSY0 \
  'UFRW7od0ps+KTsSvGeiQPGk+GEv1BLnPwJnGgze+'
Added `lab` successfully.

7.5. Tạo các bucket mẫu

mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a
mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708b
mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708c
mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708d
mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708e
mc mb lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708f

Output

Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a`.
Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708b`.
Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708c`.
Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708d`.
Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708e`.
Bucket created successfully `lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708f`.

List bucket

shell> mc ls lab
[2025-09-03 13:35:09 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a/
[2025-09-03 13:35:09 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708b/
[2025-09-03 13:35:10 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708c/
[2025-09-03 13:35:10 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708d/
[2025-09-03 13:35:10 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708e/
[2025-09-03 13:35:10 UTC]     0B pvc-c66c6d56-62b8-4597-abd8-cc366eb2708f/

7.6. Thử put/get:

Put file

shell> mc cp /var/log/ lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a/ --recursive
/var/log/wtmp:                                   43.40 MiB / 43.40 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 54.70 MiB/s 0s

List file

shell> mc ls lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a/
[2025-09-03 13:42:09 UTC]     0B STANDARD alternatives.log
[2025-09-03 13:42:09 UTC]  26KiB STANDARD alternatives.log.1
[2025-09-03 13:42:09 UTC] 1.4KiB STANDARD auth.log
[2025-09-03 13:42:09 UTC]  22KiB STANDARD auth.log.1
[2025-09-03 13:42:09 UTC]  63KiB STANDARD bootstrap.log
[2025-09-03 13:42:09 UTC]     0B STANDARD btmp
[2025-09-03 13:42:09 UTC] 3.8KiB STANDARD btmp.1
[2025-09-03 13:42:09 UTC] 8.7KiB STANDARD cloud-init-output.log
[2025-09-03 13:42:09 UTC] 241KiB STANDARD cloud-init.log
[2025-09-03 13:42:09 UTC] 110KiB STANDARD dmesg
[2025-09-03 13:42:09 UTC] 109KiB STANDARD dmesg.0
[2025-09-03 13:42:09 UTC]  23KiB STANDARD dmesg.1.gz
[2025-09-03 13:42:09 UTC]  16KiB STANDARD dpkg.log
[2025-09-03 13:42:09 UTC] 510KiB STANDARD dpkg.log.1
[2025-09-03 13:42:09 UTC]  31KiB STANDARD faillog
[2025-09-03 13:42:09 UTC] 7.5KiB STANDARD kern.log
[2025-09-03 13:42:09 UTC] 400KiB STANDARD kern.log.1
[2025-09-03 13:42:09 UTC] 286KiB STANDARD lastlog
[2025-09-03 13:42:09 UTC]  56KiB STANDARD syslog
[2025-09-03 13:42:09 UTC] 660KiB STANDARD syslog.1
[2025-09-03 13:42:09 UTC]   157B STANDARD ubuntu-advantage-timer.log
[2025-09-03 13:42:09 UTC]   157B STANDARD ubuntu-advantage-timer.log.1
[2025-09-03 13:42:09 UTC]     0B STANDARD ubuntu-advantage.log
[2025-09-03 13:42:09 UTC]   195B STANDARD vmware-network.1.log
[2025-09-03 13:42:09 UTC]   193B STANDARD vmware-network.log
[2025-09-03 13:42:09 UTC] 2.6KiB STANDARD vmware-vmsvc-root.1.log
[2025-09-03 13:42:09 UTC] 4.4KiB STANDARD vmware-vmsvc-root.2.log
[2025-09-03 13:42:09 UTC] 1.7KiB STANDARD vmware-vmsvc-root.log
[2025-09-03 13:42:09 UTC]   718B STANDARD vmware-vmtoolsd-root.log
[2025-09-03 13:42:09 UTC]  14KiB STANDARD wtmp
[2025-09-03 13:43:52 UTC]     0B apt/
[2025-09-03 13:43:52 UTC]     0B installer/
[2025-09-03 13:43:52 UTC]     0B journal/
[2025-09-03 13:43:52 UTC]     0B landscape/
[2025-09-03 13:43:52 UTC]     0B unattended-upgrades/

Đọc file.

shell> mc cat lab/pvc-c66c6d56-62b8-4597-abd8-cc366eb2708a/syslog | head -n 10
Sep  3 13:03:17 node77 systemd[1]: logrotate.service: Deactivated successfully.
Sep  3 13:03:17 node77 systemd[1]: Finished Rotate log files.
Sep  3 13:03:17 node77 networkd-dispatcher[1035]: No valid path found for iwconfig
Sep  3 13:03:17 node77 networkd-dispatcher[1035]: No valid path found for iw
Sep  3 13:03:17 node77 ModemManager[1110]: <info>  ModemManager (version 1.18.6) starting in system bus...
Sep  3 13:03:17 node77 systemd[1]: Started Dispatcher daemon for systemd-networkd.
Sep  3 13:03:17 node77 udisksd[1046]: failed to load module mdraid: libbd_mdraid.so.2: cannot open shared object file: No such file or directory
Sep  3 13:03:17 node77 systemd[1]: Started OpenBSD Secure Shell server.
Sep  3 13:03:17 node77 snapd[1041]: AppArmor status: apparmor is enabled and all features are available
Sep  3 13:03:17 node77 udisksd[1046]: Failed to load the 'mdraid' libblockdev plugin

Kết quả khi check trên giao diện

8. Sao lưu và khôi phục

8.1. Stop dịch vụ trước khi snapshot

docker-compose down
tar -czf minio_data_backup_$(date +%F).tgz minio_data/

8.2. Khôi phục

docker-compose down
rm -rf minio_data
tar -xzf minio_data_backup_YYYY-MM-DD.tgz
docker-compose up -d

9. Lộ trình nâng cấp từ thử nghiệm lên distributed mode

9.1. Logic phân tán của MinIO

MinIO chia dữ liệu theo erasure coding (Reed–Solomon) trên nhiều ổ/ nhiều node.

Khi thêm disk/node, MinIO tạo erasure set mới; không rebalance dữ liệu cũ.

9.2. Sơ đồ triển khai vật lý (ví dụ 4 node, mỗi node 2 disk)

        +-------------+      +-------------+      +-------------+      +-------------+
Node A  | /data1 /data2|     |             |      |             |      |             |
        +-------------+      +-------------+      +-------------+      +-------------+
           |        \            /        |            |       \           /       |
           v         v          v         v            v        v         v        v
                <--------- Erasure Sets (k+m) --------->

9.3. Compose distributed (ví dụ 1 node nhiều disk – để demo local)

Lưu ý bản chất distributed đúng nghĩa là nhiều node. Ví dụ sau chỉ để bạn làm quen cú pháp nhiều endpoint.

version: '3.8'
services:
  minio1:
    image: ${MINIO_IMAGE}
    container_name: minio1
    restart: unless-stopped
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    command: server http://minio1/data{1...4} --console-address ":9001"
    volumes:
      - ./data1:/data1
      - ./data2:/data2
      - ./data3:/data3
      - ./data4:/data4
    networks:
      - minio-net

networks:
  minio-net:
    driver: bridge

Với nhiều node thật, bạn sẽ chạy nhiều service minio{1..n}, mỗi service trỏ đến các đường dẫn riêng, ví dụ: command: server http://minio{1...4}/data{1...2} và dùng extra_hosts hoặc overlay network để các node phân giải tên của nhau.

9.4. Khuyến nghị khi scale

  • Thêm node/disk theo nhóm tương đương với nhóm ban đầu để phân bố ghi mới được cân bằng.
  • Thiết kế sẵn cấu trúc thư mục dữ liệu và network.
  • Theo dõi mc admin info, mc admin heal để đánh giá tình trạng cluster.

10. Kết luận

Cấu hình docker-compose hiện tại của bạn phù hợp để thử nghiệm nhanh MinIO ở chế độ single-node. Để an toàn và lặp lại, nên.

  • Tách biến môi trường sang .env, cố định phiên bản image, thêm healthcheck.
  • Khởi tạo user/policy riêng qua mc, không dùng root user cho ứng dụng.
  • Xây dựng quy trình backup/restore tối thiểu.
  • Khi cần mở rộng, chuyển sang distributed mode nhiều node; nhớ rằng MinIO không rebalance dữ liệu cũ khi thêm node/disk, vì vậy hãy lên kế hoạch mở rộng theo nhóm tương đương để giữ cân bằng tải ghi mới.

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email