前言:mysql 分布式尤其是主-主 复制架构中,也是实现了读写分离的,如果有一个主master 挂掉了,那么如何让用户无感知的将请求打到另外一个master上?
keepalived 插件的IP漂移就可以实现。
1、keepalived 原理
master-master架构中,分别对应一个keepalived,只有主的那个master才能虚拟出一个ip提供给外界,而从的那个master是不能虚拟出ip的。这个ip是一直存活着的的。
当主的那个master挂掉之后,keepalived监控到这个情况,会通知从的那个keepalived,此时从keepalived也可以虚拟出一个ip了。这个ip还是原来那个,所以相对外界来说,
内部是没有发生变化的。
2、keepalived 安装
keepalived yum安装
预先安装好epel-release源
yum list installed|grep epel-release
查找可用安装的keepalived源
yum search keepalived
命令进行安装
yum install keepalived -y
启动keepalived服务
systemctl start keepalived
使用yum安装的会有一个默认配置文件模板
路径为/etc/keepalived/keepalived.conf
yum install ipvsadm -y
3、配置
keepalived启动是需要2个配置文件的:
# 配置文件1 keepalived.conf
! Configuration File for keepalived
# 简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;
global_defs {
# notificationd LVS_DEVEL
}
# 预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;
vrrp_script chk_haproxy {
script "/etc/keepalived/check_mysql.sh" # 具体脚本路径
interval 2 # 脚本循环运行间隔
}
# VRRP 虚拟路有冗余协议配置
vrrp_instance VI_1 {
state MASTER # MASTER表示是一台主设备,BACKUP表示为备用设备
nopreempt # 开启不抢占
interface ens33 # 指定VIP需要绑定的物理网卡
virtual_router_id 51 # VRID 虚拟路由标识,也叫做分组名称,该组内的设备需要相同
priority 100 # 定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台
advert_int 1 # 生存监测时的组播信息发送间隔,组内一致
authentication { # 设置验证信息,组内一致
auth_type PASS # 有PASS和AH两种,常用PASS
auth_pass 1111 # 密码
}
virtual_ipaddress { # 指定VIP地址,组内一致,可以设置多个IP
192.168.198.200
}
track_script {
chk_haproxy
}
#notify_backup "/etc/init.d/haproxy restart" #表示当切换到backup状态时,要执行的脚本
#notify_fault "/etc/init.d/haproxy stop" #故障时执行的脚本
}
# 配置文件2 check_mysql.sh
mysql -h 192.168.198.3 -u root -p123456 -P 3307 -e "show status;" >/dev/null 2>&1
if [ $? == 0 ]
then
echo " $host mysql login successfully "
exit 0
else
echo " mysql login faild"
killall keepalived
exit 2
fi
4、实际操作
进入到master 主服务器上,查看keepalived状态
这里可以看到keepalived还是未启动的。
启动keepalived,执行一下命令:
$ systemctl start keepalived.service
keepalived 启动是需要脚本的,所以试了下上面的没有成功,额翻车了。执行以下语句再ps看下就启动成功了。(很奇怪,不知道什么原因)
$ systemctl start keepalived
上次翻车是因为配置文件1中的interface未和具体网卡名称匹配上,正常启动后查看状态是这样的:
[root@192 keepalived]# ps -ef|grep keepalived
root 3825 1 0 08:25 ? 00:00:00 /usr/sbin/keepalived -D
root 3826 3825 0 08:25 ? 00:00:00 /usr/sbin/keepalived -D
root 3827 3825 0 08:25 ? 00:00:00 /usr/sbin/keepalived -D
root 3830 3687 0 08:25 pts/0 00:00:00 grep --color=auto keepalived