zoukankan      html  css  js  c++  java
  • keepalived+nginx 高可用集群

    一、什么是高可用?

    nginx做负载均衡,能达到分发请求的目的,但是不能很好的避免单点故障。

    1、nginx集群单点问题

    • 分发器宕机怎么处理?
      假如nginx服务器挂掉了,那么所有的服务也会跟着瘫痪 。
      一种方法是人为监控,发现主分发器宕机后,立马登录备分发器,并给它分配虚ip。
      另一种办法是用软件来替代人来监控,自动登录备分发器,分配虚ip。
    • 数据服务器宕机怎么处理?
      分发器可以自动判断数据服务器的存活状态,不对宕机服务器要数据。

    2、Keepalived介绍

    Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使 其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
      总结来说:Keepalived软件是一个监控+自愈的软件。
      运行协议是VRRP,主分发器的keepalived会向网络中发组播,宣告自己还活着,组播地址:224.0.0.18。

    $ tcpdump -nn -vvv -i ens33 vrrp     #查看组播的包
         192.168.31.40 > 224.0.0.18: vrrp 192.168.31.40 > 224.0.0.18: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20, addrs: 192.168.31.213 auth "1111^¥##" 
    输出解析:192.168.31.40是master,目标地址是224.0.0.18,使用的协议是VRRPv2版本,虚拟id是51,优先级是100,简单验证类型,一秒发一次,长度20字节,虚Ip是192.168.31.213, 验证的密码是111#$Z%#
    

    二、keepalived安装管理

    1、keepalived下载

    keepalived官网下载地址
      
      linux下载keepalived软件:

    $ wget http://www.keepalived.org/software/keepalived-2.0.8.tar.gz
    

    2、keepalived安装

    使用如下shell脚本keepalived_instll.sh安装keepalived软件。

    $ sh keepalived_install.sh 
    #keepalived安装脚本
    #!/bin/bash 
    pkg=keepalived-2.0.8.tar.gz tar xf $pkg
    yum -y install kernel-devel
    ln -s /usr/src/kernels/3.10.0-862.14.4.el7.x86_64/ /usr/src/linux
    cd keepalived-2.0.8/
    yum install openssl-* -y
    ./configure --prefix=/usr/local/keepalived
    make
    make install
    mkdir -pv /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
    ln -s /usr/local/keepalived/sbin/keepalived /sbin/
    

    3、启动keepalived

    $ systemctl start keepalived
    

    三、构建高可用集群

    1、试验环境准备

    主机名 IP 角色 系统 配置 软件
    Master.ayitula.com 192.168.31.40 主分发器 centos7.5 2核4G Nginx+keepalived
    Backup.ayitula.com 192.168.31.41 备分发器 centos7.5 2核4G Nginx+keepalived
    Web01.ayitula.com 192.168.31.42 数据服务器1 centos7.5 2核4G Nginx
    Web02.ayitula.com 192.168.31.43 数据服务器2 centos7.5 2核4G Nginx

    2、软件环境部署步骤

    1)分发器:nginx+keepalived
      2)数据服务器:Nginx
      3)配置Nginx分发器
      4)配置数据服务器页面(web01 web02)
      5)配置keepalived.conf
      6)测试

    3、配置Nginx集群

    upstream web {
        server 192.168.31.42 max_fails=2 fail_timeout=3;    # 超时时间3秒内失败2次认为服务器死了
        server 192.168.31.43 max_fails=2 fail_timeout=3;
    }
    server { 
        listen 80;
        server_name localhost; 
        location / {
            proxy_pass http://web;
        } 
    }
    

    4、配置keepalived

    (1)主分发器keepalived

    ! Configuration File for keepalived
    
    global_defs {
        router_id NGINX_DEVEL
    }
    
    vrrp_script check_nginx {    # 定义一个脚本
        script "/etc/keepalived/nginx_pid.sh"        # 脚本路径
        interval 2        # 探针,此处是每两秒执行一次脚本
        fall 1             # 失败次数  1
    }
    
    vrrp_instance nginx {     # 定义名为nginx实例
        state MASTER          # 主机状态
        interface ens33        # 网卡
        mcast_src_ip 192.168.31.40      # 发组播
        virtual_router_id 51         # 虚拟id
        priority 100           # 优先级
        advert_int 1        # 探针,一秒发一次组播
        authentication {
            auth_type PASS
            auth_pass 1111    # 密码
        }
        track_script {
            check_nginx
        }
        virtual_ipaddress {      # 虚ip
            192.168.31.213/24
        }
    }
    

    (2)备分发器keepalived

    #cat /etc/keepalived/keepalived.conf 
    ! Configuration File for keepalived 
    global_defs {
        router_id NGINX_DEVEL 
    }
    vrrp_script check_nginx {
        script "/etc/keepalived/nginx_pid.sh" 
        interval 2
        fall 1
    }
    vrrp_instance nginx {
        state BACKUP
        interface ens33 
        mcast_src_ip 192.168.31.41 
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111 
        }
        track_script { 
            check_nginx
        } 
        virtual_ipaddress {
            192.168.31.213/24 
        }
    }
    

    5、编写关联脚本nginx_pid.sh

    #!/bin/bash
    nginx_kp_check () {
        nginxpid=`ps -C nginx --no-header |wc -l`
        if [ $nginxpid -eq 0 ];then
            /usr/local/nginx/sbin/nginx
            sleep 1
            nginxpid=`ps -C nginx --no-header |wc -l`
            if [ $nginxpid -eq 0 ];then
                systemctl stop keepalived
            fi
        fi
    }
    
    nginx_kp_check
    

    脚本原理:该脚本检查nginx进程是否存在,如果进程没了,说明分发器挂了,尝试启动分发器,1秒后检查分发器启动没有,如果没有启动直接关闭keepalived,停止发组播,备就自动开始工作了。

    四、故障测试

    1、分发器宕机测试

    分发器由keepalived来管理

    $ watch  -n1 killall nginx    # 每隔一秒杀死一次所有nginx
    

    2、数据服务器宕机测试

    数据服务器则由nginx来管理。使用如下两个参数就可实现对数据服务器管理:

    • max_fails
      允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
    • fail_timeout
      失败超时时间,在连接Server时,如果在超时时间之内超过max_fails指定的失败次数,会认为在fail_timeout时间内Server不可用,默认为10s
    upstream web {
        server 192.168.31.42 max_fails=2 fail_timeout=3;    # 超时时间3秒内失败2次认为服务器死了
        server 192.168.31.43 max_fails=2 fail_timeout=3;
    }
    
  • 相关阅读:
    20190211 模拟训练 A. 大猫咪
    如何诊断节点重启问题
    诊断 Grid Infrastructure 启动问题 (文档 ID 1623340.1)
    bzoj4025 二分图
    root.sh脚本支持checkpoints文件实现重复运行
    [IOI2018] seats 排座位
    最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题 (文档 ID 1524455.1)
    [IOI2018] werewolf 狼人
    OCR/Vote disk 维护操作: (添加/删除/替换/移动) (文档 ID 1674859.1)
    [POI2011]ROT-Tree Rotations
  • 原文地址:https://www.cnblogs.com/xiugeng/p/10171690.html
Copyright © 2011-2022 走看看