ubuntu配置keepalived+nginx 高可用(二) - keepalived 配置
一、环境准备
ubuntu 22.04,keepalived v2.2.4,已经部署的nginx负载集群和应用服务集群(前期已部署的集群,直接在上面部署keepalived就可以。参考部署教程:https://www.cnblogs.com/hewei-blogs/articles/17160430.html)
两台主机:
10.53.207.11 (ubuntu-two)
10.53.207.12(ubuntu-three)
二、keepalived 安装配置(两个主机上都要配置)
安装
sudo apt install keepalived
设置随系统自动启动,在 /etc/rc.local (没有就创建)文件中添加下面内容
#!/bin/sh -e # 服务类要以 & 结尾,表示不等待服务启动结束 service keepalived start & #文末必须以exit 0结束 exit 0
查看当前主机绑定网卡的名称:ifconfig
编辑 keepalived 的配置文件,进行虚拟ip以及服务检查的配置(两个主机上分别配置),设定的虚拟IP为 10.53.207.20
gedit /etc/keepalived/keepalived.conf
ubuntu-two添加下面内容
global_defs { router_id 10.53.207.11 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state MASTER interface ens33 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1369 } virtual_ipaddress { 10.53.207.20 } track_script { chk_nginx } }
ubuntu-three添加下面内容
global_defs { router_id 10.53.207.12 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" interval 2 } vrrp_instance VI_1{ state BACKUP interface ens33 virtual_router_id 100 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1369 } virtual_ipaddress { 10.53.207.20 } track_script { chk_nginx } }
两个主机上都配置完成后,保存退出。
三、nginx 服务器状态检查脚本创建(两个主机都要创建)
创建文件
gedit /etc/keepalived/nginx_chk.sh
添加下面内容
#!/bin/bash #检查是否有nginx相关的进程 A=`ps -C nginx --no-header |wc -l` #如果没有 if [ $A -eq 0 ];then # 重启nginx,延迟2秒 service nginx restart sleep 2 # 重新检查是否有nginx相关的进程 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then # 仍然没有nginx相关的进程,杀死当前keepalived,切换到备用机 killall keepalived fi fi
为脚本添加执行权限
sudo chmod +x /etc/keepalived/nginx_chk.sh
检查脚本,不报错即为正常。
cd /etc/keepalived ./nginx_chk.sh
四、keepalived 验证测试
重启keepalived服务
sudo service keepalived restart systemctl status keepalived
检查虚拟ip是否设置成功,在ubuntu-two主机执行命令:ip a

可以看到 虚拟ip 10.53.207.20 已经在列表中,然后分别在两台主机访问 虚拟IP地址 10.53.207.20,都可以正常访问。

将主机 ubuntu-two 的 keepalived 服务停止再分别查看 ubuntu-two 和 ubuntu-three 主机的ip列表。
sudo service keepalived stop ip a
ubuntu-two:虚拟IP消失

ubuntu-three:以前没有虚拟IP,现在有

ubuntu-two 主机上的虚拟IP 10.53.207.20 已经不再列表中了,ubuntu-three中却多出了虚拟IP。再次通过浏览器访问 10.53.207.20 依然可以正常访问。
以上说明 虚拟IP漂移成功,keepalived + nginx 高可用 集群搭建成功!
上一步:https://www.cnblogs.com/hewei-blogs/articles/17160430.html
参考文章:https://blog.csdn.net/weixin_41621706/article/details/117217349
附加:keepalived 配置文件说明
! Configuration File for keepalived global_defs { #检测到realserver或者负载均衡出现故障后, 通知的邮箱地址 notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } #发送通知的邮箱的地址 notification_email_from Alexandre.Cassen@firewall.loc #利用的stmp服务器地址 smtp_server 192.168.200.1 smtp_connect_timeout 30 #自定义主机名,建议使用IP地址 router_id 192.168.229.128 vrrp_skip_check_adv_addr vrrp_iptables vrrp_garp_interval 0 vrrp_gna_interval 0 } #预先定义一个脚本,方便后面调用,也可以定义多个,方便选择; vrrp_script chk_nginx { script "/etc/keepalived/nginx_chk.sh" #具体脚本路径 interval 2 #脚本循环运行间隔,s } #一个虚拟路由器组的物理实例, 同一组KA里的实例不能重名 vrrp_instance VI_1{ #当前节点在此虚拟路由器上的初始状态,状态为MASTER或者BACKUP state MASTER #非抢占模式;如果开启非抢占模式,上面的state需要都配置城BACKUP,利用优先级确定谁是MASTER #nopreempt #绑定为当前虚拟路由器使用的物理接口,需要据实查询填写 interface ens33 #当前虚拟路由器惟一标识,也叫做分组名称,该组内的设备需要相同,范围是0-255 virtual_router_id 100 #当前物理节点在此虚拟路由器中的优先级,值越大优先级越大;范围1-254 priority 101 #vrrp通告的时间间隔,默认1s, 谁的优先级高, vip跑在哪个节点上, 就由哪个节点发送通告, backup节点接收通告。组内要一致 advert_int 1 #设置验证信息,组内一致 authentication { #有PASS 和 AH 两种,常用 PASS auth_type PASS #仅前8位字符有效, 每一组负载均衡器使用相同的密码即可 auth_pass 1111 } #虚拟IP, 要和服务器在同一个网段, 能和服务器网关进行通信的, 而且是没有被占用的 #可以设置多个IP virtual_ipaddress { 192.168.229.130 } #使用在这个域中使用预先定义的脚本,上面定义的 track_script { chk_nginx } #当前节点成为主节点时触发的脚本 #notify_master <STRING>|<QUOTED-STRING> #当前节点称为备用节点时触发的脚本 #notify_backup <STRING>|<QUOTED-STRING> #当前节点转为“失败”状态时触发的脚本 # 一般不会使用, 一般一个节点不是master就是backup状态, #很少出现fault, 除非是ip地址冲突或者资源不足, 导致角色切换失败会出现fault状态 #notify_fault <STRING>|<QUOTED-STRING> #通用格式的通知触发机制,一个脚本可完成以上三种状态的转换时的通知 #notify <STRING>|<QUOTED-STRING> }
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/17163331.html

浙公网安备 33010602011771号