警告
本文最后更新于 2020-11-19,文中内容可能已过时。
安装前需检查反项代理是否正常
yum install keepalived
配置文件说明 /etc/keepalived/keepalived.conf
主备节点配置基本一致,需修改的仅有 router_id , state ,priority
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# GLOBAL CONFIGURATION # 全局配置
仅保留router_id 即可, router_id 为高可用集群成员ID,ID 唯一
# VRRPD CONFIGURATION # vrrpd 配置
vrrp_instance VI_1 { # 定义实例信息,同主备节点实例标识相同(唯一)
state MASTER # 定义实例中主备状态角色(MASTER/BACKUP),仅为标识而已
interface eth1 # 设置主备服务器虚拟ip放置网卡位置
virtual_router_id 51 # 虚拟路由ID标识,不同实例不同,各个主备节点相同(0-255)
priority 100 # 设置抢占优先级,数值越大越优先(1-254)
advert_int 1 # 主备通讯时间间隔(s)
authentication { # 主备间通过认证建立连接
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 定义主备服务器之间使用的虚拟IP地址信息(VIP),一般来说一个实例对应一个服务,一个服务监听配置的固定VIP
192.16.10.5/24 dev eth1 label eth1:1
}
}
# LVS CONFIGURATION # 相当于nginx的部分
|
脑裂:只要备服务器收不到主的组播包,备就会成为主,而主资源未释放
原因
- 防火墙
- 多节点间的网络出现故障
- virtual_router_id 配置数值不正确
解决方案
一般来说,只要备节点出现VIP就表示不正常,但也有可能是正常的主备切换,如果不是正常的切换,
那么可能是当前节点故障或者当前节点与主节点的通信问题,可以建立一个脚本周期性检查当前节点
与网关的连接性,不通,则应该是自身问题(写个循环ping网关,不通关闭keepalive,通过打开keepalive)
建立nginx与keepalived的关联
nginx 存活检测(示例,实际可能需要更为详细的检测脚本) ,完成后需要修正keepalive.service
在nginx.service
后启动
1
2
3
4
|
#!/bin/bash
systemctl is-active nginx.service >& /dev/null || {
systemctl stop keepalived.service
}
|
修改配置 /etc/keepalived/keepalived.conf
1
2
3
4
5
6
7
8
9
|
vrrp_script check_web { # 函数名(需放到实例与全局之间)
script "/opt/sh/check_nginx_status.sh" # 监控脚本(需有执行权限)
interval 2 # 检查时间间隔(s)
# weight 2 # 用于与执行结果判断而调整优先级的
}
track_script { # 调用配置的函数脚本(放到实例配置里面)
check_web
}
|
双主(或互为主备)
实现就是在两个节点中在添加一个实例,修改state,priority,和VIP