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