单机程序向分布式的问题之一-Session保持
当从单机程序部署到多台分布式服务式,经常会遇过这些问题:
1、session不能保持;由于是多台服务器再加上有负载均衡,所以页面里的每个请求,没准会分配到哪个服务器上。
解决方案:
1、最简单的办法:利用nginx的ip_hash分配方式,使用同一IP请分配到固定的服务器。
但是这种办法有多种限制,类如nginx必须是最前端的,前面不能有lvs之类的,否则获取来的IP只能是同一个达不到负载均衡的目的。再则公司网段的内网机器也是不可以的,因为这些机器的出口有可能是一个外网IP,或者固定几个IP。这样也达不到目的。
2、采用nginx的扩展;nginx_upstream_jvm_route 是一个nginx的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能。
简单来说,它是基于cookie中的JSESSIONID来决定将请求发送给后端的哪个server,nginx_upstream_jvm_route会在用户第一次请求后端server时,将响应的server标识绑定到cookie中的JSESSIONID中,从而当用户发起下一次请求时,nginx会根据JSESSIONID来决定由哪个后端server来处理。
1/ nginx_upstream_jvm_route安装
下载地址(svn):http://nginx-upstream-jvm-route.googlecode.com/svn/trunk/
假设nginx_upstream_jvm_route下载后的路径为/usr/local/nginx_upstream_jvm_route,
(1)进入nginx源码路径
patch -p0 < /usr/local/nginx_upstream_jvm_route/jvm_route.patch
(2)./configure --with-http_stub_status_module --with-http_ssl_module --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.33 --add-module=/usr/local/nginx_upstream_jvm_route
(3)make & make install
参考