2013-12-08 13:30:01
来 源
itjs.cn
Nginx
本文介绍Linux系统下Nginx+keepalived搭建双机热备负载均衡高可用集群,希望对于初学Nginx服务器相关的朋友有帮助,更多Nginx安装、配置、报错处理等资源请本站内搜索。。
说明:

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服务进程,另外一台服务器就能够接管该台服务器的所有应用。

快速配置方法:

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 {

[email protected]

}

notification_email_from [email protected]

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 {

[email protected]

}

notification_email_from [email protected]

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主辅进行测试 停用一台 看是否另一台接管

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。