关于Nginx+tomcat集群配置
2016-11-08 16:21
621 查看
关于Nginx+tomcat集群配置
本方案中,session共享问题,采取tomcat自带方式解决方案。即节点成员是通过组播的心跳来建立的。所以,若要拆分集群,可以通过改变组播地址和端口来实现。
心跳包括了ip地址和tomcat监听的session复制的TCP端口。所有信息的交互都是通过tcp协议实现的。
其中Nginx版本:
nginx/1.9.9;tomcat版本:apache-tomcat-7.0.72;JDK版本:1.8.0_101。各个软件环境的安装此处不再赘述。
此处配置参数具体信息,暂未弄清楚。日后详细查阅。其中upstream为负载均衡节点配置。
但是根据查阅相关资料描述:通过上面的配置,可以实现使用DeltaManager来实现session的all-to-all的复制。所谓的all-to-all复制是一个节点的session将会被复制到所有的其他的节点[Bruce1] 。这在小集群当中是相当有效的,但是当存在大集群的时候,也就是集群中有很多的tomcat节点的时候,我们不推荐这么做。当使用delta
manager进行session复制的时候,即使节点中没有应用部署,session也会被复制。
避免这种情况的办法,你可以使用BackManager。该管理器只会将session复制到备份节点中。并且只会复制到部署应用的节点中。故采取的配置不简单是取消该段配置的注释。而是使用如下配置。
第一步:配置server.xml
注意:此处中黄色标记的为两个地址,两个端口。其中228.0.0.4为广播地址。192.168.80.131为本机的IP信息。此处配置为192.168.80.131机器的配置。如果为192.168.80.132机器的配置,直接将192.168.80.131修改成192.168.80.132即可。
为了方便访问。直接将tomcat的默认项目修改。修改配置如下所示。
第二步:修改项目的web.xml
直接在web.xml中添加如下配置即可。此处一定要记住,要修改。具体作用暂不清楚。添加配置节点如下。
至此,tomcat集群已经配置好。负载均衡已经配置好。测试。
如上所示:负载均衡和session共享配置成功。
3.总结
注意事项:
a.集群中所有服务器要时间同步。
b.一定要修改web.xml文件中的节点配置信息。
c.放在session中的对象一定要序列化,即实现java.io.Serializable接口
d. 使用简单的配置信息时,适合集群不大的情况。
e. 集群服务器一定要能收到非127.0.0.1的ip信息,即各台服务器上,通过java.net.InetAddress.getLocalHost().getHostAddress()一定能够获得非127.0.0.1的ip地址,用来收听集群消息。
出错点:
在tomcat中加入jvmRoute="jvm1"后,集群共享失败。目前未知其原因。待日后探索。
在tomcat中使用memcached 实现session级别的共享,共享失败。首先出现版本问题。后阶段共享失败。具体原因未知。待日后探索。
前言
本文档主要采用Nignx+tomcat,实现负载均衡和tomcat集群配置,并解决tomcat之间session共享问题。本方案中,session共享问题,采取tomcat自带方式解决方案。即节点成员是通过组播的心跳来建立的。所以,若要拆分集群,可以通过改变组播地址和端口来实现。
心跳包括了ip地址和tomcat监听的session复制的TCP端口。所有信息的交互都是通过tcp协议实现的。
配置准备
本案例中,主要采取三台虚拟机实现集群配置,具体配置如下。[align=center]序号[/align] | [align=center]机器名[/align] | [align=center]系统[/align] | [align=center]内存[/align] | [align=center]应用[/align] | [align=center]IP[/align] |
[align=center]1[/align] | [align=center]nginx[/align] | [align=center]ubuntu 16.04 LTS[/align] | [align=center]1G[/align] | [align=center]nginx[/align] | [align=center]192.168.80.130[/align] |
[align=center]2[/align] | [align=center]tomcat1[/align] | [align=center]ubuntu 16.04 LTS[/align] | [align=center]1G[/align] | [align=center]tomcat[/align] | [align=center]192.168.80.131[/align] |
[align=center]3[/align] | [align=center]tomcat1[/align] | [align=center]ubuntu 16.04 LTS[/align] | [align=center]1G[/align] | [align=center]tomcat[/align] | [align=center]192.168.80.132[/align] |
nginx/1.9.9;tomcat版本:apache-tomcat-7.0.72;JDK版本:1.8.0_101。各个软件环境的安装此处不再赘述。
配置安装
Nginx负载均衡配置
此处将192.168.80.130作为Nginx节点。192.168.80.131、192.168.80.132作为tomcat节点。实现负载均衡。即修改nginx的配置文件:nginx.conf。修改后的配置文件如下所示。<pre name="code" class="html">#user www www; worker_processes 1; #pid /usr/local/nginx/nginx.pid; worker_rlimit_nofile 1024; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; fastcgi_intercept_errors on; charset utf-8; server_names_hash_bucket_size 128; client_header_buffer_size 4k; large_client_header_buffers 4 32k; client_max_body_size 300m; sendfile on; tcp_nopush on; keepalive_timeout 65; tcp_nodelay on; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; proxy_buffer_size 16k; proxy_buffers 4 64k; proxy_busy_buffers_size 128k; proxy_temp_file_write_size 128k; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; ###2012-12-19 change nginx logs log_format main '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time $remote_addr'; upstream www.test.com { server 192.168.80.131:8080 weight=1 max_fails=2 fail_timeout=30s; server 192.168.80.132:8080 weight=1 max_fails=2 fail_timeout=30s; } ####chinaapp.sinaapp.com server { listen 80; server_name www.test.com; index index.jsp index.html index.htm; #发布目录/data/www root /data/www; location / { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://www.test.com; #此处需要和upstream保持一致 expires 3d; } } }
此处配置参数具体信息,暂未弄清楚。日后详细查阅。其中upstream为负载均衡节点配置。
Tomcat集群配置
此处集群配置最简单的解决方法为取消server.xml中Cluster的注释(取消如图中红色标记部分)。但是根据查阅相关资料描述:通过上面的配置,可以实现使用DeltaManager来实现session的all-to-all的复制。所谓的all-to-all复制是一个节点的session将会被复制到所有的其他的节点[Bruce1] 。这在小集群当中是相当有效的,但是当存在大集群的时候,也就是集群中有很多的tomcat节点的时候,我们不推荐这么做。当使用delta
manager进行session复制的时候,即使节点中没有应用部署,session也会被复制。
避免这种情况的办法,你可以使用BackManager。该管理器只会将session复制到备份节点中。并且只会复制到部署应用的节点中。故采取的配置不简单是取消该段配置的注释。而是使用如下配置。
第一步:配置server.xml
<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="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"address="192.168.80.131" 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"/> </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>
注意:此处中黄色标记的为两个地址,两个端口。其中228.0.0.4为广播地址。192.168.80.131为本机的IP信息。此处配置为192.168.80.131机器的配置。如果为192.168.80.132机器的配置,直接将192.168.80.131修改成192.168.80.132即可。
为了方便访问。直接将tomcat的默认项目修改。修改配置如下所示。
<Context path="/" docBase="oems" reloadable="false"></Context>
第二步:修改项目的web.xml
直接在web.xml中添加如下配置即可。此处一定要记住,要修改。具体作用暂不清楚。添加配置节点如下。
<distributable/>
至此,tomcat集群已经配置好。负载均衡已经配置好。测试。
如上所示:负载均衡和session共享配置成功。
3.总结
注意事项:
a.集群中所有服务器要时间同步。
b.一定要修改web.xml文件中的节点配置信息。
c.放在session中的对象一定要序列化,即实现java.io.Serializable接口
d. 使用简单的配置信息时,适合集群不大的情况。
e. 集群服务器一定要能收到非127.0.0.1的ip信息,即各台服务器上,通过java.net.InetAddress.getLocalHost().getHostAddress()一定能够获得非127.0.0.1的ip地址,用来收听集群消息。
出错点:
在tomcat中加入jvmRoute="jvm1"后,集群共享失败。目前未知其原因。待日后探索。
在tomcat中使用memcached 实现session级别的共享,共享失败。首先出现版本问题。后阶段共享失败。具体原因未知。待日后探索。
相关文章推荐
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[二]
- 关于Apache与 Tomcat的集群配置
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[一]
- nginx+tomcat集群配置
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[二]
- java集群优化——Nginx+tomcat集群配置-理论篇
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[一]
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[二]
- Nginx+Tomcat集群配置[一]