当前位置: 首页 > news >正文

Redis5主备安装-Redis

本次Redis有两台服务器及3个独立IP:主服务器的ip地址是192.168.31.190,从服务器的IP地址是192.168.31.191,vipIP地址是192.168.31.216

主备方案承载Redis最大的好处是无需考虑Redis崩后无法访问。

 前提是需要优先安装keepalived,其次安装Redis。

1、master配置

! Configuration File for keepalivedglobal_defs {router_id master
}vrrp_script chk_redis {script "/data/keepalived/redis_check.sh"interval 2    
}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 150advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.31.216 dev ens33 label ens33:1}track_script {chk_redis}notify_master "/data/keepalived/redis_master.sh master"notify_backup /data/keepalived/redis_backup.shnotify_fault /data/keepalived/redis_fault.shnotify_stop /data/keepalived/redis_stop.sh
}

2、backup1配置

! Configuration File for keepalived
global_defs {router_id backup1
}
vrrp_script chk_redis {script "/data/keepalived/redis_check.sh"interval 2
}
vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.31.216 dev ens33 label ens33:1}track_script {chk_redis  }notify_master "/data/keepalived/redis_master.sh master"notify_backup /data/keepalived/redis_backup.shnotify_fault /data/keepalived/redis_fault.shnotify_stop /data/keepalived/redis_stop.sh
}

3、创建脚本目录

mkdir -p /data/keepalived

4、编辑监听脚本

vi /data/keepalived/redis_check.sh
#!/bin/bash
ALIVE=`redis-cli -a 123456 PING` 
if [ "$ALIVE" == "PONG" ];thenecho $ALIVEexit 0
elsesystemctl stop keepalived.serviceexit 1
fi

5、默认监听脚本

vi /data/keepalived/redis_fault.sh
#!/bin/bash 
LOGFILE=/data/keepalived/redis-state.log
echo "[fault]" >> $LOGFILE 
date >> $LOGFILE

6、停止监听脚本

vi /data/keepalived/redis_stop.sh
#!/bin/bash 
LOGFILE=/data/keepalived/redis-state.log
echo "[stop]" >> $LOGFILE 
date >> $LOGFILE

7、master服务器master脚本

vi /data/keepalived/redis_master.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.191 6379 >> $LOGFILE  2>&1
sleep 10
echo "Run REPLICAOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI REPLICAOF NO ONE >> $LOGFILE 2>&1
date >> $LOGFILE
在该节点的keepalived第一次启动,指keepalived组中仅有这一台或者这一台的优先级别最高,自动成为主节点,然后就会调用该脚本;
脚本中先从备机上同步数据,如果备机没有运行或故障了,则过几秒执行命令使这个节点的Redis成为主节点(提供读写能力)。
邮件配置
contact=(1509454760@qq.com) #接收者邮箱,多个以空格分隔
HOST_IP=[192.168.31.190] #本机ip
notify() {mailsubject="Redis发生切换($HOST_IP)" #邮件主题mailbody="$(date +'%F %T'): vrrp transition, $HOST_IP keepalived changed to be $1" #邮件正文for receiver in ${contact[*]}doecho "$mailbody" | mail -s "$mailsubject" $receiver #发送邮件done
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage:{master|backup|fault}"exit 1;;
esac

8、master服务器backup脚本

vi /data/keepalived/redis_backup.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.191 6379 >> $LOGFILE  2>&1
sleep 15
echo "Run REPLICAOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI REPLICAOF NO ONE >> $LOGFILE 2>&1
当这个原来是主节点,但是中途挂了,最后又重新启动后,这个时候已经由一个备节点变成了主节点,则keepalived会执行该脚本;
该脚本首先等一段时间,给备机充足的时间切换为主节点,然后该脚本执行命令,让本节点的Redis成为新主节点Redis的备份服务。

9、backup1服务器master脚本

vi /data/keepalived/redis_master.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.190 6379 >> $LOGFILE  2>&1
sleep 10
echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
当该节点在主节点挂掉之后会执行;
脚本会先从主节点同步数据,然后脚本执行命令让本机Redis独立为主服务(提供读写能力)
邮件配置
contact=(1509454760@qq.com) #接收者邮箱,多个以空格分隔
HOST_IP=[192.168.31.191] #本机ip
notify() {mailsubject="Redis发生切换($HOST_IP)" #邮件主题mailbody="$(date +'%F %T'): vrrp transition, $HOST_IP keepalived changed to be $1" #邮件正文for receiver in ${contact[*]}doecho "$mailbody" | mail -s "$mailsubject" $receiver #发送邮件done
}
case $1 in
master)notify master;;
backup)notify backup;;
fault)notify fault;;
*)echo "Usage:{master|backup|fault}"exit 1;;
esac

10、backup1服务器backup脚本

vi /data/keepalived/redis_backup.sh
#!/bin/bash
REDISCLI="redis-cli -a 123456"
LOGFILE="/data/keepalived/redis-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
echo "Being slave...." >> $LOGFILE 2>&1
sleep 15
echo "Run SLAVEOF cmd ..." >> $LOGFILE
$REDISCLI SLAVEOF 192.168.31.190 6379 >> $LOGFILE  2>&1
该脚本是在主节点的Redis成为主服务时,或主节点服务已经开启,备机服务再开启后自动执行;
脚本先等待一段时间,让主节点切换为主服务,然后脚本执行命令使本节点的Redis成为主节点的备机。

11、授权

cd /data/keepalived/
chmod +x *.sh
touch redis-state.log

12、启动注意事项

#优先启动master服务器的keepalived,但是前提是Redis已经启动完毕咯,第二是keepalived端口已经放出来咯
#第一次启动时,backup1节点的服务一定是在主master节点服务都开启后才启动,本机Redis只能提供读的功能(可配置为可写,但不安全)。
systemctl start keepalived.service #启动服务
systemctl stop keepalived.service #停止服务
systemctl restart keepalived.service #重启服务
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动

13、测试

redis-cli -h 192.168.31.216 -p 6379
auth 123456
set id 1
get id
redis-cli -h 192.168.31.190 -p 6379
auth 123456
get id
redis-cli -h 192.168.31.191 -p 6379
auth 123456
get id
确认都有数据的情况下,停止192.168.31.190的Redis,正常来说,会将192.168.31.216IP漂移到192.168.31.191这台服务器上,然后测试
190这台服务器上的操作
systemctl stop redis.service
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
191这台服务器上的操作
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
redis-cli -h 192.168.31.216 -p 6379
auth 123456
set name wangyulong
get name
redis-cli -h 192.168.31.191 -p 6379
auth 123456
get name
再次整个漂移是成功的
如果再次启动192.168.31.190的Redis服务以及keepalive服务,正常来说又会回到以前
systemctl start redis.service #启动redis服务 
systemctl start keepalived.service #启动服务
然后到192.168.31.191这台服务器上去查看keepalive服务以及vip是否存在
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
正常来说,在192.168.31.191这台服务器上keepalive服务是正常运行的,而VIP却是不存在的。因为vip又回到了主服务(192.168.31.190)上
再到192.168.31.190这台服务器上去查看keepalive服务以及vip是否存在
ps -ef|grep keepalive #检查keepalive服务
ip addr #检查vip是否启动
正常来说,在192.168.31.190这台服务器上keepalive服务是正常运行的,VIP服务也是正常运行的。最后首先采用vip连接到redis服务里面,查看name是否存在
redis-cli -h 192.168.31.216 -p 6379
auth 123456
get name
redis-cli -h 192.168.31.190 -p 6379
auth 123456
get name

 前提是需要优先安装keepalived,其次安装Redis

http://www.lryc.cn/news/425959.html

相关文章:

  • C++票据查验、票据ocr、文字识别
  • pytest.ini介绍
  • Vue项目打包成桌面应用
  • DEFAULT_JOURNAL_IOPRIO
  • 【阿卡迈防护分析】Vueling航空Akamai破盾实战
  • 使用AWS Lambda轻松开启Amazon Rekognition之旅
  • 如何获取VS Code扩展的版本更新信息
  • Python开源项目周排行 2024年第13周
  • day04--js的综合案例
  • 【产品经理】定价策略
  • webrtc学习笔记3
  • Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;
  • 【leetcode详解】特殊数组II : 一题代表了一类问题(前缀和思想)
  • SQL每日一练-0814
  • Android持久化技术—文件存储
  • 动手学深度学习(pytorch)学习记录12-激活函数[学习记录]
  • 微服务实战系列之玩转Docker(十)
  • Mysql(四)---增删查改(进阶)
  • SOAP @WebService WSDL
  • 【Qt】QWidget的toolTip属性
  • 【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)
  • AI -- Machine Learning
  • 了解交换机_1.交换机的技术发展
  • ubuntu 24.04 安装 Nvidia 显卡驱动 + CUDA + cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会!
  • 跟李沐学AI:目标检测的常用算法
  • 基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(一)---UnrealCV获取深度+分割图像
  • Java算法解析一:二分算法及其衍生出来的问题
  • 数学建模预测类—【一元线性回归】
  • 配置更加美观的 Swagger UI
  • 软件测试 - 基础(软件测试的生命周期、测试报告、bug的级别、与开发人员产生争执的调解方式)