Keepalived Shell脚本来简单实现keepalived功能
(1)高可用架构主要是指两台(多台)服务器、网站、数据库之间的架构,当其中一台宕机或者异常,能够快速启用(切换)另外一台,保障门户网站、业务系统、数据库持续提供服务,防止业务单点故障。
(2)高可用不代表网站、数据库、业务系统不宕机,而表示网站、数据库、业务系统宕机时间比较短,能够快速解决或者恢复网站等。衡量网站的高可用通常使用9表示,例如网站可用率是99%、99.9%、99.999%。
基于SHELL编程脚本一键实现Nginx高可用,主要编程思路如下:
- 两台Nginx WEB服务器,引入VIP地址192.168.179.199
- 保障VIP 192.168.179.199同一时刻只能在一台Nginx服务器上;
- 一台Nginx宕机,可以自动切换至另外一台Nginx提供服务。
ifconfig命令为ens33网卡添加子网卡,该网卡IP地址 为VIP地址
[root@real-server2 ~]# ip a
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a7:ff:f7 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.104/24 brd 192.168.179.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::831c:6df1:a633:742a/64 scope link
valid_lft forever preferred_lft forever
#为ens33网卡创建了一个子网卡接口,该子网卡的IP地址为VIP地址,为Nginx提供对外服务
[root@real-server2 ~]# ifconfig ens32:1 192.168.179.199/24
[root@real-server2 ~]# ip a
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a7:ff:f7 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.104/24 brd 192.168.179.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.179.199/24 brd 192.168.179.255 scope global secondary ens32:1
valid_lft forever preferred_lft forever
inet6 fe80::831c:6df1:a633:742a/64 scope link
valid_lft forever preferred_lft forever
#将子网卡接口down掉
[root@real-server2 ~]# ifconfig ens32:1 down
[root@real-server2 ~]# ip a
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a7:ff:f7 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.104/24 brd 192.168.179.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::831c:6df1:a633:742a/64 scope link
valid_lft forever preferred_lft forever
shell脚本如下
[root@real-server2 ~]# cat vip.sh
#!/bin/bash
vip_addr="192.168.179.199"
while true
do
nginx_status=$(ps -ef | grep nginx | grep -v grep | wc -l)
if [ $nginx_status -ne 0 ];then
ping -c 4 $ip_addr
if [ $? -ne 0 ];then
ifconfig ens32:1 $vip_addr/24
fi
else
ifconfig ens32:1 down
fi
sleep 5s
done
(1)使用while死循环每隔5S来持续监控Nginx状态
(2)Nginx服务正常,并且ping不同VIP,那么创建子接口并且子接口绑定VIP对外提供服务
(3)Nginx服务不正常将子接口down掉,不对外提供服务
(4)该脚本要在两台Nginx上运行,那个脚本先启动先抢到VIP对外提供服务
[root@real-server2 ~]# nohup sh vip.sh &
[1] 49462
[root@real-server2 ~]# nohup: ignoring input and appending output to ?.ohup.out?
[root@real-server2 ~]# ip a
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:a7:ff:f7 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.104/24 brd 192.168.179.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.179.199/24 brd 192.168.179.255 scope global secondary ens32:1
valid_lft forever preferred_lft forever
inet6 fe80::831c:6df1:a633:742a/64 scope link
valid_lft forever preferred_lft forever
#server2先运行脚本先抢到VIP,现在杀掉Nginx进程
[root@real-server2 ~]# pkill nginx
#可以看到VIP飘到了server1上面
[root@real-server1 ~]# ip a
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:61:90:c1 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.103/24 brd 192.168.179.255 scope global ens32
valid_lft forever preferred_lft forever
inet 192.168.179.199/24 brd 192.168.179.255 scope global secondary ens32:1
valid_lft forever preferred_lft forever
inet6 fe80::f54d:5639:6237:2d0e/64 scope link
valid_lft forever preferred_lft forever
目录 返回
首页