keepalived常用的实现高可用方式是当检查到被监控进程或keepalived服务本身挂掉时触发切换,这种方式对于redis主从高可用会有一个问题:当主的keepalived挂掉时,此时无法触发keepalived里的notify_backup脚本,主的redis状态还是master;此时从服务器会接管vip并且redis状态由slave切换为master,这时就会有两个master,主从架构被破坏。为了解决该问题,在notify_master脚本使用expect工具,本文在主从发生切换时,切换为master的主机会触发notify_master脚本,该脚本中的expect工具会远程到对方主机执行slaveof命令,重新确定主从关系。
架构:
配置:
hostname ip os redis版本 keepalived版本 备注redis-master 172.27.9.30 CentOS7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux
redis-slave 172.27.9.31 Centos7.3.1611 4.0.10 1.3.5 关闭防火墙和selinux
一、redis安装
redis安装有yum和编译两种方式,本文以编译方式安装,参考文档为官网安装文档
1.gcc安装
[root@redis-master ~]# yum -y install gcc
2.下载安装包
[root@redis-master ~]# wget
3.解压编译
[root@redis-master ~]# tar xvzf redis-stable.tar.gz
[root@redis-master ~]# cd redis-stable
[root@redis-master redis-stable]# make
[root@redis-master redis-stable]# make install
4.修改配置文件
[root@redis-master redis-stable]# mkdir /etc/redis[root@redis-master redis-stable]# mkdir -p /var/redis/6379
[root@redis-master redis-stable]# cp redis.conf /etc/redis/6379.conf
[root@redis-master redis-stable]# cd /etc/redis/
[root@redis-master redis]# cp 6379.conf 6379.conf.bak
[root@redis-master redis]# grep -Ev '^$|#' 6379.conf.bak > 6379.conf
主要配置修改如下:
#bind 127.0.0.1
protected-mode no
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis_6379.log
dir /var/redis/6379
5.制作启动服务
[root@redis-master redis-stable]# cp utils/redis_init_script /etc/init.d/redis_6379
6.启动服务并加入开机启动
[root@redis-master redis]# service redis_6379 start
[root@redis-master redis]# chkconfig redis_6379 on
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主机上写入值
[root@redis-master ~]# redis-cli set test-key abc
OK
查看从机redis键值:
2.2从机写入值
[root@redis-slave redis]# redis-cli set test-key 123
(error) READONLY You can't write against a read only slave.
发现报错,处于slave状态redis无法写入。
3.持久化
redis持久化有RDB和AOF两种方式,默认持久化为RDB方式,关闭默认持久化只需要把默认配置注释就行:
#save 900 1
#save 300 10
#save 60 10000
三、keepalived安装配置
1.keepalived安装
[root@redis-master ~]# yum -y install 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点不同:
router_id slave
state BACKUP
priority 90