内容简介:实现的原理
环境介绍:
实现的原理
在 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
以上所述就是小编给大家介绍的《Redis主从+sentinel(哨兵)+keepalived》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 搭建Redis主从+哨兵模式
- redis的主从复制,哨兵值守
- Redis集群主从复制及哨兵模式实现
- Redis全方位讲解--主从复制和哨兵模式
- 《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRU
- Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。