Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换

摘要:
后端的web应用服务器的监控由Nginx负责,keepalived只监控Nginx的健康状况。性能:大约是硬件负载均衡器的10%优势:虽然性能远弱于LVS+Keepalived方案,但Nginx本身就是web服务器,可处理静态文件,页面缓存,rewrite等WEB容器功能,在web前端的负载均衡应用优先选用此方案。

原文链接:http://unun.in/linux/156.html

方案:

采用两台Nginx服务器作为前端,提供静态web内容,分发web请求,一主一从,Keepalived实现状态监测,保证 Nginx正常对外提供服务,即主Nginx服务进程死掉之后,keepalived能够通过脚本或者程序检测机制,将网站的访问切换到从Nginx上 来。后端的web应用服务器的监控由Nginx负责,keepalived只监控Nginx的健康状况。

性能:大约是硬件负载均衡器的10%

优势:虽然性能远弱于LVS+Keepalived方案,但Nginx本身就是web服务器,可处理静态文件,页面缓存,rewrite等WEB容器功能,在web前端的负载均衡应用优先选用此方案。

应用情景:作为web应用服务器集群前端的负载均衡器。

环境:

操作系统:centos6.5

Keepalived版本: keepalived-1.2.13.tar.gz

nginx版本:nginx-1.6.2.tar.gz

主机IP

Node0:192.168.99.138

Node1:192.168.99.155

虚拟IP: 192.168.99.168

后端WEB服务器IP:

ng2:192.168.99.152

ng3:192.168.99.135

----------------------------------------------------

这里我们选用的是lnmp环境,LNMP环境的可以自己编译安装,这里也有一个简单的配置教程:centos + nginx + php-fpm +mysql的简单配置,生产环境中最好自己编译安装。

----------------------------------------------------

keepalived安装配置步骤:

1.1 下载keepalived,官网下载地址:http://www.keepalived.org/download.html

cd/usr/local/src/
wgethttp://www.keepalived.org/software/keepalived-1.2.13.tar.gz

不得不说的是keepalived的下载速度慢成翔,最终也是没有wget下载下来,我传到oschina上了

下载地址:http://git.oschina.net/xiaoshusheng/Slow-download-speed/tree/master/keepalived

1.2 解压、并编译安装keepalived

tar-zxvfkeepalived-1.2.13.tar.gz
cdkeepalived-1.2.13
./configure--prefix=/usr/local/keepalived
make&&makeinstall

2.1设置环境变量和init.d,配置conf文件

cp/usr/local/keepalived/sbin/keepalived/usr/sbin/
cp/usr/local/keepalived/etc/sysconfig/keepalived/etc/sysconfig/
cp/usr/local/keepalived/etc/rc.d/init.d/keepalived/etc/init.d/
mkdir/etc/keepalived
cp/usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived
vi/etc/keepalived/keepalived.conf

Node1 这部分按照以下修改,其它的默认就行

vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id51
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{
192.168.99.168
}
}

Node0 这部分按照以下修改,其它的默认就行

vrrp_instanceVI_1{
stateBACKUP
interfaceeth0
virtual_router_id51
priority99
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{
192.168.99.168
}
}

这里是让node1当的主,node0做的从,其他的部分,可以酌情根据自己的实际情况来做出相应的修改!

其实除了global_defs{}和vrrp_instance VI_1{}两个括着的留下来,其它的配置部分可以删掉

启动keepalived

/etc/init.d/keepalivedstart

使用ip addr 查看虚拟ip是否已绑定,

Node1的结果:

Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换第1张

Node0的结果:

Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换第2张

可以看到Node1在接管着虚拟ip(VIP)。

----------------------------------------------------

2.1 nginx的安装,请参见:centos + nginx + php-fpm +mysql的简单配置的nginx配置部分,或者:本帖的部分内容:http://unun.in/linux/153.html

----------------------------------------------------

3.1 nginx的反向代理和负载均衡请参考:使用nginx做反向代理及负载均衡

----------------------------------------------------

让keepalived监视nginx状态

4.1 安装nmap

yuminstall-ynmap

这里直接yum安装了,如果你编译安装也可以,这里不做过多说明了

4.2 编写shell脚本,检查端口是否open,如果不是,重启一下,仍然不是,那就废掉

vi/opt/chk_nginx.sh

加入如下内容:

#!/bin/bash
#checknginxserverstatus
NGINX=/usr/local/nginx/sbin/nginx
PORT=80
nmaplocalhost-p$PORT|grep"$PORT/tcpopen"
#echo$?
if[$?-ne0];then
$NGINX-sstop
$NGINX
sleep3
nmaplocalhost-p$PORT|grep"$PORT/tcpopen"
[$?-ne0]&&/etc/init.d/keepalivedstop
fi

编写完脚本,别忘了给予它可执行的权限,否则无效

cd/opt/
chmod+xchk_nginx.sh

----------------------------------------2015.08.03更-------------------------------

再次修改keepalived.conf

vi/etc/keepalived/keepalived.conf

在配置里面增加这两部分内容

vrrp_scriptchk_http_port{
script"/opt/chk_nginx.sh"
interval2
weight2
}

然后在vrrp_instance VI_1中增加如下配置

track_script{
chk_http_port
}

配置的最终结构样子该是这样的,注意前面说的主从配置的区别,这里是个主的最终配置:

global_defs{
router_idLVS_DEVEL
}
vrrp_scriptchk_http_port{
script"/opt/chk_nginx.sh"
interval2
weight2
}
vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id51
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{
192.168.99.168
}
track_script{
chk_http_port
}
}


更进一步,为了避免启动keepalived之前没有启动nginx , 可以在/etc/init.d/keepalived的start中首先启动nginx:

vi/etc/init.d/keepalived

将start()部分修改为如下样子

start(){
/usr/local/nginx/sbin/nginx
sleep3
echo-n$"Starting$prog:"
daemonkeepalived${KEEPALIVED_OPTIONS}
RETVAL=$?
echo
[$RETVAL-eq0]&&touch/var/lock/subsys/$prog
}

------------------------------------------------------------------------------

检测是否成功

关闭nginx,重启keepalived,查看虚拟IP是否被接管

/etc/init.d/keepalivedrestart

在Node1(主)上使用

ipaddr

可以看到,虚拟IP已被Node1(主)接管

然后用虚拟ip:192.168.99.168访问,访问正常

使用netstat -ltunp命令查看是否nginx存在:结果存在

然后干掉主服务的nginx进程

再使用netstat -ltunp命令查看nginx是否重启:结果已经重启

然后再干掉主服务的nginx进程

再使用netstat -ltunp命令查看nginx是否重启:结果已经重启

使用service keepalived status查看keepalived状态:结果显示:keepalived (pid 2439) is running...

修改Node1上的nginx配置,故意制造错误,然后杀掉nginx进程

使用netstat -ltunp命令查看nginx状态:已经起不来了

然后使用service keepalived status查看keepalived状态:结果显示:keepalived is stopped

然后访问虚拟ip:192.168.99.168,依然能够正常访问

在Node0(从)上使用ip addr查看,发现虚拟IP已被Node0(从)接管

使用netstat -ltunp命令查看是否nginx存在:结果存在

然后干掉主服务的nginx进程

再使用netstat -ltunp命令查看nginx是否重启:结果已经重启

在切换到Node1(主)上,将nginx的配置修改正确,然后启动keepalived

/etc/init.d/keepalivedstart

在使用ip addr命令查看,发现虚拟IP已被Node1(主)重新接管

使用netstat -ltunp命令查看nginx状态:已被启动

通过上面测试可以发现,可用性大大提高,克服了负载均衡器的单点问题,但是从负载均衡器很多时间处于闲置状态,还是有一定的浪费的!

免责声明:文章转载自《Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android wifi 从连接态自动断开的解决办法(dhcp导致)【转】Hive函数:SUM,AVG,MIN,MAX下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

配置https

一.nginx 的 ssl 模块安装 查看 nginx 是否安装 http_ssl_module 模块。 /usr/local/nginx/sbin/nginx -V 如果出现 configure arguments: --with-http_ssl_module, 则已安装(下面的步骤可以跳过,进入 第五部 nginx.conf 配置)。 二.安装...

超哥带你部署高可用负载均衡

企业级集群高可用方案Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。  Keepalived软件主要是通过VRRP...

keepalived模式+DNS负载均衡

如何激活并检查IPVS内核模块(1)加载ip_vs模块:modrpobe ip_vs(2)显示当前加载的模块并过滤:lsmod | grep ip_vs (3)查看IPVS版本:cat /proc/net/ip_vs 1.1LVS master调度器配置 源码安装ipvsadm yum -y install  ipvsadm 源码安装keepalived...

nginx002: NGINX的环境变量,基本命令参数,目录关系及gzip优化

NGINX的环境变量,基本命令参数,目录关系及gzip优化 添加环境变量 nginx命令执行方式 nginx [选项] [参数] 通过编译安装的nginx 默认是没有环境变量的,如何设置环境变量,让nginx成为可执行的命令? 1. 确认安装目录: 我这里的程序目录为: /server/tools/nginx-1.16.0 编译安装的目录为:/applic...

nginx反向代理、负载均衡以及分布式下的session保持

【前言】部署服务器用到了nginx,相比较于apache并发能力更强,优点也比其多得多。虽然我的项目可能用不到这么多性能,还是部署一个流行的服务器吧! 此篇博文主要学习nginx(ingine x)的反向代理、负载均衡原理,并介绍一下分布式下sesssion保持。(分布式和集群的区别?下面有) 一、正向代理和反向代理 1、正向代理的概念 正向代理,也就是传...

转发 GSLB概要和实现原理

What is GSLB Global Server Load Balancing 中文:全局负载均衡 SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡。这里的负载均衡可能不只是简单的流量均匀分配,而是会根据策略的不同实现不同场景的应用交付。 GSLB是依赖于用户和实际部署环境的互联网资源...