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

[经验分享] Nginx+Tomcat+memcached高可用会话保持

[复制链接]

尚未签到

发表于 2018-12-7 10:27:11 | 显示全部楼层 |阅读模式
一、概述
  之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合keepalived做前端高可用调度器;但之前没有提到会话高可用保持;
本文通过 Tomcat Session Replication Cluster(tomcat自带)和tomcat结合memcat及第三方组件实现Tomcat Memcache Session Server高可用会话缓存服务;
实现的效果:
同一客户端访问业务网站,经过调度器负载调度到达后端,不管选择的是那个后端,session ID都不变,都保存在两台或多台的memcached缓存中(负载冗余);以保持持会话;
  架构图:
http://i2.运维网.com/images/blog/201803/23/9c5f97eb5aeff57b09dfae2053c331f9.png
说明:客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;tomcat 把会话通过组播的方式复制到集群各节点;所有节点共享会话;
http://i2.运维网.com/images/blog/201803/23/4658e3d0263f63bd3a265cf9f1fd42ce.png
说明:客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;并把session存储到两台memcached中;客户端刷新(不换浏览器)时,请求换成另一个后端服务器响应时session ID保持不变;

  测试环境:
nginx: CentOS7  epel 安装nginx   WAN:172.16.3.152   LAN:192.168.10.254
tomcat A:  CentOS7   node1.san.com      epel 安装 tomcat 7  openjdk-1.8.0  memcached(现实环境中单独服务器)
tomcat B:  CentOS7   nodde2.san.com   epel 安装 tomcat 7  openjdk-1.8.0  memcached  现实环境中单独服务器)
测试客户端ubuntu 16.04

cat /etc/hosts
172.16.3.152       www.san.com
二、安装配置集群
  nginx安装

[root@nginx ~]# yum install epel-release -y
[root@nginx ~]# yum install nginx -y
  nginx配置
在/etc/nginx/nginx.conf  http段添加如下行

    upstream tcsrvs {
server 192.168.10.11:8080;
server 192.168.10.12:8080;
}

  cat /etc/nginx/conf.d/san.com.conf

[root@nginx ~]# cat /etc/nginx/conf.d/san.com.conf
server {
listen 80;
server_name www.san.com;
location / {
proxy_pass http://tcsrvs;
}
}

  Tomcat配置:
两台均需要安装

#yum install epel-release -y
#yum install java-1.8.0 java-1.8.0-openjdk-devel tomcat tomcat-webapps tomcat-admin-webapps tomcat-docs-webapp  -y
  说明:也可以通过oracle官方下载jdk 下载tomcat 解压到指定目录并添加环境变量;一般企业推荐此种方式;为了快捷,我们用epel仓库中的稳定版本;
  添加测试页
yum 安装的tomcat工作目录在/var/lib/tomcat/webapps 分别在node1与node2上,此目录下创建测试项目,title 分别叫Tomcat A与Tomcat B 颜色分别为green与red;以示区别;生产环境node1 与node2内容一致;这里为了测试区别node1与node2内容;

#mkdir -pv /var/lib/tomcat/webapps/test/{WEB-INF,META-INF,classes,lib}
#cat /var/lib/tomcat/webapps/test/index.jsp


Tomcat A

TomcatA.san.com


Session ID




Created on





  配置管理页密码
tomcat与管理程序安装好后配置访问密码
修改注释/etc/tomcat/tomcat-users.xml文件




  备份默认/etc/tomcat/server.xml文件

cd /etc/tomcat
cp server.xml server.xml_def
  测试页访问
http://www.san.com/test 如图:出现Tomcat A
http://i2.运维网.com/images/blog/201803/23/dba1dfa5cc409e9a7533765640b020b0.png
Ctrl+F5强制刷新 又出现Tomcat B
http://i2.运维网.com/images/blog/201803/23/447fd0c2b649abceb657619e059bb851.png
  引发问题:如果是两台内容一样的配置,客户端访问刷新一下就换到另一个后端处理;类似通过session保留信息的服务(购买物车)如何保留?换句话说,如何保持会话不中断,无论请求被分配到那一个后端?
  解决方案
1)会话sticky(粘性):分为source_ip 基于源ip和cookie
source_ip在不同的调度器上有不同的实现方式:
lvs:sh算法;
nginx:ip_hash或hash $request_uri consistent(一致性哈希算法)
haproxy: source
  cookie:
nginx:hash 或 hash $cookie_name consistent;
haproxy:cookie
  2)会话集群(session cluster):delta session manager
3)session server: redis(store),memcached(cache)
  以下基于tomcat自带会话集群与memcached实现会话保持 功能;

三、Tomcat Session Replication Cluster配置
  Tomcat Session Replication Cluster中文又叫 tomcat 会话复制集群,即会话通过组播方式复制到每一个后端tomcat节点;
可参考自带帮助文档:http://www.san.com/docs/cluster-howto.html
两台node1 node2节点/etc/hosts中添加如下:

#cat /etc/hosts
192.168.10.11 node1.san.com node1
192.168.10.12 node2.san.com node2
  两台tomcat 节点sever.xml的Host字段中添加如下内容:

运维网声明 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-644273-1-1.html 上篇帖子: linux 下安装tomcat 下篇帖子: Linux下Tomcat配置service启动
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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