TiDB:多数派节点故障恢复操作指南

作者: 这里介绍不了我 原文来源: https://tidb.net/blog/b72c3144

1. 背景

\

no-alt

(1) 我们所使用的 TiDB 目前采用 3 副本的部署方式,其中一份数据同时存储在多个节点中。然而,如果一个 Region 的多数或全部副本在短时间内全部下线,该 Region 将无法进行读写操作,对业务造成严重影响。

(2)在实际生产过程中,我们也曾遇到同一台交换机发生灾难性故障,如机房断电等情况,其下的多个 TIKV 宕机,也会造成多副本或全部副本丢失,导致业务不可用的情况。

no-alt

(3)社区当前多数文章只针对某一个版本在该场景下进行了故障恢复。而在 V6.1.0 正式引入 Online Unsafe Recovery 功能,所以本文将整合 V6.1.0 版本及其之前和之后的两个版本在该场景下故障解决方案。

2. 原理介绍

对于 PD 来说,是如何获取某个 Region 的状态?

对于每个 Raft Group 的 Leader 和 PD 之间都存在心跳包,用于汇报这个 Region 的状态。心跳包中主要包括:

  • Leader 的位置

  • Followers 的位置

  • 掉线副本的个数

  • 数据写入/读取的速度

除此之外,PD 还会收集每个 TiKV 节点(Store)发送的心跳包。通过这两种心跳包得到的信息,PD 会通过一些策略来制定具体的调度计划。

而调度的基本操作大致分为:

  • 增加一个副本(addReplica)

  • 删除一个副本(RemoveReplica)

  • 将 Leader 角色在一个 Raft Group 的不同副本之间进行迁移(TransferLeader)

假设我们现在有若干个 Region 分布在 5 个 Store 上,并且每个 Region 有3个副本,我们进行实验,手动挂掉3个 Store 。若剩余副本数等于 2,PD 可以通过调度进行 Leader 的重新选举以及副本的补充。但是若只剩余 1 个副本,那么就需要人工介入进行恢复。

3. 实验模拟

首先,使用 tiup-bench 工具来准备一些测试数据:

tiup bench tpcc prepare --warehouses 4 --db xxx -H xxxx -P 4000 -pxxx

3.1 V6.1.0 以下版本(3副本丢失2副本)

集群 store 情况:

id address
1 IP1
2 IP2
3 IP3
10 IP10
11 IP11

这里用 IP+store id 代替真实 IP 地址。

Region 分布情况:

表名 Region id Region leader Region分布 Region leader 所在地址
customer 34768 11 [11,10,2] IP11
customer 34780 1 [11,1,3] IP1
customer 34772 10 [10,2,1] IP10
customer 34776 11 [11,2,1] IP11
district 34756 10 [10,2,3] IP10
district 34764 1 [11,1,10] IP1
district 34752 10 [1,10,2] IP10
district 34760 1 [1,10,2] IP1
history 34792 10 [10,3,2] IP10
history 34799 1 [1,2,3] IP1
history 34784 1 [1,10,2] IP1
history 34788 2 [11,2,1] IP2
item 70 10 [11,10,2] IP10
new_order 34813 1 [1,10,2] IP1
new_order 34826 11 [11,3,1] IP11
new_order 34804 10 [10,3,1] IP10
new_order 34808 2 [2,3,1] IP2
order_line 34863 10 [10,3,11] IP10
order_line 34859 11 [11,10,3] IP11
order_line 34851 10 [10,3,1] IP10
order_line 34855 1 [11,1,10] IP1
orders 34839 1 [11,1,10 ] IP1
orders 34830
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值