dockercompose swarm 模式部署高可用哨兵模式redis
services:
# ==================== Redis 高可用 (主从 + 哨兵) ====================
redis-master:
image: xxx/redis:7.2-alpine
command: >
sh -c "
redis-server --port 6379 --replica-announce-ip $$(hostname -i) --requirepass 'xxx' --masterauth 'xxx'
"
environment:
TZ: Asia/Shanghai
volumes:
- /data/bigdata/install/redis/master-data:/data
healthcheck:
test: ["CMD", "redis-cli", "-a", "xxxx", "ping"]
interval: 10s
timeout: 3s
retries: 3
start_period: 10s
deploy:
replicas: 1
placement:
constraints: [node.labels.redis == true]
restart_policy:
condition: any
networks:
- app-netredis-slave:
image: xxxx/redis:7.2-alpine
command: >
sh -c "
redis-server --port 6379 --replica-announce-ip $$(hostname -i) --requirepass 'xxx' --masterauth 'xxxx' --replicaof redis-master 6379
"
environment:
TZ: Asia/Shanghai
volumes:
- /data/bigdata/install/redis/slave-data:/data
deploy:
replicas: 2
placement:
constraints: [node.labels.redis == true]
restart_policy:
condition: any
networks:
- app-netredis-sentinel:
image: xxxx/redis:7.2-alpine
command: >
sh -c "
echo 'waiting for master DNS...' &&
for i in $$(seq 1 30); do
MASTER_IP=\$$(getent hosts redis-master | awk '{print \$$1}') && [ -n \"$${MASTER_IP}\" ] && break || sleep 2;
done &&
echo \"master resolved to: $${MASTER_IP}\" &&
echo 'port 26379' > /sentinel.conf &&
echo 'dir /tmp' >> /sentinel.conf &&
echo \"sentinel monitor mymaster $${MASTER_IP} 6379 2\" >> /sentinel.conf &&
echo 'sentinel auth-pass mymaster xxxx' >> /sentinel.conf &&
echo 'sentinel down-after-milliseconds mymaster 5000' >> /sentinel.conf &&
echo 'sentinel failover-timeout mymaster 10000' >> /sentinel.conf &&
echo 'sentinel parallel-syncs mymaster 1' >> /sentinel.conf &&
redis-sentinel /sentinel.conf --sentinel announce-ip $$(hostname -i) --sentinel announce-port 26379
"
environment:
TZ: Asia/Shanghai
deploy:
replicas: 3
placement:
constraints: [node.labels.redis == true]
restart_policy:
condition: any
networks:
- app-net
更多推荐
所有评论(0)