负载均衡+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的安装和配置了。

1.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已经安装成功了!

2.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>

    至此配置就完成了,别配漏了就行!

3.服务启动

    启动顺序:tomcat --》 nginx --》memcached

    realserver启动时机没要求,但是别忘记启动了!

    keepalived启动。

效果展示

  因为上传图片有大小限制,我录的gif图片太大,那么我也就将效果展示图放入的我的网盘共享中了。

  同一个浏览器的sessionid相同,不论你开多少个(甚至是你全关了,再开);

  不同的浏览器sessionid不同;

  不同的电脑那肯定就不用说了,肯定不同!

总结

  最终的效果达到了,配置的过程也出现了各种问题,最后都解决了。session共享一直是负载均衡、集群关注的一个重点,是各位小伙伴需要掌握的一个重点!

  session共享还有其他的实现方式,希望各位小伙伴发散思维,多多查阅资料,有更好的见解,可以在评论区留言!

后话

  很长时间没有更新博客了,这里表示抱歉了;这两天我会有所更新,各位小伙伴记得来看哦!

  最后还是那句话:有些许的冲动就赶紧实践!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏崔庆才的专栏

如何搭建一台FTP服务器

由于整个学校相当于一个大型局域网,相互之间传送数据非常快,比如要共享个电影,传点资料什么的。所以我们可以选择搭建一个FTP服务器来共享文件。通过本文给大家说一下...

5K00
来自专栏皮振伟的专栏

[linux][memory]hugetlb和hugepage技术分析

前言: 乍一看,hugetlb和hugepage还挺像的,好像都是所谓的“大页”。然而,却很难说出来它们的差异。作者也是花了写时间翻翻代码,写了几个测试的例子,...

74770
来自专栏渠道合作伙伴技术圈

Windows server环境下混合云部署DFS文件服务

很多传统企业在设计身份验证和文件服务时,都会使用微软的活动目录和windows server自带的文件共享来实现以上的需求, 公有云的出现给这个场...

885160
来自专栏软件测试经验与教训

看图说话:文件上传(File Upload)漏洞示例

作为测试人员,我们常常听到“安全测试”这个词,但鲜有人真正做过安全测试。从我们的职责“保障质量”角度来说,说是一种“失职”也不为过。那么安全测试是什么,究竟怎么...

21840
来自专栏冰霜之地

如何快速给自己构建一个温馨的"家"——用Jekyll搭建静态博客

我相信,每个程序员都有一个愿望,都想有一个属于自己的"家"——属于自己的博客,专属的网站。在自己的“家”中,可以和志同道合的兄弟一起分享和讨论任何技术,谈天说地...

32520
来自专栏FreeBuf

基于ThinkPHP的2个CMS后台GetShell利用

0x00 前言 ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,由于其简单易用,很多cms都基于该框架改写。然而 Thinkphp在缓存使...

48990
来自专栏纯洁的微笑

如何使用 Spring Boot 开发邮件系统?

互联网发展到现在,邮件服务已经成为互联网企业中必备功能之一,应用场景非常广泛,比较常见的有:用户注册、忘记密码、监控提醒、企业营销等。

37320
来自专栏建站达人秀

如何快速搭建 Discuz! 论坛

Discuz!全称:Crossday Discuz! Board,是一套免费使用的社区论坛软件系统,由北京康盛新创科技有限责任公司推出,目前最新版本是Discu...

9.4K80
来自专栏ChaMd5安全团队

记一次phpcms漏洞利用到获得服务器过程分享

记一次phpcms漏洞利用到获得服务器 by lshc 随着最近phpcms V9 任意上传和注入poc的流出,在圈内又掀起了一阵漏洞利用浪潮,想到之...

65560
来自专栏网络

steam118错误解决方法一览 steam118错误怎么办

第一种方法 已知修改hosts后,https可以打开,http依然会被阻断,所以在浏览器强制https就可以了: 1、添加hosts: 23.52.74.146...

694110

扫码关注云+社区

领取腾讯云代金券