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 搭建双机主 ...
随机推荐
- Android NDK 下的宽字符编码转换及icu库的使用(转)
原贴http://topic.csdn.net/u/20101022/16/1b2e0cec-b9d2-42ea-8d9c-4f1bb8320a54.html?r=70149216 ,看过并动手实现, ...
- HDU 2176 取(m堆)石子游戏(尼姆博奕)
nim基础博弈 #include<stdio.h> #include<iostream> #include<cstring> #include<queue&g ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- C. Bear and Colors
C. Bear and Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 【HighCharts系列教程】一、认识Highcharts
一.什么是HighCharts HighCharts是网页报表工具,开发语言是Javascript HighCharts是一个简单易用.美观.跨平台.跨浏览器的图表工具 HighCharts支持图表的 ...
- Linux在shell中df半天没反应
问题描述: df -hT 一直没反应,只能Ctrl+c中断此操作! 解决方法: 多是mount挂载远程服务,而远程服务已关闭,出于一直mount状态,df -hT是查看本地挂载和远程挂载! df ...
- AMQP协议学习
参考这个:http://kb.cnblogs.com/page/73759/ 写的挺好 AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步.安全.高效地交互.从整体来看,AMQP协议可划 ...
- [算法] avl树实现
大二的时候数据结构课死活没看懂的一个东东,看了2小时,敲了2小时,调了2小时... 平衡树某一节点的左右子树高度相差大于1的时候即需要调整,调整可分为四中情况 ll,rr,lr,rl其中lr,rl是由 ...
- pthread_join
摘要:pthread_join使一个线程等待另一个线程束. 代码中如果没有pthread_join主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了.加入pthread_jo ...
- C程序编译执行过程
C程序编译执行过程 认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接-- ...