Bạn có biết?
Redis của bạn đang xử lý 5 triệu key, RAM sắp cạn, và thêm RAM thì quá đắt? Hay một node Redis chết là cả hệ thống sụp? Redis Cluster là câu trả lời: chia dữ liệu ra nhiều node, mỗi node chỉ quản lý một phần — vừa tăng dung lượng, vừa chịu lỗi, mà client vẫn dùng như một Redis duy nhất.
Khác với Replication + Sentinel (nơi mọi node đều chứa toàn bộ dữ liệu — bản sao), Cluster chia dữ liệu: mỗi key chỉ nằm trên đúng một node. Tổng dung lượng = tổng RAM của tất cả node.
Ý tưởng cốt lõi: 16384 hash slots
Redis Cluster chia không gian key thành 16.384 hash slots (từ 0 đến 16383). Với mỗi key, Cluster tính:
hash_slot = CRC16(key) mod 16384
Mỗi node quản lý một khoảng slot. Ví dụ cluster 3 node:
- Node A: slot 0 – 5460
- Node B: slot 5461 – 10922
- Node C: slot 10923 – 16383
Khi bạn SET một key, Cluster băm key → tìm node quản lý slot đó → lưu vào đúng node. Client thông minh (như ioredis) học được bản đồ slot sau lần đầu, rồi gửi thẳng request đến đúng node — không có proxy trung gian, không thêm hop mạng.
Cấu trúc: master + replica
Trong Cluster, mỗi master có thể có replica (bản sao) để chịu lỗi. Nếu master chết, replica của nó được tự động thăng cấp. Tối thiểu một cluster nên có 6 node: 3 master + 3 replica (mỗi master một replica).
Cluster cũng có khái niệm gossip protocol — các node liên tục trao đổi trạng thái với nhau, phát hiện node chết trong vài giây và tự chuyển slot sang replica. Bạn không cần Sentinel nữa: Cluster tự lo failover.
Tạo cluster nhanh với redis-cli
# Giả sử 6 instance chạy trên ports 7000-7005 (cluster-enabled yes trong redis.conf)
# tạo 6 container bằng Docker cho gọn:
for port in 7000 7001 7002 7003 7004 7005; do
docker run -d --name redis-$port -p $port:$port
redis:7-alpine redis-server --port $port --cluster-enabled yes --cluster-config-file nodes.conf
done
redis-cli --cluster create
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
--cluster-replicas 1
0 bình luận
Đang tải bình luận...
Để lại bình luận