原文链接: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提供前端负载均衡+主从双机热备+自动切换的更多相关文章

  1. Nginx+keepalived 脚本安装主从双机热备自动切换解决方案

    Nginx+keepalived 脚本安装主从双机热备自动切换解决方案 2013-07-02 19:24:13 标签:filesnginx keepalived 原创作品,允许转载,转载时请务必以超链 ...

  2. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  3. Nginx+Keepalived主从双机热备+自动切换

    1 安装配置nginx 参考: http://www.cnblogs.com/jager/p/4388202.html 2 安装配置keepalived tar xvf keepalived-1.2. ...

  4. nginx+keepalive主从双机热备+自动切换解决方案

    环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作 yum install -y make wget 如果你愿意可以更新下系统,更换下yum源. 1.安装keepalive 官 ...

  5. lvs+keepalived+nginx实现高性能负载均衡集群【转】

    转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...

  6. Docker:docker部署PXC-5.7.21(mysql5.7.21)集群搭建负载均衡实现双机热部署方案

    单节点数据库弊端 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 推荐Mysql集群部署方案 PXC (Percon ...

  7. 前端通信:ajax设计方案(七)--- 增加请求错误监控、前端负载均衡以、请求宕机切换以及迭代问题修复

    距离上个迭代过了很长时间,中间经历了很多事情,也在每个空余时间构思了这个迭代的东西以及下个迭代要做的东西.时间周期稍微长了,望见谅. 而且,至今这个开源库的start也已经到了165个了,会支持关注和 ...

  8. Centos7 Mysql主从双机热备的实战记录

    操作系统:centos7 服务器:主:172.19.242.69   从:172.19.242.70 1. 服务器 由于Mysql不同版本之间的(二进制日志)binlog格式可能会不太一样,因此最好的 ...

  9. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

随机推荐

  1. C++设计模式-单件

    理解 1.       Singleton模式用来取代全局静态变量.C++通过静态成员变量来实现类实例全局唯一性. 2.       instance()方法是单件提供的唯一调用入口.   要点 1. ...

  2. GPRS管理与创建APN拨号连接(转)

    源:http://www.cnblogs.com/michael-zhangyu/archive/2009/07/04/1516797.html 本文主要介绍一些GPRS管理与创建APN拨号连接相关的 ...

  3. 原创:LoadTest系列之Local.testtings之Web Test

    在录制脚本后,需要对脚本进行回放,而在Loal.testting的Web Test设置中,可以设置脚本运行的次数,以及是否考虑think time等,如下图所示: 1. 双击Solution Item ...

  4. docker rancher 体验 (未完待续.....)

    docker rancher 体验 官方 githubhttps://github.com/rancher/rancher 环境说明: 10.6.0.14010.6.0.18710.6.0.188 修 ...

  5. Chapter 1 First Sight——4

    Charlie gave me an awkward, one-armed hug when I stumbled my way off the plane. 当我让我蹒跚的从飞机上下来,查理斯单手给 ...

  6. HDU 5176 The Experience of Love 带权并查集

    The Experience of Love Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  7. 安卓图表引擎AChartEngine(四) - 源码示例 嵌入Acitivity中的折线图

    前面几篇博客中都是调用ChartFactory.get***Intent()方法,本节讲的内容调用ChartFactory.get***View()方法,这个方法调用的结果可以嵌入到任何一个Activ ...

  8. php 自动发送邮件的实现

    原文: http://www.cnblogs.com/zichi/p/4058055.html http://www.jb51.net/article/32479.htm 效果: 访问: test.p ...

  9. ural1650 Billionaires

    Billionaires Time limit: 3.0 secondMemory limit: 64 MB You probably are aware that Moscow holds the ...

  10. (中等) POJ 3280 Cheapest Palindrome,DP。

    Description Keeping track of all the cows can be a tricky task so Farmer John has installed a system ...