您的位置:首页 > 运维架构 > Tomcat

Nginx+KeepAlive+tomcat+session

2011-12-14 13:38 274 查看
Nginx+KeepAlive

一、环境:
redhat5.4、keepalived-1.1.17、nginx-1.0.6

主nginx负载均衡器:192.168.0.10

辅nginx负载均衡器:192.168.0.20

vip:192.168.0.100
二、keepalived部署
1.下载最新稳定版 wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
2.安装keepalived
tar zxvf keepalived-1.1.17.tar.gz

cd keepalived-1.1.17

./configure –prefix=/usr/local/keepalive

make ; make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
3.配置keepalived
#master配置

mkdir /etc/keepalived

vim /etc/keepalived/keepalived.conf
global_defs {

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

#backup ipaddress

mcast_src_ip 192.168.0.20

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass ufsoft

}

virtual_ipaddress {

192.168.0.100

}

}
#backup配置

mkdir /etc/keepalived

vim /etc/keepalived/keepalived.conf
global_defs {

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

#master ipaddress

mcast_src_ip 192.168.0.10

priority 50

advert_int 1

authentication {

auth_type PASS

auth_pass ufsoft

}

virtual_ipaddress {

192.168.0.100

}

}
通过命令:#ip a 来检查

三、安装NGINX

.安装nginx

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

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的源码包

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.0.20:8080 srun_id=tomcat1; //在tomcat的配置里会配置jvmRoute为tomcat1

server 192.168.0.30:8081 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.conf" 83L, 1941C 已写入

[root@slave conf]# /usr/local/bin/nginx.sh stop

[root@slave conf]# /usr/local/bin/nginx.sh start

[root@slave conf]# vim nginx.conf

upstream backend {

server 192.168.0.20:8080 srun_id=tomcat1;

server 192.168.0.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';

}

}

3.安装tomcat

1)安装tomcat_1

tar zxf apache-tomcat-6.0.33.tar.gz

mv apache-tomcat-6.0.33/usr/local/tomcat

cp tomcat-replication.jar /usr/local/tomcat/lib

2)安装tomcat_2,步骤同1)

4.分别在tomcat服务器安装jdk

chmod 755 jdk-6u26-linux-i586-rpm.bin

./jdk-6u26-linux-i586-rpm.bin

cat >>/etc/profile <<EOF

export JAVA_HOME=/usr/java/jdk1.6.0_26

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

EOF;

source /etc/profile //使环境变量立即生效

5.tomcat集群配置

tomcat1配置:

修改conf/server.xml配置文件

<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.0.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>

tomcat2配置:

修改conf/server.xml配置文件

<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>

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.创建jsp测试页面

在tomcat1安装路径下建立目录test

mkdir /usr/local/tomcat/webapps/ROOT/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 /usr/local/tomcat/webapps/ROOT/test/

vi index.jsp

<html>

<title>

tomcat2 jsp

</title>

<%

String showMessage="Oh My God 192.168.0.30 华仔!";

out.print(showMessage);

%>

</html>

本文出自 “一抹秋色” 博客,请务必保留此出处http://mochen2007.blog.51cto.com/3202513/741664
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: