keepalived + nginx主备切换
(2018-01-13 12:26:06)
标签:
keepalivednginx主备切换 |
分类: nginx |
keepalive+nginx的主备切换配置
nginx版本:1.6.2
keeplive版本: 1.2.13-5.el6_6.x86_64
操作系统:CentOS release 6.5 (Final)
系统内核:2.6.32-431.el6.x86_64
一、nginx+keepalive联动实现功能
简单的说,ngnix在集群架构中不仅能实现静态服务器功能,而且能实现前端的负载均衡,能够为后端的web服务器提供反向代理。功能强悍,地位特殊,若只有1台服务器,出现故障后,会严重影响到整个集群。上述原因,需要一种技术保障多台负载均衡服务器同时工作,1台宕机后,其它能够自动的顶上。这样是引出了keepalive。
keepalive,最主要的功能与网络工程中vrrp协议非常相似,即:虚拟路由冗余协议。与nginx配合,解决单点故障的问题。理论没必要多说,主要谈具体实现。
二、keepalive的实现
模拟环境:2台ngnix负载均衡服务器,ip地址分别为:192.168.241.110、192.168.241.120。效果:集群对外的vip为:192.168.241.50,当主服务器出现故障,备用服务器自动顶上。
1.安装keepalive
yum install keepalived -y
2.配置
配置文件在系统的 /etc/keepalived/keepalived.conf。
配置文件内容较多,许多功能是与LVS配合使用的,但这里只配置它的高可用功能,其余功能等到配置LVS时在讨论。所有其余脚本被删除。
A.单实例:
主服务器配置:
####全局定义模块
global_defs {
notification_email_from
Alexandre.Cassen@firewall.loc
}
#######################################################################################################
vrrp_instance VI_1 {
}
######################################################################################################
备用服务器配置:
####全局定义模块
global_defs {
notification_email_from
Alexandre.Cassen@firewall.loc
}
######################################################################################################
vrrp_instance VI_1 {
}
######################################################################################################
B.多实例
服务器1的配置:
####全局定义模块
global_defs {
notification_email_from
Alexandre.Cassen@firewall.loc
}
#######################################################################################################
vrrp_instance VI_1 {
}
###定义实例2
vrrp_instance VI_2 {
}
#######################################################################################################
服务器2的配置:
####全局定义模块
global_defs {
notification_email_from
Alexandre.Cassen@firewall.loc
}
#######################################################################################################
vrrp_instance VI_1 {
}
#####vrrp实例2
vrrp_instance VI_2 {
}
#######################################################################################################
三、keepalived的测试
单实例进行测试
1.2台服务器分别打开keepalived程序
/etc/init.d/keepalived start
为了让keepalived开机自启动,使用命令:
echo " /etc/init.d/keepalived start " >> /etc/rc.local
在2台服务已正常运行keepalived程序的情况下,2台服务器分别使用命令:
ip
add
主服务器:
[root@nginx1 ~]# ip add
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
备用服务:
[root@nginx2 ~]# ip add
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
当主服务器宕机的时候,见下
备服务器:
[root@nginx2 ~]# ip add
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
以上是主备切换的效果。
四、keepalived的局限性和相应的补救措施
简单的说,就是主备服务器无法探测到对方的存在,出现在同一个网络存在多个vip,导致ip冲突,影响到系统正常运行。
主要的原因:a)网络故障,双方无法正常交换检测数据包;b)主备服务器开启防火墙,阻断检测报文的传输;c)主备服务器配置错误;d)网络协议冲突等。
2.“脑裂”补救措施
A.主备服务器之间配置心跳线,使用带外网管的方式,不与其它业务流量共用网络线路。
B.关闭主备服务的防火墙。在工作中,最好使用硬件防火墙,毕竟硬件防火墙的功能强大,而且,服务器配置防火墙,会严重影响负载均衡服务的性能。推荐:内网内尽量关闭软件防火墙。
C.使用监控软件对运行情况进行检查,使用免费开源的zabbix软件。
3.keepalived+nginx的功能缺陷及补救
A.默认keepalived只监控物理机器ip地址的变化,只能监控3层的ip,对7层运行的服务无法监控。当nginx服务停止,keepalived不会自动探测,无法实现主备切换,这样会导致用户无法正确访问。解决办法:
首先写脚本用于监控nginx运行是否正常,存放位置/scripts/check_nginx.sh,内容如下:
#!/bin/sh
if [ `netstat
-lntup
{
}
fi
keepalived的主配置文件调用上诉脚本,完整配置如下:
global_defs {
}
vrrp_script chk_nginx {
script "scripts/check_nginx.sh"
interval 2
}
vrrp_instance VI_1 {
}
以上是主服务的keepalived配置文件,备用服务器也可以使用类似的方法,解决nginx与keepalived不同步的问题。
B.解决多组keepalived服务器在一个局域网的冲突问题
当在一个局域网内部署了多组keepalived服务器对,而又没有专用心跳线通信时,可能会发生高可用无法接管的问题。导致上诉原因是:keepalived使用的是组播:224.0.0.18,若更改组播地址,即可解决上诉问题,在全局配置模块中加入如下:
global_defs {
vrrp_mcast_group4 224.0.0.200
}
C.更改keepalived默认的日志文件
默认情况下,keepalived服务日志会输出到系统默认/var/log/messages,和其它日志信息混在一起,可以将其调整成独立的日志文件,例如存放/var/log/keepalived.log ,配置如下:
1)修改配置文件 /etc/sysconfig/keepalived。
KEEPALIVED_OPTIONS="-D "修改为KEEPALIVED_OPTIONS="-D -d -S 0"
2)修改rsyslog的配置文件 /etc/rsyslog.conf,在最后添加
echo"local0.*
同时在第42行,添加local0.*
*.info;mail.none;authpriv.none;cron.none;local0.*
3)重启 rsyslog和keepalived服务
/etc/init.d/rsyslog

加载中…