架构师训练营 -week6 命题作业
Doris一个子集群默认分为两个group,每个group中都有若干台存储服务器提供读写 。客户端每次请求都同时往这两个group中写,不过只选择group中的某一台服务器。并行双写,响应时长为最大的那个响应时间。
详细过程如下:
1 客户端发送请求到存储服务器,发现操作失败进行3次重试,如果响应成功,说明只是瞬时失效。如果依然失败,那就得请管理服务器来仲裁。
2 管理服务器收到客户端的状态上报之后,对故障服务器进行3次故障检测,也就是尝试写入数据,如果依然失败,则标记为临时失效状态,并通知集群所有的客户端,这台机器不可用了,以后不用再读写它。发送告警通知给运维人员。
3 客户端由于双写失败了一次,会将失败这次的数据的操作日志写入事先部署的临时节点,用于故障恢复。
临时服务器平时空闲,只有在出现故障节点后用来写入操作日志。临时服务器任何时候都绝对不提供读请求服务。
当故障服务器恢复正常后,它通知管理中心自己已经启动,然后管理中心会通知临时服务器开始恢复数据。
此时临时服务器不再提供写服务。
4 当故障开始恢复后,临时服务器的操作日志将在故障服务器上很快进行重放,故障服务器很快可以恢复一部分数据。
故障服务器在故障恢复期间只写不读,因为其数据此时并不完整,所以不可读,只能写。
当故障服务器进入故障恢复时,临时服务器除了给故障服务器同步数据外,不再提供写请求。
故障恢复开始前后,正常服务器可读可写。Read/Write。
所以即便是故障恢复开始之后,结束之前,故障服务器和正常服务器依然是双写,但读请求只能发送给正常服务器来提供读服务。
故障恢复数据冲突处理:
故障服务器,在重放临时服务器的操作日志时注意数据的冲突判断,因为临时服务器故障恢复期间一直在备份写,而此时故障服务器也在提供客户端写服务,它必然在重放操作日志时会遇到自己已经写入的相同数据,比如根据操作时间戳丢弃旧写入数据,只保留最新时间的数据。
---Doris只支持insert和get。
5 当故障服务器数据恢复完成,就可以对外正常提供读写服务。
以上这个图示我自己画的,中间有些不准确,在文字中已经更正。
刚开始对临时服务器在故障开始后的细节没有搞清楚,所以上边的图多少不太准确。
6 如果2小时内上述操作都没恢复,故障节点将进入永久失效状态,此时人工要找一台standby备用服务器去迁移正常服务器的数据,然后重放临时节点的数据。这个standby启用之后的过程就类似于临时失效的恢复过程。
版权声明: 本文为 InfoQ 作者【J.Spring】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9154149c7b6f6b5669b1c25e】。文章转载请联系作者。
评论