环境
host1 192.168.0.1 # 主机1
host2 192.168.0.2 # 主机2
serviceIP 192.168.0.3 # 服务IP 虚拟IP 浮动IP
规则:
谁先启动谁是master,绑定服务IP;
故障节点为master时,发生切换;
故障节点恢复后,不发生切换;
开始
yum install -y keepalived # 安装keepalived
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.`date +%Y%m%d_%H%M%S` # 备份配置文件
# 写入配置文件
cat << \EOF > /etc/keepalived/keepalived.conf
# node1
# 全局参数
global_defs {
# 启动keepalived时有警告
# Keepalived_vrrp: WARNING - default user 'keepalived_script' for script execution does not exist - please create.
# 添加下面2个参数
script_user root
enable_script_security
}
# 健康检查脚本,检查Haproxy状态,脚本返回0正常,返回非0失败,失败后节点降级 weight -15
# 名字自定义
vrrp_script maint-checkHaproxy {
script "/etc/keepalived/checkHaproxy.sh"
interval 3 # 检查间隔3秒
weight -15 # 降低本节点权重
fall 2 # 2次失败算失败
rise 2 # 2次成功算成功
timeout 2 # 超时
}
# 实例1,名字自定义
vrrp_instance Vs_1 {
state BACKUP # 定义节点主/备,主MASTER,备BACKUP,这里2个节点均为BACKUP
interface ens16 # 服务IP绑定的网卡
virtual_router_id 32 # 集群号,所有节点需要相同
priority 100 # 权重,weight -15 降低权重值,2个节点权重一致,降低权重后会发生切换
advert_int 1 # 检测间隔
# 抢占模式,(nopreempt非抢占模式),配置为抢占模式时,当节点权重降低时,另外一个高权重节点会抢占服务,发生切换;
# 如果为非抢占模式,上面配置的检查脚本在检查到服务失败后,降低权重,但是不会发生切换。
!nopreempt
authentication {
auth_type PASS
auth_pass 1717 # 各节点密码一致
}
# 单播模式
# keepalived在组播模式下所有的信息都会向224.0.0.18的组播地址发送,产生众多的无用信息,并且会产生干扰和冲突,所以需要改为单播。
# 这是一种安全的方法,避免局域网内有大量的keepalived造成虚拟路由id的冲突。
# 单薄模式需要关闭vrrp_strict,严格遵守vrrp协议这个选项
# 需要在VIP实例配置段加入单播的源地址和目标地址
# 在全局配置中global_defs那一段,不能配置vrrp_strict参数,如果有需注释。
# 否则会因为不是组播而无法启动keepalived
unicast_src_ip 192.168.0.1 # 本端,源地址
unicast_peer {
192.168.0.2 # 对端,目标地址
}
virtual_ipaddress {
192.168.0.3/24 dev ens16 # 服务IP
}
track_script {
maint-checkHaproxy # 健康检查脚本,与上面同名;如果不配置也可以,就不检查状态。
}
track_interface {
ens16 # 检查网卡健康
}
}
EOF
# 节点2配置priority 100权重一致;
# 单播模式那里需要修改相应IP地址;
# 其他配置相同,节点2同样为BACKUP。
# /etc/keepalived/checkHaproxy.sh 健康检查脚本,返回0或者其他
# 节点2需修改对应地址
cat << \EOF > /etc/keepalived/checkHaproxy.sh
#!/bin/bash
/usr/bin/curl -I http://192.168.0.1:1080 &>/dev/null
exit $?
EOF
systemctl start keepalived
systemctl enable keepalived
配合HAproxy 使用
参考文档