Load Balance
Load Balance
1 环境说明
1. 服务器有
4台,一台内核的linux2.6.9安装apache,三台安装Tomcat。
2. apache2.2.4 、
apache-tomcat-5.5.17、jdk-6u1-linux-i586-rpm.bin或者 jdk1.5.6
ip配置,一台安装apache的ip为180.200.1.189,三台安装tomcat的服务器ip分别为180.200.1.111/136/42。当然需要修改成你自己的IP地址。
3. 下载地址为
下载
tomcat and apache
http://apache.org
下载
jdk
http://java.sun.com
2 Tomcat安装
1. 在三台要安装
tomcat的服务器上先安装jdk
2. 配置
jdk的安装路径,在环境变量path中加入jdk的bin路径,新建环境变量JAVA_HOME指向jdk的安装路径
3. 在三台要安装
tomcat的服务器上分别安装tomcat,调试三个tomcat到能够正常启动
4. 分别测试每个
tomcat的启动是否正常
http://180.200.0.42:8080
http://180.200.0.136:8080
http://180.200.0.111:8080
3 Apache安装
解压
httpd-2.2.4.tar.gz
在那台要安装apache的服务器上安装apache2.2.4。在home下建立apache目录,把httpd-2.2.4.tar.gz上传到该目录下
[root@localhost apache]# tar xvzf httpd-2.2.4.tar.gz
[root@localhost apache]# cd httpd-2.2.4
配置 APACHE安装文件
这里需要注意编译前一定要将
proxy proxy_http proxy_ftp proxy_connect headers这些参数加进去,以便编译出下面的so文件
mod_proxy.so mod_proxy_connect.so mod_proxy_http.so mod_proxy_ftp.so mod_proxy_ajp.so mod_proxy_balancer.so
配置编译参数
[root@localhost apache]#./configure --prefix=/usr/local/apache224 --enable-so --enable-mods-shared="proxy proxy_http proxy_ftp proxy_connect headers"
编译
[root@localhost apache]# make
检查编译后的是否有编译出
so文件
[root@localhost apache]# cd /usr/local/apache224/modules
[root@localhost modules]#]# ls
httpd.exp
mod_proxy_ajp.so mod_proxy_connect.so mod_proxy_http.so
mod_headers.so mod_proxy_balancer.so mod_proxy_ftp.so
mod_proxy.so
如果存在以上文件则说明编译成功
安装
[root@localhost apache]# make install
启动
APACHE
[root@localhost apache]# /usr/local/apache224/bin/httpd -k start
测试
http://180.200.1.189/
如果输出
IT works那么就ok了
4 配置负载均衡
4.1. Tomcat配置
分别修改三个
tomcat的配置文件conf/server.xml以便测试
修改内容如下:
修改前 <!-- An Engine represents the entry point (within Catalina) that processes<br /> every request. The Engine implementation for Tomcat stand alone<br /> analyzes the HTTP headers included with the request, and passes them<br /> on to the appropriate Host (virtual host). --> <!-- You should set jvmRoute to support load-balancing via AJP ie :<br /> <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1"> <br /> --> <!-- Define the top level container in our container hierarchy --> 修改后 <!-- An Engine represents the entry point (within Catalina) that processes<br /> every request. The Engine implementation for Tomcat stand alone<br /> analyzes the HTTP headers included with the request, and passes them<br /> on to the appropriate Host (virtual host). --> <!-- You should set jvmRoute to support load-balancing via AJP ie :--> <!-- Define the top level container in our container hierarchy <br /> <Engine name="Catalina" defaultHost="localhost"><br /> --> 将其中的jvmRoute="jvm1"分别修改为jvmRoute="worker1"和jvmRoute=" worker2"和jvmRoute=" worker3" 然后重启三个tomcat,调试是否能够正常启动。
http://180.200.0.42:8080
http://180.200.0.136:8080
http://180.200.0.111:8080
4.2. Apache配置
4.2.1. 启用代理
1.
配置代理模块
[root@localhost ~]#vi /usr/local/apache224/conf/httpd.conf
查找代理是否打开
/LoadModule proxy_module
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
如果被注释则需要打开注释,如果不存在则需要添加进去
查找
httpd-vhosts.conf
/httpd-vhosts.conf
# Include conf/extra/httpd-vhosts.conf
打开注释
保存退出
:wq
4.2.2. 配置代理主机
[root@localhost ~]#vi /usr/local/apache224/conf/extra/httpd-vhosts.conf
#注释掉以下所有行
ServerAdmin [email protected]
DocumentRoot /www/docs/dummy-host.www.serviceapache.com
ServerName dummy-host.www.serviceapache.com
ServerAlias www.dummy-host.www.serviceapache.com
ErrorLog logs/dummy-host.www.serviceapache.com-error_log
CustomLog logs/dummy-host.www.serviceapache.com-access_log common
ServerAdmin [email protected]
DocumentRoot /www/docs/dummy-host2.www.serviceapache.com
ServerName dummy-host2.www.serviceapache.com
ErrorLog logs/dummy-host2.www.serviceapache.com-error_log
CustomLog logs/dummy-host2.www.serviceapache.com-access_log common
#添加以下信息
ServerName localhost
CustomLog logs/dmim_log combined
BalancerMember ajp://180.200.1.111:9109
BalancerMember ajp://180.200.0.42:8009
BalancerMember ajp://180.200.0.136:9309
BalancerMember ajp://180.200.1.189:8009
ProxyPass balancer://localhost/
#保存退出
:wq
5 部署
5.1. 编写测试代码
在三个
tomcat的安装目录中的webapps建立相同的应用,我和应用目录名为apa,在三个应用目录中建立相同 WEB-INF目录和页面index.jsp,index.jsp的页面内容如下
<!--page contentType="text/html; charset=GBK"--> <!--page import="java.util.*"--> Server Info: <!--r /> </font></span></span><span lang="EN-US"><font size="3">out.println(request.getRemoteAddr() + " : " + request.getRemotePort()+"<br> ");</font></span></p> <p class="MsoNormal"><span lang="EN-US"><font size="3"--> <!--r /> out.println("<br> ID " + session.getId()+"<br> ");<br /> <br /> // </font></span><span><font size="3">如果有新的<span lang="EN-US"> Session </span>属性设置</font><span lang="EN-US"><br /> <font size="3"> String dataName = request.getParameter("dataName");<br /> if (dataName != null && dataName.length() > 0) {<br /> String dataValue = request.getParameter("dataValue");<br /> session.setAttribute(dataName, dataValue);<br /> }<br /> <br /> out.print("<b>Session </font></span><font size="3">列表</font><font size="3"><span lang="EN-US"></b>");<br /> <br /> Enumeration e = session.getAttributeNames();<br /> while (e.hasMoreElements()) {<br /> String name = (String)e.nextElement();<br /> String value = session.getAttribute(name).toString();<br /> out.println( name + " = " + value+"<br> ");<br /> System.out.println( name + " = " + value);<br /> }<br /> --> <form action="index.jsp" method="post"> </form> : 值名称 :
5.2. 应用配置
对于要进行负载均衡
3个tomcat目录下的webapps中的应用中的WEB-INF中的web.xml文件要添加如下一句配置
例如:
<!--l version="1.0" encoding="UTF-8-->
TomcatDemo 配置后 <!--l version="1.0" encoding="UTF-8--> TomcatDemo
5.3. 打包部署
打包工程为
apa.war部署到Tomcat/webapps/下
6 测试
到此负载均衡已配置完成。测试负载均衡先测试
apache, 能否正常访问,并查询其中的内容,有三个tomcat的相关配置信息和负载说明,
重新启动:
apache 3 个tomcat
访问
http://180.200.1.189/apa/index.jsp
看是否能够运行能运行,则已建立负载均衡。
如果运行则会在界面上显示:
worker1或者worker2或者worker3
如输出以下信息:
Server Info: null : 80
180.200.1.111 : -1 ID 93BD00088DA36F586566057A9BB7CCAB.worker1
7 备注
1. 覆盖
httpd服务
确认
linux以前安装的httpd(apache)不需要了,你可覆盖掉以前apache的httpd文件。
chkconfig --add httpd
2. 加入系统启动队列
使用
chkconfig命令把apachectl命令加入到系统启动队列中:
chkconfig --add httpd
3. 查看
apachectl的状态
chkconfig --list httpd
4. 常用命令作为参考
/etc/rc.d/init.d/httpd restart
/etc/rc.d/init.d/httpd start
/etc/rc.d/init.d/httpd stop
5. 系统命令
Service httpd restart
Service httpd stop
Service httpd start
6. 检查
apache进程
ps -ef|grep httpd
7. 检查
80端口是否在监听
netstat -atn|grep "LIST" |grep "80" 或者
netstat -apn|grep '\<80>'
8. 列出启动错误日志
service httpd -E /
/
检查
apache2.2.4所有配置文件是否有错误
# /usr/local/apache2.2/bin/apachectl –t |