设为首页 加入收藏

TOP

Keepalived+expect方式实现Redis主从高可用实际操作(一)
2018-10-06 21:34:54 】 浏览:207
Tags:Keepalived expect 方式 实现 Redis 主从 可用 实际操作

前言:


redis高可用有Sentinel、Cluster等多种方式,本文主要介绍keepalived方式。


keepalived常用的实现高可用方式是当检查到被监控进程或keepalived服务本身挂掉时触发切换,这种方式对于redis主从高可用会有一个问题:当主的keepalived挂掉时,此时无法触发keepalived里的notify_backup脚本,主的redis状态还是master;此时从服务器会接管vip并且redis状态由slave切换为master,这时就会有两个master,主从架构被破坏。为了解决该问题,在notify_master脚本使用expect工具,本文在主从发生切换时,切换为master的主机会触发notify_master脚本,该脚本中的expect工具会远程到对方主机执行slaveof命令,重新确定主从关系。


架构:



配置:


一、redis安装


redis安装有yum和编译两种方式,本文以编译方式安装,参考文档为官网安装文档


1.gcc安装


2.下载安装包 


3.解压编译


4.修改配置文件


主要配置修改如下:


5.制作启动服务


6.启动服务并加入开机启动


7.RedisDesktopManager管理工具


该工具为redis图形化管理工具


软件下载:链接: https://pan.baidu.com/s/1Q9k-zyhfTWbvjbHaZvafbw 提取码: 495t


连接设置:



连接后效果



二、redis主从复制及持久化


1.从服务器设置


redis主从复制很简单,只需要在从服务器配置文件新增一条配置即可


[root@redis-slave redis]# sed -i '$a slaveof 172.27.9.30 6379' /etc/redis/6379.conf


2.主从测试


2.1主机上写入值


查看从机redis键值:



2.2从机写入值


发现报错,处于slave状态redis无法写入。


3.持久化


redis持久化有RDB和AOF两种方式,默认持久化为RDB方式,关闭默认持久化只需要把默认配置注释就行:


三、keepalived安装配置


1.keepalived安装


2.keepalived配置


[root@redis-master ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
  router_id master      #router_id 机器标识,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到。
}
 
vrrp_script chk_redis {
  script "/etc/keepalived/redis-check.sh"
  interval 2    #健康检查周期
  weight 30    #优先级变化幅度
  fall 2        #尝试两次都成功才成功
  rise 2        #尝试两次都失败才失败
}
 
vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER              #设置lvs的状态,MASTER和BACKUP两种,必须大写
    interface ens33              #设置对外服务的接口
    virtual_router_id 100        #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
    priority 100              #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1              #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {          #设置验证类型和密码
        auth_type PASS        #主要有PASS和AH两种
        auth_pass 1111        #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
    }
    virtual_ipaddress {        #设置虚拟ip地址,可以设置多个,每行一个
        172.27.9.100
    }
    track_script {              #执行脚本chk_redis
        chk_redis
    }
   
notify_master "/etc/keepalived/redis-master.sh" #指定当切换为master时,执行的脚本
}


相比master,slave配置有3点不同:


为了避免主从间的来回切换,也可以设置nopreemt参数,开启非抢占式模式;不过当redis或者keepalived发生异常时都会触发各种告警,运维人员会及时介入处理。


3.启动并设置开机启动


[root@redis-master ~]# systemctl start keepalived
[root@redis-master ~]# systemctl enable keepalived


四、expect安装


expect是一个提供自动交互的工具,本文notify_master中的脚本会使用到。


五、高可用脚本


1.redis-check.sh脚本


该脚本为对redis状态检查


2.redis-master.sh脚本


该脚本为本文高可用切换的关键。


monitor为31的root密码;slave脚本的ip应改为172.27.9.30;该脚本为服务器切换为master时执行的脚本,首先会检查切换前与master的主从同步是否完成,然后利用expect工具跳到另一台服务器将其redis状态更改为slave。


3.exp.sh脚本


slave脚本中的ip为172.27.9.31;该脚本作用是跳到另

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇安装MySQL 8.0 遇到的问题及解决 下一篇事务的ACID特性及ANSI隔离级别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目