|
nginx +tomcat 负载均衡集群的实现 | tomcat session server集群 | tomcat session cluster及jvm参数调整 | 一、nginx+tomcat 实现负载均衡群集
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
tar xf nginx-1.12.0.tar.gz -C /usr/local/
cd /usr/local/
mv nginx-1.12.0 nginx
useradd www
yum install openssl gcc gcc-c++ openssl-devel pcre pcre-devel -y
./configure --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx
make && make install
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
vi /usr/local/nginx/conf/nginx.conf
编辑配置文件,实现nginx+tomcat负载均衡如下
upstream tomcat{
server 172.16.100.7:8080;
server 172.16.100.8:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat;
#root html;
#index index.html index.htm;
}
}
二、tomcat session server (基于memcache来实现tomcat session保持)
环境描述:
tomcat1:172.16.100.7(tomcatA.magedu.com),
tomcat2:172.16.100.8(tomcatB.magedu.com)
memcached1:172.16.100.9
memcached2: 172.16.100.10
nginx负载均衡节点:172.16.100.6
下载jar文件
下载地址 :memcached-session-manager项目地址,http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/
jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
memcached-session-manager-${version}.jar
memcached-session-manager-tc${6,7,8}-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar
分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
说明:path 定义浏览器访问路径,docBase 定义应用程目录,nodes 为memcached 服务器地址,failoverNodes 定义备份session server,如果上文主为n2,当n2失败时,启动n1,
分别为两个context提供测试页面:
tomcatA:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
TomcatA
TomcatA.magedu.com
Session ID
Created on
tomcatB:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
TomcatB
TomcatB.magedu.com
Session ID
Created on
在172.16.100.6上配置反向代理的负载均衡内容,类似如下所示:
upstream tomcat{
server 172.16.100.7:8080;
server 172.16.100.8:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://tomcat;
#root html;
#index index.html index.htm;
}
}
测试结果,在浏览器中访问http://172.16.100.6/test,结果如下所示,其session ID在负载均衡环境中保持不变。
TomcatA.magedu.com
Session ID4DD0340CE6294FF2BBE802CD4CD039EC-n2
Created on1399890838103
TomcatB.magedu.com
Session ID4DD0340CE6294FF2BBE802CD4CD039EC-n2
Created on1399890838103
三、tomcat session cluster (Tomcat基于内存复制的集群来实现session保持)
会话管理器:
标准会话管理器
持久会话管理器
群集会话管理器:多播方式传递自己的心跳信息,如 tomcatA把自己的session信息以多播的方式发送给其他tomcat主机,从而实现所有tomcat主机的会话信息完全一致;这样tomcatA、B、C节点同步会话信息时会占用大量带宽资源,不适应节点多的架构。
修改server.xml文件,定义在Engine容器中定义如下代码:
以上内容定义在Engine容器中,则表示对所有主机均启动用集群功能。如果定义在某Host中,则表示仅对此主机启用集群功能。此外,需要注意的是,Receiver中的address="auto"一项的值最好改为当前主机集群服务所对应的网络接口的IP地址。
如果tomcat启动报错中提示,找不到广播地址等信息,添加如下命令:
route add -net 228.0.0.4 netmask 255.255.255.255 dev eth0
修改web.xml文件,在webapp中(倒是第二行)添加 ,如果tomcat/webapps/test/WEB-INF/中没有web.xml ,需要从tomcat目录拷贝一份过去。
总结:构建DeltaManager集群步骤:
1、在各节点的server.xml的engine或host容器添加如上内容;注意修改MemberShip组件中的多播地址address="228.0.0.4",建议修改Receiver中的address为本机能够传递心跳信息的地址;
2、在各节点为使用组播地址添加组播路由,格式: route add -net $MCAST_ADDRESS netmask 255.255.255.255 dev eth0
3、在相应应用程序的web.xml中添加;
此外,所有启用集群功能的web应用程序,其web.xml中都须添加才能实现集群功能。如果某web应用程序没有自己的web.xml,也可以通过复制默认的web.xml至其WEB-INF目录中实现。
四、tomcat server及jvm参数调整
Tomcat脚本:
startup脚本:
#!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig: 2345 96 14
# description: The Apache Tomcat servlet/JSP container.
# JAVA_OPTS='-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest
CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
exec $CATALINA_HOME/bin/catalina.sh start ;;
stop)
exec $CATALINA_HOME/bin/catalina.sh stop;;
restart)
$CATALINA_HOME/bin/catalina.sh stop
sleep 2
exec $CATALINA_HOME/bin/catalina.sh start ;;
configtest)
exec $CATALINA_HOME/bin/catalina.sh configtest ;;
*)
exec $CATALINA_HOME/bin/catalina.sh * ;;
esac
2、tomcat参数调优
基于连接器提高Tomcat6性能的方法:
1) 设置tcpNoDelay属性值为“true”;
2) 通过maxKeepAliveRequest属性调整允许keep-alive功能的请求的最大数目,值为1时表示禁用;
3) 调整socketBuffer属性的值以改变套接字缓冲的大小;
4) 将enableLookups设置为false以禁用DNS反解;
5) Tomcat是一个多线程的Servlet容器,使用线程池能对服务器性能带去很大影响;这主要通过maxThreads、maxSpareThreads和minSpareThreads来定义;
6) 通过JAVA_OPTS,如-Xms和-Xmx设定JVM相关的参数以定义其使用内存的能力;
|
|