首页 > 技术文章 > redis 哨兵部署

xiaoming619872862 2021-03-16 21:48 原文

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

 

推荐阅读