Keepalived+Nginx部署方案

编辑
  • 文档创建者:疏影横斜
  • 浏览次数:421次
  • 编辑次数:2次
  • 最近更新:疏影横斜 于 2019-09-02
  • 1. 前言

    Nginx 可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的 Web 服务器,能够水平扩容,从而处理更多的用户请求,但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合 Web 服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。

    而 Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 Web 前端服务的高可用。

    2. 方案规划

    VIPIP主机名nginx端口默认主从系统版本
    192.168.1.77192.168.1.100pp180MASTERCentOS 7.3.1611
    192.168.1.77192.168.1.65pp280BACKUPCentOS 7.3.1611


    3. 安装 Nginx

    大家可以参考Linux 系统安装配置 Nginx

    来给需要的服务器都安装并配置好 Nginx

    4. 安装 Keepalived

    4.1 在线安装 Keepalived

    执行命令:

    yum -y install keepalived

    4.2 离线安装 Keepalived

    4.2.1 下载安装包

    访问网址:https://www.keepalived.org/download.html 并下载 Keepalived 的安装包。

    4.2.2 解压安装

    解压:

    tar -zxvf keepalived-2.0.18.tar.gz

    编译:

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

    安装:

    make && make install

    4.2.3 安装过程可能出现的问题

    prefix 指定安装的目录,编译过程一般都不太顺利,会报各种各样的错误,基本上都是缺少编译环境问题。

    image2019-8-4_20-12-9.png

    可以看到缺少openssl,按照 Linux 系统安装配置 Nginx 中的方法安装 openssl 即可。

    4.3 将 Keepalived 安装成 Linux 系统服务

    因为没有使用 Keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作复制默认配置文件到默认路径。


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

    复制 keepalived 服务脚本到默认的地址


    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    ln -s /usr/local/sbin/keepalived /usr/sbin/
    ln -s /usr/local/keepalived/sbin/keepalived /sbin/

    设置 keepalived 服务开机启动

    chkconfig keepalived on

    4.4 修改 Keepalived 的配置文件

    路径为/etc/keepalived/keepalived.conf

    4.4.1 MASTER 节点配置文件

    ! Configuration File for keepalived
    global_defs {
     ## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
     router_id pp1 ## 标识本节点的字条串,通常为 hostname

    ## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
    vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
     interval 2 ## 检测时间间隔
     weight -20 ## 如果条件成立,权重-20
    }
    ## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
    vrrp_instance VI_1 {
     state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
     interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 ens33
     virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
     mcast_src_ip 192.168.1.100 ## 本机 IP 地址
     priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
     advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
     ## 设置验证信息,两个节点必须一致
     authentication {
      auth_type PASS
      auth_pass 1111 ## 真实生产,按需求对应该过来
     }
     ## 将 track_script 块加入 instance 配置块
     track_script {
      chk_nginx ## 执行 Nginx 监控的服务
     } #
     # 虚拟 IP 池, 两个节点设置必须一样
     virtual_ipaddress {
      192.168.1.77 ## 虚拟 ip,可以定义多个
     }
    }

    4.4.2 BACKUP 节点配置文件

    ! Configuration File for keepalived
    global_defs {
     router_id pp2
    }
    vrrp_script chk_nginx {
     script "/etc/keepalived/nginx_check.sh"
     interval 2
     weight -20
    }
    vrrp_instance VI_1 {
     state BACKUP
     interface ens33
     virtual_router_id 33
     mcast_src_ip 192.168.1.65
     priority 90
     advert_int 1
     authentication {
      auth_type PASS
      auth_pass 1111
     }
     track_script {
      chk_nginx
     }
     virtual_ipaddress {
      192.168.1.77
     }
    }

    需要注意的配置说明:

    1)router_id pp1 ## 标识本节点的字条串,通常为 hostname

    2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径

    3)state MASTER/BACKUP ##说明主备

    4)interface ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 ens33

    5)mcast_src_ip 192.168.1.100 ## 本机 IP 地址

    6)priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高

    7)virtual_ipaddress ##虚拟 ip,即VIP,可以定义多个

    5. 编写nginx状态启动脚本

    编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 Keepalived.conf 中配置)脚本要求。

    #!/bin/bash
    A=`ps -C nginx –no-header |wc -l`
    if [ $A -eq 0 ];then
    /usr/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
     killall keepalived
    fi
    fi

    赋予文件权限:chmod +x /etc/keepalived/nginx_check.sh 

    6.启动 Keepalived

    systemctl start keepalived

    7. 测试

    1)同时启动两台服务器,测试keepalive master主服务器是否拥有VIP虚拟IP
    预期结果:
    a.主master服务器拥有VIP
    b.能够通过VIP访问相应的nginx及下面相应的文件 
    2)关闭keepalive master 主服务器的nginx ,查询是否会通过脚本关闭keepalive并释放VIP
    预期结果:
    a.nginx关闭,keepalive根据脚本自动关闭,通过相对于端口也无法访问
    3)启动 keepalive master 主服务器,查询VIP的拥有情况
    预期结果:
    a.master 主服务器抢占VIP,因为权重的配置比BACKUP的大 
    4)同时关闭两台服务器的nginx,测试访问情况
    预期结果:
    a.相应的端口关闭,keepalive主动关闭,相对应的访问项目不了

    附件列表


    主题: 部署集成
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]