是不是都需要一個聲明,來一個:
聲明:
本文只是總結本人本地模擬環境測試,並沒有經過嚴格的線上測試。請自己在本地嚴格測試之后慎重使用在生產環境!
kudu_master、kudu_tserver服務遷移時候會涉及數據的遷移,概括如下:
1、kudu_master部署機器
| 172.16.100.1 | kudu_master1 | Leader |
| 172.16.100.2 | kudu_master2 | Follower |
| 172.16.100.3 | kudu_master3 | Follower |
2、確認kudu集群健康狀態,通過ksck命令查看
./kudu cluster ksck kudu_master1,kudu_master2,kudu_master3
注釋:
kudu_master1,kudu_master2,kudu_master3:kudu_master服務所在機器的host
Version Summary
Version | Servers
-----------------+-------------------------
1.10.0-cdh6.3.1 | all 6 server(s) checked
Tablet Summary
Summary by table
Name | RF | Status | Total Tablets | Healthy | Recovering | Under-replicated | Unavailable
--------------------------+----+---------+---------------+---------+------------+------------------+-------------
impala::default.dd1 | 3 | HEALTHY | 1 | 1 | 0 | 0 | 0
impala::default.dd2 | 3 | HEALTHY | 1 | 1 | 0 | 0 | 0
impala::hxoffice_pri.dd3 | 3 | HEALTHY | 1 | 1 | 0 | 0 | 0
Tablet Replica Count Summary
Statistic | Replica Count
----------------+---------------
Minimum | 3
First Quartile | 3
Median | 3
Third Quartile | 3
Maximum | 3
Total Count Summary
| Total Count
----------------+-------------
Masters | 3
Tablet Servers | 3
Tables | 3
Tablets | 3
Replicas | 9
3、獲取kudu集群master機器的UUID
./kudu local_replica cmeta print_replica_uuids --fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 00000000000000000000000000000000 2>/dev/null
命令執行結果:
0ad919b7c68049a3bcf46abc029da8f6 909d4c97d0b948c6902e40f6968a3b8b 739298ec62504f898a71d4f6b92f908e
注釋:
--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master:該參數是kudu集群部署時候你指定的數據和日志路徑,具體可在master.gflagfile文件查看
00000000000000000000000000000000 :固定參數
4、在kudu的WEBUI界面確認自己需要遷移的master節點的UUID

5、遷移的機器的UUID
909d4c97d0b948c6902e40f6968a3b8b
6、在新增的kudu_master機器,把--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 這兩個路徑下的master目錄干掉,沒什么用
7、重新格式化--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 這個新增機器的數據目錄
./kudu fs format --fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master --uuid=909d4c97d0b948c6902e40f6968a3b8b
注釋:
--uuid:需要遷移的kudu_master節點機器的UUID,第5步,你已經確認你需要遷移的機器了
--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master:這兩個路徑配置,上面已經說過了是數據和日志相關的路徑配置,新增機器的配置維持原樣
8、現在從正常的、存活的kudu_master節點復制一份完成數據到這個新增的機器上
./kudu local_replica copy_from_remote --fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 00000000000000000000000000000000 hxb06:7051
注釋:
--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master:數據和日志相關配置目錄,不要隨意修改,按照你自己之前的配置來
00000000000000000000000000000000:固定參數
hxb06:7051:正常的、存活的kudu_master節點,之前准備遷移的那一台kudu_master機器已經停掉,這一步執行最好選擇是kudu_master服務的LEADER角色
9、拷貝完之后,修改配置文件master.gflagfile、tserver.gflagfile
--master_addresses=172.16.100.1:7051,172.16.100.2:7051,172.16.100.4:7051(這一台是新增上來的機器)
10、每一台kudu_master節點執行,刷新當前kudu_master集群配置
./kudu local_replica cmeta rewrite_raft_config --fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master 00000000000000000000000000000000 909d4c97d0b948c6902e40f6968a3b8b:172.16.100.179:7051 0ad919b7c68049a3bcf46abc029da8f6:172.16.100.249:7051 739298ec62504f898a71d4f6b92f908e:172.16.101.230:7051
注釋:
--fs_wal_dir=/data/kudu/master --fs_data_dirs=/data/kudu/master:老生常談,這兩個路徑是你數據和日志相關路徑
00000000000000000000000000000000:固定參數
909d4c97d0b948c6902e40f6968a3b8b kudu_master機器的UUID(這個UUID,你去WEBUI界面上看,現在活着的kudu_master的UUID是什么,千萬不要寫錯,kudu_master遷移完全依賴機器的UUID)
11、kudu_tserver服務和數據遷移
經查閱官網資料,kudu官網提供kudu cluster rebalance工具和自主恢復機制兩種方式進行kudu_tserver節點的永久移除,考慮到該工具使用牽扯到gcc編譯和版本要求,再者考慮到數據量並不是很大,故采用kudu集群自主遷移恢復機制進行kudu_tserver數據遷移,本地測試超過兩次,均未造成數據丟失,操作比較簡單
注釋:
如果你想試一下balance工具,參考官網地址:
https://kudu.apache.org/docs/administration.html#tablet_server_decommissioning
https://kudu.apache.org/docs/administration.html#ksck
12、我使用的是kudu集群自主遷移恢復機制
1. 停掉一台需要遷移的kudu_tserver節點,保證活着的kudu_tserver至少三台,因為我的副本數設置的是3,僅僅如此
2.根據自主恢復機制,停機超5分鍾后,該機器副本會自動遷移至其他活着的kudu_tserver節點
3. 重啟kudu集群各個kudu_master、kudu_tserver服務
4. 使用ksck命令檢查集群健康狀態是否正常,檢查kudu集群WEBUI界面是否已經移除掉遷移的kudu_tserver節點
至此,kudu_master、kudu_tserver服務及數據遷移完成,SOEASY!!!
