提示:关于nginx 和tomcat 己经在前面的博文己在介绍过了 第一部分:nginx反向代理tomcat 一、软件及环境 软件 系统 | 角色 | 用途 | 安装的软件 | ip地址 | Centos6.5x86_64 | nginx | 反向代理用户请求 | nginx | 172.16.249.210 | Centos6.5x86_64 | tomcat1 | 处理jsp请求 | jdk+tomcat | 172.16.249.101 | Centos6.5x86_64 | tomcat2 | 172.16.249.100 | Centos6.5x86_64 | mog(ilefs/store) | 分布式存储静态数据 | mogilefs | 172.16.249.129 | Centos6.5x86_64 | mog(ilefs/store)+mariadb | 172.16.249.128 |
拓扑图 二、实现过程 1、nginx安装 配置文件如下: #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream mogfs_cluster { server 172.16.249.128:7001; server 172.16.249.129:7001;
} upstream jsp_server { server 172.16.249.100:8080; server 172.16.249.101:8080; } server { listen 80; # server_name localhost; # location / { # root html; # index index.html index.htm; # }
location ~* ^(/images/.*)$ { mogilefs_tracker mogfs_cluster; mogilefs_domain images; mogilefs_noverify on; mogilefs_pass $1 { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } } location ~* ^(/text/.*)$ { mogilefs_tracker mogfs_cluster; mogilefs_domain text; mogilefs_noverify on; mogilefs_pass $1 { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } } location ~* (.jsp|do)$ { proxy_pass http://jsp_server;
} error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 2、安装JDK+Tomcat tomcat1配置文件如下(server.xml)
站点目录文件如下
[iyunv@essun tomcat]# cd webapps/essun/ [iyunv@essun essun]# ls index.jsp WEB-INF [iyunv@essun essun]# ll WEB-INF/ total 8 drwxr-xr-x 2 root root 4096 May 2 11:07 classes drwxr-xr-x 2 root root 4096 May 2 11:07 lib [iyunv@essun essun]# cat index.jsp <%@ page language="java" %> essun.node2 essun.node2.org
<% session.setAttribute("essun.org","essun.org"); %>
Session ID | <%= session.getId() %> | Created on | <%= session.getCreationTime() %> |
<% out.println(""); %> tomcat2 与此处的配置相同,仅 index.jsp有所不同
[iyunv@essun essun]# cat index.jsp <%@ page language="java" %> essun.node1 essun.node1.org
<% session.setAttribute("essun.org","essun.org"); %>
Session ID | <%= session.getId() %> | Created on | <%= session.getCreationTime() %> |
<% out.println(""); %> 3、mogilefs安装 配置文件中只要修改对应的ip地址即可 4、测试 访问nginx 刷新后的结果 己经通过nginx中的proxy_pass为tomcat反向代理 注: "picture"
<% out.println(""); %>
这两处的url都是nginx反向代理mogilefs的url. 第二部分、实现session会话同步(DeltaManager方式) tomcat会话管理 会话分类 标准会话管理器和持久会话管理器 标准会话管理器(StandardManager) 默认保存于$CATALINA_HOME/work/Catalina///下的SESSIONS.ser文件中。 maxActiveSessions:最多允许的活动会话数量,默认为-1,表示不限制; maxInactiveInterval:非活动的会话超时时长,默认为60s; pathname:会话文件的保存目录; 持久会话管理器(PersistentManager):将会话数据保存至持久存储中,并且能在服务器意外中止后重新启动时重新加载这些会话信息。持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中。 保存至文件中的示例
每个用户的会话会被保存至directory指定的目录中的文件中,文件名为.session,并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话。 保存至JDBCStore中的示例
Manger对象用于实现HTTP会话管理的功能,Tomcat6中有4种Manger的实现: StandardManagerTomcat7的默认会话管理器,用于非集群环境中对单个处于运行状态的Tomcat实例会话进行管理。当Tomcat关闭时,这些会话相关的数据会被写入磁盘上的一个名叫SESSION.ser的文件,并在Tomcat下次启动时读取此文件。 PersistentManager当一个会话长时间处于空闲状态时会被写入到swap会话对象,这对于内存资源比较吃紧的应用环境来说比较有用。 DeltaManager用于Tomcat集群的会话管理器,它通过将改变了的会话数据同步给集群中的其它节点实现会话复制。这种实现会将所有会话的改变同步给集群中的每一个节点,也是在集群环境中用得最多的一种实现方式。 BackupManager用于Tomcat集群的会话管理器,与DeltaManager不同的是,某节点会话的改变只会同步给集群中的另一个而非所有节点。 注 : 负载均衡,且实现会话绑定要注意给每个tomcat实例的egine容器一个jvmRoute属性!此名称要跟前端调度模块使用名称保持一致!另外,在mod_proxy实现负载均衡的会话绑定时,还要使用sticksession=JSESSIONID(字符要大写)! 1、分别打开tomcat1和tomcat2下conf中server.xml
找到 Tomcat1下的修改为 Tomcat2下的修改为 2、修改tomcat1中的Cluster className tomcat1找到 修改为
#在这以下为添加内容
[tr]
3、将conf/web.xml复制一份到发布的站点目录WEB-INF下,在前面加入以下这句话 如我的站点目录为
[iyunv@essun tomcat]# cd webapps/essun/ [iyunv@essun essun]# ll WEB-INF/ total 168 drwxr-xr-x 2 root root 4096 May 14 04:40 classes drwxr-xr-x 2 root root 4096 May 14 04:40 lib -rw------- 1 root root 162921 May 14 04:40 web.xml 4、在各节点为使用组播地址添加组播路由,格式:
route add -net $MCAST_ADDRESS netmask 255.255.255.255 dev eth0 如我自己的地址为
route add -net 228.0.0.4 netmask 255.255.255.255 dev eth0 而在tomcat2上只有两处与tomcat1不同,其它操作都一样 jvmRoute="tomcat2" address="172.16.249.101" address最好是当前节点的主机地址 session同步到这里设置完毕。 看一下效果
还有一张 服务器的启动顺序如下: tomcat1 --> |tomcat2 --> |nginx 先启动tocmat1,等tomcat1启动完全的时候再启动tomcat2,等两个tocmat全启动之后,再启动nginx负载的时候可以用APACHE或NGINX,如果什么都不用,两台一接防问了话,可能会出错极session不同步的问题,网上也很多人介意不要做seeeion同步,这样会降低机器的性能,有一个方法可以,就是NGINX的ip_hash,这样至少可以保证客户端去防问同一台TOCMAT,除非那台TOCMAT挂了
|