天天看點

TiKV 多副本丢失的故障修複演練

作者:劉強​

v5.0.1 版本tidb 叢集故障演練

參考文章:

Tidb災難恢複演練-多副本丢失 運維實戰

資料庫是每個公司的重中之重,它往往存儲了公司的核心資料,一旦出現永久性損壞,對公司的打擊會是災難性的。分布式資料庫雖然采用資料多副本備份機制來保證資料的可靠性,但同樣也會面臨多副本丢失的風險。災難出現如何快速恢複也是DBA需要面對的問題,本案通過對具體示例的了解與操作介紹了分布式NEWSQL資料庫Tidb對多副本丢失問題的處理。 一、TiDB 的整體架構: TiDB 叢集主要包括三個核心元件:T…

\

一篇文章帶你玩轉 TiDB 災難恢複 運維實戰

一篇文章帶你玩轉TiDB災難恢複 一、背景 高可用是 TiDB 的另一大特點,TiDB/TiKV/PD 這三個元件都能容忍部分執行個體失效,不影響整個叢集的可用性。下面分别說明這三個元件的可用性、單個執行個體失效後的後果以及如何恢複。 TiDB TiDB 是無狀态的,推薦至少部署兩個執行個體,前端通過負載均衡元件對外提供服務。當單個執行個體失效時,會影響正在這個執行個體上進行的 Session,從應用的角度看,會…

https://docs.pingcap.com/zh/tidb/stable/tikv-control

演練背景&目标: 目的是打造雙雲機房部署tidb 叢集,在主機房故障時可以緊急使用少數的pd 節點和tikv 節點恢複服務 pd 節點的演練文檔: ​使用pd-recover 恢複pd 多數節點故障的場景

測試環境部署資訊:

A,B 兩個機房: 所有的region 的leader 排程到A 機房

使用label 标簽保證B 機房的那個tikv 節點擁有完整的資料副本

TiKV 多副本丢失的故障修複演練

1.設定标簽(如果之前是單機房可通過如下設定新的标簽)

» config set location-labels dc,host
» store  label  4 dc bjtx
» store label 24045 dc bjtx
» store label 1001 dc bjtx
» store label  22508 dc bjbd
-- 檢視store 基本資訊
» store --jq=".stores[].store |{id,address,state_name,labels}"
{"id":24045,"address":"172.29.238.197:20174","state_name":"Up","labels":[{"key":"host","value":"tikv4"},{"key":"dc","value":"bjtx"}]}
{"id":4,"address":"172.29.238.238:20174","state_name":"Up","labels":[{"key":"host","value":"tikv1"},{"key":"dc","value":"bjtx"}]}
{"id":1001,"address":"172.29.238.146:20174","state_name":"Up","labels":[{"key":"host","value":"tikv1"},{"key":"dc","value":"bjtx"}]}
{"id":22508,"address":"192.168.149.156:20174","state_name":"Up","labels":[{"key":"host","value":"tikv3"},{"key":"dc","value":"bjbd"}]}      

2.使用pd-ctl 将所有region 的leader 排程到bjtx 機房,并通過監控确認所有的region leader 是否都排程到A 機房

» config show label-property
{}
» config set label-property reject-leader dc bjbd
Success!
» config show label-property
{
  "reject-leader": [
    {
      "key": "dc",
      "value": "bjbd"
    }
  ]
}
-- 檢視bjbd機房是否包含了所有的region副本資料(保證在主機房挂掉後備用機房擁有完整的資料副本)
» region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(all(.!=22508))}"      

模拟tikv 主機房故障(手動快速 kill 主機房的pd 節點以及tikv 節點,并mv 相關資料目錄)

pd 服務的恢複見上面連結。在pd 恢複服務之後,進行tikv 的恢複

1.使用tiup 關閉健康的tikv 節點192.168.149.156:20174

2.使用tikv-ctl 對所有 Region 移除掉所有位于故障節點上的 Peer

bin/tiup ctl tikv --db /data/tidb/data/tikv-20174/db  unsafe-recover remove-fail-stores -s 24045,4,1001 --all-regions
removing stores [24045, 4, 1001] from configurations...
success
-- 注意此操作需要在每一個健康的tikv 節點上執行該指令。是以需要在每個tikv 節點上部署tikv-ctl 工具      

a. 此時reload pd,tikv 是失敗的(報錯如下圖)

TiKV 多副本丢失的故障修複演練

b.使用scale-in 操作下線故障的tikv 節點,叢集整體狀态大緻如下圖所示。此時reload pd,tikv 還是失敗的\

TiKV 多副本丢失的故障修複演練

c.使用–force 強制下線故障的tikv 節點(3個)

bin/tiup  cluster  scale-in tidb-louis_cluster   -N 172.29.238.146:20174  --force 
......      

3.reload pd,tikv

bin/tiup  cluster  reload  tidb-louis_cluster -R=pd,tikv      
TiKV 多副本丢失的故障修複演練

再次檢視監控大盤如下\