nginx+tomcat集羣--(session同步)

ulimit -SHn 65535
echo "ulimit -SHn 65535" >>/etc/rc.local

環境:
redhat6.3、pcre-8.12、nginx-upstream-jvm-route-0.1、nginx-1.0.5、apache-tomcat-6.0.33
nginx服務器地址:192.168.10.40
tomcat1:192.168.10.20
tomcat2:192.168.10.30

拓撲如下:


繪圖1


1.安裝nginx

下載pcre包:

wget http://ftp.exim.llorien.org/pcre/pcre-8.12.tar.gz

tar zxf pcre-8.12.tar.gz
cd pcre-8.12
./configure
make;make install

下載下面的插件安裝,否則nginx無法識別tomcat中jvmRoute,從而無法達到session複製的效果。

wget http://friendly.sinaapp.com//LinuxSoft/nginx-upstream-jvm-route-0.1.tar.gz
tar xzf nginx-upstream-jvm-route-0.1.tar.gz

下載nginx源碼包:

wget http://nginx.org/download/nginx-1.0.5.tar.gz

tar xzf nginx-1.0.5.tar.gz
cd nginx-1.0.5
patch -p0 <../nginx_upstream_jvm_route/jvm_route.patch
/configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-pcre=/root/pcre-8.12 --add-module=../nginx_upstream_jvm_route/
#--with-pcre=指向的是pcre的源碼包;如果需要做nginx和tomcat動靜分離;可繼續添加模塊 --
make;make install

2.配置nginx

vim /usr/local/nginx/conf/nginx.conf

#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;

events {
worker_connections 5000;
}

http {
upstream backend {
server 192.168.10.20:8080 srun_id=tomcat1; //在tomcat的配置裏會配置jvmRoute爲tomcat1
server 192.168.10.30:8080 srun_id=tomcat2;
jvm_route $cookie_JSESSIONID|sessionid reverse;
}

include mime.types;
default_type application/octet-stream;
#charset gb2312;
charset UTF-8;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 20m;
limit_rate 1024k;
sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
#gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

server
{
listen 80;
server_name www.baiying.com;
index index.jsp index.htm index.html;
root /usr/www;

location / {
proxy_pass http://backend;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
location /Nginxstatus {
stub_status on;
access_log off;
}
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

}
}

----停止nginx:

[root@liang conf]# killall nginx

nginx啓動:

[root@liang conf]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf


3.安裝tomcat

下載tomcat包:

wget http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz

1)安裝tomcat_1
tar zxf apache-tomcat-6.0.33.tar.gz
mv apache-tomcat-6.0.33 /usr/local/tomcat

tomcat-replication.jar 下載地址:(--用於測試廣播!)

wget http://cvs.apache.org/~fhanik/tomcat-replication.jar

cp tomcat-replication.jar /usr/local/tomcat/lib
2)安裝tomcat_2,步驟同1)

4.分別在tomcat服務器安裝jdk

1)安裝jdk包之前查看服務器上的jdk,並且卸載;

[root@liang conf]# rpm -qa|grep java

tzdata-java-2012c-1.el6.noarch
java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64

現在分別卸載以上兩個包:

[root@liang conf]# rpm -e --nodeps tzdata-java-2012c-1.el6.noarch

[root@liang conf]# rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64

下面安裝新的jdk:如下

下載jdk包:--我這機器用wget直接下載出了問題;可嘗試加wget --no-cookie --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F"的下載方法:

如下:

wget --no-cookie --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-x64.rpm


2)安裝jdk包:

chmod 755 jdk-7-linux-x64.rpm

rpm -ivh jdk-7-linux-x64.rpm


2)修改java環境變量;

vim /etc/profile

最後添加下面行數:

export JAVA_HOME=/usr/java/jdk1.7.0
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin


source /etc/profile //使環境變量立即生效

5.tomcat集羣配置
tomcat1配置:
修改vim /usr/local/tomcat/conf/server.xml配置文件;找到Engine 這行修改,並且在這行添加

下面的 <Cluster .......

</Cluster>

總得爲下面再貼過去:

Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="224.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.10.20"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>


注意:以上有個IP爲address="192.168.10.20" 修改爲自己本機的ip。

address="192.168.1.102"組播IP,一般爲本機

address="224.0.0.4"#約定的廣播地址,所有服務器相同

port="4001"#集羣通訊端口--如果tomcat集羣在不同機器上端口可修改爲不同


tomcat2配置:
修改/usr/local/tomcat/conf/server.xml配置文件類似上面的tomcat1的配置:

如下:


<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="224.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.0.30"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>


注意:以上有個IP爲address="192.168.10.30" 修改爲自己本機的ip。


6.session配置

修改web應用裏面WEB-INF目錄下的web.xml文件,加入標籤
<distributable/>
直接加在</web-app>之前
開啓網卡組播功能: --(兩臺都運行同樣的如下命令)
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

7.修改tomcat的web主目錄--- 兩臺機器分別都運行。

vim /usr/local/tomcat/conf/server.xml

找到

<Host name="localhost" appBase="webapps"

unpackWARs="true" autoDeploy="true"

xmlValidation="false" xmlNamespaceAware="false">

在這行下面添加如下一行--即可把目錄換成了/liang/test/下:

<Context path="" docBase="/liang/test" debug="0" reloadable="true" />

7.創建jsp測試頁面
在tomcat1下建立目錄test
mkdir /liang/test/
vi index.jsp
<html>
<title>
tomcat1 jsp
</title>
<%
String showMessage="Oh My God 192.168.0.20 華仔!";
out.print(showMessage);
%>
</html>
----------------------------
在tomcat2下建立目錄test
mkdir /liang/test/
vi index.jsp
<html>
<title>
tomcat2 jsp
</title>
<%
String showMessage="Oh My God 192.168.0.30 華仔!";
out.print(showMessage);
%>
</html>

8.在兩臺tomcat上分別啓動tomcat 進行測試:

啓動命令:

cd /usr/local/tomcat/bin

./startup --啓動進行訪問


9.測試結果

訪問192.168.10.40 返回的結果爲tomcat1或者tomcat2上一臺後就不會改變訪問結果



注意: 中途有問題 可以在單獨搭建好tomcat後分別訪問tomcat的8080端口看是否能正常訪問網站

----如果不能,可查看下機器上的iptables等進行排錯。

補充:想要適當解決內存溢出問題jdk選jrockit-jdk1.6.0_29-R28.2.0-4.1.0-linux-x64

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章