Apache +Jetty的负载均衡与集群配置 一.搭配环境 (一).jetty的安装和配置 Jetty_a: 192.168.55.229 Jetty_b: 192.168.55.231 (1)安装jdk 下载将jdk加压后放到/usr/local目录下: [root@master ~]#chmod 755 jdk-6u5-linux-x64.bin [root@master ~]# ./jdk-6u5-linux-x64.bin [root@master ~]#mv jdk1.6.0_05 /usr/local 建立/usr/local/下的jdk软链接方便以后版本升级 : [root@master ~]# ln -s /usr/local/jdk1.6.0_05/ /usr/local/jdk (2)安装apache-maven,并设置环境变量 [root@master zy]# tar -zxvf apache-maven-2.2.1-bin.tar.gz [root@master zy]# mv apache-maven-2.2.1 /usr/local/maven [root@master zy]#vim /etc/profile 添加以下内容: JAVA_HOME=/usr/local/jdk1.6.0_05 JAVA_BIN=/usr/local/jdk1.6.0_05/bin PATH=$PATH:$JAVA_BIN:/usr/local/maven/bin CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar JETTY_HOME=/usr/local/jetty export JAVA_HOME JAVA_BIN PATH CLASSPATH JETTY_HOME [root@master zy]# source /etc/profile [root@master zy]# mvn --version Apache Maven 2.2.1 (r801777; 2009-08-07 03:16:01+0800) Java version: 1.6.0_05 Java home: /usr/local/jdk1.6.0_05/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux" version: "2.6.18-238.el5" arch: "amd64" Family: "unix" (3)安装启动jetty [root@master zy]# unzip jetty-6.1.14-fgw-aps.zip [root@master zy]# mv jetty-6.1.14-fgw-aps /usr/local/jetty [root@master jetty]# java -jar start.jar【或者进去到bin目录,然后执行./jetty.sh start 】 [root@master bin]# ./jetty.sh start Starting Jetty: STARTED Jetty Mon Jul 11 11:54:03 CST 2011 [root@master bin]# 2011-07-11 11:54:04.014:INFO::Redirecting stderr/stdout to /usr/local/jetty/logs/2011_07_11.stderrout.log
在浏览器中输入 http://192.168.55.229:8080/remote.html(这里加上remote.html的原因是避免和tomcat冲突,实际上http://192.168.55.229:8080也能够访问到,但是前提是必须把tomcat给禁掉。或者在jetty.xml中将端口改成9009,此时我们就可以直接访问http://192.168.55.229:9009) (4)简单部署一个应用 [root@master jetty]# cd webapps/ [root@master webapps]# ls Fgw [root@node2 webapps]# cd fgw/ [root@master fgw]# vim index.jsp <%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.*" %> <html><head><title>Cluster Test</title></head> <body> <% //HttpSession session = request.getSession(true); System.out.println(session.getCreationTime()); out.println("<br> SESSION ID:" + session.getId()+"<br>"); out.println("Session serviced by jetty_a"+"<br>"); out.println("Session created time is :"+session.getCreationTime()+"<br>"); %> </body> </html> 测试:http://192.168.55.229:9009/fgw/
同样方法的配置jetty_b,测试结果为: (二)Apache的安装和配置(采用源码编译安装的方式) Apache的地址为:192.168.50.50 #tar xzvf httpd-2.2.17.tar.gz #cd httpd-2.2.17 # ./configure --with-ldap --enable-mods-shared="all ssl ldap cache proxy authn_alias mem_cache file_cache authnz_ldap charset_lite dav_lock disk_cache"【此选项为编译所有的模块】 1. 测试 /usr/local/apache2/conf/httpd.conf 中 设置 ServerName localhost #cd /usr/local/apache2/bin #./apachectl start 将出现类似httpd (pid 17040) already running的输出 访问地址:http://192.168.50.50 It works!hehe... 说明已经成功~\(≧▽≦)/~啦啦啦,(~ o ~)~zZ 二.(1)mod_proxy负载均衡配置 1.加载proxy模块 所有需要加载的代理模块为mod_proxy.so,mod_proxy.ajp.so,mod_proxy.http.so,mod_proxy.ftp.so,mod_proxy.connect.so,mod_proxy.balancer.so 由于已经将所有模块加载,所以不用在配置中做修改,即为/usr/local/apache2/conf/httpd.conf文件中的如下指令: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 2.配置虚拟主机proxyblancer 在/usr/local/apache2/conf/httpd.conf尾部添加Include conf/app1.conf 在conf/app1.conf 中添加以下内容: Listen 8051 ServerAdmin angel.zhu@99bill.com# 指定服务器管理员的E-MAIL地址,服务器自动将错误报告给该地址 ServerName localhost # web客户端搜索的主机名 ErrorLog "/opt/apache_log/app1_error.log" CustomLog "/opt/apache_log/app1_access.log" common ProxyPass / balancer://cluster/ stickysession=JESSIONID|jessionid nofailover=On lbmethod=byrequests timeout=5 maxattempts=3 # balancer: 复制会话的方式,包括 ProxyPassReverse / balancer://cluster/ #此指令使Apache调整HTTP重定向应答中Location, Content-Location, URI头里的URL。这样可以避免在Apache作为反向代理使用时,后端服务器的HTTP重定向造成的绕过反向代理的问题。 #The ProxyRequests directive should usually be set off when using ProxyPass. ProxyRequests Off# 不允许作为正向代理 ProxyPreserveHost On# 当启用时,此选项将把传入请求的"Host:"行传递给被代理的主机,而不是传递在ProxyPass中指定的主机名。 <proxy balancer://cluster> BalancerMember ajp://192.168.55.229:8009 route=jetty_a BalancerMember ajp://192.168.55.231:8009 route=jetty_b # rout 值附加在session ID 后面 </proxy> </VirtualHost> 3.修改jetty.xml中的配置文件
<!-- =========================================================== --> <!-- Set up global session ID manager --> <!-- =========================================================== --> <Set name="sessionIdManager"> <New class="org.mortbay.jetty.servlet.HashSessionIdManager"> <Set name="workerName">jetty_a</Set> </New> </Set> 使得workername和apache中的route值一致:分别将其值改成jetty_a和jetty_b即可。 4.开启jetty的AJP端口 可以查看/usr/local/jetty/etc中的文件jetty-ajp.xml 【注意:要和上面apache中提到的AJP端口一致】
我们可以在/usr/local/jetty目录中编写个脚本: vim startjetty.sh 注意: 堆(Heap)和非堆(Non-heap)内存 -D<name>=<vale> 设置Java系统所有权(eg:-Dfgw.sourceId=FGW001) -Dfgw fgw是webapp中的应用包名称,便于查找 -XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息
然后执行sh startjetty.sh [root@master jetty]# sh startjetty.sh SelectChannelConnector@0.0.0.0:9009 2011-07-12 14:22:47.134::INFO: Started Ajp13SocketConnector@0.0.0.0:8009 2011-07-12 14:22:47.134::INFO: AJP13 is not a secure protocol. Please protect port 8009 (5)分别测试jetty 在/usr/local/jetty/webapps/fgw中编辑index.jsp 内容分别如下:
未完待续!!【由于图片无法上传,只能接着另写了,~~~~(>_<)~~~~ 】 |
|