• [笔记]使用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
  • 相关阅读:
    英语影视台词---经典电影台词(世间万物有始皆有终。)
    js数组,字符串,json互相转换函数有哪些
    php set_time_limit()的作用是什么
    界面分析---如何做美观的网页
    legend2---开发日志7(vue的使用场景有哪些,或者说使用的优缺点)
    legend2---开发日志1(legend的数据库整体设计思路是什么)
    legend2---开发日志2(注释和函数比较好的写法)
    legend2---开发日志3(thinkphp的入口目录是public的体现是什么)
    legend2---开发日志4(常用的链接传值方式有哪些)
    BZOJ 1823 JSOI 2010 盛宴 2-SAT
  • 原文地址:https://www.cnblogs.com/at0x7c00/p/7954212.html
Copyright © 2020-2023  润新知