ä½è ï¼Sky56â
æ°æ®åºæ¯æ¯ä¸ªå ¬å¸çéä¸ä¹éï¼å®å¾å¾åå¨äºå ¬å¸çæ ¸å¿æ°æ®ï¼ä¸æ¦åºç°æ°¸ä¹ æ§æåï¼å¯¹å ¬å¸çæå»ä¼æ¯ç¾é¾æ§çãåå¸å¼æ°æ®åºè½ç¶éç¨æ°æ®å¤å¯æ¬å¤ä»½æºå¶æ¥ä¿è¯æ°æ®çå¯é æ§ï¼ä½åæ ·ä¹ä¼é¢ä¸´å¤å¯æ¬ä¸¢å¤±çé£é©ãç¾é¾åºç°å¦ä½å¿«éæ¢å¤ä¹æ¯DBAéè¦é¢å¯¹çé®é¢ï¼æ¬æ¡éè¿å¯¹å ·ä½ç¤ºä¾ççè§£ä¸æä½ä»ç»äºåå¸å¼NEWSQLæ°æ®åºTidb对å¤å¯æ¬ä¸¢å¤±é®é¢çå¤çã
ä¸ãTiDB çæ´ä½æ¶æ:
TiDB é群主è¦å æ¬ä¸ä¸ªæ ¸å¿ç»ä»¶ï¼TiDB Serverï¼PD Server å TiKV Serverã

TiDB Server
TiDB Server è´è´£æ¥æ¶ SQL 请æ±ï¼å¤ç SQL ç¸å ³çé»è¾ï¼å¹¶éè¿ PD æ¾å°åå¨è®¡ç®æéæ°æ®ç TiKV å°åï¼ä¸ TiKV 交äºè·åæ°æ®ï¼æç»è¿åç»æãTiDB Server æ¯æ ç¶æçï¼å ¶æ¬èº«å¹¶ä¸å卿°æ®ï¼åªè´è´£è®¡ç®ï¼å¯ä»¥æ éæ°´å¹³æ©å±ï¼å¯ä»¥éè¿è´è½½åè¡¡ç»ä»¶ï¼å¦LVSãHAProxy æ F5ï¼å¯¹å¤æä¾ç»ä¸çæ¥å ¥å°åã
PD Server
Placement Driver (ç®ç§° PD) æ¯æ´ä¸ªé群çç®¡çæ¨¡åï¼å ¶ä¸»è¦å·¥ä½æä¸ä¸ªï¼ä¸æ¯åå¨é群çå ä¿¡æ¯ï¼æä¸ª Key åå¨å¨åªä¸ª TiKV èç¹ï¼ï¼äºæ¯å¯¹ TiKV é群è¿è¡è°åº¦åè´è½½åè¡¡ï¼å¦æ°æ®çè¿ç§»ãRaft group leader çè¿ç§»çï¼ï¼ä¸æ¯åé å ¨å±å¯ä¸ä¸éå¢çäºå¡ IDã
PD éè¿ Raft åè®®ä¿è¯æ°æ®çå®å ¨æ§ãRaft ç leader server è´è´£å¤çæææä½ï¼å ¶ä½ç PD server ä» ç¨äºä¿è¯é«å¯ç¨ã
TiKV Server
TiKV Server è´è´£å卿°æ®ï¼ä»å¤é¨ç TiKV æ¯ä¸ä¸ªåå¸å¼çæä¾äºå¡ç Key-Value åå¨å¼æãå卿°æ®çåºæ¬å使¯ Regionï¼æ¯ä¸ª Region è´è´£åå¨ä¸ä¸ª Key Rangeï¼ä» StartKey å° EndKey çå·¦éå³å¼åºé´ï¼çæ°æ®ï¼æ¯ä¸ª TiKV èç¹ä¼è´è´£å¤ä¸ª RegionãTiKV ä½¿ç¨ Raft åè®®åå¤å¶ï¼ä¿ææ°æ®çä¸è´æ§å容ç¾ã坿¬ä»¥ Region 为åä½è¿è¡ç®¡çï¼ä¸åèç¹ä¸çå¤ä¸ª Region ææä¸ä¸ª Raft Groupï¼äºä¸ºå¯æ¬ãæ°æ®å¨å¤ä¸ª TiKV ä¹é´çè´è½½åè¡¡ç± PD è°åº¦ï¼è¿é乿¯ä»¥ Region 为åä½è¿è¡è°åº¦ã
äºãç¾é¾æ¢å¤é®é¢ç¸å ³èæ¯ï¼
TiDB é»è®¤é 置为 3 坿¬ï¼æ¯ä¸ä¸ª Region é½ä¼å¨é群ä¸ä¿å 3 份ï¼å®ä»¬ä¹é´éè¿ Raft åè®®æ¥é举 Leader å¹¶åæ¥æ°æ®ãRaft åè®®å¯ä»¥ä¿è¯å¨æ°éå°äºå¯æ¬æ°ï¼æ³¨æï¼ä¸æ¯èç¹æ°ï¼ä¸åçèç¹æææè éç¦»çæ åµä¸ï¼ä»ç¶è½å¤æä¾æå¡ï¼å¹¶ä¸ä¸ä¸¢å¤±ä»»ä½æ°æ®ãå¾1ä¸ç´«è²é¨å为3坿¬çregionã
å¯¹äº 3 坿¬éç¾¤ï¼ææä¸ä¸ªèç¹é¤äºå¯è½ä¼å¯¼è´æ§è½ææå¨ä¹å¤ï¼å¯ç¨æ§åæ£ç¡®æ§ç论ä¸ä¸ä¼åå½±åï¼
使¯ææ 2 ä¸ªå¯æ¬ï¼ä¸äº region å°±ä¼ä¸å¯ç¨ï¼èä¸å¦æè¿ 2 ä¸ªå¯æ¬æ æ³å®æ´å°æ¾åäºï¼è¿å卿°¸ä¹ 丢失é¨åæ°æ®çå¯è½ã
å¨å®é ç产ç¯å¢ä¸ï¼TiDB é群æ¯å¯è½ä¼åºç°ä¸¢å¤±æ°æ®æ åµï¼å¦ï¼
l ä¸ä¸ª TiDB é群å¯è½ä¼åºç°å¤å° TiKV æºå¨çæ¶é´å æ¥è¿æ é䏿 æ³çæå æ¢å¤
l ä¸ä¸ªåæºæ¿é¨ç½²ç TiDB é群çå ¶ä¸ä¸ä¸ªæºæ¿æ´ä½æ éç
å¨ä¸è¿°è¿äºæ å½¢ä¸ï¼ä¼åºç°é¨å Region çå¤ä¸ªå¯æ¬ï¼å å«å ¨é¨å¯æ¬çæ åµï¼åæ¶æ éï¼è¿èå¯¼è´ Region çæ°æ®é¨åæå ¨é¨ä¸¢å¤±çé®é¢ã
è¿ä¸ªæ¶åï¼æéè¦çæ¯å¿«é尿大ç¨åº¦å°æ¢å¤æ°æ®å¹¶æ¢å¤ TiDB é群æ£å¸¸æå¡ã
ä¸ãæ¼ç»ç¾é¾æ¢å¤çé¨ç½²æ¶æï¼
æ¬æ¬¡æ¼ç»éç¨è¾æ°çæ°æ®åºè½¯ä»¶çæ¬v4.0.0-rcï¼ä¸»è¦å ³æ³¨Tikvä¸regionçå¤çï¼æ¤æ¶æè®¾è®¡æ¶å°PDãTIDBãçæ§é¨ç½²å¨ä¸å°æºå¨ä¹ä¸ï¼å¹¶æªååä½å¤çï¼Tikvéæ©5å°æºå¨ï¼éç¨Tiupè¿è¡é¨ç½²ãä¸å¾ä¸ºé¨ç½²è®¾è®¡ï¼
åãæ¼ç»æ¢å¤åçç¸å ³ä¿¡æ¯åçè§£ï¼
为æ´å¥½ççè§£ï¼æä»¬å°ä»¥æ¥æä¸ç¾ä¸æ¡æ°æ®çt_user表ä½ä¸ºæä½ç对象ï¼å¨æµè¯ç¯å¢ä¸æ¨¡æä¸¤å¯æ¬ä»¥åä¸å¯æ¬ä¸¢å¤±çç¾é¾åºæ¯ï¼å¹¶è¿è¡å¯¹åºçæ°æ®ç¾é¾æ¢å¤ã
T_userè¡¨ç»æï¼
Create Table: CREATE TABLE âât_userââ (
ââidââ int(11) NOT NULL,
ââc_user_idââ varchar(36) DEFAULT NULL,
ââc_nameââ varchar(22) DEFAULT NULL,
ââc_province_idââ int(11) DEFAULT NULL,
ââc_city_idââ int(11) DEFAULT NULL,
ââcreate_timeââ datetime DEFAULT NULL,
PRIMARY KEY (ââidââ)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
æ¥çt_user表å¨storeçåå¸ï¼
SHOW TABLE REGIONS è¯å¥ç¨äºæ¾ç¤º TiDB ä¸æä¸ªè¡¨ç Region ä¿¡æ¯ã\
ä»ä¿¡æ¯å¯ä»¥åç°ï¼t_user表æå个regionï¼ä½æ¯SQLå½ä»¤æªè½è¯¦ç»ååºregionå¨ä¸åçstoreä¸çåå¸ï¼ä¾å¦regionçleader以åfolloerå¦ä½å¨storeè¿è¡åå¸ï¼è¿éä¿¡æ¯æå©äºæä»¬æ´å¥½çè§£regionçåå¸ã
éè¿pd-ctlå·¥å ·å¯ä»¥æ¾å°æ´å 详ç»çä¿¡æ¯ï¼
[root@tidb1 bin]# ./pd-ctl -i -u http://172.16.134.133:2379
» region 4009
{
âidâ: 4009,
âstart_keyâ: â7480000000000000FF4D5F728000000000FF224A9A0000000000FAâ,
âend_keyâ: ââ,
âepochâ: {
âconf_verâ: 23,
âversionâ: 36
},
âpeersâ: [
{
âidâ: 4010,
âstore_idâ: 5
},
{
âidâ: 4011,
âstore_idâ: 6
},
{
âidâ: 4012,
âstore_idâ: 4
}
],
âleaderâ: {
âidâ: 4010,
âstore_idâ: 5
},
âwritten_bytesâ: 0,
âread_bytesâ: 0,
âwritten_keysâ: 0,
âread_keysâ: 0,
âapproximate_sizeâ: 99,
âapproximate_keysâ: 773985
}
为æ´å¥½ççè§£ï¼æ ¹æ®ä»¥ä¸çå¤ä¸ªregionä¿¡æ¯æä»¬å¯ä»¥ç»å¶é对表t_userçæ°æ®regionçåå¸å¾ï¼
ç»å表t_userçregionåå¸å¾ï¼æä»¬å¯ä»¥æ¨è®ºåºå¦ä¸çæ åµï¼
1ã妿åªå®æä¸å°æºå¨ï¼
ç±äºæ¯ä¸å¯æ¬é群ï¼å§ç»åªæä¸ä¸ªå¯æ¬æè 没æå¯æ¬ææï¼tikvå¯ç¨æ§åæ£ç¡®æ§ç论ä¸ä¸ä¼åå½±åã
2ã妿忶宿䏤尿ºå¨ï¼
ä¸å¯æ¬é群ä¸ï¼åå¨åªæä¸ä¸ªå¯æ¬ææï¼ä¹ä¼åå¨ä¸¤ä¸ªå¯æ¬åæ¶ææçæ åµï¼å½ç¶åªæä¸ä¸ªå¯æ¬ææï¼Tikvå¯ç¨æ§åæ£ç¡®æ§ç论ä¸ä¸ä¼åå½±åãå½æä¸¤ä¸ªå¯æ¬ææï¼Tikvé群å°ä¸å¯ç¨ãä¾å¦ï¼å¨æ¤ä¾ä¸ï¼å®æTikv2 135å宿Tikb5 138è¿ä¸¤å°æºå¨ï¼åªæä¸¤ä¸ªregionçä¸ä¸ªå¯æ¬ææï¼å¹¶ä¸ä¼å½±åå°æ´ä¸ªé群ï¼ä½æ¯å¦ææ¯å®æTikv3 136åTikv4 137ï¼åä¼åºç°ä¸¤ä¸ªregionçä¸¤ä¸ªå¯æ¬åææï¼å¯¹æ¤è¡¨çSQLæ æ³æ¥è¯¢ï¼ä½ç±äºè¿æä¸ä¸ªå¯æ¬çåå¨ï¼éè¿å¤å¶å¹¸åç坿¬è¿è¡å¤å¶å¹¶éæ°è¿è¡Leaderçé举è¿è¡ç¾é¾æ¢å¤åæ°æ®ä»»ç¶è½å¤è¢«æ¾åï¼å½ç¶å¯è½ææçä¸¤ä¸ªå¯æ¬å ¶ä¸ä¸ä¸ªä¸ºLeaderï¼é¨åæ°æ®æªè½ä»Leader忥å°Followeråå卿å°éæªæäº¤æ°æ®ç丢失ã
3ã妿忶宿ä¸å°ææ´å¤æºå¨ï¼
ç论ä¸ï¼ä¸ãäºãä¸ä¸ªå¯æ¬ææçæ åµé½æå¯è½åºç°ï¼ç¶èä¼åºç°æä¸ºä¸¥éçæ åµï¼å³ä¸ºä¸å¯æ¬çæ°æ®å ¨é¨ä¸¢å¤±ï¼æ´ä¸ªè¡¨çæ°æ®ä¼å 为æä¸ªregionç丢失èåºç°æ°æ®åºç¾é¾æ¢å¤åè¡¨æ°æ®ç丢失ãä¾å¦å¦ææ¯å®æTikv 1 134ãTikv2 135åTikv3 136ï¼ä¼åºç°regionç䏤坿¬ææçæ åµï¼éè¿ç¾é¾æ¢å¤å¯ä»¥æ¾åï¼ä½æ¯å¦æææçæ¯Tikv 1 134ãTikv3 136åTikv4 137ï¼å°ä¼æ2个regionçææå¯æ¬åä¸¢å¤±çæ åµï¼æ°æ®å°åºç°ä¸¢å¤±ã
è¿éæä»¬åªæ¯ä»¥ä¸å¼ 表çregionåå¸ä¸ºä¾ï¼å®é ç¯å¢ä¸ï¼è¡¨çregionåå¸è¿æ¯æ¤å¤æï¼å¨ä¸å¯æ¬è®¾ç½®çæ åµä¸ï¼åæ¶ä¸¤å°ä¸»æºå®æçæ åµä¸ï¼åºç°ä¸¤å¯æ¬ä¸¢å¤±çæ¦çè¿æ¯è¾å¤§ï¼å½ç¶å®é ç产ä¸åæ¶å®æä¸¤å°æºå¨çæ åµè¾å°ï¼å¦æå¯¹å®¹ç¾ææ´é«è¦æ±ï¼ä¹å¯ä»¥éæ©äºå¯æ¬ã
äºãç¾é¾åºæ¯å¯æ¬ä¸¢å¤±å¤çï¼
坿¬æ°æ®æ¢å¤å å«ä¸¤ä¸ªé¨åï¼æ é Region å¤çåä¸¢å¤±æ°æ®å¤ç
æ é Region å¤çï¼é对 Region æ°æ®ä¸¢å¤±çä¸¥éæ åµï¼å¯å为两ç§ï¼
Region è³å°è¿æ 1 ä¸ªå¯æ¬ï¼æ¢å¤æè·¯æ¯å¨ Region çå©ä½å¯æ¬ä¸ç§»é¤æææä½äºæ éèç¹ä¸ç坿¬ï¼è¿æ ·å¯ä»¥ç¨è¿äºå©ä½å¯æ¬æ¥éæ°é举åè¡¥å 坿¬æ¥æ¢å¤ï¼ä½è¿äºå©ä½å¯æ¬ä¸å¯è½ä¸å 嫿æ°ç Raft Log æ´æ°ï¼è¿ä¸ªæ¶åå°±ä¼ä¸¢å¤±é¨åæ°æ®
Region çææå¯æ¬é½ä¸¢å¤±äºï¼è¿ä¸ª Region çæ°æ®å°±ä¸¢å¤±äºï¼æ æ³æ¢å¤ã
å¯ä»¥éè¿å建 1 个空 Region æ¥è§£å³ Region ä¸å¯ç¨çé®é¢
卿¢å¤ Region æ éçè¿ç¨ä¸ï¼è¦è¯¦ç»è®°å½ä¸æå¤ç Region çä¿¡æ¯ï¼å¦ Region IDãRegion 䏢失坿¬çæ°éç
ä¸¢å¤±æ°æ®å¤ç
æ ¹æ®æ é Region ID æ¾å°å¯¹åºçè¡¨ï¼æ¾å°ç¸å ³ç¨æ·å¹¶è¯¢é®ç¨æ·å¨æ éåçæä¸æ®µæ¶é´å ï¼æ¯å¦ 5 minï¼ï¼å¤§æ¦åå ¥äºåªäºæ°æ®è¡¨ï¼æ¯å¦æ DDL æä½ï¼æ¯å¦å¯ä»¥éæ°æ¶è´¹æ´ä¸æ¸¸çæ°æ®æ¥å次åå ¥ï¼çç
妿å¯ä»¥é导ï¼åæ¯æç®åçå¤çæ¹å¼ãå¦åçè¯ï¼ååªè½å¯¹éè¦çæ°æ®è¡¨ï¼æ£æ¥æ°æ®ç´¢å¼çä¸è´æ§ ï¼ä¿è¯è¿å¨çæ°æ®æ¯æ£ç¡®æ 误ç
è³æ¤æä»¬å¯¹Tidb坿¬çä½ç¨ä»¥åéå¶æä¹ä¸å®çäºè§£ï¼æ¥ä¸æ¥æä»¬ä¼å¯¹regionç䏤坿¬ä¸¢å¤±åä¸å¯æ¬ä¸¢å¤±çåºæ¯è¿è¡æ¼ç»ã
忶宿䏤尿ºå¨
ä»è¡¨regionçåå¸å¾å¯ä»¥çå°ï¼å½å®ætikv2 135ãtikv5 138两å°ä¸»æºçæ åµä¸ï¼æ´ä¸ªé群并ä¸ä¼åå°å½±åï¼å ä¸ºåªæä¸ä¸ªregionç坿¬åå¸å¨è¿ä¸¤å°æºå¨ä¹ä¸ï¼ä½è¿ä» ä» æ¯å½æ°æ®åºçæ°æ®è¾å°æ åµï¼å½æ°æ®éå¢å¤§PDè°åº¦å°ä¼å¯¹regionçåå¸è¿è¡è°åº¦ãå¯¹äºææä¸ä¸ªå¯æ¬çæ åµï¼å¨æ¤ä¸è¿è¡æ¨¡æãéç¨åæ¶å®æTikv1 134åTikv3 136è¿ä¸¤å°æºå¨ï¼ä¼åºç°regionçä¸¤ä¸ªå¯æ¬ä¸¢å¤±ï¼
å æ£æ¥å®æºåæµè¯è¡¨çç¶åµ:
MySQL [sbtest2]> select count(*) from t_user;
±---------+
| count(*) |
±---------+
| 3000000 |
±---------+
1 row in set (6.98 sec)
忶宿Tikv 3 136åTikv 4 137䏤尿ºå¨åæµè¯è¡¨çæ
åµï¼
MySQL [sbtest2]> select count(*) from t_user;
ERROR 9005 (HY000): Region is unavailable
æ£å¸¸çSQLè¯å¥åºç°regionä¸å¯ç¨çæ¥éã
æ£æ¥å®æºç䏤尿ºå¨å¯¹åºçstore_idï¼
[root@tidb1 bin]# /root/tidb-v4.0.0-linux-amd64/bin/pd-ctl -i -u ââhttp://172.16.134.133:2379ââ
» store
â¦
{
âstoreâ: {
âidâ: 5,
âaddressâ: â172.16.134.136:20160â,
âlabelsâ: [
{
âkeyâ: âhostâ,
âvalueâ: âtikv3â
}
],
âversionâ: â4.0.0-rcâ,
âstatus_addressâ: â172.16.134.136:20180â,
âgit_hashâ: âf45d0c963df3ee4b1011caf5eb146cacd1fbbad8â,
âstart_timestampâ: 1594632461,
âbinary_pathâ: â/data1/tidb-deploy/tikv-20160/bin/tikv-serverâ,
âlast_heartbeatâ: 1594700897622993541,
âstate_nameâ: âDisconnectedâ
},â¦
" {
âstoreâ: {
âidâ: 4,
âaddressâ: â172.16.134.134:20160â,
âlabelsâ: [
{
âkeyâ: âhostâ,
âvalueâ: âtikv1â
}
],
âversionâ: â4.0.0-rcâ,
âstatus_addressâ: â172.16.134.134:20180â,
âgit_hashâ: âf45d0c963df3ee4b1011caf5eb146cacd1fbbad8â,
âstart_timestampâ: 1594632462,
âbinary_pathâ: â/data1/tidb-deploy/tikv-20160/bin/tikv-serverâ,
âlast_heartbeatâ: 1594700897744383603,
âstate_nameâ: âDisconnectedâ
},
å¯ä»¥åç°store ID 4å5 ç¶æå为âDisconnectedâï¼ä¸æ®µæ¶é´åç¶æä¼æä¸ºâDOWNâã
éè¿ pd-ctl config get è·å region-schedule-limitãreplica-schedule-limitãleader-schedule-limitãmerge-schedule-limit
[root@tidb1 bin]# ./pd-ctl -i -u ââhttp://172.16.134.133:2379ââ
» config show
{
âreplicationâ: {
âenable-placement-rulesâ: âfalseâ,
âlocation-labelsâ: âhostâ,
âmax-replicasâ: 3,
âstrictly-match-labelâ: âfalseâ
},
âscheduleâ: {
âenable-cross-table-mergeâ: âfalseâ,
âenable-debug-metricsâ: âfalseâ,
âenable-location-replacementâ: âtrueâ,
âenable-make-up-replicaâ: âtrueâ,
âenable-one-way-mergeâ: âfalseâ,
âenable-remove-down-replicaâ: âtrueâ,
âenable-remove-extra-replicaâ: âtrueâ,
âenable-replace-offline-replicaâ: âtrueâ,
âhigh-space-ratioâ: 0.7,
âhot-region-cache-hits-thresholdâ: 3,
âhot-region-schedule-limitâ: 4,
âleader-schedule-limitâ: 4,
âleader-schedule-policyâ: âcountâ,
âlow-space-ratioâ: 0.8,
âmax-merge-region-keysâ: 200000,
âmax-merge-region-sizeâ: 20,
âmax-pending-peer-countâ: 16,
âmax-snapshot-countâ: 3,
âmax-store-down-timeâ: â30m0sâ,
âmerge-schedule-limitâ: 8,
âpatrol-region-intervalâ: â100msâ,
âregion-schedule-limitâ: 2048,
âreplica-schedule-limitâ: 64,
âscheduler-max-waiting-operatorâ: 5,
âsplit-merge-intervalâ: â1h0m0sâ,
âstore-balance-rateâ: 15,
âstore-limit-modeâ: âmanualâ,
âtolerant-size-ratioâ: 0
}
}
éè¿ pd-ctl config set å°è¿ 4 ä¸ªåæ°è®¾ä¸º 0
» config set region-schedule-limit 0
Success!
» config set replica-schedule-limit 0
Success!
» config set leader-schedule-limit 0
Success!
» config set merge-schedule-limit 0
Success!
å ³éè°åº¦ä¸»è¦ä¸ºå°æ¢å¤è¿ç¨ä¸å¯è½çå¼å¸¸æ åµéå°æå°ï¼é卿 éå¤çæé´ç¦ç¨ç¸å ³çè°åº¦ã
ä½¿ç¨ pd-ctl æ£æ¥å¤§äºçäºä¸å坿¬æ°å¨æ éèç¹ä¸ç Regionï¼å¹¶è®°å½å®ä»¬ç IDï¼æ éèç¹ä¸ºstore id 4ï¼5ï¼ï¼
» region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length as $total | map(if .==(4,5) then . else empty end) | length>=$total-length) }"
{âidâ:3080,âpeer_storesâ:[4,6,5]}
{âidâ:18,âpeer_storesâ:[4,5,6]}
{âidâ:3084,âpeer_storesâ:[4,6,5]}
{âidâ:75,âpeer_storesâ:[4,5,6]}
{âidâ:34,âpeer_storesâ:[6,4,5]}
{âidâ:4005,âpeer_storesâ:[4,6,5]}
{âidâ:4009,âpeer_storesâ:[5,6,4]}
{âidâ:83,âpeer_storesâ:[4,5,6]}
{âidâ:3076,âpeer_storesâ:[4,5,6]}
{âidâ:4013,âpeer_storesâ:[5,4,6]}
{âidâ:10,âpeer_storesâ:[4,6,5]}
{âidâ:26,âpeer_storesâ:[4,6,5]}
{âidâ:59,âpeer_storesâ:[4,5,6]}
{âidâ:3093,âpeer_storesâ:[4,5,6]}
æä»¬å¯ä»¥çå°è¡¨ç两个region IDåå¨å表ä¸ï¼å¦å¤ç两个regionç±äºåªä¸¢å¤±ä¸ä¸ªå¯æ¬ï¼å¹¶æªåºç°å¨å表ä¸ã
å¨å©ä½æ£å¸¸çkvèç¹ä¸æ§è¡åTikvçæä½ï¼
[root@tidb1 bin]# tiup cluster stop tidb-test -R=tikv
Starting component ââclusterââ: /root/.tiup/components/cluster/v0.6.1/cluster stop tidb-test -R=tikv
+ [ Serial ] - SSHKeySet: privateKey=/root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa, publicKey=/root/.tiup/storage/cluster/clusters/tidb-test/ssh/id_rsa.pub
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.133
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.133
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.134
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.135
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.136
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.137
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.138
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.133
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.133
+ [Parallel] - UserSSH: user=tidb, host=172.16.134.133
+ [ Serial ] - ClusterOperate: operation=StopOperation, options={Roles:[tikv] Nodes:[] Force:false SSHTimeout:5 OptTimeout:60 APITimeout:300}
Stopping component tikv
Stopping instance 172.16.134.138
Stopping instance 172.16.134.134
Stopping instance 172.16.134.135
Stopping instance 172.16.134.136
Stopping instance 172.16.134.137
Stop tikv 172.16.134.135:20160 success
Stop tikv 172.16.134.138:20160 success
Stop tikv 172.16.134.137:20160 success
卿æå¥åº·çèç¹ä¸æ§è¡(æä½éè¦ç¡®ä¿å¥åº·çèç¹å ³éäºTikv)ï¼
[root@tidb3 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db unsafe-recover remove-fail-stores -s 4,5 --all-regions
removing stores [4, 5] from configurationsâ¦
success
[root@tidb5 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db unsafe-recover remove-fail-stores -s 4,5 --all-regions
removing stores [4, 5] from configurationsâ¦
success
[root@tidb6 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db unsafe-recover remove-fail-stores -s 4,5 --all-regions
removing stores [4, 5] from configurationsâ¦
success
å½ç¶Region æ¯è¾å°ï¼åå¯ä»¥å¨ç»å® Region çå©ä½å¯æ¬ä¸ï¼ç§»é¤æææä½äºæ éèç¹ä¸ç Peerï¼å¨è¿äº Region çæªåçæçµæ éçæºå¨ä¸è¿è¡ï¼
tikv-ctl --db /path/to/tikv-data/db unsafe-recover remove-fail-stores -s <s1,s2> -r <r1,r2,r3>ï¼å¯¹äºregionè¾å¤çæ
åµï¼æ¤æä½åè¾ä¸ºç¹çã
忢PDèç¹ï¼
[root@tidb1 ~]# tiup cluster stop tidb-test -R=pd
Starting component ââclusterââ: /root/.tiup/component
éå¯å¯å¨PD tikvèç¹ï¼
[root@tidb1 ~]# tiup cluster start tidb-test -R=pd,tikv
è¿ééè¦å¯å¨PDæè½è¿æ¥å°æ°æ®åºã
æ£æ¥æ²¡æå¤äºleaderç¶æçregionï¼è¦ä¿ææ²¡æï¼ï¼
[root@tidb1 ~]# pd-ctl -i -u http://172.16.134.133:2379
» region --jq â.regions[]|select(has(âleaderâ)|not)|{id: .id,peer_stores: [.peers[].store_id]}â
»
è¿é没æåç°æ²¡æleaderç¶æçregionã
éæ°ä¿®æ¹åæ°ï¼
[root@tidb1 ~]# pd-ctl -i -u http://172.16.134.133:2379
» config set region-schedule-limit 2048
Success!
» config set replica-schedule-limit 64
Success!
» config set leader-schedule-limit 4
Success!
» config set merge-schedule-limit 8
Success!
æ£æ¥æ¥è¯¢æ°æ®æ¯å¦æ£å¸¸
MySQL [sbtest2]> select count(*) from t_user;
±---------+
| count(*) |
±---------+
| 3000000 |
±---------+
1 row in set (9.95 sec)
è³æ¤æ¢å¤æä½ç»æã
æä»¬åççregionçåå¸ï¼
\
Regionç坿¬è¿è¡äºæ°çå¤å¶ååå¸ã
忶宿ä¸å°æºå¨ ï¼
便äºçè§£ï¼å ç表t_useræ°çregionåå¸ï¼
\
æä»¬è¿æ¬¡éæ©å®æTikv2 135ãTikv3 136åTikv4 137ï¼ä»åå¸å¾å¯ä»¥å¤ææä¸¤regionä¼ä¸¢å¤±ä¸å¯æ¬ï¼ä¸ä¸ªregionä¸¢å¤±ä¸¤ä¸ªå¯æ¬ï¼æåä¸ä¸ªregion丢失ä¸ä¸ªå¯æ¬çæ åµã
åæ ·çå æ£æ¥å®æºåæµè¯è¡¨çç¶åµ:
MySQL [sbtest2]> select count(*) from t_user;
±---------+
| count(*) |
±---------+
| 3000000 |
±---------+
1 row in set (1.88 sec)
忶宿Tikv2 135ãTikv3 136åTikv4 137䏤尿ºå¨åæµè¯è¡¨çæ
åµï¼
MySQL [sbtest2]> select count(*) from t_user;
ERROR 9005 (HY000): Region is unavailable
éç¾¤ç¶æï¼

æ£æ¥å®æºç䏤尿ºå¨å¯¹åºçstore_idï¼
[root@tidb1 bin]# /root/tidb-v4.0.0-linux-amd64/bin/pd-ctl -i -u http://172.16.134.133:2379
» store
è¿éæ¯1ï¼5ï¼6
éè¿ pd-ctl config get è·å region-schedule-limitãreplica-schedule-limitãleader-schedule-limitãmerge-schedule-limitå¹¶éè¿ pd-ctl config set å°è¿ 4 ä¸ªåæ°è®¾ä¸º 0
ä½¿ç¨ pd-ctl æ£æ¥å¤§äºçäºä¸å坿¬æ°å¨æ
éèç¹ä¸ç Regionï¼å¹¶è®°å½å®ä»¬ç IDï¼æ
éèç¹ä¸ºstore id 1ï¼5ï¼6ï¼ï¼
» region --jq=".regions[] | {id: .id, peer_stores: [.peers[].store_id] | select(length as $total | map(if .==(1,5,6) then . else empty end) | length>=$total-length) }"
{âidâ:3089,âpeer_storesâ:[5,4,6]}
{âidâ:47,âpeer_storesâ:[4,5,6]}
{âidâ:75,âpeer_storesâ:[4,5,6]}
{âidâ:30,âpeer_storesâ:[6,4,5]}
{âidâ:135,âpeer_storesâ:[6,4,5]}
{âidâ:4017,âpeer_storesâ:[6,7,5]}
{âidâ:67,âpeer_storesâ:[4,5,1]}
{âidâ:2289,âpeer_storesâ:[4,6,5]}
{âidâ:18,âpeer_storesâ:[6,4,5]}
{âidâ:39,âpeer_storesâ:[6,4,5]}
{âidâ:51,âpeer_storesâ:[4,6,5]}
{âidâ:10,âpeer_storesâ:[4,5,6]}
{âidâ:14,âpeer_storesâ:[6,5,4]}
{âidâ:83,âpeer_storesâ:[6,4,5]}
{âidâ:59,âpeer_storesâ:[6,4,5]}
{âidâ:6768,âpeer_storesâ:[1,6,4]}
{âidâ:22,âpeer_storesâ:[4,5,6]}
{âidâ:26,âpeer_storesâ:[6,4,5]}
{âidâ:43,âpeer_storesâ:[6,4,5]}
{âidâ:131,âpeer_storesâ:[6,4,5]}
{âidâ:4009,âpeer_storesâ:[6,1,5]}
{âidâ:2,âpeer_storesâ:[7,6,5]}
{âidâ:63,âpeer_storesâ:[4,5,1]}
{âidâ:87,âpeer_storesâ:[6,4,5]}
{âidâ:6734,âpeer_storesâ:[6,1,5]}
{âidâ:3080,âpeer_storesâ:[6,4,5]}
{âidâ:3084,âpeer_storesâ:[6,4,5]}
{âidâ:3076,âpeer_storesâ:[6,4,5]}
{âidâ:34,âpeer_storesâ:[6,4,5]}
{âidâ:127,âpeer_storesâ:[6,4,5]}
{âidâ:3070,âpeer_storesâ:[6,4,5]}
æä»¬å¯ä»¥çå°è¡¨çä¸ä¸ªregion IDåå¨å表ä¸ï¼å¦å¤çä¸ä¸ªregionç±äºåªä¸¢å¤±ä¸ä¸ªå¯æ¬ï¼å¹¶æªåºç°å¨å表ä¸ã
å¨å©ä½æ£å¸¸çkvèç¹ä¸æ§è¡åTikvçæä½ï¼
[root@tidb1 bin]# tiup cluster stop tidb-test -R=tikv
卿æå¥åº·çèç¹ä¸æ§è¡(æä½éè¦ç¡®ä¿å¥åº·çèç¹å
³éäºTikv)ï¼
[root@tidb2 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db unsafe-recover remove-fail-stores -s 1,5,6 --all-regions
removing stores [1, 5, 6] from configurationsâ¦
success
[root@tidb6 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db unsafe-recover remove-fail-stores -s 1,5,6 --all-regions
removing stores [1, 5, 6] from configurationsâ¦
success
忢PDèç¹ï¼
[root@tidb1 ~]# tiup cluster stop tidb-test -R=pd
Starting component ââclusterââ : /root/.tiup/component
éå¯å¯å¨PD tikvèç¹ï¼
[root@tidb1 ~]# tiup cluster start tidb-test -R=pd,tikv
æ£æ¥æ²¡æå¤äºleaderç¶æçregionï¼è¦ä¿ææ²¡æï¼ï¼
[root@tidb1 ~]# pd-ctl -i -u ââhttp://172.16.134.133:2379ââ
» region --jq â.regions[]|select(has(âleaderâ)|not)|{id: .id,peer_stores: [.peers[].store_id]}â
{âidâ:4009,âpeer_storesâ:[6,1,5]}
{âidâ:6734,âpeer_storesâ:[6,1,5]}
»
è¿é没æåç°ä»»ç¶æä¸¤ä¸ªregionå¤äºæ²¡æleaderçç¶æãå¦å¤ä¸¢å¤±ä¸¤å¯æ¬çä¸ä¸ªregion以åéè¿unsafe-recoverçæ¹å¼è¿è¡äºå¤å¶ã
å°è¯è®¿é®è¡¨t_user
MySQL [sbtest2]> select count(*) from t_user;
ERROR 9002 (HY000): TiKV server timeout
æè
MySQL [sbtest2]> select count(*) from t_user;
ERROR 9005 (HY000): Region is unavailable
两次æ§è¡çç»æææä¸ä¸æ ·ã
æ ¹æ®region IDï¼ç¡®è®¤regionå±äºåªå¼ 表ï¼ä»¥å¤åç»åæ¥æ°æ®éè¦ã
[root@tidb1 ~]# curl ââhttp://172.16.134.133:10080/regions/4009ââ
{
âregion_idâ: 4009,
âstart_keyâ: âdIAAAAAAAABNâ,
âend_keyâ: âdIAAAAAAAABNX3KAAAAAAAt8fw==â,
âframesâ: [
{
âdb_nameâ: âsbtest2â,
âtable_nameâ: ât_userâ,
âtable_idâ: 77,
âis_recordâ: true,
ârecord_idâ: 752767
}
]
两个region IDåå±äºåä¸å¼ 表ã
å建空 Region è§£å³ Unavailable æ¥éãä»»éä¸ä¸ª Storeï¼å ³éä¸é¢ç TiKVï¼ç¶åæ§è¡ï¼
[root@tidb2 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db recreate-region -p â172.16.134.133:2379â -r 4009
initing empty region 17001 with peer_id 17002â¦
success
[root@tidb2 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db recreate-region -p â172.16.134.133:2379â -r 6734
initing empty region 17003 with peer_id 17004â¦
success
妿ä¸å ³étikv伿¥éï¼
[root@tidb2 bin]# ./tikv-ctl --db /data1/tidb-data/tikv-20160/db recreate-region -p â172.16.134.133:2379â -r 4009
thread âmainâ panicked at âcalled ââResult::unwrap()âââ on an ââErrââ value: RocksDb(âIO error: While lock file: /data1/tidb-data/tikv-20160/db/LOCK: Resource temporarily unavailableâ)â, src/libcore/result.rs:1188:5
note: run with ââRUST_BACKTRACE=1ââ environment variable to display a backtrace.
忢PDèç¹ï¼
[root@tidb1 ~]# tiup cluster stop tidb-test -R=pd
Starting component ââclusterââ : /root/.tiup/component
éå¯å¯å¨PD tikvèç¹ï¼
[root@tidb1 ~]# tiup cluster start tidb-test -R=pd,tikv
æ£æ¥æ²¡æå¤äºleaderç¶æçregionï¼è¦ä¿ææ²¡æï¼ï¼
[root@tidb1 ~]# pd-ctl -i -u ââhttp://172.16.134.133:2379ââ
» region --jq â.regions[]|select(has(âleaderâ)|not)|{id: .id,peer_stores: [.peers[].store_id]}â
»
éæ°ä¿®æ¹PDçåæ°å¹¶å°è¯è®¿é®è¡¨t_user
MySQL [sbtest2]> select count(*) from t_user;
±---------+
| count(*)
±---------+
| 1494555 |
±---------+
1 row in set (1.92 sec)
ç±äºä¸¢å¤±æä¸¤ä¸ªregionçææå¯æ¬ï¼æä»¥æä»¬æ¥è¯¢åºçæ°æ®éåå°ï¼è³æ¤æ¢å¤æµè¯ç»æã
æä»¬åççregionçå叿 åµï¼
åç°åæ¥ä¸å¯æ¬ä¸¢å¤±çregion IDåçäºæ¹åã\
å¯ä»¥çå°è¡¨t_userçææregionåªæä¸¤å¯æ¬ã
æ»ç»
TiDBéç¾¤ä¸æ°æ®åå¨Tikv妿å®äºä¸å°æºå¨ï¼é£ä¹å¹¶ä¸å½±åé群çè¿è¡ï¼æ°æ®åºèªèº«ä¼è¿è¡å¤çï¼PD ä¼å°å ¶ä¸çæ°æ®regionè¿ç§»å°å ¶ä»ç TiKV èç¹ä¸ãä½å¦æåæ¶å®æºä¸¤å°ï¼çè³3å°å以ä¸ç¾é¾æ åµï¼ç¸ä¿¡éè¿ä¸æçä»ç»çè§£åç¸å ³å½ä»¤çæ¥è¯¢ä»¥åä¿®å¤ï¼è½è¿ éè¿è¡å¯¹åºçæ¢å¤æä½ã
åèææ¡£