精华帖 (15) :: 良好帖 (13) :: 新手帖 (8) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-28
怎么不用lvs
|
|
返回顶楼 | |
发表时间:2010-05-28
lnaigg 写道 jiopi 写道 前提:以下论述不包含 服务器 宕机 的有效处理
其实同步session只是为了保证一个用户在访问时,无论访问到哪台服务器,session都要一致,那为什么要让一个用户去访问1台以上的服务器呢? ngnix做基于访问IP地址的分发策略 跟 session的策略不太一致,session 的 key一般是保存在cookie中,而 一个用户却可能改变IP,但cookie不变,session就应当保持 所以我做了nginx的基于cookie中某个值的分发策略,在基于IP的策略中,nginx可以保证IP相同的必定访问同一台机器,基于cookie中某个值的分发策略则可以保证只要cookie不丢,就可以访问同一台机器,避免因为同一用户可能在集群环境中访问多台服务器而必须考虑session共享的复杂问题 同意,基于IP分发的策略已经能解决绝大部分需求。 基于IP分发的策略 在用户IP变更后(比如断线重连),就存在访问 跟 前一台服务器 不同的 服务器的风险,这样session还是丢了的,nginx 可以配置成 基于 session-key 的 分发策略,保证只要 session-key不变,这个用户就访问同一台服务器,因此,只要 应用服务器不 宕机,就没问题 不过这个不是基于nginx提供的标准负载均衡做的,而是一种变通的做法 |
|
返回顶楼 | |
发表时间:2010-05-28
jiopi 写道 lnaigg 写道 jiopi 写道 前提:以下论述不包含 服务器 宕机 的有效处理
其实同步session只是为了保证一个用户在访问时,无论访问到哪台服务器,session都要一致,那为什么要让一个用户去访问1台以上的服务器呢? ngnix做基于访问IP地址的分发策略 跟 session的策略不太一致,session 的 key一般是保存在cookie中,而 一个用户却可能改变IP,但cookie不变,session就应当保持 所以我做了nginx的基于cookie中某个值的分发策略,在基于IP的策略中,nginx可以保证IP相同的必定访问同一台机器,基于cookie中某个值的分发策略则可以保证只要cookie不丢,就可以访问同一台机器,避免因为同一用户可能在集群环境中访问多台服务器而必须考虑session共享的复杂问题 同意,基于IP分发的策略已经能解决绝大部分需求。 基于IP分发的策略 在用户IP变更后(比如断线重连),就存在访问 跟 前一台服务器 不同的 服务器的风险,这样session还是丢了的,nginx 可以配置成 基于 session-key 的 分发策略,保证只要 session-key不变,这个用户就访问同一台服务器,因此,只要 应用服务器不 宕机,就没问题 不过这个不是基于nginx提供的标准负载均衡做的,而是一种变通的做法 基于session-key怎么做,请赐教!! |
|
返回顶楼 | |
发表时间:2010-05-28
很感兴趣,来学习的
|
|
返回顶楼 | |
发表时间:2010-05-29
ngnix是不是只有在Linux上用,有没有windows下的版本
|
|
返回顶楼 | |
发表时间:2010-05-29
有的,http://nginx.org/en/download.html
|
|
返回顶楼 | |
发表时间:2010-06-02
楼主有没有遇到这种情况:
使用 memcached-session-manager 后,tomcat之间的session值只会在第一次同步,当一个tomcat的session值变掉的话,不会同步到另一台 简单的两个测试页面: set.jsp 引用 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>set page</title> </head> <body> <br/> <% session.setAttribute("id", request.getParameter("id")); %> <% System.out.println("set id to " + request.getParameter("id")); %> set id to <%=request.getParameter("id")%> </body> </html> get.jsp 引用 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>get page</title> </head> <body> get id is <%=session.getAttribute("id")%> <% System.out.println(session.getAttribute("id")); %> </body> </html> 先对一个tomcat打开set.jsp页面,跟上参数id=1 ,即 http://.../set.jsp?id=1 然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp 可以看到session中的值是一样的 接着再对一个tomcat打开set.jsp页面,跟上参数id=2 ,即 http://.../set.jsp?id=2 然后分别打开两个tomcat的get.jsp页面,即 http://.../get.jsp 可以发现一个输出的是1,一个输出的是2 请问这种情况如何解决? |
|
返回顶楼 | |
发表时间:2010-06-02
181054867 写道 nginx在配置upstream时,有两个参数:
ip_hash(同一IP一直使用同一台server服务) weight(server的使用权重,数值越大,nginx分发的请求越多) 通过配合这两个参数,能粗糙地解决session共享的问题。 对于一些不是太依赖session的应用,或者只有用户登录时保存,那么我认为可以用Cookies代替。 即使真的要Session共享,我认为手动写代码保存到Memcached比为Tomcat加插件好,这样能获得更好的可控性。 而且我不用Tomcat,用Resin,这个msm就用不上啦,不过我会按照我的思想实现session共享,呵呵,个人愚见!! 如果有多台nginx,可以确保每台都将同一个IP分配到同一个tomcat吗? |
|
返回顶楼 | |
发表时间:2010-06-12
changcheng_1982 写道 ngnix是不是只有在Linux上用,有没有windows下的版本 Linux上,效率更高。
|
|
返回顶楼 | |
发表时间:2010-08-06
首先nginx用的是linux2.6内核的epoll,如果windows,那就不能用到epoll了,那么最大的性能优势就没有了,
楼主的这种配置方式是有效的,能在实际生产环境使用的。 并且可以做到web这部分的横向扩展能力 如果在数据库这部分在加上横向扩展能力,就更完善了 |
|
返回顶楼 | |