TIDB-PD-RECOVER的恢复方式

一、简介

1.背景

为了防止因pd出现问题导致pd不可用的情况,tidb官方给出了pd-recover的方法来处理这种情况,本着学习的精神,对几种预想到的想法进行了测试

2.工具下载

 wget https://download.pingcap.org/tidb-version-linux-amd64.tar.gz

3.环境简介

一共三台pd的机器,集群名字tidb-1

二、模拟宕机

1.删除三台(全部为三台)pd机器的data目录模拟宕机

# 执行后会看到pd,tikv,tidb全部为down,很快pd变为了up
rm -r pd-2379

2.删除两台pd机器的data目录模拟宕机

3.删除两台或者三台pd机器的deploy目录模拟宕机

4.模拟之前的pd被错误释放,完全无法使用的情况

# 我这里是ubuntu,这个在所有pd机器上执行

# 查看防火墙状态
ufw status
# 开启防火墙
ufw enable
# 开启防火墙规则为默认放开原则
ufw default allow
# 禁止2379,2380的端口访问
ufw deny 2379
ufw deny 2380

三、恢复集群

1.针对宕机情况1的恢复

1.1 查看pd的cluster-id

# 方式一、通过pd日志获取,这时候会发现有两个cluster-id,这是因为所有pd-data删除之后新建了一个pd集群
cat pd.log | grep "init cluster id"
# 方式二、通过tidb日志获取
cat tidb.log  | grep "init cluster id"
# 方式三、通过tikv日志获取
cat tikv.log | grep "connect to PD cluster"

1.2 获取已分配的id

# 方式一、通过tidb-cluster-pd面板下的cluster下的Current ID allocation 面板获取最大的已分配 ID,需要确保是pd leader(注:删除pd-data这种模拟方式会导致监控看不到数据)

# 方式二、通过pd日志查看,在所有pd机器执行以下命令,找到最大的id,我这里是4000
 cat pd*.log | grep "idAllocator allocates a new id" |  awk -F'=' '{print $2}' | awk -F']' '{print $1}' | sort -r -n | head -n 1

1.3 执行pd-recover

# 任意一个pd节点执行即可
# 注意这里的cluster-id是前一个cluster-id,因为后面的cluster-id是新建的pd集群的cluster-id
./pd-recover -endpoints http://192.168.1.1:2379 -cluster-id 6747551640615446306 -alloc-id 4000

1.4 重启pd集群

tiup cluster restart tidb_clustere -R pd

2.针对宕机情况2的恢复方式

2.1 重启pd集群

# 这时候直接重启pd集群即可,你会发现cluster-id和之前的cluster-id一致
tiup cluster restart tidb-cluster -R pd

3.针对宕机情况3的处理方法

3.1 新建一套只含有pd的集群

3.1.1 配置文件
# vim topology-pd.yaml
global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb/tidb-deploy"
  data_dir: "/data/tidb/tidb-data"

server_configs:
  pd:
    replication.enable-placement-rules: true
pd_servers:
  - host: 192.168.1.4
  - host: 192.168.1.5
  - host: 192.168.1.6

3.1.2 部署
 tiup cluster deploy tidb-2 v5.4.1 ./topology_pd.yaml --user tidb -p

3.2 迁移和更改文件

将deploy目录复制到之前的集群中,然后将scripts下run_pd.sh的对应信息更改即可

3.3 特殊情况处理

如果特别不幸的情况,你在迁移deploy目录之前重启了pd,然后导致pd起不来,用上面的方法也启动不起来,那么可能在上面的步骤后再次进行pd-recover操作

4.针对宕机情况4的处理方法

4.1 新建一套集群,方法可以参考3.1

4.2 对pd集群(tidb-2)进行pd-recover操作

# 任意一个pd节点执行即可,获取cluster-id和alloc-iid的ne
./pd-recover -endpoints http://192.168.1.1:2379 -cluster-id 6747551640615446306 -alloc-id 4000

4.3 修改tidb/tikv(tidb-1集群)的scripts目录下的run.sh脚本

vim run_tikv.sh
# 修改--pd的地址为test-2集群的pd地址
vim run_tidb.sh
# 修改--path的地址为test-2集群的pd地址

4.4 修改原集群的(tidb-1)meta.yaml文件

vim .tiup/storage/cluster/clusters/tidb-1/meta.yaml
# 修改pd部分的信息为tidb-2部分的信息

4.5 关闭tidb-2集群

tiup cluster stop tidb-2

4.6 重启tidb-1集群

tiup cluster restart tidb-1

4.7 后续处理

后面可以扩容出三台新的pd,先后将test-2的pd缩容掉,避免两套pd集群产生不利的影响,但是这里扩容又会报pd端口冲突,因为pd在两套集群同时存在,所以端口冲突,所以比较好的解决方式还是拷贝tidb-2的pd集群文件到tidb-1,然后销毁tidb-2的集群,这种操作更好一些

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值