之前都是用tcp协议做的测试,这次改为由于项目需求,配置一个基于udp协议的lvs。我在原有配置脚本基础上,将-t改为-u,即配置成udp协议。结果发现,所有的数据包都会发送至同一个真实服务器,不能轮询。当我将这个真实服务器停掉之后,负载均衡器LB就不再转发,只收数据包,不转发数据包。
面对这个问题,我非常疑惑,开始以为是udp真实服务器的保活问题,还用keepalived结合udp进行配置。今天发现是一个比较弱的问题,就是会话失效时间。测试发现,lvs的默认失效时间是5分钟,在失效时间内,再次发送还会发送至同一个真实服务器,所以我之前无论如何调整都会出现第一段所描述的问题。使用ipvsadm --set 0 0 5,将udp的失效时间设置为5秒,后面在进行测试,就可以实现轮询。当然,发送间隔要在5秒以上。