环境
VIP=192.168.100.100
主机 | IP |
---|---|
nginx1 | 192.168.100.150 |
nginx2 | 192.168.100.151 |
部署
安装nginx(略)
#两个nginx节点安装keepalive服务
yum -y install keepalived
systemctl enable keepalived
修改keepalive配置文件
nginx1
[root@nginx1 ~]> cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 10
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state MASTER
# 注意网卡名
interface ens33
# lan口IP地址
mcast_src_ip 192.168.100.150
virtual_router_id 51
priority 100
#nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass BLUEKING_NGINX_HA
}
virtual_ipaddress {
192.168.100.100/24
}
track_script {
chk_nginx
}
}
nginx2
[root@kafka02 ~]> cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 10
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
# 注意网卡名
interface ens33
mcast_src_ip 192.168.100.151
virtual_router_id 51
priority 98
#nopreempt
advert_int 2
authentication {
auth_type PASS
auth_pass BLUEKING_NGINX_HA
}
virtual_ipaddress {
192.168.100.100/24
}
track_script {
chk_nginx
}
}
所有节点编写脚本文件
/etc/keepalived/check_nginx.sh
#!/bin/bash
process_name="nginx"
process_abs_path="/usr/local/nginx1/sbin/nginx"
function is_nginx_running() {
process_info=$(ps --no-header -C $process_name -o ppid,pid,args | awk '{printf $1 "|" $2 "|" ; for (i=3; i<=NF; i++) { printf "%s ", $i };printf "\n"}' | grep master)
if [[ -z "$process_info" ]]; then
return 1
else
process_pids=($(echo "$process_info" | awk -F'|' '{print $2}'))
for _pid in "${process_pids[@]}"; do
abs_path=$(readlink -f /proc/$_pid/exe)
if [ "$abs_path" == "$(readlink -f "$process_abs_path")" ]; then
return 0
fi
done
return 2
fi
}
err=0
for k in $(seq 1 3); do
is_nginx_running
if [[ $? != "0" ]]; then
err=$((err + 1))
sleep 1
else
err=0
break
fi
done
if [[ $err != "0" ]]; then
exit 1 # 返回失败状态
else
exit 0
fi
EOF
测试
停止1号节点的nginx,验证故障转移。
[root@kafka01 keepalived]> systemctl stop nginx
[root@kafka01 keepalived]> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:84:bb:4d brd ff:ff:ff:ff:ff:ff
altname enp2s1
inet 192.168.100.150/24 brd 192.168.100.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe84:bb4d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
节点2