Redis-sentinel

1 哨兵的作用

sentinel,具有自动故障转移,当redis主库不能提供服务时,哨兵服务可以将一个从redis升级为redis,并使得其他从redis,重新指向新的主从复制,解决主库单点问题。
实时监控redis,当从库出现单点问题时,也可以通知别的redis。

2 redis主从部署

基础环境:
centos 7.5.1804
3.10.0-862.e17.x86_64
redis版本:redis 4.0.11
关闭firewalld,NetworkManager,selinux

三台服务器,每台服务器上开启redis-server和sentinel服务
master 192.168.200.102
slave1 192.168.200.116
slave2 192.168.200.117

2.1 主从搭建

三台机都执行以下步骤

yum -y install gcc gcc-c++ make automake autoconf
tar xf redis-4.0.11.tar.gz -C /usr/src/
cd /usr/src/redis-4.0.11/
make MALLOC=jemalloc
make PREFIX=/usr/local/redis install
mkdir -p /usr/local/redis/conf
cp redis.conf /usr/local/redis/conf/
cp setinel.conf /usr/local/redis/conf/

进行redis服务的基础优化

echo "* - nofile 10240" >> /etc/security/limits.conf
echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

配置文件修改

mkdir -p /data/redis/
cd /usr/local/redis/conf/
cp redis.conf{,.bak}
egrep -v "^$|#" redis.conf.bak > redis.conf
vim /usr/local/redis/conf/redis.conf

#修改或增加以下内容
daemonize yes
bind 0.0.0.0
pidfile "/data/redis/redis.pid"
logfile "/data/redis/redis.log"
dir "/data/redis/"
slaveof 192.168.200.102 #从库上多这一行,指定主库

先启动主库,在启动从库

redis-server /usr/local/redis/conf/redis.conf
    
#查看从库日志,检查主从同步是否成功
tail /var/log/redis/redis-8000.log
#master上查看主从复制情况
redis-cli info replication
#主库设置键值
redis-cli set aaa 111
#从库验证是否同步
redis-cli get aaa

3 sentinel高可用搭建

三台都修改

#修改哨兵配置文件以下行的参数
cd /usr/local/redis/conf/
cp sentinel.conf{,.bak}
vim sentinel.conf 
21 port 6800    #自定义一个未使用端口
69 sentinel monitor redis01 192.168.200.102 6379 2 
98 sentinel down-after-milliseconds redis01 5000
106 sentinel parallel-syncs redis01 1
131 sentinel failover-timeout redis01 15000
#最后追加四行
daemonize yes
logfile "/data/redis/sentinel.log"
pidfile "/var/run/sentinel.pid"
protecten-mode no

配置文件详解
> 1. sentinel monitor redis01 192.168.200.102 6379 2
redis01:监控的主节点名字(自定义)
192.168.200.102 6379:主节点的IP和端口
2:当有两台sentinel发现有问题就会发生故障转移

  1. sentinel down-after-milliseconds redis01 5000
    当redis01主节点宕机5秒后进行检查
  2. sentinel parellel-syncs redis01 1
    设定sentinel并发还是串行,1代表每次只能复制一次,可以减轻master压力
  3. sentinel failover-timeout redis01 15000
    表示故障转移的超时时间

三台机都启动sentinel

redis-sentinel /usr/local/redis/conf/sentinel.conf
#查看sentinel信息,正常应该会显示一个主,两个从,3个哨兵服务
redis-cli -p 6800 info sentinel
  • 哨兵服务,会将主库,从库,哨兵数量及相关IP信息,记录在配置文件中,所以一旦启动哨兵服务,配置文件行数会被打乱
  • 若主库宕机,则哨兵服务自动将另一个从库启用为主库,更新主库的信息,但是指定6800端口去查看信息的时候,也只有主库信息会更新,从库仍然会显示为2,哨兵数量为3,这是这些信息已经记录哨兵配置文件中了

进行宕机故障转移测试

#在主库上宕机测试
redis-cli shutdown
#在从库上查看哨兵日志及新的哨兵信息
cat /data/redis.log
redis-cli -p 6800 sentinel

4 Sentinel的VIP漂移

在redis上建立一个VIP机制,当redis-master宕机,原本在master上的VIP就会漂移到新的master上,实现自动主库IP转移,避免代码的重复修改

这里使用redis-sentinel的一个参数client-reconfig-script,配置执行脚本,sentinel在做failover的会执行这个脚本,并且传递7个参数<master-name>,<role>,<state>,< from-ip>,<from-port>,<to-ip>,<to-port>,其中,<to-ip>是新主redis的IP地址,也就是每个节点的本地IP,可以在这个脚本里做VIP漂移

先在哨兵配置文件中加入一条参数

vim /usr/local/redis/conf/sentinel.conf
#该参数应该在170~175行之间
sentinel client-reconfig-script redis01 /data/redis/check_redis.sh

脚本配置

#脚本内容
#!/bin/bash

MASTER_IP=$6
LOCAL_IP="192.168.200.102"  #本地IP
VIP="192.168.200.244"       #VIP
NETMASK="24"                #子网掩码
INTERFACE="ens32"           #VIP附属的网卡

if [[ "${MASTER_IP}" == "${LOCAL_IP}" ]];then
    /usr/sbin/ip addr add ${VIP}/${NETMASK} dev ${INTERFACE}
    /usr/sbin/arping -q -c 3 -A ${VIP} -I ${INTERFACE}
    exit 0
else
    /usr/sbin/ip addr del ${VIP}/${NETMASK} dev ${INTERFACE}
    exit 0
fi

exit 1

修改配置文件权限

#执行权限
chmod +x check_redis.sh
#重启sentinel进程
ps -ef | grep sentinel
kill pid号
redis-sentinel /usr/local/redis/conf/sentinel.conf

VIP漂移测试
第一次需要手动给master服务器上,增加虚拟IP

#手动增加
ip addr 192.168.200.244/24 dev ens32
#使立即生效
arping -q -c 3 -A 192.168.200.244 -I ens32
#查看是否正常生效
ip addr

然后关掉master上的redis-server,查看漂移是否正常

#在master上
redis-cli shutdown
#在从库上查看主库漂移到哪了
redis-cli -p 6800 info sentinel
#再去新的主库上,查看是否增加了VIP,和新的主从复制信息
ip addr
redis-cli info replication
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值