LVS 之 RS 检测机制调整

来源:互联网 发布:00后宝妈直播软件 编辑:程序博客网 时间:2024/06/09 20:12

这是好几周前处理的一个问题了,现在记录下来备忘;

问题是这样的,我们的服务节点(RS:real service)一个机房是多个的,放在LVS下进行转发;当所有RS顺序重启(服务重启时间比较长,超过一分钟,如果时间很短就没有接下来操作的必要了)的时候,调用LVS的PHP节点会发生短时间内大量的超时请求,找了下原因:

LVS通过TCP_CHECK来判断RS是否有效,一般每过3s check一次,超过5次(3s和5次都是可配置的)发现该RS无效之后就暂时把这个节点从LVS摘除;理解了LVS check机制就会发现,当某个RS重启的时候,期间3s*5(大约)的时间内LVS都还会把请求转发给该RS,导致前端出现大量的请求堆积和超时,这段时间之后LVS判断RS失效后就不会把请求转发给该RS了;

怎么解决这个问题?我这里找了一个简单的方法:

在RS重启之前就告知LVS该服务暂时关闭,显然TCP_CHECK方式就无法通知的,所以这里就改用了HTTP_CHECK的方式,LVS通过判断该RS下标识文件的MD5值来判断该RS是否有效。接下来做法就非常简单了,重启之前先将修改标识文件,LVS判断RS标识文件MD5值匹配不上(这里check时间现在也是3s*5)就会使RS失效,RS只要等待一小段时间(超过3s*5,我这里设置的30s,这个时候重启LVS已经不会将请求转发给该RS了)再重启即可,期间(修改标志文件到重启之前这段时间)LVS分发给RS请求还能照常处理,等RS重启完了之后再将标志文件重置为正常的标志文件,就不会再出现之前的问题了。


0 0