nginx署理+keepalived双机热备

准备作业:

192.168.16.128

192.168.16.129

两台虚拟机,服务器也行。装置好Nginx

装置Nginx

更新yum源文件:

Copyrpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

装置Nginx:

Copyyum -y install  nginx

操作指令:

Copysystemctl start nginx; #发动Nginx
systemctl stop nginx; #中止Nginx

什么是高可用

高可用HA(High Availability)是分布式体系架构规划中有必要考虑的要素之一,它一般是指,经过规划削减体系不能供给服务的时刻。假如一个体系能够一向供给服务,那么这个可用性则是百分之百,可是天有不测风云。所以咱们只能尽可能的去削减服务的毛病。

处理的问题?

在出产环境上许多时分是以Nginx做反向署理对外供给服务,可是一天Nginx不免遇见毛病,如:服务器宕机。当Nginx宕机那么一切对外供给的接口都将导致无法拜访。

尽管咱们无法确保服务器百分之百可用,可是也得想方法防止这种悲惨剧,今日咱们运用keepalived来完成Nginx

的高可用。

双机热备计划

这种计划是国内企业中最为遍及的一种高可用计划,双机热备其实就是指一台服务器在供给服务,另一台为某服务的备用状况,当一台服务器不可用别的一台就会代替上去。

keepalived是什么?

Keepalived软件起初是专为LVS负载均衡软件规划的,用来办理并监控LVS集群体系中各个服务节点的状况,后来又加入了能够完成高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功用。因而,Keepalived除了能够办理LVS软件外,还能够作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用处理计划软件

毛病搬运机制

Keepalived高可用服务之间的毛病切换搬运,是经过VRRP 来完成的。

Keepalived服务正常作业时,主 Master节点会不断地向备节点发送(多播的方法)心跳音讯,用以告知备Backup节点自己还活着,当主 Master节点发作毛病时,就无法发送心跳音讯,备节点也就因而无法持续检测到来自主 Master节点的心跳了,所以调用本身的接收程序,接收主Master节点的 IP资源及服务。而当主 Master节点康复时,备Backup节点又会开释主节点毛病时本身接收的IP资源及服务,康复到本来的备用人物。

完成进程

装置keepalived

yum方法直接装置即可,该方法会主动装置依靠:

Copyyum -y install keepalived

修正主机(192.168.16.128)keepalived装备文件

yum方法装置的会出产装备文件在/etc/keepalived下:

Copyvi keepalived.conf

keepalived.conf:

Copy#检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳履行的脚本,检测nginx是否发动
interval 2                          #(检测脚本履行的距离,单位是秒)
weight 2                            #权重
}
#vrrp 实例界说部分
vrrp_instance VI_1 {
state MASTER            # 指定keepalived的人物,MASTER为主,BACKUP为备
interface ens33         # 当时进行vrrp通讯的网络接口卡(当时centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66    # 虚拟路由编号,主从要一向
priority 100            # 优先级,数值越大,获取处理恳求的优先级越高
advert_int 1            # 查看距离,默以为1s(vrrp组播周期秒数)
#授权拜访
authentication {
auth_type PASS #设置验证类型和暗码,MASTER和BACKUP有必要运用相同的暗码才干正常通讯
auth_pass 1111
}
track_script {
chk_http_port            #(调用检测脚本)
}
virtual_ipaddress {
192.168.16.130            # 界说虚拟ip(VIP),可多设,每行一个
}
}

virtual_ipaddress 里边能够装备vip,在线上经过vip来拜访服务。

interface需求依据服务器网卡进行设置一般查看方法ip addr

authentication装备授权拜访后备机也需求相同装备

修正备机(192.168.16.129)keepalived装备文件

keepalived.conf:

Copy#检测脚本
vrrp_script chk_http_port {
script "/usr/local/src/check_nginx_pid.sh" #心跳履行的脚本,检测nginx是否发动
interval 2                          #(检测脚本履行的距离)
weight 2                            #权重
}
#vrrp 实例界说部分
vrrp_instance VI_1 {
state BACKUP                        # 指定keepalived的人物,MASTER为主,BACKUP为备
interface ens33                      # 当时进行vrrp通讯的网络接口卡(当时centos的网卡) 用ifconfig查看你具体的网卡
virtual_router_id 66                # 虚拟路由编号,主从要一向
priority 99                         # 优先级,数值越大,获取处理恳求的优先级越高
advert_int 1                        # 查看距离,默以为1s(vrrp组播周期秒数)
#授权拜访
authentication {
auth_type PASS #设置验证类型和暗码,MASTER和BACKUP有必要运用相同的暗码才干正常通讯
auth_pass 1111
}
track_script {
chk_http_port                   #(调用检测脚本)
}
virtual_ipaddress {
192.168.16.130                   # 界说虚拟ip(VIP),可多设,每行一个
}
}

检测脚本:

Copy#!/bin/bash
#检测nginx是否发动了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then    #假如nginx没有发动就发动nginx
systemctl start nginx                #重启nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失利,则停掉keepalived服务,进行VIP搬运
killall keepalived
fi
fi

脚本授权:chmod 775 check_nginx_pid.sh

阐明:脚本有必要经过授权,否则没权限拜访啊,在这里咱们两条服务器履行、VIP(virtual_ipaddress:192.168.16.130),咱们在出产环境是直接经过vip来拜访服务。

模仿nginx毛病:

修正两个服务器默许拜访的Nginxhtml页面作为差异。

首要拜访192.168.16.130,经过vip进行拜访,页面显现192.168.16.128;阐明当时是主服务器供给的服务。

这个时分192.168.16.128主服务器履行指令:

Copysystemctl stop nginx; #中止nginx

再次拜访vip(192.168.16.130)发现这个时分页面显现的仍是:192.168.16.128,这是脚本里边主动重启。

现在直接将192.168.16.128服务器封闭,在此拜访vip(192.168.16.130)现在发现页面显现192.168.16.129这个时分keepalived就主动毛病搬运了,一套企业级出产环境的高可用计划就建立好了。

keepalived中还有许多功用比方:邮箱提示啊等等,就不操作了,能够去官网看看文档。

往期文章

Nginx系列教程(1)nginx根本介绍和装置入门

Nginx系列教程(2)nginx建立静态资源web服务器

Nginx系列教程(3)nginx缓存服务器上的静态文件

Nginx系列教程(4)nginx处理web使用负载均衡问题以确保高并发

Nginx系列教程(5)怎么保证nginx的高可用性(keepalived)

Nginx系列教程(6)nginx location 匹配规矩具体阐明

Nginx系列教程(7)nginx rewrite装备规矩具体阐明

Nginx系列教程(8)nginx装备安全证书SSL

Nginx系列教程(9)nginx 处理session一致性

Nginx系列教程(10)根据nginx处理前端拜访后端服务跨域问题(Session和cookie无效)