• Nginx+keeplived高可用


    目录

    一、环境准备

    1、准备3台centos服务器

    2、安装软件

    二、keepalived配置

    三、nginx进程监视脚本


    一、环境准备

    1、准备3台centos服务器

    服务器名主机名IPVIP
    Nginx代理服务器proxy1192.168.1.10192.168.1.100
    Nginx代理服务器proxy2192.168.1.20
    web网站服务器web1192.168.1.30/

                     

     实验效果:实验keepalived实现对Nginx代理服务器的高可用,防止一台Nginx出现宕机导致网站无法访问的情况。

    2、安装软件

    (1)Nginx安装

    三台服务器都安装Nginx,proxy1和proxy2的Nginx负责提供Nginx代理,web1的Nginx负责提供网页服务:

    安装步骤:Nginx安装、配置与概述_桂安俊@kylinOS的博客-CSDN博客

    (2)、keepalived安装

    1. #proxy1和proxy2安装keepalived
    2. yum install keepalived -y

    二、keepalived配置

    1、proxy1配置:

    vim /etc/keepalived/keepalived.conf
    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id test111 #router_id后面名称自定义
    4. }
    5. vrrp_instance nginx_test {
    6. state MASTER
    7. interface ens33 #对应实际网卡名
    8. virtual_router_id 51
    9. priority 100 #优先级,主备竞选的时候,优先级高的竞选master,数越大,优先级越高
    10. advert_int 1
    11. authentication { #同一组keepalived认证
    12. auth_type PASS
    13. auth_pass 1111
    14. }
    15. virtual_ipaddress { #虚拟ip
    16. 192.168.1.100
    17. }
    18. }

    2、proxy2配置:

    vim /etc/keepalived/keepalived.conf
    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id test112 #router_id后面名称自定义,和proxy1不一样即可
    4. }
    5. vrrp_instance nginx_test {
    6. state BACKUP #proxy1为主,那这边就为备
    7. interface ens33 #对应实际网卡名
    8. virtual_router_id 51 # 虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
    9. priority 50 #备机优先级改低一点
    10. advert_int 1 #组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
    11. authentication { #设置验证信息,两个节点必须一致
    12. auth_type PASS
    13. auth_pass 1111 #要和proxy1对上
    14. }
    15. virtual_ipaddress { #虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
    16. 192.168.1.100
    17. }
    18. }

    重启proxy1和proxy2的keepalived服务

    systemctl restart keepalived

    此时虚拟IP在proxy1上:

     测试keepalived:将proxy1关机,虚拟IP会漂到proxy2上。

    三、nginx进程监视脚本

    keepalived的检测机制就是检查keepalived进程,当keepalived进程异常,才会进行vip漂移。如果keepalived正常,但是nginx故障,那就会带来vip不漂移导致网站无法访问的问题,这时可以自己写一个脚本去检查nginx状态,如果异常,则kill掉keepalived实现ip漂移,或者重新启动nginx。下面以keepalived重新启动nginx为例:

    keepalived节点服务器配置都要改:

    vim  /etc/keepalived/check_nginx.sh
    1. #!/bin/bash
    2. A=`ps -C nginx --no-header | wc -l`
    3. if [ $A -eq 0 ];then
    4. /usr/local/nginx/sbin/nginx
    5. if [ `ps -c nginx --no-header | wc -l` -eq 0 ];then
    6. exit 1
    7. else
    8. exit 0
    9. fi
    10. else
    11. exit 0
    12. fi
    chmod +x /etc/keepalived/check_nginx.sh   #给执行权限

    然后将check_nginx.sh监测脚本加入keepalived.conf配置文件中调用:

    vim /etc/keepalived/keepalived.conf

    keepalived节点都要加(红色字体部分),下面以proxy1的keepalived配置为例:

    ! Configuration File for keepalived

    global_defs {
       router_id test111 
    }

    vrrp_script check_nginx {           #定义一个策略,策略名为"check_nginx"
        script "/etc/keepalived/check_nginx.sh"  #指定脚本路径
        interval  1     #检测时间间隔1秒钟
        weight -20      #如果发现nginx启动失败了,将当前的机器的priority优先级减20
    }

    vrrp_instance nginx_test {
        state MASTER
        interface ens33 
        virtual_router_id 51
        priority 100    
        advert_int 1     
        authentication {  
            auth_type PASS
            auth_pass 1111    
        }
        virtual_ipaddress {   
            192.168.1.100
        }

        track_script {    #nginx存活状态检测脚本
              check_nginx
        }

    }

    测试:手动关闭一台服务器nginx:

    /usr/local/nginx/sbin/nginx -s stop

    会发现nginx被keepalived检测脚本自动启动。

     【附】完整keepalived调用check_nginx.sh监测配置文件:

    proxy1 keepalived.conf配置内容:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id test111
    4. }
    5. vrrp_script check_nginx {
    6. script "/etc/keepalived/check_nginx.sh"
    7. interval 1
    8. weight -20
    9. }
    10. vrrp_instance nginx_test {
    11. state MASTER
    12. interface ens33
    13. virtual_router_id 51
    14. priority 100
    15. advert_int 1
    16. authentication {
    17. auth_type PASS
    18. auth_pass 1111
    19. }
    20. virtual_ipaddress {
    21. 192.168.1.100
    22. }
    23. track_script {
    24. check_nginx
    25. }
    26. }

    proxy2 keepalived.conf配置内容:

    1. ! Configuration File for keepalived
    2. global_defs {
    3. router_id test112
    4. }
    5. vrrp_script check_nginx {
    6. script "/etc/keepalived/check_nginx.sh"
    7. interval 1
    8. weight -20
    9. }
    10. vrrp_instance nginx_test {
    11. state MASTER
    12. interface ens33
    13. virtual_router_id 51
    14. priority 50
    15. advert_int 1
    16. authentication {
    17. auth_type PASS
    18. auth_pass 1111
    19. }
    20. virtual_ipaddress {
    21. 192.168.1.100
    22. }
    23. track_script {
    24. check_nginx
    25. }
    26. }

  • 相关阅读:
    C#编程学习
    网安周报|Chaes恶意软件的新Python变种针对银行和物流行业
    【电力系统状态估计与PMU(相量测量单元)】使用WLS和PMU来估计系统的电压幅值和角度还将这些值与使用Newton-Raphson方法获得的状态进行比较(Matlab代码实现)
    vue页面中获取用户ip
    我们写的代码是如何一步步变成可执行程序(.EXE)的?
    MySQL之用户管理
    Linux 命令(199)—— arp 命令
    MySQL 用户权限和远程访问设置
    C#中的委托
    Docker部署nacos 添加配置文件提示: 发布失败。请检查参数是否正确
  • 原文地址:https://blog.csdn.net/qq_28903377/article/details/127916713