zoukankan      html  css  js  c++  java
  • [笔记]使用Keepalived实现Nginx主从热备

    HA(High Available), 高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。

     

    1.1. 高可靠软件keepalived

    keepalive是一款可以实现高可靠的软件,通常部署在2台服务器上,分为一主一备。Keepalived可以对本机上的进程进行检测,一旦Master检测出某个进程出现问题,将自己切换成Backup状态,然后通知另外一个节点切换成Master状态。

    1.2. keepalived安装

    下载keepalived官网:http://keepalived.org

    keepalived解压到/usr/local/src目录下

    tar -zxvf  keepalived-1.2.19.tar.gz -C /usr/local/src

    进入到/usr/local/src/keepalived-1.2.19目录

    cd /usr/local/src/keepalived-1.2.19

    开始configure

    ./configure --prefix=/usr/local/keepalived

    编译并安装

    make && make install

    1.3. keepalived添加到系统服务中

    拷贝执行文件

    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    init.d文件拷贝到etc,加入开机启动项

    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived

    将keepalived文件拷贝到etc

    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

    创建keepalived文件夹

    mkdir -p /etc/keepalived

    keepalived配置文件拷贝到etc

    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

    添加可执行权限

    chmod +x /etc/init.d/keepalived

    ##以上所有命令一次性执行:

    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
    
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
    mkdir -p /etc/keepalived
    
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
    
    chmod +x /etc/init.d/keepalived
    
    chkconfig --add keepalived
    
    chkconfig keepalived on

    添加keepalived到开机启动

    chkconfig --add keepalived
    
    chkconfig keepalived on

    1.4. 配置keepalived虚拟IP

    修改配置文件: /etc/keepalived/keepalived.conf

    MASTER节点

    global_defs {
    
    }
    
    vrrp_instance VI_1 {
    
        state MASTER   #指定A节点为主节点 备用节点上设置为BACKUP即可
    
        interface eth0    #绑定虚拟IP的网络接口
    
        virtual_router_id 51   #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
    
        priority 100   #主节点的优先级(1-254之间),备用节点必须比主节点优先级低
    
        advert_int 1  #组播信息发送间隔,两个节点设置必须一样
    
        authentication {    #设置验证信息,两个节点必须一致
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
        virtual_ipaddress {    #指定虚拟IP, 两个节点设置必须一样
    
            192.168.33.60/24    #如果两个nginx的ip分别是192.168.33.61,,...62,则此处的虚拟ip跟它俩同一个网段即可
    
        }
    
    }


    BACKUP节点 

    global_defs {
    
    }
    
    vrrp_instance VI_1 {
    
        state BACKUP
    
        interface eth0
    
        virtual_router_id 51
    
        priority 99
    
        advert_int 1
    
        authentication {
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
        virtual_ipaddress {
    
            192.168.33.60/24
    
        }
    
    }


    #分别启动两台机器上的keepalived 

    service keepalived start

    测试:

    杀掉master上的keepalived进程,你会发现,在slave机器上的eth0网卡多了一个ip地址

    查看ip地址的命令:  ip addr

    1.5. 配置keepalived心跳检查

    原理:

    Keepalived并不跟nginx耦合,它俩完全不是一家人

    但是keepalived提供一个机制:让用户自定义一个shell脚本去检测用户自己的程序,返回状态给keepalived就可以了

    MASTER节点

    global_defs {
    
    }
    
     
    
    vrrp_script chk_health {
    
        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
    
        interval 1    #每隔1秒执行上述的脚本,去检查用户的程序ngnix
    
        weight -2
    
    }
    
     
    
    vrrp_instance VI_1 {
    
        state MASTER
    
        interface eth0
    
        virtual_router_id 1
    
        priority 100
    
        advert_int 2
    
        authentication {
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
     
    
        track_script {
    
            chk_health
    
        }
    
     
    
        virtual_ipaddress {
    
            10.0.0.10/24
    
        }
    
     
    
        notify_master "/usr/local/keepalived/sbin/notify.sh master"
    
        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
    
        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
    
    }


    #添加切换通知脚本 

    vi /usr/local/keepalived/sbin/notify.sh

    #!/bin/bash
    
     
    
    case "$1" in
    
        master)
    
            /usr/local/nginx/sbin/nginx
    
            exit 0
    
        ;;
    
    backup)
    
            /usr/local/nginx/sbin/nginx -s stop
    
            /usr/local/nginx/sbin/nginx
    
            exit 0
    
        ;;
    
        fault)
    
            /usr/local/nginx/sbin/nginx -s stop
    
            exit 0
    
        ;;
    
        *)
    
            echo 'Usage: notify.sh {master|backup|fault}'
    
            exit 1
    
        ;;
    
    esac


    #添加执行权限 

    chmod +x /usr/local/keepalived/sbin/notify.sh

    global_defs {
    
    }
    
     
    
    vrrp_script chk_health {
    
        script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1"
    
        interval 1
    
        weight -2
    
    }
    
     
    
    vrrp_instance VI_1 {
    
        state BACKUP
    
        interface eth0
    
        virtual_router_id 1
    
        priority 99
    
        advert_int 1
    
        authentication {
    
            auth_type PASS
    
            auth_pass 1111
    
        }
    
     
    
        track_script {
    
            chk_health
    
        }
    
     
    
        virtual_ipaddress {
    
            10.0.0.10/24
    
        }
    
     
    
        notify_master "/usr/local/keepalived/sbin/notify.sh master"
    
        notify_backup "/usr/local/keepalived/sbin/notify.sh backup"
    
        notify_fault "/usr/local/keepalived/sbin/notify.sh fault"
    
    }

    #在第二台机器上添加notify.sh脚本 

    #分别在两台机器上启动keepalived

    service keepalived start
    
    chkconfig keepalived on
  • 相关阅读:
    gain 基尼系数
    luogu P5826 【模板】子序列自动机 主席树 vector 二分
    牛客挑战赛39 树与异或 离线 树上莫队 树状数组 约数
    4.22 省选模拟赛 三元组 manacher 回文自动机
    4.22 省选模拟赛 最优价值 网络流 最大权闭合子图
    4.18 省选模拟赛 消息传递 树剖 倍增 线段树维护等比数列
    luogu P4008 [NOI2003]文本编辑器 splay 块状链表
    牛客挑战赛39 密码系统 后缀数组
    luogu P1526 [NOI2003]智破连环阵 搜索+最大匹配+剪枝
    luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
  • 原文地址:https://www.cnblogs.com/at0x7c00/p/7954212.html
Copyright © 2011-2022 走看看