第一段:背景
项目中大量的服务会依赖redis,为保证系统正常,redis 对外提供的服务必须正常.所以呢 redis 需要高可用.目前 redis 提供的高可用方案如下:
(1) redis 哨兵模式 实现 redis 主备
对于性能,使用分片模式,即 redis 搭建集群解决 性能问题.
第二段:操作
①.、部署
redis 安装 详见 <
(a) keepalived 配置
vrrp_script check_redis { script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本 interval 2 ###监控时间 } vrrp_instance VI_1 { state BACKUP ###设置为BACKUP interface ens32 ###监控网卡 virtual_router_id 51 priority 100 ###权重值 nopreempt ###不抢占VIP authentication { auth_type PASS ###加密 auth_pass 1111 ###密码 } track_script { check_redis ###执行上面定义的chk_redis } virtual_ipaddress { 192.168.149.149 ######VIP } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_slave.sh }
将 该 keepalived.conf 文件放到 /etc/keepalived 目录下
在 该目录下 存在 scripts 文件夹,该文件夹下存在脚本文件如下:
redis_check.sh
#!/bin/bash ALIVE=◆/opt/redis/redis0/bin/redis-cli -p 6379 -a 123456 PING◆ # 其中 -p 指本机 redis 服务端口, -a 指连接 redis 服务密码 LOGFILE="/opt/redis/redis0/log/keepalived-redis-state.log" touch $LOGFILE if [ "$ALIVE" == "PONG" ]; then echo $ALIVE echo $ALIVE >> $LOGFILE exit 0 else echo $ALIVE echo $ALIVE >> $LOGFILE echo "ERROR" >> $LOGFILE exit 1 fi
redis_master.sh
#!/bin/bash REDISCLI="/opt/redis/redis0/bin/redis-cli -p 6379 -a 123456" LOGFILE="/opt/redis/redis0/keepalived-redis-state.log" ALIVE=◆/opt/redis/redis0/bin/redis-cli -h 192.168.149.129 -p 6379 -a 123456 PING◆ #ping 备 redis touch $LOGFILE echo "[master]" >> $LOGFILE date >> $LOGFILE echo "Being master...." >> $LOGFILE 2>1 #判断对方是否存活 if [ "$ALIVE" == "PONG" ]; then echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF 192.168.149.129 6379 >> $LOGFILE 2>1 # 设置本服务器是对端的备服务器,先从对端服务器同步所有的数据 sleep 10 #如果存活则延迟10秒以后待数据同步完成后再取消同步状态 ,否则直接取消同步状态 fi echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF NO ONE >> $LOGFILE 2>1 # 设置本服务器是主服务器,不是任何的从服务器,这样,本redis 会自动切换为 master 角色
redis_slave.sh
#!/bin/bash REDISCLI="/opt/redis/redis0/bin/redis-cli -p 6379" LOGFILE="/opt/redis/redis0/log/keepalived-redis-state.log" ALIVE=◆/opt/redis/redis0/bin/redis-cli -h 192.168.149.129 -p 6379 -a 123456 PING◆ echo "[backup]" >> $LOGFILE date >> $LOGFILE echo "Being slave...." >> $LOGFILE 2>1 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF 192.168.149.129 6379 >> $LOGFILE 2>1 # 设置本redis 设对端服务器的从服务器,这样角色切换为 slave.
(b) redis 配置
/opt/redis/redis0/conf/redis.conf 配置文件新增内容如下:
masterauth 123456
keepalvied.conf
vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh" ###监控脚本 interval 2 ###监控时间 } vrrp_instance VI_1 { state BACKUP ###设置为BACKUP interface ens32 ###监控网卡 virtual_router_id 51 priority 10 ###权重值 nopreempt ###不抢占VIP authentication { auth_type PASS ###加密 auth_pass 1111 ###密码 } track_script { chk_redis ###执行上面定义的chk_redis } virtual_ipaddress { 192.168.149.149 ######VIP } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_slave.sh }
#!/bin/bash ALIVE=◆/opt/redis/redis0/bin/redis-cli -p 6379 -a 123456 PING◆ if [ "$ALIVE" == "PONG" ]; then echo $ALIVE exit 0 else echo $ALIVE exit 1 fi
#!/bin/bash REDISCLI="/opt/redis/redis0/bin/redis-cli -p 6379 -a 123456" LOGFILE="/opt/redis/redis0/keepalived-redis-state.log" ALIVE=◆/opt/redis/redis0/bin/redis-cli -h 192.168.149.128 -p 6379 -a 123456 PING◆ touch $LOGFILE echo "[master]" >> $LOGFILE date >> $LOGFILE echo "Being master...." >> $LOGFILE 2>1 #判断对方是否存活 if [ "$ALIVE" == "PONG" ]; then echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF 192.168.149.128 6379 >> $LOGFILE 2>1 sleep 10 #如果存活则延迟10秒以后待数据同步完成后再取消同步状态 ,否则直接取消同步状态 fi echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF NO ONE >> $LOGFILE 2>1
#!/bin/bash REDISCLI="/opt/redis/redis0/bin/redis-cli -p 6379" LOGFILE="/opt/redis/redis0/log/keepalived-redis-state.log" ALIVE=◆/opt/redis/redis0/bin/redis-cli -h 192.168.149.128 -p 6379 -a 123456 PING◆ echo "[backup]" >> $LOGFILE date >> $LOGFILE echo "Being slave...." >> $LOGFILE 2>1 echo "Run SLAVEOF cmd ..." >> $LOGFILE $REDISCLI -a 123456 SLAVEOF 192.168.149.128 6379 >> $LOGFILE 2>1
masterauth 123456
cd /opt/redis/redis0
./bin/redis-server ./conf/redis.conf
setenforce 0
systemctl start keepalived
从图中可以看出 keepalieved 服务状态日志显示 check_redis 执行失败的.(上图未执行 setenforce 0)
此时通过 tail /var/logs/message 可以看到如下信息
所以一定要关闭 SELinuex,执行 setenforce 0
重启后的的执行结果
显然该服务器上已经没有 vip了
其还是 master状态.
第三段:问题
(1) 主备服务器上均有 vip
将防火墙关闭,或者 让 keepalived 端口 通过 防火墙,重启 keepalived 则正常.
以上就是土嘎嘎小编为大家整理的redis 学习笔记之_二)主备高可用_热备)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!