Nginx + Memcached 实现Session共享的负载均衡
Session共享
我们在做站点的时候,通常需要保存用户的一些基本信息,比如登录就会用到Session;当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次,所以要让session在不同的服务器上都能获取到相同的内容。
方法思路
- ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题;
优点:不需要采用任何处理;
缺点:当某台服务器访问的量大时,负载均衡就相当于没用了
- 用Memcached或者redis缓存的方式;
- 使用数据库直接存储;
- 缺点:对数据库要求高,当出现高访问量时,需要不停的读写,数据库压力大,
- 用Memcached或者redis + DB异步存储;
这四点是实现Session共享的一种方案和思路,每种方法都有自己的优缺点,全部的优缺点我也无法描述,毕竟没有具体的去实现和使用;使用哪种方式还需要看项目的情况和具体的解决方案;
在自己的学习过程选择第二种,Nginx + Memcached 实现Session共享的负载均衡;
自己搞一台服务器,Nginx和Memcached 在一台服务器;
在服务器我部署了相同的两个站点,代码相同,一个端口为8080;另一个为8090;
private static readonly IMemcachedManager _memcachedManager = new MemcachedManager();
public ActionResult Index()
{
Random rd = new Random();
Session["Session"] = rd.Next(, );
if (!_memcachedManager.IsExit("Session"))
{
_memcachedManager.SetValue("Session", Session["Session"]);
}
ViewBag.Message = "当前站点为:8080;Session为:" + _memcachedManager.GetValue<string>("Session") + "";
return View();
}
运行结果:


实现了我的目的,达到了均衡负载同时session共享的目的。
Nginx除了Session共享的问题,还有一个共享资源的问题,比如上传文件,这需要负载均衡需要解决的一个问题;
总结
不管是安装Nginx还是Memcached,在这个过程中,并没有遇到比较深的坑,当然Memcached在网上也有很多的例子,一些基本的安装都能够很快的实现,部署起来相对于简单毕竟只是一个Demo,不知道在实际的项目中将会是如何的,也会会有很大的不同;
这只是自己学习的一个地方,当然这里面还有更多东西需要去研究;
共勉
Nginx + Memcached 实现Session共享的负载均衡的更多相关文章
- springboot+spring session+redis+nginx实现session共享和负载均衡
环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...
- SpringBoot2.x+Redis+nginx实现session共享和负载均衡
1.创建SpringBoot项目添加依赖 <dependency> <groupId>org.springframework.session</groupId> & ...
- [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
反向代理概念 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个FQ软件,通过FQ软件才能访问youtube. FQ软件就叫做正向代理.所谓的反向代理,指的是用户要访问youtube ...
- nginx Win下实现简单的负载均衡(2)站点共享Session
快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...
- 分布式Session共享(二):tomcat+memcached实现session共享
一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...
- Tomcat通过Memcached实现session共享的完整部署记录
对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...
- nginx作反向代理,实现负载均衡
nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...
- nginx的概念与几种负载均衡算法
Nginx的背景 Nginx和Apache一样都是一种WEB服务器.基于REST架构风格,以URI(Uniform Resources Identifier,统一资源描述符)或URL(Uniform ...
- nginx Win下实现简单的负载均衡(1)nginx搭建部署
快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...
随机推荐
- win10 vmware下Linux系统联网
本来,这个问题网上资源很多的,但是就因为多,就变得杂了,对于许多新手,并不理解为啥,故记录下来方便以后使用.此处我采用配置VWmare虚拟网关(上学期刚刚学计算机网络,正好可以复习下).关于虚拟机下L ...
- oracle 修改表空间文件路径方法
比如说修改 user01.dbf 文件 的路径 1.先登录sqlplus: C:\Documents and Settings\chezh>sqlplus system/passwo ...
- 笔记本电脑连接上WiFi后,弹不出登录界面怎么办?
以CMCC为例子 步骤: 1 连接成功CMCC之后,打开适配器设置.右击无线网卡,选择属性 2.双击INTERNET协议版本4 3.将DNS改成自动获取,然后确定 4.再确定 5.然后重新断开CMCC ...
- python常用模块(2)
之前学了两个常用的模块collections和re模块今天我们接着学习其他几个常用模块.都是比较常用的之前的学习或多或少也有所接触比如说时间模块等. 预习: 写一个验证码 首先 要有数字 其次 要有字 ...
- this final 关键字
this: 1:将当前对象的值返回(谁调用就指谁). 2:添加this关键字可以区分局部变量和成员变量. 3:使用this可以调用其他构造函数(前提是this正处于构造函数中). final: 1:修 ...
- CentOS Linux 新建oracle数据库实例并连接
CentOS Linux 新建oracle数据库实例 安装好oracle之后,首先想到的那就是自己建一个库来看看效果喽. 创建的过程如下文章所说,http://blog.chinaunix.net/u ...
- 如何调节Eclipse下console输出字体的大小??
打开window - preferences-- general - appearance - colors and fonts --debug - console font 就可以调节了.
- RobotFramework自动化测试框架-移动手机自动化测试AppiumLibrary库其它的常见自动化关键字
关键字 使用描述 Close Application 关闭掉当前已经打开的APP Application,该关键字不需要接收任何的参数,但是使用该关键字的前提是已经打开了一个APP Applicati ...
- java8之stream
lambda表达式是stream的基础,初学者建议先学习lambda表达式,http://www.cnblogs.com/andywithu/p/7357069.html 1.初识stream 先来一 ...
- JavaWeb(二)jsp运行原理,九大内置对象
JSP运行原理: 每个JSP页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ...