Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换
原文链接: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/
wget http://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 -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/usr/local/keepalived
make && make install
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_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.99.168
}
}
Node0 这部分按照以下修改,其它的默认就行
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.99.168
}
}
这里是让node1当的主,node0做的从,其他的部分,可以酌情根据自己的实际情况来做出相应的修改!
其实除了global_defs{}和vrrp_instance VI_1{}两个括着的留下来,其它的配置部分可以删掉
启动keepalived
/etc/init.d/keepalived start
使用ip addr 查看虚拟ip是否已绑定,
Node1的结果:
Node0的结果:
可以看到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
yum install -y nmap
这里直接yum安装了,如果你编译安装也可以,这里不做过多说明了
4.2 编写shell脚本,检查端口是否open,如果不是,重启一下,仍然不是,那就废掉
vi /opt/chk_nginx.sh
加入如下内容:
#!/bin/bash
# check nginx server status
NGINX=/usr/local/nginx/sbin/nginx
PORT=80
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
$NGINX
sleep 3
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
编写完脚本,别忘了给予它可执行的权限,否则无效
cd /opt/
chmod +x chk_nginx.sh
----------------------------------------2015.08.03更-------------------------------
再次修改keepalived.conf
vi /etc/keepalived/keepalived.conf
在配置里面增加这两部分内容
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight 2
}
然后在vrrp_instance VI_1中增加如下配置
track_script {
chk_http_port
}
配置的最终结构样子该是这样的,注意前面说的主从配置的区别,这里是个主的最终配置:
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
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
sleep 3
echo -n $"Starting $prog: "
daemon keepalived ${KEEPALIVED_OPTIONS}
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}
------------------------------------------------------------------------------
检测是否成功
关闭nginx,重启keepalived,查看虚拟IP是否被接管
/etc/init.d/keepalived restart
在Node1(主)上使用
ip addr
可以看到,虚拟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/keepalived start
在使用ip addr命令查看,发现虚拟IP已被Node1(主)重新接管
使用netstat -ltunp命令查看nginx状态:已被启动
通过上面测试可以发现,可用性大大提高,克服了负载均衡器的单点问题,但是从负载均衡器很多时间处于闲置状态,还是有一定的浪费的!
Keepalived+Nginx提供前端负载均衡+主从双机热备+自动切换的更多相关文章
- Nginx+keepalived 脚本安装主从双机热备自动切换解决方案
Nginx+keepalived 脚本安装主从双机热备自动切换解决方案 2013-07-02 19:24:13 标签:filesnginx keepalived 原创作品,允许转载,转载时请务必以超链 ...
- nginx+tomcat实现负载均衡以及双机热备
还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...
- Nginx+Keepalived主从双机热备+自动切换
1 安装配置nginx 参考: http://www.cnblogs.com/jager/p/4388202.html 2 安装配置keepalived tar xvf keepalived-1.2. ...
- nginx+keepalive主从双机热备+自动切换解决方案
环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作 yum install -y make wget 如果你愿意可以更新下系统,更换下yum源. 1.安装keepalive 官 ...
- lvs+keepalived+nginx实现高性能负载均衡集群【转】
转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...
- Docker:docker部署PXC-5.7.21(mysql5.7.21)集群搭建负载均衡实现双机热部署方案
单节点数据库弊端 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 推荐Mysql集群部署方案 PXC (Percon ...
- 前端通信:ajax设计方案(七)--- 增加请求错误监控、前端负载均衡以、请求宕机切换以及迭代问题修复
距离上个迭代过了很长时间,中间经历了很多事情,也在每个空余时间构思了这个迭代的东西以及下个迭代要做的东西.时间周期稍微长了,望见谅. 而且,至今这个开源库的start也已经到了165个了,会支持关注和 ...
- Centos7 Mysql主从双机热备的实战记录
操作系统:centos7 服务器:主:172.19.242.69 从:172.19.242.70 1. 服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的 ...
- 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群
一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...
随机推荐
- C++设计模式-单件
理解 1. Singleton模式用来取代全局静态变量.C++通过静态成员变量来实现类实例全局唯一性. 2. instance()方法是单件提供的唯一调用入口. 要点 1. ...
- GPRS管理与创建APN拨号连接(转)
源:http://www.cnblogs.com/michael-zhangyu/archive/2009/07/04/1516797.html 本文主要介绍一些GPRS管理与创建APN拨号连接相关的 ...
- 原创:LoadTest系列之Local.testtings之Web Test
在录制脚本后,需要对脚本进行回放,而在Loal.testting的Web Test设置中,可以设置脚本运行的次数,以及是否考虑think time等,如下图所示: 1. 双击Solution Item ...
- docker rancher 体验 (未完待续.....)
docker rancher 体验 官方 githubhttps://github.com/rancher/rancher 环境说明: 10.6.0.14010.6.0.18710.6.0.188 修 ...
- Chapter 1 First Sight——4
Charlie gave me an awkward, one-armed hug when I stumbled my way off the plane. 当我让我蹒跚的从飞机上下来,查理斯单手给 ...
- HDU 5176 The Experience of Love 带权并查集
The Experience of Love Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- 安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图
前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activ ...
- php 自动发送邮件的实现
原文: http://www.cnblogs.com/zichi/p/4058055.html http://www.jb51.net/article/32479.htm 效果: 访问: test.p ...
- ural1650 Billionaires
Billionaires Time limit: 3.0 secondMemory limit: 64 MB You probably are aware that Moscow holds the ...
- (中等) POJ 3280 Cheapest Palindrome,DP。
Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system ...