Login
网站首页 > 文章中心 > 其它

redis 学习笔记之_二)主备高可用_热备)

作者:小编 更新时间:2023-09-24 14:10:44 浏览量:432人看过

第一段:背景

项目中大量的服务会依赖redis,为保证系统正常,redis 对外提供的服务必须正常.所以呢 redis 需要高可用.目前 redis 提供的高可用方案如下:

(1) redis 哨兵模式 实现 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

redis 学习笔记之_二)主备高可用_热备)

从图中可以看出 keepalieved 服务状态日志显示 check_redis 执行失败的.(上图未执行 setenforce 0)

此时通过 tail /var/logs/message 可以看到如下信息

redis 学习笔记之_二)主备高可用_热备)

所以一定要关闭 SELinuex,执行 setenforce 0

重启后的的执行结果

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

显然该服务器上已经没有 vip了

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

redis 学习笔记之_二)主备高可用_热备)

其还是 master状态.

第三段:问题

(1) 主备服务器上均有 vip

redis 学习笔记之_二)主备高可用_热备)

将防火墙关闭,或者 让 keepalived 端口 通过 防火墙,重启 keepalived 则正常.

以上就是土嘎嘎小编为大家整理的redis 学习笔记之_二)主备高可用_热备)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章