mkdir redis-0{1..3}/{conf,data,log} -p
备redis.conf和sentinel.conf配置文件
chmod +777 redis-0{1..3}/log #日志要权限,不然报错Can‘t open the log file: Permission denied
docker run -p 6380:6380 -p 26380:26380 -v /myredis/redis-01/conf:/redis -v /myredis/redis-01/data:/data -v /myredis/redis-01/log:/log -v /myredis/redis-01/sentinel:/data/sentinel --name redis-01 -d redis redis-server /redis/redis.conf
docker run -p 6381:6381 -p 26381:26381 -v /myredis/redis-02/conf:/redis -v /myredis/redis-02/data:/data -v /myredis/redis-02/log:/log -v /myredis/redis-02/sentinel:/data/sentinel --name redis-02 -d redis redis-server /redis/redis.conf
docker run -p 6382:6382 -p 26382:26382 -v /myredis/redis-03/conf:/redis -v /myredis/redis-03/data:/data -v /myredis/redis-03/log:/log -v /myredis/redis-03/sentinel:/data/sentinel --name redis-03 -d redis redis-server /redis/redis.conf
docker exec redis-01 redis-sentinel /redis/sentinel.conf
docker exec redis-02 redis-sentinel /redis/sentinel.conf
docker exec redis-03 redis-sentinel /redis/sentinel.conf
docker exec -it redis-01 redis-cli -h 192.168.3.102 -p 6380 #通过redis-cli进redi查看主从状态
info replication
docker exec -it redis-01 redis-cli -h 192.168.3.102 -p 26380 #进哨兵看哨兵状态
info sentinel
哨兵VPI漂移脚本
cat notifyvip.sh
#!/bin/bash #可用于Sentinel client-reconfig-script < master-name > < script-path > #通过此脚本做主redis VIP漂移 MASTER_IP=$6 #第六个参数是新主redis的ip地址 LOCAL_IP=‘172.16.213.75‘ #本地IP VIP=‘172.16.213.229‘ NETMASK=‘24‘ INTERFACE=‘em2‘ if [[ "${MASTER_IP}" == "${LOCAL_IP}" ]];then /sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE} #将VIP绑定到该服务器上 /sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE} exit 0 else /sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE} #将VIP从该服务器上删除 exit 0 fi exit 1 #如果返回1,sentinel会一直执行这个脚本
通知脚本:
cat notify.sh
#!/bin/sh
#可用于 sentinel notification-script <master-name> <script-path> MAIL_TO="alert@example.net" if [ "$#" = "2" ]; then hostname=`hostname` mail_subject="Redis 通知" mail_body=`cat << EOB ============================================ Sentinel调用的Redis通知脚本 ============================================ 执行故障转移哨兵:${hostname} 事件类型: ${1} 事件描述: ${2} 检查redis状态 EOB` echo "${mail_body}" | mail -s "${mail_subject}" "${MAIL_TO}" fi
redis01配置文件:
redis.conf:
bind 0.0.0.0 port 6380 tcp-backlog 128 timeout 0 tcp-keepalive 0 daemonize no loglevel notice logfile "/log/redis-server.log" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression no rdbchecksum no dbfilename dump.rdb dir "/data" replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
sentinel.conf:
port 26380 dir "/data/sentinel" daemonize yes protected-mode no logfile "/log/redis-sentinel.log" sentinel monitor redisMaster 192.168.3.102 6380 2 sentinel down-after-milliseconds redisMaster 10000 sentinel parallel-syncs redisMaster 1 sentinel failover-timeout redisMaster 60000
redis02配置文件:
redis.conf:
bind 0.0.0.0 port 6381 tcp-backlog 128 timeout 0 tcp-keepalive 0 daemonize no loglevel notice logfile "/log/redis-server.log" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression no rdbchecksum no dbfilename dump.rdb dir "/data" replicaof 192.168.3.102 6380 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
sentinel.conf:
port 26381 dir "/data/sentinel" daemonize yes protected-mode no logfile "/log/redis-sentinel.log" sentinel monitor redisMaster 192.168.3.102 6380 2 sentinel down-after-milliseconds redisMaster 10000 sentinel parallel-syncs redisMaster 1 sentinel failover-timeout redisMaster 60000
redis03配置文件:
redis.conf:
bind 0.0.0.0 port 6382 tcp-backlog 128 timeout 0 tcp-keepalive 0 daemonize no loglevel notice logfile "/log/redis-server.log" databases 16 save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression no rdbchecksum no dbfilename dump.rdb dir "/data" replicaof 192.168.3.102 6380 replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 appendonly yes appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes lua-time-limit 5000 slowlog-log-slower-than 10000 slowlog-max-len 128 latency-monitor-threshold 0 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 aof-rewrite-incremental-fsync yes
sentinel.conf:
port 26382 dir "/data/sentinel" daemonize yes protected-mode no logfile "/log/redis-sentinel.log" sentinel monitor redisMaster 192.168.3.102 6380 2 sentinel down-after-milliseconds redisMaster 10000 sentinel parallel-syncs redisMaster 1 sentinel failover-timeout redisMaster 60000
原文:https://www.cnblogs.com/xiaoming619872862/p/14546175.html