【1】负载均衡技术
F5主要功能
不仅包含负载均衡还包括应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙过滤等功能
OSI网络七层模型
常见的负载均衡算法
轮询(加权轮询):平均分配;加权轮询如权重大的轮询两次;
随机算法(加权随机):随机分发请求,但是从概率上而言访问基数足够大的情况下,基本等同轮询。
最小连接数:在多个服务器中,与处理连接数(会话数)最少的服务器进行通信的算法。
IP哈希算法:根据客户端IP,哈希取模,得到的结果便是要访问的服务器的序号。
URL散列:同一URL发往同一服务器。
【2】负载均衡下session不一致情况
如下图所示:
如果解决负载均衡下session不一致情况呢?
① 粘滞session–负载均衡算法使用IP哈希,这样同一个IP恒定访问某个服务器。
IPHASH另外一个有点是不需要session序列化!
② Session复制
Tomcat自带集群时Tomcat之间Session同步:
<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="auto" port="4000" 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.MessageDispatchInterceptor"/> </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.ClusterSessionListener"/> </Cluster>
参考Tomcat官网:http://tomcat.apache.org/tomcat-9.0-doc/cluster-howto.html
③ Redis/Memcached实现Session共享
pom文件中引入spring-boot-starter-redis和sping-session-data-redis,对redis进行常规配置然后在主程序上使用注解@EnableRedisHttpSession