KeepAlived + Nginx 高可用
创始人
2025-05-31 10:26:21
0

KeepAlived + Nginx 高可用

主机系统VIPIP
Master01Ubuntu 22.04192.168.79.155192.168.79.177
Worker01Ubuntu 22.04192.168.79.155192.168.79.180
Worker02Ubuntu 22.04192.168.79.155192.168.79.181

Master01

设置hostname

$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 master01
$ cat /etc/hostname 
master01

安装 keepalived

$ sudo apt install keepalived

配置检测 nginx 脚本

# 检测脚本,nginx如果不在存活,则尝试启动
# 如果失败,则停止keepalived 服务
# echo ${password of the user: tester} and auto input password
$ cat /home/tester/app/keepalived_script/keepalived_check_list.sh
#!/bin/bashnginxpid=$(ps -C nginx --no-header | wc -l)
#1.判断Nginx是否存活,如果不存活则尝试启动Nginx
if [ $nginxpid -eq 0 ];thenecho tester | sudo -S service nginx start    sleep 3#2.等待3秒后再次获取一次Nginx状态nginxpid=$(ps -C nginx --no-header | wc -l) #3.再次进行判断, 如nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本  if [ $nginxpid -eq 0 ];thenecho tester | sudo -S service keepalived stopfi
fi
设置此脚本权限
$ sudo chmod -R 755 /home/tester/app/keepalived_script/keepalived_check_list.sh

keepalived配置文件

$ cat /etc/keepalived/keepalived.conf
# 主要由global_defs、vrrp_instance和virtual_server三个模块构成。
# 此处忽略 virtual_server
global_defs {notification_email {99492997@qq.com}notification_email_from 99492997@qq.comsmtp_server smtp.exmail.qq.comsmtp_connect_timeout 30#标识信息,master/workerouter_id lb_4_test_master01
}vrrp_script check_and_try_suvive_nginx {script "/home/tester/app/keepalived_script/keepalived_check_list.sh"# 间隔5sinterval 5
}vrrp_instance Tester_Ver_01 {#角色是master,worker是BACKUPstate MASTER    #vip 绑定端口,通过 ip addr 查看interface ens33  #master 和 worker在同一个虚拟路由里,id 号必须相同;virtual_router_id 50  #优先级,最大的值为master;可设置当前物理节点在此虚拟路由器中的优先级,优先级取值范围为1-254,值越大优先级越高,每个keepalived节点取值不同priority 200            #心跳间隔时间advert_int 1            authentication {#auth_type为认证类型,可选择AH和PASS两种,AH为IPSC互联网安全协议认证,PASS为简单密码认证,推荐PASS认证auth_type PASS#auth_pass为预共享秘钥设置,仅前8位有效,同一虚拟路由器的多个keepalived节点auth_pass值必须保持一致      auth_pass 123456}virtual_ipaddress {#虚拟ip,外部访问地址192.168.79.100            }track_script {check_and_try_suvive_nginx }
}

VIP 是否成功设置

$ ip addr show ens33
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:c2:0c:cd brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.79.177/24 brd 192.168.79.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec2:ccd/64 scope link valid_lft forever preferred_lft forever
$ sudo service keepalived start
$ ip addr show ens33
2: ens33:  mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:c2:0c:cd brd ff:ff:ff:ff:ff:ffaltname enp2s1inet 192.168.79.177/24 brd 192.168.79.255 scope global ens33valid_lft forever preferred_lft forever# 100 已加入inet 192.168.79.100/32 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fec2:ccd/64 scope link valid_lft forever preferred_lft forever

安装 nginx

$ sudo apt install nginx
# 更新内容
$ cat /var/www/html/index.nginx-debian.html
192.168.79.177
$ cat /etc/nginx/nginx.conf 
# 指定用户启动
user tester;
...

Work01

设置hostname

$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 worker01
$ cat /etc/hostname 
worker01

安装 keepalived

$ sudo apt install keepalived

配置检测 nginx 脚本

同 master01

设置此脚本权限

操作步骤同master01

keepalived配置文件

$ cat /etc/keepalived/keepalived.conf
# 主要由global_defs、vrrp_instance和virtual_server三个模块构成。
# 此处忽略 virtual_server
global_defs {# ...#标识信息,master/workerouter_id lb_4_test_worker01
}
# ...
vrrp_instance Tester_Ver_01 {#角色是master,worker是BACKUPstate BACKUP# ...      priority 180            # ...
}

VIP 是否成功设置

操作步骤同master01

安装 nginx

$ sudo apt install nginx
# 更新内容
$ cat /var/www/html/index.nginx-debian.html
192.168.79.180
$ cat /etc/nginx/nginx.conf 
# 指定用户启动
user tester;
...

Work02

设置hostname

$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 worker02
$ cat /etc/hostname 
worker02

安装 keepalived

$ sudo apt install keepalived

同 master01

设置此脚本权限

操作步骤同master01

keepalived配置文件

$ cat /etc/keepalived/keepalived.conf
# 主要由global_defs、vrrp_instance和virtual_server三个模块构成。
# 此处忽略 virtual_server
global_defs {# ...#标识信息,master/workerouter_id lb_4_test_worker02
}
# ...
vrrp_instance Tester_Ver_01 {#角色是master,worker是BACKUPstate BACKUP# ...      priority 180            # ...
}

VIP 是否成功设置

操作步骤同master01

安装 nginx

$ sudo apt install nginx
# 更新内容
$ cat /var/www/html/index.nginx-debian.html
192.168.79.181
$ cat /etc/nginx/nginx.conf 
# 指定用户启动
user tester;
...

验证

  1. 在192.168.79.180 上验证 curl http://192.168.79.100
    返回 192.168.79.177
  2. 将master01 nginx 手动停止
    sudo service nginx stop (模拟nginx服务停止)
    ps -ef | grep nginx
    3s 后,nginx会自动启动 (keepalived 配置文件 track_check)
    验证 curl http://192.168.79.100
    返回 192.168.79.177
  3. 将 master01 keepalived 手动停止
    sudo service keepalived stop
    验证 curl http://192.168.79.100
    返回 192.168.79.181 (worker02权重设置为181比worker01大)
  4. 将 worker01 keepalived 手动停止
    sudo service keepalived stop
    验证 curl http://192.168.79.100
    返回 192.168.79.180
  5. 手动恢复worker01 keepalived 服务
    sudo service keepalived start
    验证 curl http://192.168.79.100 (网络延时,多刷几次)
    返回 192.168.79.181
  6. 手动恢复master01 keepalived 服务
    sudo service keepalived start
    验证 curl http://192.168.79.100 (网络延时,多刷几次)
    返回 192.168.79.177

keepalived中的脑裂

在高可用(HA)系统中,当节点间的“心跳线”断开时,本来为一整体、协调的HA系统,就分裂成为多个独立的个体。由于相互失去了联系,都以为是彼此出了故障。节点间的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、彼此“服务”都起不来了;或者彼此“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

对付HA系统“裂脑”的对策,目前达成共识的的大概有以下几条:
1)添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率;
2)启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,其他方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
3)设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...