设为首页 收藏本站
查看: 1698|回复: 0

[经验分享] linux+nginx+tomcat负载均衡,实现session同步

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-14 22:48:55 | 显示全部楼层 |阅读模式
提示:关于nginx 和tomcat 己经在前面的博文己在介绍过了
第一部分:nginx反向代理tomcat
一、软件及环境
软件
系统
角色
用途
安装的软件
ip地址
Centos6.5x86_64nginx反向代理用户请求nginx172.16.249.210
Centos6.5x86_64tomcat1
处理jsp请求
jdk+tomcat
172.16.249.101
Centos6.5x86_64tomcat2172.16.249.100
Centos6.5x86_64mog(ilefs/store)分布式存储静态数据mogilefs172.16.249.129
Centos6.5x86_64mog(ilefs/store)+mariadb172.16.249.128
拓扑图
wKiom1NyagmhyrJnAAGRtGB0Qi4937.jpg
二、实现过程
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
wKioL1NyctbztcINAAIUUjceuGI613.jpg
刷新后的结果
wKiom1NycyHBLUZtAAIp0Sp8Xho602.jpg
己经通过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同步到这里设置完毕。
看一下效果

wKioL1NymjeCabpkAADexiQ3fUA315.jpg
还有一张
wKiom1NymoqQo5ueAADj1hkt0P8926.jpg
服务器的启动顺序如下:
tomcat1 --> |tomcat2 --> |nginx
先启动tocmat1,等tomcat1启动完全的时候再启动tomcat2,等两个tocmat全启动之后,再启动nginx负载的时候可以用APACHE或NGINX,如果什么都不用,两台一接防问了话,可能会出错极session不同步的问题,网上也很多人介意不要做seeeion同步,这样会降低机器的性能,有一个方法可以,就是NGINX的ip_hash,这样至少可以保证客户端去防问同一台TOCMAT,除非那台TOCMAT挂了




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-19161-1-1.html 上篇帖子: 安装配置Nginx 下篇帖子: Web服务之Nginx浅析 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表