docker-compose之redis cluster模式-2
一、上一篇文章介绍了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
测试:
服务正常。
节点查看
可以确认具备容灾能力。