高并发系列---【keepalived+nginx实现双机热备】

2022/1/7 7:03:21

本文主要是介绍高并发系列---【keepalived+nginx实现双机热备】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

双机热备:主机工作,备机备用,主机出现故障,自动切换到备机,由于用户访问的是vip,故不会感知到。
1.两台机器nginx-master,nginx-backup
2.在两台nginx服务期上分别安装keepalived

yum install -y keepalived

3.在nginx-master上修改keepalived.conf

cd /etc/keepalived
vi keepalived.conf

#保留下面的内容
! Configuration File for keepalived

global_defs {
   router_id nginx1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 61
    #注意,如果主机的优先级没有备机的大,则vip会绑定到优先级大的机器上,优先级相同时会先绑到主机上
    priority 100
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.26.102
    }
}

4.在nginx-backup上修改keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id nginx2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 61
    priority 50
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.26.102
    }
}

5.分别主机和备机的keepalived

systemctl start keepalived

6.用"ip addr"命令验证vip 192.168.26.102是否已绑到主机ens33网卡上

存在的问题:

keepalived只有在nginx-master这整个节点挂掉时才会自动切换到备用节点,如果只有主节点的ngixn挂掉了,keepalived是无法感知到的,这时候vip仍然绑定在master上,无法完成ip漂移,如果这时候客户访问vip的时候,会显示“无法访问此网站”,相当于服务整个就瘫痪了。

解决方案:

为了保证全天候的为用户提供不间断的服务,我们得让keepalived定时去检测nginx软件是否正常,如果nginx出现了问题,这时候,keepalived要尝试重启nginx,使得服务能够自动恢复到正常状态,如果说实在重启不了,那就切换到备用nginx服务器。

1.在nginx-master服务器上编写脚本,手动停止master上的nginx

#测试是否安装了killall命令,执行完若出来版本号则证明已安装
killall -V

#若没出来版本号,显示无此命令,则先安装
yum install -y psmisc
cd /etc/keepalived

vi check_nginx_status.sh
#保存下面内容,注意,一个空格都不能错
#!/bin/sh

A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 3
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi


#保存退出,并赋执行权限
chmod 775 check_nginx_status.sh

#尝试着运行一下,不报错则说明脚本没问题
./check_nginx_status.sh

2.进入nginx-master,在keepalived的配置文件中调用此脚本,重点加上紫色部分的代码

cd /etc/keepalived

vi keepalived.conf

#保存下面的配置
! Configuration File for keepalived

global_defs {
   router_id nginx1
}

vrrp_script check_nginx_status {
        script "/etc/keepalived/check_nginx_status.sh"
        # 每隔2秒运行一下上一行脚本
        interval 2
        # 如果脚本运行成功,则升级权重+10
        weight 10
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 61
    priority 100
    #主备之间同步检查的时间间隔,默认1s
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        #追踪nginx脚本
        check_nginx_status
    }
    virtual_ipaddress {
        192.168.26.102
    }
}

3.重启keepalived

systemctl restart keepalived

4.测试,若此时访问虚拟ip是通的,并且vip是绑定在master上的,则大功告成!

5.在backup节点上,重新执行1-4步骤即可。

 



这篇关于高并发系列---【keepalived+nginx实现双机热备】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程