现在的位置: 首页 > 综合 > 正文

Linux系统下Nginx+keepalived搭建双机热备负载集群

2013年12月11日 ⁄ 综合 ⁄ 共 3381字 ⁄ 字号 评论关闭

说明:

1、 使用Nginx+keepalved实现负载均衡,解决单点与高流量并发问题

一、 Nginx+keepalved实现负载均衡

WHY? 为什么用Nginx而不用LVS?

7点理由足以说明一切:

1 、高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 ~ 3 万并发连接数。 

2 、内存消耗少: 在 3 万并发连接下,开启的 10 个 Nginx 进程才消耗 150M 内存( 15M*10=150M )。 

3 、配置文件非常简单: 风格跟程序一样通俗易懂。 

4 、成本低廉: Nginx 为开源软件,可以免费使用。而购买 F5 BIG-IP 、 NetScaler 等硬件负载均衡交换机则需要十多万至几十万人民币。 

• 使用 Nginx 做七层负载均衡的理由 

5 、支持 Rewrite 重写规则: 能够根据域名、 URL 的不同,将 HTTP 请求分到不同的后端服务器群组。 

6 、内置的健康检查功能: 如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。 

7 、节省带宽: 支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

进一步说明:

Keepalived是Linux下面实现VRRP 备份路由的高可靠性运行件。基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。

Nginx是基于Linux 2.6内核中epoll模型http服务器,与Apache进程派生模式不同的是Nginx进程基于于Master+Slave多进程模型,自身具有非常 稳定的子进程管理功能。在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠 性,Slave进程所有的业务信号都由主进程发出,Slave进程所有的超时任务都会被Master中止,属于非阻塞式任务模型。

服务器IP存活检测是由Keepalived自己本身完成的,将2台服务器配置成Keepalived互为主辅关系,任意一方机器故障对方都能够将IP接 管过去。

Keepalived的服务IP通过其配置文件进行管理,依靠其自身的进程去确定服务器的存活状态,如果在需要对服务器进程在线维护的情况下,只需要停掉 被维护机器的Keepalived服务进程,另外一台服务器就能够接管该台服务器的所有应用。

本文出自:守住每一天 http://liuyu.blog.51cto.com/183345/305145


快速配置方法:

A、环境:

centos5.3、nginx-1.0.11、keepalived-1.2.2 

主nginx负载均衡器:192.168.9.154

辅nginx负载均衡器:192.168.9.155

vip:192.168.9.188

B、安装keepalived

#tar zxvf keepalived-1.2.2 .tar.gz

#cd keepalived-1.2.2

#./configure --prefix=/usr/local/keepalived

#make 

#make install

可能出现的问题

keepalived 安装!!! OpenSSL is not properly installed on your system.
解决办法yum install openssl-devel



#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

#cd /etc/keepalived/

vim keepalived.conf

! Configuration File for keepalived

global_defs {

notification_email {

51cto@51cto.com

}

notification_email_from keepalived@chtopnet.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.9.155 <==辅nginx的IP地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.9.188 <==VIP地址

}

}

#service keepalived start

辅机的配置文件:

! Configuration File for keepalived

global_defs {

notification_email {

51cto@51cto.com

}

notification_email_from keepalived@chtopnet.com

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

mcast_src_ip 192.168.9.154 <==主nginx的IP的地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass chtopnet

}

virtual_ipaddress {

192.168.9.188

}

}

检查其配置: ip a 

测试:停主看辅是否接管

配置Nginx负载均衡

在nginx.conf中配置如下内容

use epoll;###epoll模式
events {
    use epoll;
    worker_connections  51200; // 运行要使用ulimit -SHn 51200
}

upstream 192.168.9.155(在154机器上nginx.conf配置192.168.9.154){
      server 192.168.9.100; //Web服务器01
      server 192.168.9.101; //Web服务器02
 }
下面这块不是必须的 但要优化
 ************************************
 client_header_buffer_size 32k;
 large_client_header_buffers 4 32k;
 ************************************

location / {
             proxy_pass    http://192.168.9.155;
             proxy_set_header Host    $host;
             proxy_set_header X-Real-IP    $remote_addr;
             proxy_set_header X-Forwarded-For     $proxy_add_x_forwarded_for;

 }######后端源Web服务器通过X-Forwarded-For获取用户真实IP地址

不是必须 配置监控
**********************************
 location /nginx_status {
                       stub_status on;
                       access_log off;
                       allow 192.168.9.20;
                       deny all;
}######这个就是简单监控nginx的状态
**********************************
(2)测试配置是否正常
/usr/local/nginx/sbin/nginx -t

然后进行测试 在192.168.9.100和192.168.9.101 启动nginx让显示的内容不同这样看效果明显

再对keepalived主辅进行测试 停用一台 看是否另一台接管

抱歉!评论已关闭.