负载均衡+session共享(memcached-session-manager实现)
前言
先给大家伙拜个年,祝大家:新的一年健健康康,平平安安!
本文的形成参考了很多人的博客,最多的应该是青葱岁月兄的这篇博客,大家可以先去看下,熟悉一些内容,因为本文是直接实践,一些理论性的知识就需要大家自己去补充了。
本文是在我之前环境LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡基础上进行的,所以很多环境的搭建本文就不涉及了,没看的朋友可以先去看下。
由于我大天朝对国外网站的限制,memcached的相关jar文件不太好下载,这里给上我的memcached的网盘地址,为需要的朋友提供方便。
环境准备与配置
VIP(Virtual IP)为192.168.1.200,用户只需要访问这个IP地址即可获得网页服务
负载均衡主机为192.168.1.114(master) ----》keepalived
备机为 192.168.1.112(brucelee) ----》keepalived
Web服务器A为192.168.1.111(youzhibing) ----》realserver + nginx + tomcat + memcached
Web服务器B为 192.168.1.115(youzhibing03) ----》realserver + nginx + tomcat + memcached
目前差的就是memcached的安装和配置了。
memcached安装
1.1 依赖安装
memcached依赖libevent,我们需要先安装libevent,这里我就为了省事,直接用yum全依赖安装了:yum -y install libevent-devel(可能安装不上,提示找不到镜像站点,那么就用源码安装,源码包我的网盘中已共享了)。
1.2 源码安装
memcache的安装则采用源码方式安装,源码包也已分享
解压:tar -zxf memcached-1.4.25.tar.gz
configure:cd memcached-1.4.25,然后./configure --prefix=/usr/local/memcached (若libevent采用的是源码安装,那么则是./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent(libevent安装目录))
make && make install
没有异常的话,那么memcached已经安装成功了!
memcached-session-manager配置
2.1 tomcat集成
memcached-session-manager作为tomcat的拓展,那么只需要将相关的jar包copy到tomcat的lib下即可,不同版本的tomcat对应的jar包的版本有所不同,大家不要搞错了(我用的是tomcat7)。
将上图中的jar全部拷贝到自己的tomcat目录的lib下。
2.2 配置文件修改
本文实现的是memcached来管理黏非黏性session(黏性session的配置与非黏性session的配置只有些许差别),修改tomcat下conf中的context.xml配置文件,内容如下(集群中的所有tomcat都是用同一个配置,context.xml内容都一样)
<?xml version='1.0' encoding='utf-8'?> <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- The contents of this file will be loaded for each web application --> <Context> <!-- Default set of monitored resources --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <!-- Uncomment this to enable Comet connection tacking (provides events on session expiration as well as webapp lifecycle) --> <!-- <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> --> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.111:11211,n2:192.168.1.115:11211" <!-- ip需要改成自己tomcat服务器的ip --> sticky="false" sessionBackupAsync="false" lockingMode="uriPattern:/path1|/path2" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context>
至此配置就完成了,别配漏了就行!
服务启动
启动顺序:tomcat --》 nginx --》memcached
realserver启动时机没要求,但是别忘记启动了!
keepalived启动。
效果展示
因为上传图片有大小限制,我录的gif图片太大,那么我也就将效果展示图放入的我的网盘共享中了。
同一个浏览器的sessionid相同,不论你开多少个(甚至是你全关了,再开);
不同的浏览器sessionid不同;
不同的电脑那肯定就不用说了,肯定不同!
总结
最终的效果达到了,配置的过程也出现了各种问题,最后都解决了。session共享一直是负载均衡、集群关注的一个重点,是各位小伙伴需要掌握的一个重点!
session共享还有其他的实现方式,希望各位小伙伴发散思维,多多查阅资料,有更好的见解,可以在评论区留言!
后话
很长时间没有更新博客了,这里表示抱歉了;这两天我会有所更新,各位小伙伴记得来看哦!
最后还是那句话:有些许的冲动就赶紧实践!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具