nginx高可用配置之Keepalived解决方案

Posted JAVA葵花宝典

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx高可用配置之Keepalived解决方案相关的知识,希望对你有一定的参考价值。

前言:在企业级系统上,服务器一般都是采用高可用高并发配置的,那么客户端服务搞了这么多集群,但是在nginx这端挂了,将会导致所有请求都转发不出去,那么怎么解决这么问题呢,本文介绍的是Keepalived解决方案,依托虚拟IP(VIP)在主备机挂载的原理,实现Nginx高可用方案



原理图:

nginx高可用配置之Keepalived解决方案

(图片来源网络)

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,通过配合 Nginx 可以实现web前端服务的高可用。

Keepalived实现的基础是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的.

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

实战准备:

1. 安装Keeplived依赖

安装keepalived之前,也要安装一些依赖库

安装 openssl

yum install openssl*

安装popt

yum install popt*

安装ipvsadm

yum isntall ipvsadm

安装libnl-dev

yum install libnl-dev*

2. 安装Keepalived

http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

下载解压后编译配置

./configure --prefix=/usr/local/keepalived

编译配置需要确保一下几项为Yes状态:

Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : Yes Use VRRP Framework : Yes

然后就可以编译安装了:

make && make install

因为没有使用keepalived的默认路径安装(默认是/usr/local),安装完成之后,需要做一些工作

nginx高可用配置之Keepalived解决方案

接下来就是配置了,很简单,直接上配置文件

先是主服务器配置:


nginx高可用配置之Keepalived解决方案

接下来是从服务器

nginx高可用配置之Keepalived解决方案

上面的设置是最基础的设置,实现的功能是如果主服务器的Keepalived停止服务(一般情况下服务器宕机),则将虚拟IP切换至从服务器,主服务器恢复后从新切换回主服务器。

但是很多情况下我们面临的处境是 nginx 挂掉了,而这个时候Keepalived就不能发挥作用,这时候就需要我们来改良下Keepalived了。通过向Keepalived添加一个自定义脚本来监控neginx的运行状态,如果 nginx 进程结束,则kill Keepalived进程,以此来达到主从服务器的切换功能。

我们在修改上面配置的主服务器的配置文件,在中间添加脚本实现

nginx高可用配置之Keepalived解决方案

修改完配置文件我们写我们的上面配置的 nginx .sh,当然我们假定 Nginx 已经安装完成


nginx高可用配置之Keepalived解决方案


上面的脚本简单的查看 nginx 进程是否存在,不存在就kill keepalived进程。



接下来我们对上面的哦脚本修改一下,当脚本检测到 nginx 没有运行的时候会尝试去启动 nginx 以此,如果失败则停掉keepalived进程把脚本保存到上面配置的具体路径(我这里是/usr/local/keepalived),然后很重要的一步是修改脚本的执行权限

chmod +x  nginx .sh

3. 运行Keepalived

配置完成后就可以运行看下效果了,分别在主从服务器上启动 nginx 和keepalived

service keepalived start

启动之后通过·ip a·命令查看主服务器的网络信息,可以看到在eth0网卡下生成了192.168.1.206这个虚拟ip,并可通过这个ip访问到 nginx

然后我们关闭 nginx 的进程(如果配置了一次尝试重启那要注意下),然后我们可以通过ps -e查看keepalived进程是否关闭,正常情况下查看网络信息中,可以看到eth0网卡下的虚拟ip已经解除,然后在从服务器的网络信息中可以看到从服务器的eth0网卡绑定了虚拟ip,通过这个ip就访问到了从服务器的 nginx 去了,这是我们重新启动主服务器的 nginx 和keepalieved,我们可以发现虚拟ip就绑回到了主服务器。

这样就实现了基本双击主从热备功能了。

这里注意下防火墙的问题,就是这问题困扰了我很久。找了一些资料才将问题解决

1.如果用的是默认防火墙,只需要添加:

iptables -I RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT

2.如果是自己用脚本设置的防火墙,需要添加如下规则

iptables -A OUTPUT -o eth0 -d 224.0.0.18 -j ACCEPT iptables -A OUTPUT -o eth0 -s 224.0.0.18 -j ACCEPT iptables -A INPUT -i eth0 -d 224.0.0.18 -j ACCEPT iptables -A INPUT -i eth0 -s 224.0.0.18 -j ACCEPT

5. 总结

  • keepalived通过虚拟路由实现双机热备,相比其他方案具有一定的优越性

  • 因为是固定主从热备,该方案比较适合两个互备服务器性能有差异的情况

  • Keepalived同样可以实现双主互备,通过设置互为主备,然后通过DNS负载均衡到不同vip就可以实现


❶ 搜索同名小程序JAVA葵花宝典助你成JAVA大神,超2万大神      在上面免费领资料



❸ 帖子都有交流群,如果你想进圈子,菜单点圈子,撩我拉你入圈


以上是关于nginx高可用配置之Keepalived解决方案的主要内容,如果未能解决你的问题,请参考以下文章

7.Nginx_Keepalived高可用配置

使用Keepalived配置主从热备实现Nginx高可用(HA)

微服务实战系列-网关高可用之中间件Keepalived

Keepalived+Nginx实现双主高可用负载均衡

Keepalived+Nginx实现高可用(HA)

nginx+keepalived高可用及双主模式