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>
}

 

posted @ 2023-02-28 11:55  蓝迷梦  阅读(2339)  评论(0)    收藏  举报