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 搭建双机主 ...
随机推荐
- css float left right 中间空间城数据无法显示
css float left right 中间空间城数据无法显示 是由于设定了width具体值太小造成,简单用%值或不设置.
- 磁盘寻道时间算法之----------------SCAN算法和最短寻道时间优先调度算法
若干个等待访问磁盘者依次要访问的柱面编号为:80,40,74,14,60,31,61,假设每移动一个柱面需要4毫秒时间,移动到当前位于35号柱面,且当前的移动方向向柱面号增加的方向.请计算: (1)若 ...
- 试题公式解决方案--kindeditor集成jmeditor公式web编辑器
最近在搞一套在线的考试系统,一直为即支持公式编辑又得支持各种附件上传.图片上传.视频音频上传.文字编辑 的web编辑器而犯愁.于是乎试着把 kindeditor和jmeditor集成一下,多了不说了直 ...
- jsp c:forEach用法
<c:foreach>类似于for和foreach循环 以下是我目前见过的用法:1.循环遍历,输出所有的元素.<c:foreach items="${list}&quo ...
- Counting Intersections
Counting Intersections Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- HDU 3265 Posters
矩形面积并,一个拆成四个 #include<cstdio> #include<cstring> #include<cmath> #include<map> ...
- Nexus搭建私服 学习
为什么要搭建nexus私服 因为有些公司不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以,有必要再局域网里找一台有外网权限的机器.搭建nexus私服,然后开发人员连接到这台私服 ...
- [转] SpringJdbc的几种不同的用法
转自:http://vsp.iteye.com/blog/1182887 Spring对jdbc做了良好的封装,本人在学习时做了以下几种方式的尝试 首页先来创建一个dao接口 package com. ...
- (二)Jquery Mobile介绍以及Jquery Mobile页面与对话框
Jquery Mobile介绍以及Jquery Mobile页面与对话框 一. Adobe Dreamweaver CS6 环境 最新版本的cs6会支持JM的使用,有自动提示功能,很强大.安装说明地 ...
- 将USBASP改造成STK502编程器(转)
源:将USBASP改造成STK502编程器 现在淘宝上还有不少USBasp或者USBisp的51/AVR编程器,它们使用了开源的USBasp硬件,以及PROGISP软件或者其它一些下载软件.其实我们可 ...