Keepalived的作用是检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其它服务器代替该服务器的工作,当服务器工作 正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
应用场景 keepalived 针对 集群A和集群B,当集群A的管理节点宕机后,让集群B的管理节点上位
环境部署 1.安装扩展yum install gcc gcc-c++ openssl openssl-devel –y2.下载安装包
wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz3.解压并安装
tar -zxvf keepalived-1.2.18.tar.gz ./configure --prefix=/usr/local/keepalived make && make install4.配置keepalived配置文件目录
mkdir /etc/keepalived5.复制配置文件到创建的目录
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/6.配置Linux上的keepalived服务
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/ #如果需要可以添加开机自启 chkconfig keepalived on7.配置/etc/keepalived/keepalived.conf 主节点
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_haproxy {
# 检测 haproxy 状态的脚本路径
script "/etc/keepalived/check.sh"
# 检测时间间隔
interval 2
# 如果条件成立,权重+2
weight 2
}
#VRRP虚拟路由冗余协议配置
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 79
priority 100
advert_int 1
nopreempt
#设置验证信息,组内一致
authentication {
auth_type PASS
auth_pass 1234
}
#指定VIP地址,组内一致,可以设置多个IP,但是不能存在
virtual_ipaddress {
192.168.238.161
}
#使用在这个域中使用预先定义的脚本,上面定义的
track_script {
chk_haproxy
}
#表示当切换到master状态时,要执行的脚本
notify_master "/docker/haproxy-master/script/notify.sh master"
#表示当切换到backup状态时,要执行的脚本
notify_backup "/docker/haproxy-master/script/notify.sh backup"
#表示切换出现故障时要执行的脚本
notify_fault "/docker/haproxy-master/script/notify.sh fault"
}
从节点
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_haproxy {
# 检测 haproxy 状态的脚本路径
script "/etc/keepalived/check.sh"
# 检测时间间隔
interval 2
# 如果条件成立,权重+2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 79
priority 80
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.238.161
}
track_script {
chk_haproxy
}
#表示当切换到master状态时,要执行的脚本
notify_master "/docker/haproxy-slave/script/notify.sh master"
#表示当切换到backup状态时,要执行的脚本
notify_backup "/docker/haproxy-slave/script/notify.sh backup"
#表示切换出现故障时要执行的脚本
notify_fault "/docker/haproxy-slave/script/notify.sh fault"
}
创建notify.sh (执行权限 chmod +x notify.sh)
#!/bin/bash
#
case "$1" in
master)
#这里增加判断,进程存在就不执行启动了
if [ $(ps -C haproxy --no-header | wc -l) -ne 0 ]; then
docker start haproxy-master
echo 'success: 已启动haproxy'
exit 0
fi
echo 'success: haproxy 进程已经存在'
exit 0
;;
backup)
docker restart haproxy-master
echo 'success: haproxy 重启成功'
exit 0
;;
fault)
docker stop haproxy-master
echo 'success: haproxy 已停止'
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
检测haproxy有没有发生故障,发生故障则将keepalived停掉,让出vip
vim /etc/keepalived/check.sh
#!/bin/bash
#
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
service keepalived stop
fi
添加执行权限
chmod +x /etc/keepalived/check.sh
启动keepalived
service keepalived start
查看网卡信息
ip a|grep 161
查看keepalived日志
journalctl -u keepalived journalctl -ex8.本地连接
mysql -uroot -proot -P13306 -h192.168.48.128 -e "show variables like 'server_id';"



