Keepalived Shell脚本来简单实现keepalived功能
shell 实现 简单 功能 脚本 Keepalived
2023-09-14 09:15:16 时间
(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
相关文章
- 【重点】Shell入门教程:流程控制(3)条件判断式的真假值
- Linux纯Shell实现DNSPod动态域名
- Linux Shell脚本自动化编程实战- shell函数
- hbase:用于实现版本文件及配置同步的两个shell脚本
- Linux Shell脚本自动化编程实战- shell内置命令 break、continue
- VMware ESXi 6.7主机启用 Shell 及 SSH 服务
- 获取shell脚本自身所在目录的Shell脚本分享
- shell实现洗牌随机
- Keepalived Shell脚本来简单实现keepalived功能
- shell编程
- 【编程实践】Linux Shell 编程:使用 循环和递归 实现斐波那契数列代码
- Shell中EOF内容转义
- 012-Shell 提示确认(Y / N,YES / NO)
- 004-Shell 基本运算符、算术运算符、关系运算符、布尔运算符、辑运算符、字符串运算符、文件测试运算符
- 20.第六章 Shell脚本编程基础入门 -- shell 脚本语言的基本用法(三)
- 三白话经典算法系列 Shell排序实现
- 自己动手写shell之chgrp,chown,chmod
- 反弹shell的实现方式和检测方法——常规攻击可以直接检测,pipe方式需要结合关联分析(图关联最好),如果含有混淆脚本,需要无文件攻击检测
- shell变量替换 SHELL字符串处理技巧(${}、##、%%)
- Jenkins调用shell命令实现持续集成(四)