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编程之SparseArray<E>详解
最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能.那我们就来看看源码中SparseAr ...
- plsql找外键约束关联的表的方法
直接Ctrl + 鼠标左键 表名 就可以找到参照表(关联表)的名称 下面的是复杂的方法 这个就是关联的表 这里右键查看 可以查看到参照的表
- jsp 获取cookie 的值的方法
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- Android学习之Service(1)--->Started方式
界面退出后进程程序还在运行,不会被杀死,如音乐播发器.后台下载等 注:本文只讨论Started方式 main.xml代码分析 <?xml version="1.0" enco ...
- Android--->Button按钮操作
main.xml中设置两个按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xm ...
- Python 函数简介之一
面向对象--->对象------>Class 面向过程--->过程------>def 函数式编程--->函数---->def 函数的介绍: def fun1(): ...
- sql server 2008 把远程的数据库的数据转移到本地数据数据库里
如题:把远程的数据库对应表里的数据转移到本地数据数据库的对应表里 比如把192.168.188.160的DB的A表的数据转移到本地的DB的A表里 第一步:连接远程服务器前准备 exec sp_addl ...
- 浏览器加载外部js 的顺序,以及处理顺序。
问题, 有事候按F12打开 google的调试台后,查看network下面加载过来的资源是, 有些资源的状态处于 pending.. 个人理解: 浏览器是可以同时开启多个http 请求去加载外部的资源 ...
- Windows上mxnet实战深度学习:Neural Net
前提: 假设已经在Windows上安装配置好mxnet和python语言包. 假设mxnet安装目录为D:\mxnet 假设已安装好wget 可以参考 这篇文章 打开Windows的命令提示符: 执行 ...
- UIScroll和UIPickView
.h #import <UIKit/UIKit.h> #define WIDTH self.view.frame.size.width #define HEIGHT self.view.f ...