zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Keepalived Shell脚本来简单实现keepalived功能

shell 实现 简单 功能 脚本 Keepalived
2023-09-14 09:15:16 时间

(1)高可用架构主要是指两台(多台)服务器、网站、数据库之间的架构,当其中一台宕机或者异常,能够快速启用(切换)另外一台,保障门户网站、业务系统、数据库持续提供服务,防止业务单点故障。

(2)高可用不代表网站、数据库、业务系统不宕机,而表示网站、数据库、业务系统宕机时间比较短,能够快速解决或者恢复网站等。衡量网站的高可用通常使用9表示,例如网站可用率是99%、99.9%、99.999%。

基于SHELL编程脚本一键实现Nginx高可用,主要编程思路如下:

  1. 两台Nginx WEB服务器,引入VIP地址192.168.179.199
  2. 保障VIP 192.168.179.199同一时刻只能在一台Nginx服务器上;
  3. 一台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