nginx学习(8): centos7中搭建主备nginx+keepalived实现高可用

一. 理论知识了解

  1. nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重要的位置,如果nginx服务器宕(dang)机,后端web服务器将无法提供服务,为了解决这个问题,需要建立一个备份机。
  2. keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。keepalived工作流程,它可以对外提供服务的vip(VIP = Virtual IP Address,虚拟IP地址),域名会绑定到这个vip上面,vip动态绑定主备机,请求来的时候,会先到达vip,然后传到主服务器,然后传到tomcat集群上去。如下图,备份机时时刻刻会往主服务器发送心跳包,“你还活着么?”,当主服务器没有反馈的时候,vip会自动跳转到备用机上面,当主服务器修好后,它又会自动跳转到主服务器上。
  3. keepalived切换主备机是根据keepalived自身是否宕机来切换的,如果keepalived宕机了它就切换到备份机上,所以自己写个脚本,监听nginx是否宕机,如果nginx宕机就让keepalived也宕机了,这样就实现了主备之间的切换了。
    在这里插入图片描述

二. 环境准备

  1. 两台centos7虚拟机
    主:192.168.72.60 (CentOS_7_01)
    备:192.168.72.244(CentOS_7_02)
  2. 两台虚拟机中分别安装nginx
  3. 两台虚拟机中分别安装keepalived

三. 安装配置keepalived

  1. yum命令在两台虚拟机中安装keepalived
yum install keepalived –y
  1. 安装之后,在/etc/keepalived下有文件keepalived.conf
    在这里插入图片描述
  2. 分别修改主备两台机器中的keepalived.conf文件(可以用如下配置直接替换)
    (1)主:192.168.72.60(CentOS_7_01)
global_defs {
   notification_email {
   #指定keepalived在发生切换时需要发送email到的对象,
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
    #指定发件人
   notification_email_from Alexandre.Cassen@firewall.loc
   #运行keepalived机器的一个标识,通常为主机hostname,此处需要在/etc/hosts中加入127.0.0.1 LVS_DEVEL的映射关系
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(检测脚本执行的间隔)
        weight 2
}

vrrp_instance VI_1 {
        state MASTER # 备份服务器上将 MASTER 改为 BACKUP
        interface ens33 //网卡,设置实例绑定的网卡
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 150 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
        authentication { #设置认证
                auth_type PASS #主从服务器验证方式
                auth_pass 1111
        }
         # 将 track_script 块加入 instance 配置块
        track_script {
               chk_http_port #执行 Nginx 监控的服务
        }
        virtual_ipaddress { #设置vip
                192.168.72.50/24 dev ens33 label ens33:1 // VRRP H 虚拟地址
        }
}

(2)备:192.168.72.244(CentOS_7_02)

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
        script "/usr/local/src/nginx_check.sh"
        interval 2 #(检测脚本执行的间隔)
        weight 2
}

vrrp_instance VI_1 {
        state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
        interface ens33 //网卡
        virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
        priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 1111
        }
         # 将 track_script 块加入 instance 配置块
        track_script {
               chk_http_port #执行 Nginx 监控的服务
        }
        virtual_ipaddress {
                192.168.72.50/24 dev ens33 label ens33:1 // VRRP H 虚拟地址
        }
}
  1. 在/usr/local/src/目录下,加入nginx_check.sh检测脚本程序,该脚本程序如下
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
# 以下两行暂时先注掉,防止测试时,手动关闭nginx后,脚本又自动启动nginx
#       /usr/local/nginx/sbin/nginx
#       sleep 2
        if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
                killall keepalived
        fi
fi

修改脚本权限为可执行脚本

chmod 777 nginx_check.sh

./nginx_check.sh 确认该脚本是否可以执行,如果出现如下报错

/bin/bash^M: bad interpreter: No such file or directory

则执行以下命令,把文件转换为unix格式

dos2unix nginx_check.sh

注意:可能killall和dos2unix命令不可执行,则需要大家通过yum命令自行安装
5. 启动两台nginx与keepalived
启动 nginx :在nginx目录下执行 ./nginx
启动 keepalived :systemctl start keepalived.service
确认两台机器中有如下进程,则说明nginx与keepalived启动成功
在这里插入图片描述

四、测试keepalived是否绑定网卡成功

  1. 在主机CentOS_7_01中ip addr查看是否绑定上配置的虚拟IP
    在这里插入图片描述
  2. 此时备用机CentOS_7_02中是没有绑定的虚拟IP的
    在这里插入图片描述
  3. 手动./nginx -s stop去关闭主机CentOS_7_01中的nginx,然后再手动执行nginx_check.sh脚本去关闭主机所有的keepalived进程,会发现绑定的虚拟ip由主机CentOS_7_01移到了备用机CentOS_7_02中
    在这里插入图片描述
    在这里插入图片描述
  4. 说明keepalived主备高可用配置成功

五. 浏览器访问虚拟ip测试

  1. 浏览器输入虚拟ip: 192.168.72.50,访问nginx成功

在这里插入图片描述
2. 关闭主机CentOS_7_01的nginx,此时绑定的虚拟ip会从主机CentOS_7_01移到备用机CentOS_7_02上,再次访问192.168.72.50测试,一样可以访问通。
在这里插入图片描述
注意:
(1) 有时访问虚拟ip访问不通,检查是否关闭防火墙及关闭selinux模式

a). 临时关闭,不需要重启

setenforce 0

b). 永久关闭,需要重启

 vim /etc/selinux/config

将第七行的 SELINUX=enforcing 改为 SELINUX=disabled,然后reboot重启

(2) 关闭主机CentOS_7_01的nginx后,立马再去访问192.168.72.50时可能会出现访问不到,失去响应

的情况,稍等1~2分钟再试,就可以访问通了(这个原因暂时不知道是为什么)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值