1. 安装keepalived
yum -y install keepalived yum源直接安装
systemctl enable keepalived 设置keepalived开机自启动
2. 设置时间同步,确保各节点时间一致
dnf -y install chrony 安装服务,已安装忽略
systemctl enable chronyd 开机自启动服务
备节点:
vim /etc/chrony.conf
将第一行替换为:
server 192.168.0.220 iburst 192.168.0.220 为主节点ip
主节点:
vim /etc/chrony.conf
添加
server 192.168.0.220 iburst 设置服务器
allow 192.168.0.0/16 设置允许同步网段
local stratum 10 即使自己未能通过网络时间服务器同步到时间,也允许将本地时间作为标准时间授时给其它客户端
分别重启服务,完成时间同步。
3. 关闭防火墙或添加规则,关闭selinxu。
4. 安装killall。dnf -y install psmisc
5. 配置keepalived 配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
router_id node1 #主机名,主备保持区别
#vrrp_mcast_group4 224.0.0.18 #设置组播地址,默认224.0.0.18
}
vrrp_script nginx_check { #定义脚本
script "killall -0 nginx " #脚本内容,可写脚本位置
interval 1 #1秒钟执行一次
weight -10 #若执行失败,减权,影响当前优先级
rise 2 #正确两次
fall 2 #失败两次,开始减权
}
vrrp_instance VI_1 {
state MASTER #设置主备,备为BACKUP
# preempt #抢占模式,nopreempt非抢占模式,默认为抢占。
# preempt_delay 300 #抢占模式,节点上线后触发新选举操作的延时
interface ens32 #设置虚拟路由器使用的网卡
virtual_router_id 51 #虚拟路由器id,主备需保持一直
priority 100 #优先级,值越大优先级越高。主高备低
advert_int 1 #vrrp通告时间间隔,默认1s
#track_ineterface{
# ens32
# }
track_script {
nginx_check #执行前边定义的脚本
}
notify_master "/etc/keepalived/start_nginx.sh" #设置当前节点成为主节点执行的脚本,一般为启动服务,也可加入邮件提醒等。
notify_backup "/etc/keepalived/start_nginx.sh"
authentication {
auth_type PASS #简单密码认证
auth_pass 1111 #随机字符串,不超过8位,主备节点一致即可
}
virtual_ipaddress {
192.168.0.239 #vip设置
}
}
主:
global_defs {
router_id node1
}
vrrp_script nginx_check {
script "killall -0 nginx"
interval 1
weight -10
rise 2
fall 2
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
track_interface {
ens32
}
notify_master "/etc/keepalived/start_nginx.sh"
notify_backup "/etc/keepalived/start_nginx.sh"
track_script {
nginx_check
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.239/24
}
}
备:
global_defs {
router_id node2
}
vrrp_script nginx_check {
script "killall -0 nginx"
interval 1
weight -10
rise 2
fall 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 96
advert_int 1
track_interface {
ens32
}
notify_master "/etc/keepalived/start_nginx.sh"
notify_backup "/etc/keepalived/start_nginx.sh"
track_script {
nginx_check
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.239
}
}
start_nginx.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
6. 测试:
主节点为220,备节点为221。优先级分别为100,96.nginx服务掉会减去10.抢占模式。
此时两台节点均无任何服务,
直接启动主节点keepalived
此时keepalived启动,执行脚本,启动nginx,成为主节点,并向组播地址通告优先级等。
备机启动keepalived
备节点nginx,keepalived都已启动,并成为备节点。
此时讲主节点nginx停掉
日志显示,主节点执行脚本失败返回值为1,优先级变为90,此时收到通报,221优先级为96,节点变为BACKUP,REMOVING VIPS。
抓包可看到组播地址中优先级的变化。
备节点日志:
主节点变为备节点自动执行脚本启动nginx,监测脚本执行成功,优先级变为100,抢占回主节点,变为MASTER.:
7. 隐患
检测脚本检测到nginx进程便不会转移vip,但nginx有多个进程,意味着若某一个或若干个进程挂掉,并保留最少一个进程,检测脚本便检测不出,无法自动转移vip。
心跳脑裂问题。可根据具体情况,写入脚本,周期自身 ping 网关,若不同,则干掉自身keepalived。或在BACKUP节点监测,若备节点变为主节点时,ping 网关,若不通则干掉自己,通,则认定自己没有问题。