keepalive代理访问redis哨兵集群主节点

1.前言

搭建了redis哨兵集群后,一般以master节点接收写请求,然而当master节点出现故障后哨兵会投票选举一台slave节点晋升为master节点,此时master的ip地址就发生了变化,就需要重新给写请求指定访问的ip地址,所以使用keepalive去代理master节点的地址,使用keepalive的vrrp_script模块通过脚本是否执行成功去增加节点的权重,若脚本执行成功状态为0则权重增加,若脚本执行不成功状态不为0则权重回退到原来的权重,即使脚本多次执行成功权重也只会增加一次

2.节点信息

名称

ip

port

redisA

10.1.60.114

6379,26379

redisB

10.1.60.115

6379,26379

redisC

10.1.60.80

6379,26379

vip

10.1.60.116

3.搭建环境并配置服务

3.1关闭防火墙(三个节点执行)

systemctl stop firewalld

3.2关闭selinux

setenforce 0

3.3安装keepalive服务(三个节点执行)

yum -y install keepalived

3.4更改原来的配置文件名作为备份(三个节点执行)

find / -name keepalived.conf(查找配置文件路径)

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

3.5创建新的keepalive配置文件(三个节点都配置下列的配置文件信息,只有router_id不同)

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   script_user root
   enable_script_security
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id redis01    #三台节点需要配置不一致的id,随机命名即可
  #vrrp_skip_check_adv_addr
  #vrrp_strict
  #vrrp_garp_interval 0
  #vrrp_gna_interval 0
}

vrrp_script check_redis {
   script "/etc/keepalived/check-redis-role.sh"  #
   interval 5   #每间隔5秒执行一次脚本检测
   weight 20  #脚本退出状态为0则权重增加20,脚本退出状态不为0则不执行权重增加,当权重设置为负,则需要脚本退出状态为1才会执行,退出为0是不会执行权重为负的设置
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens160
    virtual_router_id 51
    priority 70  #初始权重配置70
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.1.60.116
    }
    track_script {
        check_redis
    }
}

3.6编辑监控脚本(三个节点均需配置)

vi /etc/keepalived/check-redis-role.sh

#!/bin/bash
state=`redis-cli -p 6379 -a Nfd@9527 info replication | grep -i "role" |grep -i "master"|wc -l` #检测当前节点是否是master
redis=`ps -ef |grep redis-server|grep -v grep |wc -l` #检测redis服务是否存活
if [ $redis == 0 ]; then  #等于0证明redis服务挂掉了
   systemctl stop keepalived 
else 
   if [ $state == 0 ]; then #等于0证明不是master节点,不等于0证明是master节点
      exit 1  #节点不是master脚本退出状态为1
   else
      exit 0  #节点是master脚本退出状态为0
   fi
fi

3.7给脚本增加执行权限(三个节点均需配置)

chmod +x /etc/keepalived/check-redis-role.sh

3.8搭建redis哨兵集群(使用此三个节点搭建)

参考redis哨兵集群搭建_redis搭建哨兵集群-CSDN博客

3.9启用redis服务与哨兵服务(三个节点均需配置)

systemctl start redis

redis-sentinel /root/redis-6.2.11/sentinel.conf

3.10启用keepalive服务(三个节点均需配置)

systemctl start keepalived

3.11查看keepalive服务是否正常识别到master节点

4.模拟哨兵故障切换

4.1把master节点的redis服务关闭

systemctl stop redis

4.2查看原来master节点信息

4.3查看新master节点信息

5.重启挂掉的redis服务与keepalived服务

redis服务重启后会先默认是master状态,需要一会才会识别为slave状态,当节点为slave状态后再启动keepalive服务,所以在写redis检测脚本的时候在redis挂掉后需要把keepalive也干掉,不然redis重启的时候是master状态,keepalive也会竞选vip地址

6.若是防火墙没关闭需要配置开放防火墙规则否则keepalived直接不能互访(知识点补充)

Keepalived使用vrrp组播,默认地址是224.0.0.18,因此要配置防火墙放过

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值