一、Nginx的高可用
线上如果采用单个节点的方式部署Nginx
,难免会出现天灾人祸,比如系统异常、程序宕机、服务器断电、机房爆炸、地球毁灭....哈哈哈,夸张了。但实际生产环境中确实存在隐患问题,由于Nginx
作为整个系统的网关层接入外部流量,所以一旦Nginx
宕机,最终就会导致整个系统不可用,这无疑对于用户的体验感是极差的,因此也得保障Nginx
高可用的特性。
接下来则会通过
keepalived
的VIP
机制,实现Nginx
的高可用。VIP
并不是只会员的意思,而是指Virtual IP
,即虚拟IP
。
keepalived
在之前单体架构开发时,是一个用的较为频繁的高可用技术,比如MySQL、Redis、MQ、Proxy、Tomcat
等各处都会通过keepalived
提供的VIP
机制,实现单节点应用的高可用。
Keepalived+重启脚本+双机热备搭建
具体青请参考,在上篇《深入浅出 -- 系统架构之Keepalived搭建双机热备》中通过keepalived如何
搭建了主从双机热备。
Nginx高可用性测试
经过上述步骤后,keepalived
的VIP
机制已经搭建成功,在上个阶段中主要做了几件事:
- 一、为部署
Nginx
的机器挂载了VIP
。 - 二、通过
keepalived
搭建了主从双机热备。 - 三、通过
keepalived
实现了Nginx
宕机重启。
由于前面没有域名的原因,因此最初server_name
配置的是当前机器的IP
,所以需稍微更改一下nginx.conf
的配置:
sever{
listen 80;
# 这里从机器的本地IP改为虚拟IP
server_name 192.168.12.111;
# 如果这里配置的是域名,那么则将域名的映射配置改为虚拟IP
}
最后来实验一下效果:
在上述过程中,首先分别启动了
keepalived、nginx
服务,然后通过手动停止nginx
的方式模拟了Nginx
宕机情况,过了片刻后再次查询后台进程,我们会发现nginx
依旧存活。
从这个过程中不难发现,keepalived
已经为我们实现了Nginx
宕机后自动重启的功能,那么接着再模拟一下服务器出现故障时的情况:
在上述过程中,我们通过手动关闭
keepalived
服务模拟了机器断电、硬件损坏等情况(因为机器断电等情况=主机中的keepalived
进程消失),然后再次查询了一下本机的IP
信息,很明显会看到VIP
消失了!
现在再切换到另外一台机器:192.168.12.130
来看看情况:
此刻我们会发现,在主机
192.168.12.129
宕机后,VIP自动从主机飘移到了从机192.168.12.130
上,而此时客户端的请求就最终会来到130
这台机器的Nginx
上。
最终,利用Keepalived
对Nginx
做了主从热备之后,无论是遇到线上宕机还是机房断电等各类故障时,都能够确保应用系统能够为用户提供7x24
小时服务。