keepalived搭建redis主备高可用方案实践
keepalived搭建redis主备高可用方案实践
keepalived原理、配置文件及安装过程
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。实现基础VRRP协议
VRRP协议
Keepalived组件:core、check、vrrp、libipfwc、libipvs-2.4、libipvs-2.6
**core:**是keepalived的核心,复责主进程的启动和维护,全局配置文件的加载解析等
**check:*负责healthchecker(健康检查),包括了各种健康检查方式,以及对应的配置的解析包括LVS的配置解析
vrrp:VRRPD子进程,VRRPD子进程就是来实现VRRP协议的
libipfwc:iptables(ipchains)库,配置LVS会用到
libipvs:配置LVS会用到
Redis使用keepalived热备设计思路:
1)当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
2)当 Master 挂掉,Slave 正常时, Slave接管服务,有写权限,同时关闭主从复制功能;
3)当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。
Keepalived安装过程:
1、下载软件,版本与生产版本匹配:1.2.24
2、通过xftp将安装包传到/usr/local路径
3、解压:usr/local:tar -zxvf keepalived-1.2.24.tar.gz
4、usr/local:mkdir keepalived
5、usr/local:cd keepalived-1.2.2
6、usr/local/keepalived-1.2.2:
./configure --prefix=/usr/local/keepalived
(出现问题,缺少openssldevel依赖)
7、找到suse对应的openssldevel包
107770_libopenssl-devel-0.9.8j-2.1.x86_64.rpm
rpm -ivh XXX.rpm 出现问题,
8、安装openssldevel:
9、usr/local/keepalived: rpm -ivh 包名 --force --nodeps
10、Keepalived-1.2.2目录重新./configure,发现缺少popt,
11、下载popt-devel,rpm -ivh 包名 --force --nodeps
再进行./configure成功,最后make&make install
安装过程问题注意:
1、安装openssldevel时,会出现各种依赖包关系,直接忽略,通过–force --nodeps命令强行安装,不然会出现各种问题
2、安装时注意路径,最好装在指定的文件夹中
Keepalived参数配置过程
Keepalived配置参数
主要分为以下三部分:
A.global_defs:全局定义,这里不需要操作,全部注释掉。保留router_id 机器标识
B.Vrrp_script chk_redis:这一块作用是健康检查,当检查失败时会将vrrp_instance的priority减少相应的值,实现虚拟IP漂移的功能
C.Vrrp_instance:实例模块,其中
state标识机器的状态,BACKUP为备机,MASTER为从机,本机配置两台都为BACKUP,原因见下:
interface:为网卡接口:可通过ip addr查看自己的网卡接口,网卡需要选择和虚拟IP同网段的
virtual_router_id:虚拟路由标志。同组的virtual_router_id应该保持一致。它将决定多播的MAC地址。
priority:设置本节点的优先级,优先级高的为master
nopreempt:该参数为非抢占参数,通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争master状态
advert_int:MASTER与BACKUP同步检查的时间间隔
virtual_ipaddress:虚拟ip,需要向技管中心申请
最后是keepalived脚本
主从服务器都需要编写以下负责运作的关键脚本:
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop
usr/local/keepalived/:makdir shell
usr/local/keepalived/shell:touch redis_check.sh
…
给脚本增加权限:
sudo chmod +x /usr/local/keepalived/shell/*.sh
脚本附录及详解参考:
https://www.cnblogs.com/zs-wei/p/10905730.html
Redis主备模式搭建:
1、下载相应的安装包与生产对应(redis-3.0.6)
tar -xvf redis-3.0.6
cd redis-3.0.6
make && make install
2、编辑配置文件
Vi /usr/local/redis/redis.conf
找到这一行,如果没有注掉的话将其注掉
将这个从no改为yes,使redis客户端可以后台启动
3、测试是否安装成功
首先启动:进入src路径执行:./redis-server /usr/local/redis/redis.conf
打开客户端,同路径执行:./redis-cli
4、主从配置,两台机器同样按照之前的步骤进行安装
5、从节点配置redis.conf文件:
添加一行配置“slaveof 192.168.0.101 6379”映射到主节点
6、从节点查看redis.conf
找到masterruth 把主机的密码写上,不然连不通
7、./redis-cli
8、通过info命令查看是否有主从节点信息,并在主节点发送数据,在从节点看是否可以接收
搭配keepalived的话不需要主从设置,keepalived能够完成主备模式的切换。
测试是否搭建成功:
1、启动
注意:启动是有先后顺序:先要启动redis的主从,再启动keepalived 的主,最后再启动keepalived的从。
此时通过ip a命令可以看到虚拟IP在主机上
2、关掉主机的keepalived,检查从机的ip,发现虚拟ip飘到了从机上
3、恢复主机keepalived,虚拟ip仍然在从机上
4、关掉从机的keepalived,ip飘到了主机
5、恢复从机keepalived,ip仍然在主机
遇到问题分析:
1、虚拟ip需要申请,和主从两台机器同网段
2、网卡要选择正确,对应主从所在的网段
3、通过查看/var/log/message日志文件,发现备机反复刷出此问题,
初步定为脚本问题,后通过内控台测试排除。
检查配置文件,通 过反复检查,排除配置问题。
交换两台主备次序,发现备机正常,主机开始出现此问题,因此问题定位为服务器网卡的问题,最终将出现问题的机器更换,采用同样的配置,测试成功。