一、上一篇文章介紹了redis-cluster的docker安裝方式,地址:https://www.cnblogs.com/ll409546297/p/16924478.html
二、說明上面的問題:因爲都是master,如果存在一個機器宕機的情況,那麼整個集羣都不可用,所以爲了保證集羣的穩定性,一般至少會採用一主一備的方式。
三、因爲redis的cluster模式要求3臺master所以至少需要6個節點。
四、安裝部署
1)dockerfile
FROM redis:5.0.14
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
2)docker-compose.yml
version: "2" services: xbd-redis-1: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-1 restart: always container_name: xbd-redis-1 ports: - 6379:6379 - 16379:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6379', '--cluster-announce-bus-port 16379'] xbd-redis-2: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-2 restart: always container_name: xbd-redis-2 ports: - 6380:6379 - 16380:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6380', '--cluster-announce-bus-port 16380'] xbd-redis-3: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-3 restart: always container_name: xbd-redis-3 ports: - 6381:6379 - 16381:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6381', '--cluster-announce-bus-port 16381'] xbd-redis-4: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-4 restart: always container_name: xbd-redis-4 ports: - 6382:6379 - 16382:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6382', '--cluster-announce-bus-port 16382'] xbd-redis-5: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-5 restart: always container_name: xbd-redis-5 ports: - 6383:6379 - 16383:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6383', '--cluster-announce-bus-port 16383'] xbd-redis-6: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-redis image: xbd-redis-6 restart: always container_name: xbd-redis-6 ports: - 6384:6379 - 16384:16379 environment: - TZ=Asia/Shanghai privileged: true command: ['redis-server', '--bind 0.0.0.0', '--protected-mode yes', '--daemonize no', '--requirepass xbd', '--masterauth xbd', '--maxmemory 1GB', '--maxmemory-policy allkeys-lru', '--cluster-enabled yes', '--cluster-config-file nodes-6379.conf', '--cluster-node-timeout 15000', '--cluster-replica-validity-factor 10', '--cluster-migration-barrier 1', '--cluster-require-full-coverage yes', '--cluster-replica-no-failover no', '--cluster-announce-ip 192.168.5.14', '--cluster-announce-port 6384', '--cluster-announce-bus-port 16384']
3)配置增加說明:
# 增加複製節點的認證需求 masterauth xbd
五、集羣建立
redis-cli -a xbd --cluster create --cluster-replicas 1 192.168.5.14:6379 192.168.5.14:6380 192.168.5.14:6381 192.168.5.14:6382 192.168.5.14:6383 192.168.5.14:6384
六、節點查看和hash槽確認
七、測試
redis-cli -h 192.168.5.14 -p 6379 -a xbd -c
八、宕機測試
docker stop xbd-redis-1
可以看到存在很多次的重試,然後備機升級成master
測試:
服務正常。
節點查看
可以確認具備容災能力。