Nginx高可用

Nginx高可用

准备工作:

两条虚拟机。安装好Nginx

什么是高可用?

在生产环境上很多时候是以Nginx做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。

虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用keepalived来实现Nginx

的高可用。

双机热备方案

这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。

keepalived是什么?

       Keepalived软件主要通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。keepalived除了能够管理LVS软件外,还可以作为其他服务(Nginx,Haproxy、MySQL等)的高可用解决方案软件。

故障转移机制

Keepalived高可用服务之间的故障切换转移,是通过VRRP 来实现的。
Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。


实现过程:

安装keepalived

yum install keepalived -y

安装成功后,在 /etc下面有目录keepalived, 有文件keepalived.conf 

修改  /etc/keepalived/keepalived.conf 配置文件:

! Configuration File for keepalived

global_defs {
   router_id NodeA              #路由器标识,最好写主机名,用于标识或IP
}

vrrp_script chk_nginx {
#配置检查方式,chk_nginx为自定义名称
    script "/usr/local/src/nginx_check.sh"   # 检查的脚本位置
    interval 2   # 监测的时间间隔
    weight 20                   #检测权重,此值需要大于MASTER的priority减去BACKUP的priority
}

vrrp_instance VI_1 {
    state MASTER                #主节点为:MASTER,备节点为:BACKUP
    interface eth0  # 网卡名字 可以通过 ifconfig查看当前主机的网卡
    virtual_router_id 51   # 主备机的virtual_router_id 必须相同
    priority 100  # 主备机取不同的优先级,主机较大(100),备份机小(90)
    advert_int 1   
    authentication {
    #此为认证方式,MASTER和BACKUP统一
        auth_type PASS
        auth_pass 1314
    }
    track_script {
    #调用上面的检查脚本
        chk_nginx
    }
    virtual_ipaddress {
    #设定虚拟VIP地址
       192.168.17.50
    }
}

在/usr/local/src 添加检测脚本nginx_check.sh文件

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

脚本授权:  chmod 775 nginx_check.sh  说明:脚本必须通过授权,不然没权限访问啊

把两台服务器上 nginx 和 keepalived 启动

启动 keepalived:systemctl start keepalived.service

5、最终测试 (1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50

 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/dw3306/p/12953257.html