[转帖]TiDB-unsafe recover(三台tikv宕机两台)

tidb,unsafe,recover,三台,tikv,宕机,两台 · 浏览次数 : 0

小编点评

**背景** * 由于某些原因,两台tikv不可连接,出现region不能访问的故障。 * 存在以下理论: * 多副本原则:当副本数量等于tikv的数量的时候,每一个tikv都有全部的region,只不过不是每个region都是leader。 * 数据完整性:当副本数量等于tikv的数量的时候,每一个tikv都有全部的region,只不过不是每个region都是leader。 * 集群不可访问:当副本存活数量小于(n+1)/ 2的时候,集群不可访问,只能使用unsafe recover来恢复。 **故障处理** 1. 查看不可连接的store # 记录下 \"state_name\": \"Disconnected\"的store id。 2. 关闭pd调度,避免恢复过程中产生异常。 3. 停止tikv进程,防止执行unsafe-recover。 4. 进行unsafe-recover remove-fail-stores,删除特定 Region 的 peer 列表中所有region。 5. 恢复pd调度,进入交互模式执行tikvctl命令。 6. 启动tikv集群。 **一些不成功的尝试方法** * **尝试缩容**:`tiup cluster scale-in cluster_name -N tikv_ip:tikv_port --force` * **尝试删除store**:`tiup cluster scale-in cluster_name -N tikv_ip:tikv_port --force --store delete` * **查看宕机store上的region**:`tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i# 查看当前都有哪些storestore# 删除对应id的storestore delete`

正文

一、背景

名称数量
tikv3
副本3

1.故障:

因为某些原因,两台tikv不可连接,出现region不能访问的故障

2.几条理论:

2.1.多副本原则
存在一半以上的副本则集群访问不受影响(如n副本,存活(n+1)/ 2)
2.2.数据完整性
当副本数量等于tikv的数量的时候,每一个tikv都有全部的region,只不过不是每个region都是leader
2.3.集群不可访问
当副本存活数量小于(n+1)/ 2的时候,集群不可访问,只能使用unsafe recover来恢复

二、故障处理

1.查看不可连接的store

#  记录下 "state_name": "Disconnected"的store id(我的是1,7)
tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port store

    2.关闭pd调度,避免恢复过程中产生异常

    # 进入交互模式
    tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
    # 分别执行以下命令
    config set region-schedule-limit 0
    config set replica-schedule-limit 0
    config set leader-schedule-limit 0
    config set merge-schedule-limit 0
    # 查看调度是否关闭
    operator show
    

      3.停止tikv进程(防止执行unsafe-recover remove-fail-stores出现文件锁而失败)

      tiup cluster stop cluster_name -R tikv
      

        4.进行unsafe-recover remove-fail-stores

        4.1 将tikvctl挪移到所有状态正常kv机器中

        scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.1:/home/tidb
        scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.2:/home/tidb
        scp /data/tidb/.tiup/components/ctl/v4.0.13/tikv-ctl tidb@192.168.1.3:/home/tidb
        

          4.2 执行tikvctl命令

          # 4.0.x 版本命令,-s是指store id,--all-regions是指所有region,-r 可以用来指定的region来代替--all-regions
          # unsafe-recover remove-fail-stores(故障机器从指定 Region 的 peer 列表中移除)
          

          ./tikv-ctl --db /data/tikv/tikv-data28016/db unsafe-recover remove-fail-stores -s 1,7 --all-regions

          # 5.x 版本命令

          ./tikv-ctl --data-dir /data/tikv/tikv-data28016 unsafe-recover remove-fail-stores -s 1,7 --all-regions

            5.恢复pd调度

            # 进入交互模式
            tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
            # 分别执行以下命令(值为关闭之前的值就可以)
            config set region-schedule-limit 2048
            config set replica-schedule-limit 64
            config set leader-schedule-limit 4
            config set merge-schedule-limit 8
            

              6.启动tikv集群

              tiup cluster start cluster_name -R tikv
              

                三、一些不成功的尝试方法

                1.主要原因

                看日志的原因是连接到几个已经down 掉的kv

                2.解决

                2.1尝试 --force缩容依旧报错

                tiup cluster scale-in cluster_name -N tikv_ip:tikv_port --force
                

                  2.2 尝试store delete

                  # 进入交换模式
                  tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
                  # 查看当前都有哪些store
                  store
                  # 删除对应id的store
                  store delete 1
                  # 没有删除掉,这是因为状态不是Tombstone的状态无法进行delete
                  

                    2.3 查看宕机store上的region

                    # 进入交换模式
                    tiup ctl:v4.0.13 pd -u http://pd_ip:pd_port -i
                    # 查看region
                    region store 1
                    # 这里可以看到pd的记录里,还有好多region再这个宕机的store上,那么这样的话就回向对应的kv发布消息,但kv收不到,所以就会有region不可用的报错
                    

                      综上: 只有把宕机store上的region清除掉,才能让集群正常启动,所以这里就用到了unsafe-recover方

                      感谢大佬的文章:
                      https://mp.weixin.qq.com/s/u5MBSIydf_ZQ1jxCJn4O2A
                      https://tidb.io/blog/9163546d

                      文章知识点与官方知识档案匹配,可进一步学习相关知识
                      MySQL入门技能树数据库组成66715 人正在系统学习中

                      与[转帖]TiDB-unsafe recover(三台tikv宕机两台)相似的内容:

                      [转帖]TiDB-unsafe recover(三台tikv宕机两台)

                      一、背景 名称数量tikv3副本3 1.故障: 因为某些原因,两台tikv不可连接,出现region不能访问的故障 2.几条理论: 2.1.多副本原则 存在一半以上的副本则集群访问不受影响(如n副本,存活(n+1)/ 2) 2.2.数据完整性 当副本数量等于tikv的数量的时候,每一个tikv都有全

                      [转帖]TiDB 适配应用实践:MyBatis 3.5.X 在 JDK8 中性能问题的排查与优化

                      https://zhuanlan.zhihu.com/p/371638037 作者介绍:PingCAP Tech Center,于旸。 最近有金融客户使用 TiDB 适配批处理场景,数据量在数亿级。对于相同数据量的处理耗时,TiDB 要 35 分钟,而某商业数据库只要 15 分钟,足足相差 20 分

                      [转帖]tidb集群部署

                      http://blog.itpub.net/29785807/viewspace-2789852/ 一.安装规划 1 2 3 4 5 6 使用15台服务器 5台tidb服务器:每台3个tidb实例+1个pd+1个pump 10台tikv服务器:每台4个tikv实例 drainer_servers 安

                      [转帖]tidb 修改root密码

                      http://blog.51yip.com/tidb/2452.html 通过 {pd-ip}:{pd-port}/dashboard 登录 TiDB Dashboard,登录用户和口令为 TiDB 数据库 root 用户和口令。如果你修改过数据库的 root 密码,则以修改后的密码为准,默认密码为

                      [转帖]tidb 搭建私有镜像库

                      https://docs.pingcap.com/zh/tidb/stable/tiup-mirror 在构建私有云时,通常会使用隔离的网络环境,此时无法访问 TiUP 的官方镜像。因此,TiUP 提供了构建私有镜像的方案,它主要由 mirror 指令来实现,该方案也可用于离线部署。使用私有镜像,你

                      [转帖]tidb 如何对 TiDB 进行 TPC-C 测试

                      https://docs.pingcap.com/zh/tidb/stable/benchmark-tidb-using-tpcc TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商品销售模型对 OLTP 系统进行测试,其中包含五类事务: NewOrder – 新订单的生成

                      [转帖]TiDB 环境与系统配置检查

                      https://docs.pingcap.com/zh/tidb/stable/check-before-deployment 在 TiKV 部署目标机器上添加数据盘 EXT4 文件系统挂载参数 生产环境部署,建议使用 EXT4 类型文件系统的 NVME 类型的 SSD 磁盘存储 TiKV 数据文件

                      [转帖]TIDB-TIDB节点磁盘已满报警

                      一、背景 今日突然收到tidb节点的磁盘报警,磁盘容量已经超过了80%,但是tidb是不放数据的,磁盘怎么会满,这里就需要排查了 二、问题排查 解决步骤 1.df -h查看哪里占用磁盘比较多,然后通过du -h找到具体占用多的目录 2.最终发现tidb/tidb-deploy/tidb-4000/l

                      [转帖]TiDB修改配置参数

                      https://www.jianshu.com/p/2ecdb4642579 在TiDB 中,“修改配置参数”似乎是个不精准的说法,它实际包含了以下内容: 修改 TiDB 的系统变量 修改集群配置- tiup 修改集群配置- set config 在线修改集群配置 总结 TiDB的配置修改比较混乱,

                      [转帖]TiDB 配置参数修改与系统变量修改步骤

                      https://tidb.net/blog/bda86911 注意事项1:tidb-test 为集群名称 注意事项2:参数修改前与修改后备份.tiup目录 注意事项3:通过 tiup cluster edit-config 来修改配置参数 1、修改配置参数 tiup cluster edit-con