redis-cache-la-gi-thumbnail.jpg
Dưới đây là nội dung file docker-compose.yml và redis.conf để thiết lập Redis Cluster.

1. redis.conf

Chúng ta cần tạo các file cấu hình cho từng node với cùng một cổng (port) bên trong nhưng khác nhau về cluster-announce-port. Ví dụ lệnh kết nối: redis-cli -h localhost -p 26380 -a secret.
snippet
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 3000
cluster-announce-ip [host IP]
cluster-announce-port 26379
cluster-announce-bus-port 17000
appendonly yes
requirepass secret
masterauth secret

2. docker-compose.yml

version: "3.9"

services:
 # Dùng để debug (ping, nslookup, v.v.)
 debug-busybox:
   image: busybox
   command: sleep 3600
   networks:
     - sample-app

 redis-node-1:
   image: redis:7.2
   container_name: redis-node-1
   volumes:
     - ./redis-data/node1/redis.conf:/usr/local/etc/redis/redis.conf
   ports:
     - "26379:6379"
     - "17000:16379"
   command: [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
   networks:
     - sample-app
   extra_hosts:
     - "host.docker.internal:host-gateway"

 # ... (Tương tự cho các node từ 2 đến 6 với các cổng 26380-26384 và 17001-17005)

 redis-cluster-init:
   image: redis:7.2
   container_name: redis-cluster-init
   depends_on:
     - redis-node-1
     - redis-node-2
     - redis-node-3
     - redis-node-4
     - redis-node-5
     - redis-node-6
   entrypoint: [ "bash", "-c" ]
   command:
     - >
       sleep 5 &&
       echo yes | redis-cli -a secret --cluster create
       host.docker.internal:26379
       host.docker.internal:26380
       host.docker.internal:26381
       host.docker.internal:26382
       host.docker.internal:26383
       host.docker.internal:26384
       --cluster-replicas 1
   networks:
     - sample-app
   extra_hosts:
     - "host.docker.internal:host-gateway"

networks:
 sample-app:
   driver: bridge

3. Chạy thử

Đã đến lúc kiểm tra thành quả. Hãy chạy lệnh sau:
docker-compose -f docker-compose.yml up -d

Kiểm tra (Check)

Nếu có lỗi khi các container đang khởi chạy, bạn có thể dùng lệnh sau để kết nối vào một trong các node:
Kết nối tới một Redis node:
redis-cli -h localhost -p 26380 -a secret
Lấy danh sách các node trong cluster:
cluster nodes
Nếu thành công, bạn sẽ thấy kết quả tương tự như sau:
aaf139c2... 172.20.0.4:6379@16379 master - 0 1750408699203 1 connected 0-5460
...
Lưu ý: Để cài đặt redis-cli trên Mac, hãy dùng: brew install redis.

4. Gỡ lỗi (Debugging)

Kiểm tra Log

Trước tiên, hãy kiểm tra log từ container redis-cluster-init:
docker logs redis-cluster-init

Kiểm tra trạng thái các node

Nếu log hiển thị thông báo cấu hình thành công, nó sẽ trông như thế này:
2025-06-20 17:38:07 Master[0] -> Slots 0 - 5460
2025-06-20 17:38:07 Adding replica 172.20.0.3:6379 to 172.20.0.4:6379
...

Kiểm tra kết nối giữa các node

Bạn có thể kiểm tra xem các node có tìm thấy nhau không bằng lệnh:
docker exec redis-node-1 redis-cli -a secret cluster meet host.docker.internal 26380
Nếu xuất hiện lỗi ERR Invalid node address specified, nghĩa là việc phân giải địa chỉ IP đang gặp vấn đề.
Nguồn bài viết ryukato.github.io