高可用性

集群系统的特点是它在软硬件上都有冗余。系统的高可用性可以通过检测节点或服务进程故障和正确地重置系统来实现,使得系统收到的请求能被存活的结点处理。通常,我们在调度器上有资源监视进程来时刻监视各个服务器结点的健康状况,当服务器对ICMP ping不可达时或者她的网络服务在指定的时间没有响应时,资源监视进程通知操作系统内核将该服务器从调度列表中删除或者失效。这样,新的服务请求就不会被调度到坏的结点。资源监测程序能通过电子邮件或传呼机向管理员报告故障,一旦监测到服务进程恢复工作,通知调度器将其加入调度列表进行调度。另外,通过系统提供的管理程序,管理员可发命令随时将一台机器加入服务或切出服务,很方便进行系统维护。

现在前端的调度器有可能成为系统的单一失效点。为了避免调度器失效导致整个系统不能工作,我们需要设立调度器的备份。两个心跳进程(Heartbeat Daemon)分别在主、从调度器上运行,它们通过串口线和UDP等心跳线来相互汇报各自的健康情况。当从调度器不能听得主调度器的心跳时,从调度器会接管主调度器的工作来提供负载调度服务。这里,一般通过ARP欺骗(Gratuitous ARP)来接管集群的Virtual IP Address。当主调度器恢复时,这里有两种方法,一是主调度器自动变成从调度器,二是从调度器释放Virtual IP Address,主调度器收回Virtual IP Address并提供负载调度服务。然而,当主调度器故障后或者接管后,会导致已有的调度信息丢失,这需要客户程序重新发送请求。