zoukankan      html  css  js  c++  java
  • nginx+keepalived高可用 (主从+双主)

    1、Nginx+keepalived 主从配置
    这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

    测试环境如下:

    IP  VIP 角色
    192.168.2.201 192.168.2.210 nginx+keepalived   MASTER
    192.168.2.202 192.168.2.210 nginx+keepalived   BACKUP

    2、Nginx+keepalived 双主配置

    这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

    测试环境如下:

    IP  VIP 角色
    192.168.2.201 192.168.2.210

    nginx+keepalived   

    (MASTER+BACKUP)

    192.168.2.202 192.168.2.220

    nginx+keepalived   

    (MASTER+BACKUP)

    ### 主从配置

    一、安装nginx

    1. 下载
      http://nginx.org/en/download.html

    2. nginx 安装

    ./configure --prefix=/usr/local/nginx --sbin-path=/usr/bin/nginx
    
    make && make install
    

    3. 常用命令

    3.1 启动
        nginx
    
    3.2关闭
        nginx -s stop
    
    3.3 重新启动
        nginx -s reload
    

    4. 查看

    [root@Node201 nginx81]# ps -ef | grep nginx 
    nginx默认配置启动成功后,会有两个进程,一个主进程(守护进程),一个工作进程。主进程负责管理工作进程,工作进程负责处理用户的http请求。
    
    

    5. 开机启动

    将/usr/bin/nginx命令添加到/etc/rc.d/rc.local文件中,rc.local文件会在系统启动的时候执行。但CentOS7建议将开机启动服务写成服务描述文件添加到系统服务中,rc.local默认没有执行权限,需要给它添加执行权限。

    vim /etc/rc.d/rc.local
    # 添加如下参数 
        /usr/bin/nginx 
    
    # 授权
    shell> chmod +x /etc/rc.d/rc.local
    

     以上步骤,继续启动Node202的nginx。

    二、安装keepalived

    1. 下载
    http://www.keepalived.org/download.html

    2. 安装

    [root@localhost keepalived-2.0.12]# yum -y install libnl libnl-devel 
    [root@localhost keepalived-2.0.12]# pwd
    /usr/local/keepalived-2.0.12
    [root@localhost keepalived-2.0.12]# ./configure --prefix=/usr/local/keepalived
    [root@localhost keepalived-2.0.12]# make && make install
    
    [root@localhost keepalived-2.0.12]# cd /usr/local/keepalived-2.0.12
    [root@localhost keepalived-2.0.12]# cp keepalived/etc/init.d/keepalived /etc/init.d/
    
    [root@localhost keepalived-2.0.12]# cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
    [root@localhost keepalived-2.0.12]# cd /usr/local/keepalived
    [root@localhost keepalived]# mkdir /etc/keepalived
    
    #复制文件
    [root@localhost keepalived]# cp etc/keepalived/keepalived.conf /etc/keepalived/
    

    3. 添加检测nginx脚本

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

    4. 在201上修改 /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
        router_id Node201   #标识本节点的名称,通常为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 em1                  # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
        virtual_router_id 51           #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
        mcast_src_ip 192.168.2.201     # 本机IP地址
        priority 100                   # 节点优先级,值范围0~254,MASTER要比BACKUP高
        advert_int 1                   # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        nopreempt		     #非抢占模式使用	
    
        # 设置验证信息,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
        virtual_ipaddress {
            192.168.2.210
        }
    
        track_script {
           chk_nginx  # nginx存活状态检测脚本
        }
    }
    

    5. 启动

    [root@localhost keepalived]# systemctl start keepalived
    

    6. 查看

    [root@localhost keepalived]# ps -ef | grep keepalived
    
    

    7. 将以上配置文件,拷贝到Node202,修改配置文件中红色对应部分

    router_id Node202
    state BACKUP
    interface em1
    mcast_src_ip 192.168.2.202
    priority 90
    

    然后启动keepalived。

      此时,在Node201上可以看到绑定了VIP(192.168.2.210),Node202上没有。

    8. 故障模拟

    8.1 停止Node1的nginx,此时由于脚本nginx_check.sh 的作用,nginx2s后会重启。

    8.2 停止Node201上的keepalived

    假如,此时将201的keepalived启动,201会重新成为master(因为当前是抢占模式)。

    9. 抢占与非抢占模式

    配置上区别:
    1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip 
    2> 非抢占模式两个节点的state都为BACKUP ,抢占模式是一个MASTER,BACKUP
    两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

    ### 双主配置

    双主模式下,需要添加新的VIP,即两个VIP,一共两个节点,每个节点各有一个自己的主VIP。

    [root@Node201 keepalived]# pwd
    /etc/keepalived
    
    修改Node201配置文件keepalived.conf,添加如下类容:
    
    vrrp_instance VI_2 {
        state BACKUP                   # 状态,主节点为MASTER,备份节点为BACKUP
        interface em1                  # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
        virtual_router_id 220           #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
        mcast_src_ip 192.168.2.201     # 本机IP地址
        priority 90                   # 节点优先级,值范围0~254,MASTER要比BACKUP高
        advert_int 1                   # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        nopreempt
    
        # 设置验证信息,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
        virtual_ipaddress {
            192.168.2.220
        }
    
        track_script {
           chk_nginx  # nginx存活状态检测脚本
        }
    }
    
    [root@Node202 keepalived]# pwd
    /etc/keepalived
    
    修改Node202配置文件keepalived.conf,添加如下类容:
    
    vrrp_instance VI_2 {
        state MASTER                   # 状态,主节点为MASTER,备份节点为BACKUP
        interface em1                  # 绑定VIP的网络接口,通过ifconfig查看自己的网络接口
        virtual_router_id 220           #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
        mcast_src_ip 192.168.2.202     # 本机IP地址
        priority 100                   # 节点优先级,值范围0~254,MASTER要比BACKUP高
        advert_int 1                   # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        nopreempt
    
        # 设置验证信息,两个节点必须一致
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        # 虚拟IP,两个节点设置必须一样。可以设置多个,一行写一个
        virtual_ipaddress {
            192.168.2.220
        }
    
        track_script {
           chk_nginx  # nginx存活状态检测脚本
        }
    }  
    以上配置文件表示:192.168.2.210 作为Node201的主VIP,192.168.2.220 作为Node202的主VIP.


    10.测试

    
    

    
    
    

      

     

  • 相关阅读:
    Python 标准库 urllib2 的使用细节
    为什么C++编译器不能支持对模板的分离式编译
    source insight插件
    tar命令
    绘制和重绘,有效矩形和无效矩形
    常量表达式
    区间迭代
    lambda函数
    decltype和新的返回值语法
    auto用法
  • 原文地址:https://www.cnblogs.com/ZHUJIBlogs/p/10396328.html
Copyright © 2011-2022 走看看