前阵子调了linux下的负载,网上很多资料,但是不太全,自己就整理了一下,希望对大家有帮助
(这是我配置完后写的,忘记截图了,抱歉!)
从安装jkd到完成负载一步步详细道来:
linux和window下的负载都差不多,linux的负载就是在安装apache的时候繁琐了点,特别是g++安装,还有在两台机子测试的最好用同版本的tomcat
window下的apache要安装:apache_2.2.4-win32-x86-no_ssl.msi
Linux下载地址:http://www.centoscn.com/CentosSoft/
Jdk下载:这里使用rpm格式的包
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
tomcat下载:http://tomcat.apache.org/
apache下载:http://httpd.apache.org/download.cgi#apache24
Apr和apr-util下载:http://apr.apache.org/download.cgi
Pcre下载:http://sourceforge.net/projects/pcre/files/pcre/
我使用的包:http://download.csdn.net/detail/luoruxian/7364179
Tar.gz包解压:tar –zxvf 包名
Rpm包安装:rpm -ivh 包名
所需要用的包都放在Desktop下
安装步骤:
1、 先安装jdk和tomcat,
打开终端
安装jdk 指令:rpm –ivh 包名
那我们可以到/usr/java 进入这个目录 看到java 文件夹 ,java文件夹里面还有一个 jdk1.0_26的文件 说明已经安装对了
安装完成后配置环境变量了
指令:vi /etc/profile,按i进入编辑模式
在这个区域内输入以下3条命令
export JAVA_HOME=/usr/java/jdk1.7.0_02
export CLASSPATH=$JAVA_HOME/bin/dt.jar:$JAVA_HOME/bin/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
按ESC键输入:wq保存退出 q退出 q!不保存强制退出
到此jdk安装完毕。可以输入指令java –version查看
把tomcat解压出来指令:tar –zxvf 包名
然后复制到 /usr/local下
指令:cp –r 包名 /usr/local/tomcat1
多复制一个tomcat 名为tomcat2
配置环境变量
指令:vi /etc/profile,按i进入编辑模式
在刚才的配置下面加上这2条命令
export CANALITA_HOME=/usr/local/tomcat1
export CANALITA_BASE=/usr/local/tomcat1
保存退出,可以启动tomcat测试下
进入tomcat1 指令:/usr/local/tomcat1/bin
然后启动tomcat 指令:sh startup.sh 关闭tomcat的指令:sh shutdown.sh
2、 当安装apache时会提示你缺少apr,所以需要安装
Apr和apr-util
解压apr和apr-util
回到桌面进入apr 指令:cd apr包名
然后输入指令:./configure --with-apr=/usr/local/apr
完成之后编译,指令:make
然后安装,指令:sudo make install
Apr-util的安装方法和上面一样
3、安装完这2个之后呢,在apache安装时又有新的提示,缺少pcre,pcre的安装需要gcc和g++。gcc在安装centos时有了,我们只需要安装g++即可,安装g++比较繁琐。首先要确保的是你的centos系统的镜像文件还在,因为在该镜像文件的packages文件夹下有我们所需要的gcc-c++安装包和安装gcc-c++的所有依赖包
依赖包如下:版本号有区别(注:如果有些实在找不到可以跳过)
kernel-headers-2.6.18-128.el5.x86_64.rpm
compat-glibc-headers-2.3.4-2.26.x86_64.rpm
compat-glibc-2.3.4-2.26.x86_64.rpm
compat-libstdc++-33-3.2.3-61.x86_64.rpm
compat-libf2c-34-3.4.6-4.x86_64.rpm
compat-libgcc-296-2.96-138.i386.rpm
cpp-4.1.2-44.el5.x86_64.rpm
glibc-headers-2.5-34.x86_64.rpm
glibc-devel-2.5-34.x86_64.rpm
libgomp-4.3.2-7.el5.x86_64.rpm
libstdc++-devel-4.1.2-44.el5.x86_64.rpm
gcc-4.1.2-44.el5.x86_64.rpm
compat-gcc-34-3.4.6-4.x86_64.rpm
compat-gcc-34-c++-3.4.6-4.x86_64.rpm
以上的依赖包要按顺序安装,安装完依赖包之后就可以安装gcc-c++包了
使用指令:rpm –ivh 包名 按顺序安装即可
4、 之后就可以安装pcre了
解压pcre的包 指令:tar -zxvf pcre-8.32.tar.gz
然后进入该包 指令:cd 包名
接着输入指令:./configure --enable-utf8
然后编译指令:make
安装指令: make install
5、 安装完pcre之后,可以安装apache了
解压apache包,然后进入该包:指令cd 解压后的包名
然后执行该指令:./configure --enable-so --enable-mods-shared=most --with-mpm=worker
然后编译指令:make
安装指令:sudo make install
安装完成之后,启动apache
进入apache2 指令:cd /usr/local/apache2/bin
启动apache 指令:apachectl start 结束为stop 重启restart
这时可以打开网页,输入localhost,显示 It Works!说明apache安装成功
下面是负载均衡的配置
负载需要用到mod_jk.so
下载:http://pan.baidu.com/share/link?shareid=3998581769&uk=34256769
解压tomcat-connectors-1.2.40-src.tar.gz包,得到tomcat-connectors-1.2.40-src
进入 指令: cd tomcat-connectors-1.2.40-src
然后进入native文件夹 指令:cd native
然后再执行该指令:./configure --with-apxs=/usr/local/apache2/bin/apxs
编译它 指令:make
使用指令ls查看文件,进入apache-2.0 指令:cd apache-2.0
查看文件,这时你会看到一个mod_jk.so文件,这就是我们所需要的了
把它复制到apache2下的modules文件夹下
指令:cp –rmod_jk.so /usr/local/apache2/modules
完成之后进入apache2的conf文件夹指令:cd /usr/local/apache2/conf
在该文件夹下新建2个文件名为 mod_jk.conf 和 workers.properties
指令:touchmod_jk.conf touch workers.properties
进入httpd.conf文件 指令:cd /usr/local/apache2/conf 编辑: vi httpd.conf
在最后面添加这段
# JK module settings
Include conf/mod_jk.conf
保存退出
#号代表注释
Mod_jk.conf的内容如下:
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Where to find workers.properties( 引用 workers 配置文件 )
JkWorkersFile conf/workers.properties
# Where to put jk logs(log 文件路径 )
JkLogFile logs/mod_jk.log
# Set the jk log level[debug/error/info](log 级别 )
JkLogLevel info
# Select the log format(log 格式 )
JkLogStampFormat "[%a %b %d %H:%M:%S%Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat-ForwardDirectories
# JkRequestLogFormat set the request format
JkRequestLogFormat "%w %V %T"
# Send JSPs for context / to worker namedloadBalancer(URL 转发配置,匹配的 URL 才转发到 tomcat 进行处理 )
JkMount /* controller
注:worker.tomcat1.port=8009这里的8009是以下配置的port
workers.properties的内容如下:
#server 列表
worker.list = controller,tomcat1,tomcat2
# tomcat1(ajp13 端口号,在tomcat下server.xml配置,默认8009)
worker.tomcat1.port=8009
#tomcat 的主机地址,如不为本机,请填写ip地址
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
#server 的加权比重,值越高,分得的请求越多
worker.tomcat1.lbfactor = 1
# tomcat2
worker.tomcat2.port=9009(因为是在同一台机子上运行2个tomcat端口都需要改)
worker.tomcat2.host=localhost(不是本机就写相应的ip)
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 2
# controller( 负载均衡控制器)
worker.controller.type=lb
# 指定分担请求的tomcat
worker.controller.balance_workers=tomcat1,tomcat2
worker.controller.sticky_session=true
(注:true,apache会把同一个session的请求一直交个该session第一次请求所访问的tomcat处理,如果为false,apache就会把每次请求平分给2给tomcat处理,这样就会造成session的改变,所以必须要建立集群才行,共享session)
接下来就要配置tomcat的server.xml文件了
要实现负载均衡,如果2个tomcat都在本机上,其实tomcat的server.xml只需要改端口就可以了,不能有端口冲突,这里把tomcat2的server.XML的所有端口都改掉
(注:当然,tomcat在不同的服务器的话端口就不会冲突,也就不需要我们去改)
如下所示:
新建一个web项目测试,修改index.jsp文件
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>
ServerInfo:
<%
out.println(request.getLocalAddr()+ " : " + request.getLocalPort()+"
");%>
<%
out.println("
ID " + session.getId()+"
");
// 如果有新的 Session 属性设置
StringdataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
StringdataValue = request.getParameter("dataValue");
session.setAttribute(dataName,dataValue);
}
out.println("Session 列表
");
System.out.println("============================");
Enumeration e =session.getAttributeNames();
while(e.hasMoreElements()) {
Stringname = (String)e.nextElement();
Stringvalue = session.getAttribute(name).toString();
out.println( name + " = " + value+"
");
System.out.println( name + " = " + value);
}
%>
名称:text size=20 name="dataName">
值:text size=20 name="dataValue">
submit>
把项目部署到2个tomcat上,运行2个tomcat,然后运行apache
(注:启动顺序不要乱,如果apache已经启动了,那在启动2个tomcat之后重新启动apache就可以了)
打开网页输入:http://localhost/项目名 就可以了
注意了,这里不用输入端口号,因为请求先发送给apache,然后再由apache通过判断转发给tomcat的
好了,以上就能实现负载均衡了
再说一下就是,网上很多都是负载+集群的,但都实现不了(至少我试验了很多次都不行)
所以提醒一下大家,集群的配置除了要修改tomcat的server.xml文件外
还需要在web.xml文件添加
还有最重要的一点,session必须序列化