Status change表示节点应用的内部状态转变,分别为dead、active、standby,dead表示节点处于宕机或者应用实例未启动,active表示应用实例为主机,standby表示应用实例为备机。
√当主机转变为active时,其他任务单元方能与之正确通信,并且自启动心跳日志记录任务和脑裂检测任务。定时写心跳日志到表csserver_hb中,表示该节点应用尚浅存活。如果集群单元发生“脑裂”,那么可想而知会发生存在两个主机节点的情况,其他任务单元提交的数据也被割裂,得不到完整性的保障。在我们的系统中,如果active节点和数据库之间发生网络中断,standby检测到active不可用(假死或者宕机),立即接管服务,转变为active,显然这个时候有2个active了,那怎么去保证呢?也就是前文所说的脑裂检测任务,active节点不断的去询问standby节点“你是谁?”,standby节点如果回答“I am active”,那么active节点降级成standby节点。或者active节点和standby节点也发生网络中断了,这种情况下,双active很有可能会出现,为了保证系统对于节点管理中心的唯一性,active节点降级转变成standby节点。
√当主机转变为standby时,其他节点与之通信返回“服务不可用”的错误码。standby节点启动针对active节点的健康检测,主要是不断的读取active记录中的心跳时间hb_time,如果和当前时间的差值超出预先设置的timeout时间,则表示active节点不可用,至此standby节点切换成active状态。Standby扮演着try get the active的角色。