副问题[/!--empirenews.page--]
什么是会话保持
会话是指一个终端用户与交互体系举办通信的进程,好比从输入账户暗码进入操纵体系到退出操纵体系就是一个会话进程。会话较多用于收集上,TCP的三次握手就建设了一个会话,TCP封锁毗连就是封锁会话。
Http协议是一种无状态协议,以是必要行使Session机制来生涯用户的状态,好比登录状态、常用信息等。
Session用于生涯一次会话的相干信息,可以实此刻多个页面之间共享这些数据。
譬喻:你打开淘宝登录了小我私人账号,纵然你赏识了再多的店肆宝物,切换了许多的页面,用户名是稳固的,这个就是Session起的浸染。直到你封锁赏识器,Session被烧毁,才会破除去之前的登录记录。
本日和各人分享“Nginx+tomcat实现负载平衡的会话保持”就是实现:假如网站某个负载节点挂掉,哀求被分派到新节点Session也会同步过来,实现会话保持,由此担保用户无感知的赏识。
实现道理
- 行使Manager工具实现HTTP会话打点
- DeltaManager作为会话打点器
- 用户会见nginx,nginx负载平衡到tomcat,用于Tomcat集群的会话打点器,将全部session会话的改变同步给集群中的每一个节点,实现会话复制。
尝试设置
Nginx设置
测试情形单台处事器开了两个tomcat,一台对应8080端口,另一台对应8090端口。
建设TomcatA TomcatB,别离设置tomcat server.xml
复制以下内容到 Engine下
添加此模块:
- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
- channelSendOptions="8">
- <Manager className="org.apache.catalina.ha.session.DeltaManager"
- expireSessionsOnShutdown="false"
- notifyListenersOnReplication="true"/>
- <Channel className="org.apache.catalina.tribes.group.GroupChannel">
- <Membership className="org.apache.catalina.tribes.membership.McastService"
- address="228.0.0.4"
- port="45564"
- frequency="500"
- dropTime="3000"/>
- <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
- address="192.168.224.145"
- port="4001"
- autoBind="100"
- selectorTimeout="5000"
- maxThreads="6"/>
- <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
- <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
- </Sender>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
- <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
- </Channel>
- <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
- filter=""/>
- <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
- <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
- tempDir="/tmp/war-temp/"
- deployDir="/tmp/war-deploy/"
- watchDir="/tmp/war-listen/"
- watchEnabled="false"/>
- <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
- <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- </Cluster>
备注:
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|