【.com独家专题】笔者曾为客户设计了一系列项目方案,在实际施工中发现:如果客户有24小时监控人员,单个Nginx是没有问题的(很多为客户设计1+2架构可以满足客户需求),如果机器多,建议使用Keepalived作为双Nginx负载均衡器的HA。Nginx作为负载均衡器有很多优点,可以简单概括如下:①实现了灵活的架构,当压力增大时可以在该架构中临时加入tomcat服务器;②upstream具有负载均衡能力,可以自动判断后面的机器,自动踢掉不能正常提供服务的机器;③与lvs相比,正则分发和重定向更加灵活。但是Keepalvied可以保证单个nginx负载均衡器的有效性,避免单点故障。整个拓扑图如下:用于布置整个环境的软件是:apache-tomcat-6.0.20.tar.gzjdk-6u16-linux-i586.binnginx-0.7.17.tar.gzprce-7.7。tar.gz①首先在三台tomcat主机上布置java环境,安装tomcat。具体步骤如下(apache-tomcat-6.0.tar.gz可以在apache.org找到,jdk-6u16-linux-i586.bin可以直接用filediggerhttp://www.fdigg搜索下载。net/search_jdk-6-linux-i586.htm):第一步是安装java环境。JDK安装#chmod+xjdk-6u16-linux-i586.bin#./jdk-6u16-linux-i586.bin现在JDK已经安装好了,建立符号链接#ln-s/usr/local/jdk-1.6。0-16/bin/java/usr/bin/java#ln-s/usr/local/jdk-1.6.0-16/bin/javac/usr/bin/javacln-s/usr/local/jdk-1.6.0-16/usr/local/jdkln-s/usr/local/jdk-1.6.0-16/jre/usr/local/jreTOMCAT安装#tarzxvfapache-tomcat-6.0.20.tar.gz#mvapache-tomcat-6.0.20/usr/local/tomcat设置环境变量:vim/etc/rc.d/rc.local,以appendJAVA_HOME=/usr/local/jdkexportJAVA_HOMEJRE_HOME=/usr/local的形式添加如下内容/jreexportJRE_HOMECLASSPATH=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jre/libexportCLASSPATHPATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jre/binexportPATHTOMCAT_HOME=/usr/local/tomcatexportTOMCAT_HOME重启服务器,启动tomcat查看错误:#cd/usr/local/tomcat/bin#./startup.shhttp://IP地址:8080可以看到猫头了:)成功。#p#②在两个nginx负载均衡器上安装nginx并配置下载安装nginx:wgetftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.7.ta??r。gztarzxvfpcre-7.7.ta??r.gzcdpcre-7.7/./configuremake&&makeinstallwgethttp://sysoev.ru/nginx/nginx-0.7.17.tar.gztarzxvfnginx-0.7.17.tar.gzcdnginx-0.7.17/./configure--prefix=/usr/local/nginx--with-http_stub_status_modulemake&&makeinstall把nginx.conf配置文件贴在这里,没有任何说明,用X-shell直接贴很方便,很人性化:)两个nginx负载均衡器的文件是一样的。配置完成后,用/usr/local/nginx/sbin/nginx启动它们。用户wwwwww;worker_processes8;pid/usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile51200;事件{useepoll;worker_connections51200;}http{includemime.types;default_typeapplication/octet-stream;server_names_hash_bucket_size128;client_header_buffer_size32k;large_client_header_buffers432k;client_max_body_size8m;发送文件;tcp_nopushon;keepalive_timeout60;tcp_nodelayon;fastcgi_connect_timeout300;fastcgi_send_timeout300;fastcgi_read_timeout300;fastcgi_buffer_size64k;fastcgi_buffers464k;fastcgi_busy_buffers_size128k;fastcgi_temp_file_write_size128k;拉链;gzip_min_length1k;gzip_buffers416k;gzip_http_version1.0;gzip_comp_level2;gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;gzip_varyon;upstreambackend{server192.168.1.102:8080;服务器192.168.1.103:8080;服务器192.168.1.105:8080;}服务器{listen80;server_namewww.yuhongchun027.com;位置/{root/var/www;indexindex.jspindex.htmindex.html;代理红直接关闭;proxy_set_headerHost$主机;proxy_set_headerX-真实IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_passhttp://后端;}#location/nginx{#access_logon;#auth_basic“Nginx状态”;#auth_basic_user_file/usr/local/nginx/htpasswd;#}log_formataccess'$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.logaccess;}}③在二台Nginx机上安装及配置keepalived,做双机互备#wgethttp://www.keepalived.org/software/keepalived-1.1.15.tar.gz#tarzxvfkeepalived-1.1.15.tar.gz#cdkeepalived-1.1.15#./configure#make#makeinstallmakekeepalived开始步法为了便于管理:#cp/usr/local/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/#cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/#mkdir/etc/keepalived#cp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/#cp/usr/local/sbin/keepalived/usr/sbin/#servicekeepalivedstart|停在二站上OnNginx,我分别贴出keepalived.conf配置文件,配置完成后用servicekeepalivedstart启动。检验keepalived是否成功可用命令ipavrrp_instanceVI_INET1{stateMASTERinterfaceeth0virtual_router_id53priority200advert_int1authentication{auth_typepassauth_passyourpass}virtual_ipaddress{192.168.1.108}}vrrp_instanceVI_INET1{stateBACKUPinterfaceeth0virtual_router_id53priority100advert_int1authentication{auth_typepassauth_passyourpass}virtual_ipaddress{192.168.1.108}}#p#项目实施过程中遇到的问题:1.session复制问题之前使用apache做负载均衡的时候,选择使用sessionsticky模式。这样的话,每次有用户进来,都是在同一个服务器的session,不会转发到其他服务器。这样的话,即使tomcat不进行session复制,也不会影响用户访问;Nginx有一个类似的模块ip_hash可以解决这个问题,但是使用ip_hash后,nginx不能正常使用轮询来均衡客户的请求,分发到后端的tomcat服务器。好在客户对并发要求不高,更关心后端tomcat的高可用。2.页面同步方式①可以使用rsync自动同步方式。方法②后端使用存储,同源读取数据。方法③在程序中实现数据(如图片、文本)的动态检索,后端采用唯一数据库。3、测试公司测试组使用的测试工具是windows2003下的LoadRunner,功能很强大,但是使用ip_hash后有时结果不准确;解决方法是:在多台服务器上使用多测试工具,如:webbench、LoadRunner等进行交叉测试。另外,在生产环境中,1000并发是一个非常大的数值,而100万用户的系统往往达不到这个数字,这也让我们感到意外;4、安全:推荐放置Cisco四层防火墙+web防火墙的方式,效果相当不错;整个系统出口带宽建议100M,cisco防火墙映射整个系统的vip地址和80端口,系统内所有服务器关闭iptables防火墙。5、监控方面:使用传说中的监控之神Nagios,配合139邮箱,效果不错。另外,签到生产环境的严谨性,欢迎来信交流抚琴料酒:yuhongchun027@163.com。
