vlambda博客
学习文章列表

Nginx总结(十一)实现高可用的负载均衡服务

之前讲了Nginx 如何实现负载均衡以及如何实现动静分离,实现系统的分布式部署,提高系统的并发性能。但是,有个问题:如果Nginx 系统挂了,整个系统就都不可用了。Nginx 处于整个系统非常重要的位置,Nginx的高可用影响到整个系统的稳定性。如果nginx服务器宕机,后端web服务将无法提供服务,影响严重。所以如何保证Nginx 的稳定和高可用非常重要,接下来就来介绍Nginx + keepalived 实现系统负载均衡高可用的方案。

 

一、什么是负载均衡高可用

Nginx作为负载均衡器,所有请求必须经过Nginx 服务器,可见Nginx处于非常重点的位置,如果Nginx服务器宕机后端web服务将无法提供服务,影响严重。

 

二、Nginx高可用方案

目前,比较流行的实现Nginx高可用方案就是:keepalived+nginx实现主备方案。


1、什么是keepalived

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

 

2、keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称 Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

 

3、keepalived+nginx实现主备过程

keepalived + nginx 实现主备的过程,如下图所示:

 Nginx总结(十一)实现高可用的负载均衡服务

 

 

从上图可以看到,主Nginx健康时,系统所有的请求通过主Nginx 转发到Tomcat服务器集群。当主Nginx 宕机后,会立马切换到备Nginx ,由备Nginx 提供转发服务。这样就保证系统的正常运行。

 

三、环境准备

1、两天Nginx服务器和两台web服务器

两台nginx,一主一备:192.168.101.3和192.168.101.4

两台tomcat服务器:192.168.101.5、192.168.101.6

 

2、安装keepalived

分别在主备nginx上安装keepalived,这里就讲解keepalived的安装了。

 

3、配置虚拟IP(vip:192.168.101.100)

 

 

四、配置Nginx高可用

1、配置主nginx

修改主nginx下/etc/keepalived/keepalived.conf文件,配置主Nginx。

#全局配置global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 [email protected] } notification_email_from [email protected] #指定发件人 #smtp_server XXX.smtp.com #指定smtp服务器地址 #smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识}
vrrp_instance VI_1 { state MASTER #标示状态为MASTER 备份机为BACKUP interface eth0 #设置实例绑定的网卡 virtual_router_id 51 #同一实例下virtual_router_id必须相同 priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99 advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置认证 auth_type PASS #主从服务器验证方式 auth_pass 8888 } virtual_ipaddress { #设置vip 192.168.101.100 #可以多个虚拟IP,换行即可 }}

 

2、配置备nginx

修改备nginx下/etc/keepalived/keepalived.conf文件,配置备Nginx

配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

#全局配置global_defs { notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个 [email protected] } notification_email_from [email protected] #指定发件人 #smtp_server XXX.smtp.com #指定smtp服务器地址 #smtp_connect_timeout 30 #指定smtp连接超时时间 router_id LVS_DEVEL #运行keepalived机器的一个标识}
vrrp_instance VI_1 { state BACKUP #标示状态为MASTER 备份机为BACKUP interface eth0 #设置实例绑定的网卡 virtual_router_id 51 #同一实例下virtual_router_id必须相同 priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99 advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置认证 auth_type PASS #主从服务器验证方式 auth_pass 8888 } virtual_ipaddress { #设置vip 192.168.101.100 #可以多个虚拟IP,换行即可 }}

 

3、测试

1、主备nginx都启动keepalived及nginx。

service keepalived start
./nginx

 

2、启动之后,主Nginx正常工作,分别查看主nginx和 备nginx的eth0设置,vip(192.168.101.100)绑定在主nginx的eth0上。

Nginx总结(十一)实现高可用的负载均衡服务

打开浏览器,访问http://192.168.101.100,可以访问,主Nginx 服务器正常,系统可用。

 

3、将主nginx的keepalived停止或将主nginx关机(相当于模拟宕机),再次查看主nginx和 备nginx的eth0设置,vip(192.168.101.100)已经漂移到备nginx 上。

Nginx总结(十一)实现高可用的负载均衡服务

再次访问http://192.168.101.100,发现系统依然可以访问,说明主Nginx 宕机之后,自动切换到备用Nginx。

 

最后

以上,keepalived+nginx 系统高可用的解决方案介绍完了,看上去复杂,其实配置还是比较简单的。



推荐阅读:


  • N