环境介绍:
实现的原理
在master和backup服务器分别安装哨兵和keepalived,master的优先级为100,backup的优先级为99,在salve服务器上配置vrrp_script检查脚本规则,检查slave当前的角色状态,一旦slave的redis角色状态为master,就把slave的优先级加2变为101,使其获得vip的权限;
当master的redis服务挂掉后,哨兵会将slave提升为新的master,slave检查角色状态为master时将优先级加2获得vip,当原来master的redis服务起来后哨兵将其作为slave加入到主从复制
当变为master的slave节点上redis服务挂掉后,哨兵会将redis的master设置为原来的master节点,vrrp_script检查自己的redis不是master时,将优先级减2变为99,原来的master优先级比slave优先级高,原来的master获得vip权限
以下操作主从服务器步骤一样,这里只安装一次
一、安装redis和哨兵服务
1、下载redis服务软件包到服务器,解压后并编译安装(主从步骤一样,这里只安装一次)
[root@centos01 /]# tar xzvf redis-3.2.9.tar.gz
[root@centos01 /]# cd redis-3.2.9/
[root@centos01 redis-3.2.9]# make && make install
[root@centos01 redis-3.2.9]# ./utils/install_server.sh
Welcome to the redis service installer ##一路回车
Installation successful!
2、修改redis配置文件,修改为后台运行、监听所有地址(其他参数按需修改),重启redis服务
[root@centos01 redis-3.2.9]# vim /etc/redis/6379.conf
bind 0.0.0.0
daemonize yes
[root@centos01 redis-3.2.9]# /etc/init.d/redis_6379 restart
3、复制哨兵的配置文件和启动文件到redis安装目录
[root@centos01 redis-3.2.9]# cp sentinel.conf /etc/redis/
[root@centos01 redis-3.2.9]# cp src/redis-sentinel /etc/redis/
二、设置redis主从复制,并配置哨兵监控
1、登录slave-redis服务器,将master设置为192.168.2.225
[root@slave /]# redis-cli
127.0.0.1:6379> SLAVEOF 192.168.2.225 6379 ##设置master为2.225
127.0.0.1:6379> INFO Replication
3、修改master和slave服务器的sentinel.conf配置文件(master和slave配置一致)
##修改master的哨兵文件
[root@master /]# cd /etc/redis/
[root@master /]# vim /etc/redis/sentinel.conf
port 26379
dir "/tmp"
sentinel monitor mymaster 192.168.2.225 6379 1 #(指定监控的master地址和端口号,1表示多个sentinel同意才进行主从切换)
sentinel down-after-milliseconds mymaster 4000 #(超过多少毫秒连接不到master认定为master死掉)
sentinel failover-timeout mymaster 18000 #(当主从切换多久后认为主从切换失败)
daemonize yes #(后台运行)
logfile "/var/log/redis_sentinel.log" #(日志文件保存路径)
[root@master redis]# ./redis-sentinel sentinel.conf #启动哨兵服务
三、配置keepalived实现高可用
1、使用yum方式安装keepalived软件包(master和slave都安装)
[root@master redis]# yum install -y keepalived
[root@master redis]# ./redis-sentinel sentinel.conf #启动哨兵服务
2、修改keepalived配置文件
Master配置文件内容
! Configuration File for keepalived
global_defs {
router_id redis-225 ##设备名称
}
vrrp_instance VI_redis {
state MASTER ##当前设备为master
interface eth0 ##vip绑定的网卡
virtual_router_id 79 ##备份组id,同一备份组要一致
priority 100 ##优先级,优先级高的成为master
advert_int 3 ##每多少秒进行一次健康检查
authentication {
auth_type PASS
auth_pass redis
}
virtual_ipaddress {
192.168.2.253 dev eth0 label eth0:1 ##vip地址并设置一个网卡别名
}
}
BACKUP配置文件内容
! Configuration File for keepalived
global_defs {
router_id redis-224
}
vrrp_script chkmaster {
script "/etc/keepalived/scripts/chkmaster.sh" #检查当前redis是否为master
interval 3 #每3秒检查一次
weight 2 #当本机为master检测结果返回1,将优先级加2
}
vrrp_instance VI_redis {
state BACKUP #本机的状态信息
interface eth0 #vip绑定的网卡
virtual_router_id 79 ##备份组id,同一备份组要一致
priority 99 ##优先级,优先级高的成为master
advert_int 3 ##每多少秒进行一次健康检查
authentication {
auth_type PASS
auth_pass redis
}
virtual_ipaddress {
192.168.2.253 dev eth0 label eth0:1
}
track_script { ##调用状态检查
chkmaster
}
}
状态检查脚本内容:
#!/bin/bash
STATUS=`/usr/local/bin/redis-cli info | grep role:master | wc -l`
echo $STATUS
if [ "$STATUS" -eq 0 ];then
exit 1
else
exit 0
fi
验证结果:
1. 关闭master的redis服务程序,查看vip和redis主服务器切换到slave
2. 开启master的redis服务程序,redis服务以slave身份加入到slave服务器中
3. 关闭slave服务器的redis服务,查看vip和redis主服务器切换到master
4. 开启slave的redis服务程序,redis服务以slave身份加入到master服务器中
遇到的一个主从不切换的坑
停掉master主从切换日志提示此错误
解决办法:
1)如果redis实例没有配置
protected-mode yes
bind 192.168.98.136
则在sentinel 配置文件加上
protected-mode no
即可
2)如果redis实例有配置
protected-mode yes
bind 192.168.98.136
则在sentinel 配置文件加上
protected-mode yes
bind 192.168.98.136
转载于:https://blog.51cto.com/13777759/2407578