分类: LINUX
2010-10-14 15:41:43
软件及环境:
apache-tomcat-6.0.29
nginx-0.8.15
centos5.5
nginx:192.168.1.251
tomat1:192.168.1.251
tomat2:192.168.1.252
tomcat安装目录为:/usr/local/tomcat
nginx安装目录为:/usr/local/nginx
jdk、tomcat、nginx安装过程省略!
Tomcat1配置如下:
修改
在Engine字段中添加下cluster内容:
channelSendOptions="6" defaultMode="true">
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
address="228.0.0.2" 组播地址-->
bind="192.168.1.251" 绑定本机的IP-->
port="45564" 通信端口-->
frequency="500"
dropTime="3000"/>
address="192.168.1.251"
autoBind="100"
port="5001"
selectorTimeout="100"
maxThreads="6"/>
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
Tomcat2配置如下:
修改
在Engine字段中添加下cluster内容:
channelSendOptions="6" defaultMode="true">
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
address="228.0.0.2"
bind="192.168.1.252"
port="45564"
frequency="500"
dropTime="3000"/>
address="192.168.1.252"
autoBind="100"
port="5002"
selectorTimeout="100"
maxThreads="6"/>
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
配置nginx负载:
使用nginx做负载很简单,只要在配置文件里面加
upstream {
# ip_hash; //启用这个的话,整个C类地址会防问同一个server
server 192.168.1.251:8080;
server 192.168.1.252:8080;
#两台负载的IP地址,这里默认的是RR
}
server
{
listen 80;
server_name _;
location / {
proxy_pass http://;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
到这里配置文件就OK了,服务器的启动顺序如下:
|-------------| |-------------| |-------------|
|tomcat1 | --à |tomcat2 | --à |nginx |
|-------------| |-------------| |-------------|
先启动tocmat1,等tomcat1启动完全的时候再启动tomcat2,等两个tocmat全启动之后,再启动nginx
测试一下我们的配置,测试页如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<%
//HttpSession session = request.getSession(true);
System.out.println(session.getId());
out.println("
SESSION ID:" + session.getId()+"
");
// 如果有新的请求,则添加session属性
String name = request.getParameter("name");
if (name != null && name.length() > 0) {
String value = request.getParameter("value");
session.setAttribute(name, value);
}
out.print("Session List:");
Enumeration
while (names.hasMoreElements()) {
String sname = names.nextElement();
String value = session.getAttribute(sname).toString();
out.println( sname + " = " + value+"
");
System.out.println( sname + " = " + value);
}
%>
名称:
值:
提交">
配置WEB-INF下的web.xml文件,在
然后我们就可以用nginx来防问了!
先防问,然后随便关闭那一个,再开启,发现SESSION都是同步的!
PS:
负载的时候可以用APACHE或NGINX,如果什么都不用,两台一接防问了话,可能会出错极session不同步的问题,网上也很多人介意不要做seeeion同步,这样会降低机器的性能,有一个方法可以,就是NGINX的ip_hash,这样至少可以保证客户端去防问同一台TOCMAT,除非那台TOCMAT挂了!