调度器间的状态同步

附件大小
Image icon state_synchronization.jpg16.36 KB

尽管IPVS虚拟服务器软件已被证明相当鲁棒,但调度器有可能因为其他原因而失效,如机器的硬件故障和网络线路故障等。所以,我们引入一个从调度器作为主调度器的备份,当主调度器失效时,从调度器将接管VIP等地址进行负载均衡调度。在现在的解决方案中,当主调度器失效时,调度器上所有已建立连接的状态信息将丢失,已有的连接会中断,客户需要向重新连接,从调度器才会将新连接调度到各个服务器上。这对客户会造成一定的不便。为此,我们考虑一种高效机制将主调度器的状态信息及时地复制到从调度器,当从调度器接管时,绝大部分已建立的连接会持续下去。

因为调度器的连接吞吐率是非常高的,如每秒处理一万多个连接,如何将这些变化非常快的状态信息高效地复制到另一台服务器?我们设计利用内核线程实现主从同步进程,在操作系统的内核中,直接将状态信息发送到从调度器上,可以避免用户空间和核心的切换开销。其结构如图5.2所示:



图5.2:主从调度器间的状态同步

在主从调度器的操作系统内核中分别有两个内核线程ConnSyncd,主调度器上的ConnSyncd每隔1/10秒钟唤醒一次从更新队列中将更新信息读出,将更新信息发给从调度器上的ConnSyncd,然后在从调度器内核中生成相应的状态信息。为了减少主从调度器间的通讯开销,在主调度器的更新队列中只放新连接生成的信息,在从调度器中生成连接信息,设置定时器,当连接超时,该连接会自动被删除。

主从调度器间状态复制的代码正在编写中。因为主从调度器间的状态复制会降低调度器的吞吐率,所以主从调度器间状态复制会以模块的形式出现,当用户特别需要时,可以将该模块加入内核中。

Comments

RT,但是当主调度器回复后,却很快的切换到主调度器。我想知道为什么主失效会有几秒的时间缝隙?