版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/J080624/article/details/86508119
【1】负载均衡技术
F5 | HAProxy | LVS | Nginx/Apache |
---|---|---|---|
硬件设备 功能十分强大 |
工作在第四/七层 Session保持 并发处理极佳 负载均衡算法多 |
工作第四层 工作稳定 应用范围广 配置简单 不能做动静分离 |
安装配置简单 占有内存少 并发处理能力强3W+ 优化下10W+ 功能强大 动静分离 反向代理 Lua 工作在第七层(支持的应用少) 不能保持session |
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共享
扫描二维码关注公众号,回复:
4948812 查看本文章
pom文件中引入spring-boot-starter-redis和sping-session-data-redis,对redis进行常规配置然后在主程序上使用注解@EnableRedisHttpSession