Sửa lỗi Redis: (error) CLUSTERDOWN The cluster is down (Mất Quorum)

intermediate🔴 Redis2026-07-23| Redis Cluster chạy trên Linux (Ubuntu, CentOS, Debian, v.v.), các phiên bản Redis từ 3.0 đến 7.2+

Error Message

(error) CLUSTERDOWN The cluster is down
#redis#devops#quan-tri-co-so-du-lieu#clustering#khac-phuc-loi

Hiểu về lỗi

Ít có điều gì gây ức chế hơn việc thấy lỗi (error) CLUSTERDOWN khi bạn cố gắng chạy một lệnh đơn giản. Lỗi này có nghĩa là cluster Redis của bạn đã ngừng chấp nhận các lệnh ghi và đọc vì nó không còn tự coi là đủ ổn định để đảm bảo tính toàn vẹn của dữ liệu.

Các nguyên nhân phổ biến

Redis thường chuyển sang trạng thái CLUSTERDOWN vì hai lý do cụ thể sau:

  • Mất Quorum: Điều này xảy ra khi phần lớn các master node biến mất. Ví dụ: nếu bạn có một cluster 6 node (3 master, 3 replica) và 2 master bị ngoại tuyến cùng lúc, master còn lại không thể đạt được đa số (quorum). Nó sẽ ngừng hoạt động để ngăn chặn tình trạng không nhất quán dữ liệu.
  • Hash Slots chưa được gán: Redis chia dữ liệu thành chính xác 16.384 hash slot. Nếu chỉ cần một slot không được lưu trữ bởi một node đang hoạt động—do cả master và replica của nó đều bị lỗi—toàn bộ cluster sẽ mặc định dừng hoạt động.

Những lỗi này thường bắt nguồn từ việc chia cắt mạng (network split), mất điện đột ngột trên nhiều tủ rack, hoặc sự cố của nhà cung cấp dịch vụ đám mây ảnh hưởng đến toàn bộ availability zone.

Hướng dẫn khắc phục từng bước

Bước 1: Kiểm tra trạng thái Cluster

Bắt đầu bằng cách kết nối với bất kỳ node nào vẫn có thể ping được. Bạn cần xem góc nhìn của cluster về sự cố. Chạy lệnh sau:

redis-cli -h <node-ip> -p 6379 CLUSTER NODES | grep fail

Lệnh này lọc các node được đánh dấu là fail hoặc fail?. Nếu bạn thấy hơn một nửa số master nằm trong danh sách này, bạn đã xác nhận được tình trạng mất quorum.

Bước 2: Đưa các node bị thiếu hoạt động trở lại

Cách khắc phục nhanh nhất là khôi phục lại các tiến trình ban đầu. Nếu máy chủ bị khởi động lại hoặc dịch vụ bị sập, hãy khởi động lại Redis trên các máy bị lỗi:

# Trên máy chủ đã bị sập
sudo systemctl start redis-server
# Hoặc nếu sử dụng cấu hình tùy chỉnh
redis-server /etc/redis/redis.conf

Khi các node tham gia lại, chúng sẽ tự động đồng bộ hóa. Trạng thái CLUSTERDOWN sẽ biến mất trong vòng vài giây sau khi các node thực hiện handshake thành công.

Bước 3: Sửa lỗi Cluster thông qua CLI

Đôi khi một node bị hỏng hoàn toàn—có thể một cloud instance đã bị xóa hoặc ổ đĩa bị hỏng. Nếu bạn không thể đưa node cũ hoạt động trở lại, bạn phải gán lại các slot của nó cho các node còn sống. Chạy công cụ sửa lỗi từ một node đang hoạt động tốt:

redis-cli --cluster fix <healthy-node-ip>:6379

Công cụ sẽ quét 16.384 slot và xác định các slot "mồ côi". Nó sẽ hỏi ý kiến để liên kết lại chúng với các master còn lại. Nhập yes để tiếp tục. Việc này sẽ giúp chữa lành cluster bằng cách bỏ qua các node đã chết.

Bước 4: Tùy chọn "Nuclear" (Giải pháp cuối cùng)

Nếu siêu dữ liệu (metadata) của cluster bị hỏng nặng và lệnh --cluster fix thất bại, bạn có thể phải reset các node. Cảnh báo: Việc này sẽ xóa cấu hình cluster và có thể dẫn đến mất dữ liệu.

Chạy lệnh này trên mọi node có thể truy cập được để chuyển nó trở lại thành một instance độc lập:

redis-cli CLUSTER RESET HARD

Sau khi thực hiện việc này, bạn sẽ cần chạy lại lệnh --cluster create như thể bạn đang thiết lập môi trường lần đầu tiên.

Bước 5: Điều chỉnh cài đặt tính sẵn sàng

Nếu bạn muốn cluster của mình vẫn trực tuyến ngay cả khi thiếu một số dữ liệu, bạn có thể thay đổi độ khắt khe của việc bao phủ slot. Điều này hữu ích cho các kịch bản làm cache, nơi tính sẵn sàng quan trọng hơn tính nhất quán dữ liệu 100%.

redis-cli CONFIG SET cluster-require-full-coverage no

Để thay đổi này duy trì sau khi khởi động lại, hãy thêm cluster-require-full-coverage no vào tệp redis.conf của bạn.

Xác minh kết quả

Đừng vội cho rằng lỗi đã được khắc phục chỉ vì thông báo lỗi biến mất. Hãy thực hiện ba bước kiểm tra sau:

  • Kiểm tra trạng thái: redis-cli CLUSTER INFO | grep cluster_state (Kết quả phải là ok).
  • Kiểm tra độ bao phủ: redis-cli --cluster check <ip>:6379 (Kết quả phải là All 16384 slots covered).
  • Kiểm tra lưu lượng: redis-cli SET health_check 1.

Mẹo phòng ngừa

  • Quy tắc Port 10000: Đảm bảo tường lửa của bạn cho phép lưu lượng truy cập trên port cơ bản (6379) VÀ port cluster bus (16379). Nếu không có port bus, các node không thể "bình bầu", dẫn đến lỗi quorum giả.
  • Tăng thời gian timeout: Nếu bạn thường xuyên thấy lỗi CLUSTERDOWN chớp nhoáng khi lưu lượng truy cập cao, hãy tăng cluster-node-timeout lên 30000ms (30 giây) trong cấu hình để xử lý tình trạng lag mạng tạm thời.
  • Số lượng Master lẻ: Luôn sử dụng ít nhất 3 master node. Điều này đảm bảo có thể đạt được đa số rõ ràng trong trường hợp xảy ra sự cố split-brain.

Related Error Notes