前言
TiDB 集群 IP 變更可以通過先擴容再縮容的方式拢驾,實現(xiàn)在線的集群 IP 的遷移。
此文檔為離線變更操作手冊。
- TiDB Server 作為一個無狀態(tài)服務(wù)檬寂。所以直接更換 IP 即可,同時修改 PD Server 地址势木。
- TiKV Server 作為一個 Mutil Raft Group蛛倦,信息會在 PD Server 中注冊,所以直接更換 IP 即可跟压,同時修改 PD Server 地址胰蝠。
- PD Server 作為一個元數(shù)據(jù)管理節(jié)點,更換 IP 后需要新建 PD 集群震蒋,然后進行 PD Recover 操作茸塞,恢復(fù)原有 PD 集群信息。
收集需要的信息
新建 PD 集群后查剖,現(xiàn)有的信息會丟失钾虐,因此需要些備份這些信息。
獲取 PD 中的設(shè)置
.../tidb-ansible/resource/bin/pd-ctl -u http://{pdip}:2379 -d config show all > pd.txt
其中常見的調(diào)整參數(shù)有 leader-scheduler-limit笋庄、region-scheduler-limit效扫、leader-scheduler-limit 等。
如果沒有使用 pd-ctl 修改過默認配置直砂,此步驟可跳過菌仁。
獲取 Cluster ID
一般在 PD,TiKV 或 TiDB 的日志中都可以獲取 Cluster ID静暂〖们穑可以從中控機使用 ansible ad-hoc,也可以直接去服務(wù)器上翻日志洽蛀。
從 pd 日志獲取 [info] cluster id
ansible -i inventory.ini pd_servers -m shell -a 'cat {{deploy_dir}}/log/pd.log | grep "init cluster id" | head -10'
10.0.1.13 | CHANGED | rc=0 >>
[2019/10/14 10:35:38.880 +00:00] [INFO] [server.go:212] ["init cluster id"] [cluster-id=6747551640615446306]
……
獲取 Alloc ID(TiKV StoreID)
在指定 alloc-id 時需指定一個比當前最大的 Alloc ID 更大的值摹迷。可以從中控機使用 ansible ad-hoc郊供,也可以直接去服務(wù)器上翻日志峡碉。
從 pd 日志獲取 [info] allocates id
ansible -i inventory.ini pd_servers -m shell -a 'cat {{deploy_dir}}/log/pd* | grep "allocates" | head -10'
10.0.1.13 | CHANGED | rc=0 >>
[2019/10/15 03:15:05.824 +00:00] [INFO] [id.go:91] ["idAllocator allocates a new id"] [alloc-id=3000]
[2019/10/15 08:55:01.275 +00:00] [INFO] [id.go:91] ["idAllocator allocates a new id"] [alloc-id=4000]
……
集群 IP 地址變更
停止集群
停止現(xiàn)有集群
ansible-playbook stop.yml
變更集群服務(wù)器 ip 地址
略
編輯 inevntory.ini 文件
編輯 inventory.ini 文件,修改 host ip
cp inventory.ini inventory.ini.bak
vi inventory.ini
清除之前的 PD 數(shù)據(jù)
備份并清理原有 PD Server 的數(shù)據(jù)
ansible -i inventory.ini pd_servers -m shell -a 'mv {{deploy_dir}}/data.pd/ {{deploy_dir}}/data.pd.bak/'
ansible -i inventory.ini pd_servers -m shell -a 'rm -rf {{deploy_dir}}/data.pd'
部署新 IP 地址的集群
ansible-playbook deploy.yml
恢復(fù) PD 設(shè)置
.../tidb-ansible/resource/bin/pd-ctl -u http://{pdip}:2379 -d config set xxx xx
PD Recover 恢復(fù)舊集群信息
啟動新 PD 集群
ansible-playbook start.yml --tags=pd
使用 pd-recover
使用 pd-recover 按照舊的 -cluster-id驮审、-alloc-id 恢復(fù) pd 集群信息
./pd-recover -endpoints http://{pdip}:2379 -cluster-id 6747551640615446306 -alloc-id 10000
重啟 pd 集群
ansible-playbook rolling_update.yml --tags=pd
啟動集群
啟動剩余服務(wù)
ansible-playbook start.yml --skip-tags=pd
滾動監(jiān)控
更新監(jiān)控信息
ansible-playbook rolling_update_monitor.yml --tags=prometheus
常見問題
獲取 Cluster ID 時發(fā)現(xiàn)有多個
新建 PD 集群時鲫寄,會生成新的 Cluster ID⊥凡恚可以通過日志判斷舊集群的 Cluster ID塔拳。
執(zhí)行 pd-recover 時 dial tcp 10.0.1.13:2379: connect: connection refused
執(zhí)行 pd-recover 時需要 pd 提供服務(wù),請先部署并啟動 pd 集群峡竣。