zoukankan      html  css  js  c++  java
  • Nginx+keepalived 高可用双机热备(主从模式)

    环境:centos7.6 最小化安装

    主:10.11.1.32

    从:10.11.1.33

    VIP:10.11.1.130

    修改主节点主机名:

    hostnamectl set-hostname web_balance_01

    修改从节点主机名:

    hostnamectl set-hostname web_balance_02

    一、安装nginx(两个节点都需要安装)

    配置官方nginx源

    cat /etc/yum.repos.d/nginx.repo 
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/7/$basearch/
    gpgcheck=0
    enabled=1
    

     yum方式安装nginx

    yum install nginx
    

     二、安装keepalived(两个节点都需要安装)

    安装环境依赖

    yum -y install libnl libnl-devel
    

     下载keepalived包,并解压

    cd /tmp
    wget https://www.keepalived.org/software/keepalived-2.0.19.tar.gz
    tar -xf keepalived-2.0.19.tar.gz
    

     编译安装

     ./configure --prefix=/usr/local/keepalived
    make -j2
    make install
    

     拷贝启动脚本至/etc/init.d/目录下

    cd /tmp/keepalived-2.0.19
    cp keepalived/etc/init.d/keepalived /etc/init.d/
    
    cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    mkdir /etc/keepalived
    cp etc/keepalived/keepalived.conf /etc/keepalived/

    四、修改主节点keepalived.conf配置文件

    cd /etc/keepalived/
    cp -r keepalived.conf keepalived.conf_bak
    vi keepalived.conf
    

     主节点keepalived.conf配置如下:

    ! Configuration File for keepalived
     
    global_defs {
        router_id web_balance_01   #标识本节点的名称,通常为hostname
    }
     
    ## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
    ##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
    ##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
     
    vrrp_script chk_nginx {
           script "/etc/keepalived/nginx_check.sh"
           interval 2  #每2秒检测一次nginx的运行状态
           weight -20  #失败一次,将自己的优先级-20
    }
     
    vrrp_instance VI_1 {
        state MASTER                  # 状态,主节点为MASTER,备份节点为BACKUP
        interface enp175s0f0                  # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
        virtual_router_id 51           #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
        mcast_src_ip 10.11.1.32     # 本机IP地址
        priority 100                   # 节点优先级,值范围0~254,MASTER要比BACKUP高
        advert_int 1                   # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        nopreempt            #非抢占模式使用  
     
        # 设置验证信息,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
        virtual_ipaddress {
            10.11.1.130
        }
     
        track_script {
           chk_nginx  # nginx存活状态检测脚本
        }
    }
    

     从节点keepalived.conf配置如下:

    ! Configuration File for keepalived
     
    global_defs {
        router_id web_balance_02   #标识本节点的名称,通常为hostname
    }
     
    ## keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
    ##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
    ##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
     
    vrrp_script chk_nginx {
           script "/etc/keepalived/nginx_check.sh"
           interval 2  #每2秒检测一次nginx的运行状态
           weight -20  #失败一次,将自己的优先级-20
    }
     
    vrrp_instance VI_1 {
        state BACKUP                  # 状态,主节点为MASTER,备份节点为BACKUP
        interface enp175s0f0            # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
        virtual_router_id 51           #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
        mcast_src_ip 10.11.1.33        # 本机IP地址
        priority 90                   # 节点优先级,值范围0~254,MASTER要比BACKUP高
        advert_int 1                   # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        nopreempt            #非抢占模式使用  
     
        # 设置验证信息,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
        virtual_ipaddress {
            10.11.1.130
        }
     
        track_script {
           chk_nginx  # nginx存活状态检测脚本
        }
    }
    

     五、创建nginx存在状态检测脚本(两个节点都需要创建)

    cd /etc/keepalived
    more nginx_check.sh 
    #!/bin/bash
    A=`ps -C nginx --no-header | wc -l`
    if [ $A -eq 0 ];then
        systemctl restart nginx #尝试重新启动nginx
        sleep 2  #睡眠2秒
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
            killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
        fi
    fi
    

     添加脚本执行权限

    chmod +x /etc/keepalived/nginx_check.sh
    

     六、依次启动主节点和从节点上的nginx和keepalived服务

    systemctl start nginx
    systemctl enable nginx
    systemctl start keepalived
    systemctl enable keepalived
    

     七、在主节点上查询VIP绑定状态

     八、停止任意节点的nginx服务,检查keepalived 是否会通过脚本自动启动nginx服务

     九、停止主节点的keepalived服务可以看到VIP已经绑定到从节点上

     参考:https://www.cnblogs.com/ZHUJIBlogs/p/10396328.html

    https://blog.csdn.net/u012599988/article/details/82152224

  • 相关阅读:
    Design and Analysis of Algorithms_Decrease-and-Conquer
    TCPL 札记
    谬论:64 = 65?
    二叉树内部顶点与外部顶点在数量上的关系
    Design and Analysis of Algorithms_Divide-and-Conquer
    LeetCode 36. Valid Sudoku
    LeetCode 58. Length of Last Word
    LeetCode 66. Plus One
    LeetCode 67. Add Binary
    LeetCode 70. Climbing Stairs
  • 原文地址:https://www.cnblogs.com/caidingyu/p/11797224.html
Copyright © 2011-2022 走看看