我们知道,在IPVS中,可能只有一个流的第一个数据包才会去调用“特定协议”的conn_schedule回调,选出一个destination,即real server之后,这些信息就会被保存在“特定协议‘的conn缓存中。如果你看一下这个所谓的“特定协议”,就会发现它事实上是“第四层协议”,即传输层协议,TCP或者UDP,而在这一层,很显然,一个连接就是一个5元组。那么,即便我针对第一个数据包,即一个流的首包选择了一个real server,并将其存入了conn缓存,那么该流的客户端在IP地址变化了之后,显然conn缓存中找不到了,那么就会自动进入conn_schedule,由于使用固定偏移的paylaod进行schedule,那么肯定还是原来的那个real server被选择,此时会在conn缓存中增加一条新的条目用于以后的匹配,老的那条conn缓存没有用了,等待过期,只要客户端不改变IP地址且新的这个conn缓存项不过期,这个缓存将会一直命中,一旦客户端改变了IP地址,一切重新开始。可见,这是一个自动且正确的过程。但是,最好有一个针对旧五元组的删除通知机制,而不是等待它自己过期。
IPVS基于应用层任意偏移字段HASH值的负载均衡算法(3)
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://www.heiqu.com/1fe6153cc5c3962b8571d3d470875fcc.html