`
liu86th
  • 浏览: 118339 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[转] 企业级web负载均衡nginx+keepalived完美架构

 
阅读更多

此系统架构仅映射内网VIP的80及443端口于外网的Juniper防火墙下,其它端口均关闭,内网所有机器均关闭iptables及ipfw防火墙;外网DNS指向即通过Juniper映射出来的外网地址,而此映射的地址对映的其实是内网VIP地址。这里说下端口的问题,有的朋友可能会很疑惑,这样映射端口行不?通过项目实践得知,这样完全是可行的,php-cgi需要的9000端口及MySQL的3306端口均可走内网,完全不影响业务系统的运行。

 

另外,我维护的电子商务网站并发大约在1000左右,此时,Nginx+Apache集群运行得非常稳定,尤其是apache,并没有想象中那般弱;其实,在内存足够(>=8G)的情况,测试时不连数据库的话,单台apache+php5能顶得住6000并发,而且相当稳定。在网站升级架构方面,我不赞成全面淘汰生级,锦上添花式的升级会更好。


 

第一部分:Nginx+Keepalived的说明及环境说明

 

喜欢看我博客或文章的朋友都知道,我一直主力推崇Nginx+Keepalived作web的负载均衡高可用架构,并积极将其用于项目方案中;Nginx负载均衡作服务器遇到的故障一般有①服务器网线松动等网络故障;②服务器硬件故障从而crash;③nginx服务死掉;遇到前二者情况,keeaplived是能起到HA的作用的;然而遇到③种情况就没有办法了,但可以通过shell监控解决这问题,从而实现真正意义上的负载均衡高可用。此篇的最新更新时间为2010年6月25号,下面将其安装步骤详细说明下:

 

centos5.3(64位)、nginx-0.7.51、keepalived-1.1.15   

主nginx负载均衡器:192.168.0.154  

辅nginx负载均衡器:192.168.9.155  

vip:192.168.0.188

 

第二部分:分别安装Nginx负载均衡器及相关配置脚本

先安装Nginx负载均衡器,nginx负载的配置就用一般的模板来配置了

#添加运行nginx的用户和组www

groupadd www   
useradd -g www www   
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz  
tar zxvf pcre-7.8.tar.gz  
cd pcre-7.8/  
./configure  
make && make install  
wget http://sysoev.ru/nginx/nginx-0.7.51.tar.gz  
tar zxvf nginx-0.7.51.tar.gz  
cd nginx-0.7.51/  
./configure --user=www --group=www --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module  
make && make install

 

配置nginx负载均衡器的配置文件vim /usr/local/nginx/conf/nginx.conf,此篇文章仅仅只是我的某项目的配置文档,纯80转发;如果对nginx配置有https要求的可参考张宴的相关文章。

user www www;  
worker_processes 8;  
 
pid /usr/local/nginx/logs/nginx.pid;  
worker_rlimit_nofile 65535;  
 
events  
{  
use epoll;  
worker_connections 65535;  
}  
http{  
include       mime.types;  
default_type application/octet-stream;  
server_names_hash_bucket_size 128;  
client_header_buffer_size 32k;  
large_client_header_buffers 4 32k;  
client_max_body_size 8m;  
sendfile on;  
tcp_nopush     on;  
keepalive_timeout 60;  
tcp_nodelay on;  
fastcgi_connect_timeout 300;  
fastcgi_send_timeout 300;  
fastcgi_read_timeout 300;  
fastcgi_buffer_size 64k;  
fastcgi_buffers 4 64k;  
fastcgi_busy_buffers_size 128k;  
fastcgi_temp_file_write_size 128k;  
gzip on;  
gzip_min_length 1k;  
gzip_buffers     4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types       text/plain application/x-javascript text/css application/xml;  
gzip_vary on;  
 
upstream backend  
{  
server 192.168.1.102:80;  
server 192.168.1.103:80;  
server 192.168.1.105:80;  
}  
server {  
listen 80;  
server_name www.yuhongchun027.com;  
location / {  
root /var/www ;  
index index.jsp index.htm index.html;  
proxy_redirect off;  
proxy_set_header Host $host;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_pass http://backend;  
}  
 
location /nginx {  
access_log on;  
auth_basic "NginxStatus";  
auth_basic_user_file /usr/local/nginx/htpasswd;  
}  
 
log_format access '$remote_addr - $remote_user [$time_local] "$request" '  
'$status $body_bytes_sent "$http_referer" '  
'"$http_user_agent" $http_x_forwarded_for';  
access_log /var/log/access.log access;  
 
}  
} 

 

 小节:

 

第一部分和第二部分讲的是如何通过安装Nginx来达到负载均衡后端web集群的过程,Nginx能实现自动切换后端有故障的web服务器;但Nginx负载均衡器出了问题怎么办呢,它们之间是如何实现无故障转移的呢?

 

第三部分:安装Keepalived,让其分别作web及Nginx的HA

 

安装keepalived,并将其做成服务模式,方便以后调试。

 

wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz  
#tar zxvf keepalived-1.1.15.tar.gz  
#cd keepalived-1.1.15  
#./configure --prefix=/usr/local/keepalived  
#make   
#make install  
#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 {  
   yuhongchun027@163.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.0.154    <==主nginx的IP地址  
    priority 100  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        192.168.0.188                      <==vip地址  
    }  
}  
#service keepalived start

 我们来看一下日志:

[root@ltos ~]# tail /var/log/messages  
Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering new address record for 192.168.0.188 on eth0.  
Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering new address record for 192.168.0.154 on eth0.  
Oct 6 03:25:03 ltos avahi-daemon[2306]: Registering HINFO record with values 'I686'/'LINUX'.  
Oct 6 03:25:23 ltos avahi-daemon[2306]: Withdrawing address record for fe80::20c:29ff:feb9:eeab on eth0.  
Oct 6 03:25:23 ltos avahi-daemon[2306]: Withdrawing address record for 192.168.0.154 on eth0.  
Oct 6 03:25:23 ltos avahi-daemon[2306]: Host name conflict, retrying with <ltos-31>

 很显然vrrp已经启动,我们还可以通过命令来检查

[root@ltos html]# ip addr  
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue   
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
    inet 127.0.0.1/8 scope host lo  
    inet6 ::1/128 scope host   
       valid_lft forever preferred_lft forever  
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000  
    link/ether 00:0c:29:ba:9b:e7 brd ff:ff:ff:ff:ff:ff  
    inet 192.168.0.154/24 brd 192.168.0.255 scope global eth0  
    inet 192.168.0.188/32 scope global eth0  
    inet6 fe80::20c:29ff:feba:9be7/64 scope link   
       valid_lft forever preferred_lft forever  
3: sit0: <NOARP> mtu 1480 qdisc noop   
    link/sit 0.0.0.0 brd 0.0.0.0

 说明vip已经启动,这样主服务器就配置好了,辅机的配置大致一样,除了配置文件有少部分的变化,下面贴出辅机的配置文件:

! Configuration File for keepalived  
global_defs {  
   notification_email {  
   yuhongchun027@163.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.0.155              <==辅nginx的IP的地址  
    priority 100  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass chtopnet  
    }  
    virtual_ipaddress {  
        192.168.0.188  
    }  
} 

 第四部分:针对Keepalived的不足,用Nginx_pid.sh来监控nginx进程,实现真正意义上的负载均衡高可用。

 

针对Nginx+Keepalived,编写nginx监控脚本nginx_pid.sh,此脚本思路其实也很简单,即放置在后台一直监控nginx进程;如进程消失,尝试重启nginx,如是失败则立即停掉本机的keepalived服务,让另一台负载均衡器接手,此脚本直接从生产环境下载:

 

vim /root/nginx_pid.sh   
#!/bin/bash  
while  :  
do  
 nginxpid=`ps -C nginx --no-header | wc -l`  
 if [ $nginxpid -eq 0 ];then  
  /usr/local/nginx/sbin/nginx  
  sleep 5  
  nginxpid=`ps -C nginx --no-header | wc -l`
   if [ $nginxpid -eq 0 ];then  
   /etc/init.d/keepalived stop  
   fi  
 fi  
 sleep 5   
done

 然后置于后台运行 sh /root/nginx_pid.sh &,这种写法是错误的,这样你用root用户logout后,此进程会消失;正确写法为nohup/bin/bash /root/nginx_pid.sh &,附带下注释:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出root帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up),哈哈,差点老马失蹄了。

后记:

我的线上环境网络非常复杂,这也是LVS+Keepalived失败的原因。目前此套架构在1000并发的电子商务网站非常稳定,带来的直接影响就是nginx_backup一直处于闲置状态。相对于张宴的双机轮询而言,我感觉他的可能更加完美,因为目前我的Nginx仅仅只做了负载均衡器,如果以后有机会我会尝试做负载均衡器/反向代理加速。

  • 大小: 130.1 KB
分享到:
评论

相关推荐

    Nginx+KeepAlived+Tomcat负载架构

    本文将详细介绍如何通过`Nginx+KeepAlived+Tomcat`构建一个稳定、高效的负载均衡架构。 #### 二、关键技术介绍 ##### 1. Nginx - **简介**:Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)...

    Nginx+keepalived+tomcat实现性负载均衡(包含需要的包)

    在构建高性能、高可用性的Web服务时,使用...总之,Nginx+keepalived+tomcat的组合为Web服务提供了高可用性和负载均衡的能力,是企业级应用架构中的常见选择。通过合理的配置和优化,可以极大地提升系统性能和稳定性。

    nginx+keepalived+tomcat+redis文档

    ### Nginx+Keepalived+Tomcat+Redis 高可用与负载均衡架构解析 #### 架构概览 为了确保Web服务器的稳定运行及高效处理能力,采用Nginx+Keepalived+Tomcat+Redis的技术组合进行系统构建。这一架构通过多个组件的...

    nginx+keepalived实现高可用负载均衡方案.rar

    总的来说,"nginx+keepalived"方案通过结合Nginx的高性能和Keepalived的高可用性,构建了一个强大的、能够应对服务器故障的服务架构,是企业级应用的理想选择。在实际操作中,还需要根据业务需求调整配置,以达到...

    高可用的并发解决方案nginx+keepalived资料

    在Nginx+Keepalived架构中,Tomcat作为后端应用服务器,负责处理由Nginx转发的请求并返回响应。 **总结** "高可用的并发解决方案nginx+keepalived资料"组合,通过Nginx的高效并发处理和负载均衡,配合Keepalived的...

    企业级web负载均衡完美架构

    总的来说,企业级Web负载均衡完美架构通过Nginx的负载均衡能力和Keepalived的故障切换功能,为大型网站和电子商务平台构建了一个高效、安全且稳定的运营环境。它不仅提高了服务的可用性,还能应对高并发访问,确保...

    Linux应用-nginx+keepalived高可用教程.zip

    在IT行业中,构建高可用性服务是至关重要的,特别是在大型网站和企业级应用中。本教程聚焦于Linux环境下的nginx和keepalived结合使用,来实现一个强大的、高可用的Web服务器集群。以下是对这个主题的详细解释: **1...

    nginx+keepalived部署tomcat,mysql,redis集群部署

    在本部署方案中,我们构建了一个高可用的IT服务架构,包括了Nginx作为反向代理和负载均衡器、Keepalived实现Nginx的高可用、Tomcat作为Java应用服务器集群、MySQL作为关系型数据库,以及Redis作为缓存系统。...

    企业级keepalived高可用实战与Nginx负载均衡视频教程.zip

    本教程将深入探讨如何利用Keepalived实现高可用性以及如何结合Nginx进行负载均衡。这两个技术是现代Web服务架构中的关键组件,它们为企业提供了稳定、高效的服务运行环境。 Keepalived是一个开源项目,主要用于提供...

    Nginx高性能WEB服务器系列(超级详细)

    构建企业级 Nginx + Keepalived 集群架构 通过结合 Nginx 和 Keepalived 实现高可用的集群架构。 - **方案概述**: - Nginx 作为前端负载均衡器。 - Keepalived 用于监控主备节点的状态。 - 实现自动故障转移...

    keepalived-1.2.18+nginx-1.6.2

    【标题】"keepalived-1.2.18+nginx...这个组合在实际部署中,通常用于构建高可用、高性能的Web服务环境,适用于大型网站和企业级应用。通过Keepalived的高可用性和Nginx的高效处理,可以显著提高系统的稳定性和可靠性。

    linux搭建lvs虚拟vip实现nginx高可用

    总结来说,"linux搭建lvs虚拟vip实现nginx高可用"是一个包含多个层次的技术架构,通过Linux系统、Nginx服务器、LVS负载均衡和Keepalived故障恢复工具的组合,可以构建出一个高效且可靠的7*24小时运行的Web服务环境。...

    架构师实战Nginx构建高性能WEB服务器

    ### 架构师实战Nginx构建高性能WEB服务器 #### 1. Nginx入门简介 Nginx是一款高效、稳定、功能丰富的Web服务器软件,同时也是一款优秀的反向代理服务器和邮件代理服务器。Nginx最初由Igor Sysoev为解决当时Web...

    基础架构_产品简介_负载均衡1

    阿里云提供的负载均衡服务是企业级的云上负载分发解决方案,能够帮助用户应对高并发访问和大规模分布式应用的需求。 负载均衡的工作原理主要涉及以下几个关键技术: 1. **TCP与UDP协议**:TCP(Transmission ...

    阿里云ECS+SLB的架构

    - **七层负载均衡**:使用Tengine(基于Nginx的扩展版本)作为主要工具,Tengine由阿里巴巴集团内部开发,针对大规模网站的需求,提供了许多高级功能和优化措施,如更高的并发连接数、更快的响应速度等。 #### 测试...

    Linux环境搭建 Apche+Tomcat 集群负载均衡

    - 对于生产环境,建议使用更高级的负载均衡解决方案,如Nginx+Keepalived等。 #### 六、总结 通过上述步骤,我们成功地在Linux环境下搭建了一个基于Apache+Tomcat的负载均衡集群。这种架构不仅能够有效提升系统的...

    keepalived-2.2.7

    8. **扩展应用**:除了基本的VRRP和负载均衡,Keepalived还可以与其他技术结合,如Nginx、HAProxy等,构建更复杂的高可用架构。例如,可以配合Nginx实现Web服务的高可用,或者与HAProxy结合实现更精细的负载均衡策略...

    keepalived-2.0.18.zip

    《深入理解Keepalived:基于2.0.18...结合Nginx,可以构建出一套安全可靠的Web服务架构,为企业级应用提供坚实的后盾。通过深入理解和熟练运用Keepalived,系统管理员可以更好地应对服务中断的风险,保障业务的连续性。

    负载均衡haproxy2

    【负载均衡Haproxy2】 Haproxy是一款开源且高性能的代理服务器,它专注于TCP和HTTP...同时,Haproxy支持多种负载均衡算法和会话保持,以及虚拟主机和服务器状态监控等功能,使得它成为企业级网络环境中不可或缺的工具。

Global site tag (gtag.js) - Google Analytics