美文网首页
Nginx高可用集群实战,以及原理分析

Nginx高可用集群实战,以及原理分析

作者: javap | 来源:发表于2020-02-05 17:11 被阅读0次

    知识要点:

    Nginx高可用集群简介

    Keepalived安装配置

    高可用集群实践

    Nginx高可用集群简介

    今天我们学习Nginx+Keepalived实现高可用负载均衡
    keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。

    • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
    • check负责健康检查,包括常见的各种检查方式。
    • vrrp模块是来实现VRRP协议的。
      高可用实现原理图

    安装keepalived

    • 首先我们获取到keepalived的下载地址:
      keepalived的下载地址
      进入我们的虚拟机(有服务器资源的伙伴更好)
    wget https://www.keepalived.org/software/keepalived-2.0.19.tar.gz  #下载keepalived
    
    • 解压
    tar xzf keepalived-2.0.19.tar.gz
    cd keepalived-2.0.19
    
    • 安装依赖
    yum -y install libnl libnl-devel openssl-devel
    
    • 初始化安装配置
    cd keepalived-2.0.19/
    ./configure --prefix=/usr/local/keepalived   #指定安装的目录
    
    • 编译安装
    make && make install
    
    • 配置
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/keepalived/sbin/keepalived /etc/init.d/
    
    • 主节点配置文件
      此配置只是留下了课堂中修改部分复制的时候一定要删除注释读取的时候带注释会导致运行异常
    ! Configuration File for keepalived     #全局定义
      
    global_defs {
    notification_email {                     #指定keepalived在发生事件时(比如切换)发送通知邮件的邮箱
    ops@wangshibo.cn                         #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
    tech@wangshibo.cn
    }
      
    notification_email_from ops@wangshibo.cn   #keepalived在发生诸如切换操作时需要发送email通知地址
    smtp_server 127.0.0.1                      #指定发送email的smtp服务器
    smtp_connect_timeout 30                    #设置连接smtp server的超时时间
    router_id master-node                      #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。
    }
      
    vrrp_script chk_http_port {                  #检测nginx服务是否在运行。有很多方式,比如进程,用脚本检测等等
        script "/opt/chk_nginx.sh"               #这里通过脚本监测 不要挂载文件 
        interval 2                               #脚本执行间隔,每2s检测一次
        weight -5                                #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
        fall 2                                    #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间) 1 -100
        rise 1                                    #检测1次成功就算成功。但不修改优先级
    }
      
    vrrp_instance VI_1 {                            #keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
        state MASTER                                #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
        interface ens33                               #指定HA监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
        mcast_src_ip 103.110.98.14                  # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
        virtual_router_id 51          #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
        priority 101                 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
        advert_int 1                 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication {             #设置验证类型和密码。主从必须一样
            auth_type PASS           #设置vrrp验证类型,主要有PASS和AH两种
            auth_pass 1111           #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
        }
        virtual_ipaddress {          #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
            103.110.98.20
        }
     
    track_script {                      #执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
       chk_http_port                    #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    }
    }
    
    • 修改chek_nginx 文件 此配置适用于1.1.20版本之后的文件
    A=`ps -C nginx --no-header|wc -l`
        if [ $A -eq 0 ];then
            /usr/local/nginx/sbin/nginx                    #nginx运行文件地址 
            sleep 2                                        #间隔时间
        if [ `ps -C nginx --no-header|wc -l` -eq 0 ];then
            killall keepalived
        fi
    fi
    
    • 管理我们的keepalived
      如果你的软件安装完成后启动无反应请检查一下你的安装包版本是否为1.1.20一下
    systemctl start keepalived        #启动
    systemctl restart keepalived      #重启
    systemctl stop keepalived         #关闭
    systemctl status keepalived       # 状态
    

    高可用集群实战

    • 常见问题点:
      keepaliced配置nopreempr参数无效
    nopreempt    #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高  
                #master不能设置nopreempt
                #解决方案是:不设置master,全部设置成backup,这样大家都是backup,就都能添加nopreempt,即使原本成为master的LB坏掉重新修好之后也不会抢占master。
                #通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争
    
    • 编译安装出错
    make
     cd . && /bin/sh /data/keepalived-2.0.19/missing automake-1.15 --foreign Makefile
    /data/keepalived-2.0.19/missing: line 81: automake-1.15: command not found
    WARNING: 'automake-1.15' is missing on your system.
             You should only need it if you modified 'Makefile.am' or
             'configure.ac' or m4 files included by 'configure.ac'.
             The 'automake' program is part of the GNU Automake package:
             <http://www.gnu.org/software/automake>
             It also requires GNU Autoconf, GNU m4 and Perl in order to run:
             <http://www.gnu.org/software/autoconf>
             <http://www.gnu.org/software/m4/>
             <http://www.perl.org/>
    make: *** [Makefile.in] Error 127
    

    **解决 **

    yum install automake -y
    autoreconf -ivf
    再次执行make
    

    相关文章

      网友评论

          本文标题:Nginx高可用集群实战,以及原理分析

          本文链接:https://www.haomeiwen.com/subject/rmwsxhtx.html