写点什么

架构师训练营 -week6 命题作业

用户头像
J.Spring
关注
发布于: 2020 年 07 月 12 日
架构师训练营 -week6 命题作业





Doris一个子集群默认分为两个group,每个group中都有若干台存储服务器提供读写 。客户端每次请求都同时往这两个group中写,不过只选择group中的某一台服务器。并行双写,响应时长为最大的那个响应时间。

详细过程如下:

1 客户端发送请求到存储服务器,发现操作失败进行3次重试,如果响应成功,说明只是瞬时失效。如果依然失败,那就得请管理服务器来仲裁。

2 管理服务器收到客户端的状态上报之后,对故障服务器进行3次故障检测,也就是尝试写入数据,如果依然失败,则标记为临时失效状态,并通知集群所有的客户端,这台机器不可用了,以后不用再读写它。发送告警通知给运维人员。

3 客户端由于双写失败了一次,会将失败这次的数据的操作日志写入事先部署的临时节点,用于故障恢复。

临时服务器平时空闲,只有在出现故障节点后用来写入操作日志。临时服务器任何时候都绝对不提供读请求服务。



当故障服务器恢复正常后,它通知管理中心自己已经启动,然后管理中心会通知临时服务器开始恢复数据。

此时临时服务器不再提供写服务。



4 当故障开始恢复后,临时服务器的操作日志将在故障服务器上很快进行重放,故障服务器很快可以恢复一部分数据。

  • 故障服务器在故障恢复期间只写不读,因为其数据此时并不完整,所以不可读,只能写。

  • 当故障服务器进入故障恢复时,临时服务器除了给故障服务器同步数据外,不再提供写请求。

  • 故障恢复开始前后,正常服务器可读可写。Read/Write。

所以即便是故障恢复开始之后,结束之前,故障服务器和正常服务器依然是双写,但读请求只能发送给正常服务器来提供读服务。



故障恢复数据冲突处理:

故障服务器,在重放临时服务器的操作日志时注意数据的冲突判断,因为临时服务器故障恢复期间一直在备份写,而此时故障服务器也在提供客户端写服务,它必然在重放操作日志时会遇到自己已经写入的相同数据,比如根据操作时间戳丢弃旧写入数据,只保留最新时间的数据。



---Doris只支持insert和get。

5 当故障服务器数据恢复完成,就可以对外正常提供读写服务。

以上这个图示我自己画的,中间有些不准确,在文字中已经更正。

刚开始对临时服务器在故障开始后的细节没有搞清楚,所以上边的图多少不太准确。



6 如果2小时内上述操作都没恢复,故障节点将进入永久失效状态,此时人工要找一台standby备用服务器去迁移正常服务器的数据,然后重放临时节点的数据。这个standby启用之后的过程就类似于临时失效的恢复过程。



发布于: 2020 年 07 月 12 日阅读数: 86
用户头像

J.Spring

关注

努力支撑经历,经历支撑能力! 2018.12.03 加入

追不上BAT的人... 分享,聚焦

评论

发布
暂无评论
架构师训练营 -week6 命题作业