Mycat–实践–21–Keepalived实现对haporxy的高可用
1、架构
2、HAProxy的安装
名称 | Ip | Port |
---|---|---|
HAProxy 主机 | 192.168.187.133 | 7071 |
HAProxy 主机 | 192.168.187.136 | 7071 |
参考地址的
https://blog.csdn.net/zhou920786312/article/details/122430302
5、安装HAProxy
3、Keepalived 实现对haproxy的高可用
3.1、机器
名称 | Ip | Port |
---|---|---|
Keepalived | 192.168.187.133 | |
Keepalived | 192.168.187.136 |
2.2、安装
参考以下链接中的2.2、源码包安装
https://blog.csdn.net/zhou920786312/article/details/119577721
3.3、配置文件
3.3.1、192.168.187.133 MASTER
位置
vim /etc/keepalived/keepalived.conf
内容
global_defs {
# 运行keepalived的机器的一个标识,多个节点标识可以相同,也可以不同
router_id haproxy-01
}
# 检查 HAProxy 服务是否存活 的脚本
vrrp_script chk_haproxy {
# 执行脚本的路径
script "/etc/keepalived/haproxy_check.sh"
# 调用脚本两次之间的间隔,默认为1秒
interval 2
# 根据该权重,动态调整调用该脚本选项的vrrp实例优先级,默认是2
# 当脚本返回值为0,权重大于0时,vrrp实例优先级增加;
# 当脚本返回值为非0,权重小于0时,vrrp实例优先级减小,其他情况优先级不变。
# 当该值为0时,不改变实例的优先级
weight 2 # 如果条件成立,权重+2
}
# 定义一个虚拟路由器的实例,实例名称VI_1
vrrp_instance VI_1 {
# 设置都是BACKUP节点, 由 priority 来控制同时启动情况下的默认主备,否则先启动的为主设备
state BACKUP
# 对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。
# 当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
interface ens32 #
# 虚拟路由ID,如果是一组虚拟路由就定义一个ID,如果是多组就要定义多个,
# 而且这个虚拟ID还是虚拟MAC最后一段地址的信息,取值范围0-255
# 同一个vrrp_instance的MASTER和BACKUP的vitrual_router_id 是一致的。
virtual_router_id 91
# 优先级,同一个vrrp_instance的MASTER优先级必须比BACKUP高。
priority 120
# 非抢占式配置
nopreempt
# MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒。
advert_int 1
# 验证authentication。包含验证类型和验证密码。类型主要有PASS、AH 两种,通常使用的类型为PASS.
# auth_pass 1111 据说AH 使用时有问题。验证密码为明文,同一vrrp 实例MASTER 与BACKUP 使用相同的密码才能正常通信。
authentication {
auth_type PASS
auth_pass 1111 # 真实生产,按需求对应该过来
}
# 追踪脚本,通常用于去执行上面的vrrp_script定义的脚本内容
track_script {
# 检查 HAProxy 服务是否存活
chk_haproxy
}
# 虚拟VIP地址,可以有多个地址,每个地址占一行,不需要子网掩码
# 同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
virtual_ipaddress {
192.168.187.137
}
}
3.3.2、192.168.187.136 BACKUP
位置
vim /etc/keepalived/keepalived.conf
内容
global_defs {
router_id haproxy-02
}
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 91
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.187.137
}
}
3.3.3、haproxy_check.sh
脚本要求(没有考虑脑裂情况)
haproxy 是部署在docker中,关于这个的启动,由docker来处理。
我们的脚本要求如下:
- 如果 haproxy 停止运行,就杀死本机的 keepalived 进程,
创建keepalived的日志文件目录
mkdir -p /usr/local/keepalived/log
编辑 haproxy_check.sh
vim /etc/keepalived/haproxy_check.sh
内容
#!/bin/bash
# keepalived 启动命令
START_HAPROXY="service keepalived start"
# keepalived 停止命令
STOP_HAPROXY="service keepalived stop"
# keepalived 日志文件
LOG_FILE="/usr/local/keepalived/log/haproxy-check.log"
containerId=`docker ps | grep haproxy | grep -v grep | awk '{print $1}'`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check haproxy status" >> $LOG_FILE
if [ $containerId == "" ];then
echo $STOP_HAPROXY >> $LOG_FILE
# 停止keepalived
$STOP_HAPROXY >> $LOG_FILE 2>&1
fi
给脚本赋执行权限
chmod +x /etc/keepalived/haproxy_check.sh
3.4、测试
启动 Keepalived
service keepalived start | restart