TSpider接入层高可用

TSpider接入层的高可用,包括故障的快速发现,服务异常后的快速切换

故障发现

在故障发现这块,一般有两种处理方式

  • 集群感知
集群内部预设定异常触发阀值, 集群组件或节点持续收集统计请求的错误信息,在触发阀值后预警异常,触发高可用。
需要Tdbctl,TSpider节点有统计收集的功能,目前暂不支持
  • 外围探测
通过外围组件连接实例,周期性分析实例的运行信息来决策可用性
例如ping操作,mysql连接执行SQL等

TenCluster探测介绍

TenDBCluster采用外围探测方式来探测节点可用性。会根据节点的网络分布,分别部署一个同城和一个跨城探测点,周期性来连接当前节点,执行一个replace写入操作, 操作成功则向中心机上报正常,操作失败或超时则上报异常; 中心机周期性扫描探测结果,在检测到异常后触发切换行为

故障切换

TSpider接入层的切换比较简单,主要是从负载均衡、名字服务、应用配置等移除故障的TSpider节点,同时从中控节点Tdbctl移除异常节点

更新名字服务

在使用负载均衡, 名字服务的集群,TSpider异常后要及时更新名字服务等,将异常ip剔除,确保新的连接请求不再被解析到异常节点

更新集群路由

#从Tdbctl节点删除异常的Tspider路由
delete from mysql.servers where Host='$spider_ip' and Port='$spider_port';
#强制刷新路由
tdbclt flush routing force;

故障场景下,一些异常的tcp连接在正常销毁前,有时会影响切换的实时性,因此Tdbctl提供了一个强制刷新路由的功能,强制刷新可以有效避免这些异常连接的干扰

故障重建

在故障切换成功后, 此时的集群与原集群相比,接入层承载能力因为节点减少而下降,要及时根据集群现状补充新的接入层节点。具体方式可参考Tspider扩容

其他说明

在部署TenDBCluster集群时,尽量部署多个TSpider节点,且充分考虑跨机器,跨机房,跨地域的容灾,这样能有效规避大批量故障。
在切换时,如果TenDBCluster集群只剩下最后一个TSpider节点,则要谨慎考虑剔除操作,防止域名,表结构等丢失,给灾后恢复工作带来难度 影响接入层的故障的场景有很多,例如网络分区,机器负载过高,机器硬件故障,TSpider本身服务异常等。不同的故障场景,表现出的现象可能是不一样的,因此在探测TSpider可用性时,需要充分考虑这些异常,做到及时发现,快速切换
在某些故障场景,例如网络闪断,高可用切换完成后,集群的路由里面已经没有此异常节点了(因此新的DDL操作不会也无法同步);网络闪断后再快速恢复,可能应用侧的连接缓存,重连、长连接机制等会导致依旧连接到此节点请求,从而导致数据错误。不过这种风险一般只出现在网络异常后的快速恢复场景(一般是秒级,具体跟探测异常到切换完成的耗时有关),因此在设计故障探测,切换时需要考虑这个问题。例如在检测到异常节点快速恢复后,及时关闭其服务

results matching ""

    No results matching ""