Một số lưu ý khi thêm bớt device trong Minio

1. Tổng quan

  • MinIO không cho “thêm bừa 1–2 disk vào pool đang chạy”. Cách mở rộng được hỗ trợ chính thức là thêm một Server Pool mới (một nhóm node+disk mới), rồi restart đồng thời toàn cluster với cấu hình có cả pool cũ + pool mới. Sau đó (nếu muốn rút phần cũ) thì decommission pool cũ để MinIO tự chuyển dữ liệu sang pool còn lại. (AIStor Object Store Documentation, MinIO Blog)
  • Thay/đổi dung lượng đĩa trong pool hiện tại chỉ hỗ trợ theo hướng thay thế từng disk bằng disk lớn hơn rồi để MinIO heal; khi toàn bộ disk trong pool được thay lớn hơn thì pool tăng dung lượng tổng. Không có “mở rộng pool bằng cách thêm disk”. (D2iQ Docs, GitHub)

Dưới đây là chi tiết cho các tình huống áp dụng cho triển khai Docker Swarm.

2. Thêm dung lượng — các tình huống thường gặp

2.1. Muốn “thêm disk” vào 1 hoặc vài node bất kỳ

  • Không hỗ trợ thêm disk lẻ vào pool đang chạy. Pool là bất biến về sơ đồ endpoint. Cách đúng: tạo Pool mới (ví dụ thêm 4 node mới, mỗi node 3 disk), rồi khai báo cả Pool1 + Pool2 trong command: server .... Cần restart đồng thời toàn cluster để nạp cấu hình mới. (AIStor Object Store Documentation, MinIO Blog)

2.2. Muốn “thêm node mới” vào cluster hiện tại

  • Không thêm node vào pool cũ. Thay vào đó, thêm một pool mới gồm các node mới → restart đồng thời → cluster có 2 pool. (AIStor Object Store Documentation)

2.3. Muốn “đổi sang disk lớn hơn” trên node cũ (không thêm số disk)

  • Được hỗ trợ: thay từng disk bằng disk lớn hơn, MinIO sẽ heal và giữ dịch vụ online; khi toàn bộ disk của pool đã to hơn, dung lượng pool tăng. Không cần thêm pool. (GitHub)

3. Quy trình mở rộng đúng chuẩn (thêm Pool mới)

Giả sử Pool1 hiện tại của bạn là 4 node × 3 disk (12 drive). Bạn muốn thêm Pool2 cũng 4 node × 3 disk.

3.1. Chuẩn bị Pool2

  • Bổ sung 4 node mới (hoặc tái sử dụng 4 máy khác), mount /opt/minio/d1..d3.
  • Tạo thêm 4 service trong stack (minio5..minio8), mỗi service bind 3 disk của node mới.
  • Trong command của tất cả service (minio1..minio8) khai báo đồng thời Pool1 + Pool2, ví dụ:
command: >
  server
  http://minio{1...4}/data{1...3}       # Pool1 (cũ)
  http://minio{5...8}/data{1...3}       # Pool2 (mới)
  --console-address ":9001"

Lưu ý: tất cả service phải có cùng một danh sách endpoint (Pool1+Pool2). MinIO yêu cầu restart đồng thời toàn cluster để nạp sơ đồ mới (không rolling từng node). Trong Swarm, bạn có thể đặt update_config.parallelism bằng tổng số replicas để restart gần-như-đồng-thời, hoặc đơn giản docker stack rm rồi docker stack deploy lại (app S3 client sẽ tự retry; MinIO đảm bảo tính nhất quán/atomic). (MinIO Blog, AIStor Object Store Documentation)

3.2. Ảnh hưởng dữ liệu

  • Không rebalance “toàn cluster”. MinIO sẽ ghi dữ liệu mới vào các pool dựa trên tỷ lệ dung lượng trống; dữ liệu cũ không tự chuyển sang pool mới (trừ khi bạn chủ động decommission pool cũ). (AIStor Object Store Documentation)

4. Gỡ bỏ node/disk — bạn nên làm gì?

4.1. Rút hẳn “pool cũ” (gỡ phần cứng đời cũ)

  • Dùng mc admin decommission để decommission Pool. MinIO sẽ đặt Pool đó read-only rồi tự động “drain” dữ liệu sang các pool còn lại theo tỷ lệ dung lượng trống. Sau khi drain xong, restart đồng thời để gỡ cấu hình Pool đã decommission khỏi command. (AIStor Object Store Documentation, MinIO Blog)

4.2. Rút một node khỏi một pool đơn lẻ?

  • Không hỗ trợ rút “một node” ra khỏi pool (vì phá vỡ erasure set). Nếu node hỏng, cluster vẫn chạy trong giới hạn parity; để loại hẳn node/host đời cũ, làm ở cấp Pool bằng decommission. (D2iQ Docs)

4.3. Rút một disk (thay thế disk hỏng)

Dừng node đó (hoặc unmount), thay disk, mount lại, khởi động; MinIO sẽ heal dữ liệu thiếu. Không thay đổi sơ đồ pool. (Hành vi chuẩn “recover after drive failure”.) (MinIO)

5. Cách làm cụ thể với Docker Swarm

5.1. Thêm Pool2 (ví dụ minio5–minio8)

  • Thêm 4 service mới minio5..minio8 (mỗi service bind /opt/minio/d1..d3 của node mới).
  • Sửa tất cả 8 service để dùng command có Pool1+Pool2 như ở §3.1.
  • Triển khai lại đồng thời: # Cách đơn giản & an toàn: docker stack rm minio # chờ hết task xuống docker stack deploy -c minio-swarm.yml minio (Hoặc dùng update_config.parallelism: 8 để làm “gần như đồng thời”.)

5.2. Decommission Pool cũ (nếu muốn rút phần cứng)

Decommission trong MinIO = cơ chế copy/migrate dữ liệu từ Pool cũ sang Pool mới để bạn có thể rút hẳn Pool cũ ra mà không mất dữ liệu.

Decommission làm gì?

Khi bạn chạy:

mc admin decommission start dcluster <pool-arn-or-id>

MinIO sẽ:

  • Đặt Pool được chọn thành read-only (ngừng ghi dữ liệu mới vào).
  • Scan toàn bộ dữ liệu trong Pool đó.
  • Copy dữ liệu sang các Pool còn lại (theo tỷ lệ dung lượng trống).
  • Khi hoàn tất, Pool cũ không còn chứa dữ liệu “active” nữa.
mc admin decommission start dcluster <pool-arn-or-id>
mc admin decommission status dcluster
# Sau khi "completed", sửa stack bỏ pool cũ khỏi command, rồi restart đồng thời
docker stack rm minio
docker stack deploy -c minio-swarm.yml minio

Chi tiết tham số/ID pool xem trong mc admin info, mc admin decommission docs. (AIStor Object Store Documentation)

Sau khi decommission hoàn tất

  • Bạn có thể loại bỏ hẳn Pool cũ khỏi cấu hình minio server ... (sửa lại docker stack/compose).
  • Restart lại toàn cluster để MinIO không còn tham chiếu đến Pool đã decommission.
  • Phần cứng (node/disk cũ) có thể rút khỏi hệ thống.

Lợi ích

  • Đây là cách an toàn nhất để “rút” node hoặc cả Pool ra khỏi cluster MinIO.
  • Không bị mất dữ liệu vì MinIO đảm bảo copy xong xuôi rồi mới cho phép bỏ Pool cũ.
  • Quá trình này online: người dùng vẫn có thể đọc/ghi dữ liệu ở các Pool còn lại trong khi decommission diễn ra.

Lưu ý quan trọng

  • Không thể decommission một drive hoặc một node đơn lẻ trong Pool; chỉ decommission được cả Pool.
  • Dữ liệu copy sẽ tốn băng thông & I/O tương ứng với dung lượng đang có → nếu dữ liệu lớn, quá trình có thể lâu.
  • Bạn nên đảm bảo Pool mới có đủ dung lượng trống để chứa dữ liệu được dịch chuyển.

6. Tóm tắt nhanh (nên nhớ)

Khi một disk hỏng trong pool

  • MinIO vẫn chạy được trong giới hạn parity (EC).
  • Giải pháp là:
    • Thay ổ hỏng bằng ổ mới.
    • Format và mount lại vào đúng đường dẫn cũ (ví dụ /opt/minio/d2).
    • Khởi động lại container/node nếu cần.
  • MinIO sẽ tự heal dữ liệu thiếu từ các shard còn lại sang ổ mới.
    → Đây là cách thay disk được support chính thức.

Khi một node hỏng hoàn toàn (mất cả 3 disk trong case của bạn)

  • Nếu cluster vẫn còn đủ shard (chưa vượt quá số parity cho phép), dữ liệu vẫn an toàn.
  • Nhưng: không có cách “thay thế node” đơn lẻ trong pool hiện có.
    • Pool = tập hợp endpoint cố định (http://minio{1...4}/data{1...3}).
    • Mất 1 node = pool vẫn chạy, nhưng không thể “add lại node mới” để bù cho node đã chết.

Nếu bạn muốn loại bỏ hẳn pool cũ, phải:

  • Chuẩn bị Pool mới (cluster node+disk mới).
  • Chạy mc admin decommission để copy toàn bộ dữ liệu từ Pool cũ sang Pool mới.
  • Khi hoàn tất, bỏ pool cũ ra khỏi cấu hình.

Nếu mất thêm node hoặc nhiều disk vượt ngưỡng EC

  • Pool đó sẽ mất khả năng phục hồi → dữ liệu trong pool đó coi như hỏng.
  • MinIO chỉ bảo vệ trong phạm vi parity đã định (ví dụ EC:4 → mất tối đa 4 disk bất kỳ). Nếu vượt quá → không cứu được.

Điểm mấu chốt khác biệt

  • Thay disk: Hỗ trợ → format + mount lại đúng folder cũ → MinIO heal.
  • Thay node: Không hỗ trợ → phải chuẩn bị Pool mới và decommission.
  • Vì thế MinIO đơn giản và nhanh cho bài toán scale-out & replace disk, nhưng ít linh hoạt hơn Ceph (Ceph có thể add/remove OSD, rebalance tự động).

Tóm tắt lại

  • Disk hỏng: thay ổ mới vào mountpoint cũ → MinIO tự heal.
  • Node hỏng: không thay riêng node → phải decommission cả pool sang pool mới.
  • Nếu hỏng vượt ngưỡng EC → pool mất dữ liệu.

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