etcd3集群管理


在什么情況下需要集群的運行時更改

  • 維護和升級多個機器
    如果你因為進行諸如硬件升級或者斷網等計划維護,而需要移動多個節點到新機器上,最好是逐個節點移動,一次操作一個。 移動leader節點是安全的,只不過leader節點下線后,需要耗費更多的時間選舉新節點,所以建議最后移動。如果集群有超過50M的數據,最好進行節點的遷移而不要通過刪除舊節點,增加新節點來實現節點的移動。
  • 更改集群的大小
  • 替換一個壞掉的節點
  • 集群多數宕機后的重啟
    基於原先的數據創建新集群;強制讓一個節點成為leader節點,並最終通過運行時更改添加新節點的方式將其他節點添加到這個新的集群中。

集群運行時更改的操作

一般來講,集群更改通常都是執行如下操作:

  • 升級單個節點的 peerURLs,需要執行一個更新節點操作
  • 替換一個節點,需要先執行一個添加節點操作,再執行一個刪除節點操作
  • 將集群大小從 3 更改到 5,需要執行兩個添加節點操作
  • 將集群大小從 5 降低到 3,需要執行兩個刪除節點操作

更新一個節點

如果你想更新一個節點的IP(peerURLS),首先需要知道那個節點的 ID。你可以列出所有節點,找出對應節點的ID:

etcdctl member list
4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379

假設要更新ID為fdbaf2aa62569cb3的節點的peerURLs為http://10.5.12.20:2380,操作如下:

etcdctl member update fdbaf2aa62569cb3 http://10.5.12.20:2380

刪除一個節點

刪除ID為fdbaf2aa62569cb3的節點:

etcdctl member remove fdbaf2aa62569cb3

注:如果刪除的是leader節點,則需要額外的時間重新選舉

增加一個節點

增加節點分為兩步:通過etcdctl或對應的api注冊新節點,然后根據注冊新節點時給出的相關參數啟動新節點

假設新加的節點取名為etcd4,peerURLs為http://10.5.12.10:2380,配置如下:

etcdctl member add etcd4 http://10.5.12.10:2380

etcd在注冊完新節點后,會返回一段提示,包含三個環境變量,如下:

ETCD_NAME="etcd4"
ETCD_INITIAL_CLUSTER="etcd1=http://10.5.12.16:2830,etcd2=http://10.5.12.17:2830,etcd3=http://10.5.12.18:2830,etcd4=http://10.5.12.10:2830"
ETCD_INITIAL_CLUSTER_STATE=existing

在啟動新節點時,帶上這三個變量即可,新節點/opt/kubernetes/cfg/etcd.conf部分配置如下:

......
ETCD_NAME="etcd4"
ETCD_INITIAL_CLUSTER="etcd0=http://10.5.12.16:2830,etcd1=http://10.5.12.17:2830,etcd2=http://10.5.12.18:2830,etcd3=http://10.5.12.10:2830"
ETCD_INITIAL_CLUSTER_STATE=existing
......

另外,還需要說明的是,如果新添加的節點--data-dir目錄下存在以前的etcd數據,需要先清空該目錄 。節點刪除后,集群中的成員信息會更新,新節點加入集群是作為一個全新的節點加入,如果--data-dir有數據,etcd啟動時會讀取己經存在的數據,啟動時仍然用的老member ID,也會造成,集群不無法加入,所以一定要清空新節點的--data-dir。

注:如果原先的集群只有1個節點,在新節點成功啟動之前,新集群並不能正確的形成。因為原先的單節點集群無法完成leader的選舉。 直到新節點啟動完,和原先的節點建立連接以后,新集群才能正確形成。

節點遷移和災難恢復

遷移節點

移動節點有兩種方式:刪除舊的節點,增加新的節點; 遷移節點。當集群的數據超過 50M 的時候,建議通過遷移節點的方式來移動節點。

遷移節點的核心就是數據目錄的遷移。因為 etcd 的各個節點會將自己的 ID 存放在自己的數據目錄下面,所以遷移節點不會改變節點的 ID。

遷移節點的步驟簡單來說,包括以下幾步:

  • 停止需要遷移的節點的服務
  • 從老機器上拷貝數據目錄到新機器上
  • 通過集群運行時更改的更新操作,改變節點的 peerURLs 值為新機器的 IP:port
  • 在新機器上指定拷貝過來的數據目錄,啟動 etcd 的節點服務

下面通過一個例子具體說明。
假設已有集群示例如下:

etcdctl member list
4d4f508502c31ddc, started, name=etcd3 http://10.5.12.18:2380, http://10.5.12.18:2379
d20b3f1647802774, started, name=etcd2 http://10.5.12.17:2380, http://10.5.12.17:2379
fdbaf2aa62569cb3, started name=etcd1 http://10.5.12.16:2380, http://10.5.12.16:2379

移動 etcd0從10.5.12.16到10.5.12.19:

  1. 停止etcd1上的etcd進程:
pkill etcd
  1. 從10.5.12.16上復制數據目錄到10.5.12.19:
tar -zcf etcd1.tar.gz /data/etcd
scp etcd1.tar.gz 10.5.12.19:/data
  1. 變更etcd1的peerURLs:
etcdctl member update fdbaf2aa62569cb3 http://10.5.12.19:2380
  1. 在新機器上啟動etcd:
tar xf etcd1.tar.gz -C /data/etcd
etcd --name etcd1 --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379

災難恢復

  1. 備份數據
    需要在活着的節點上操作:
etcdctl backup --data-dir /data/etcd --backup-dir /data/backup/etcd

這個命令會將原數據備份到/data/backup/etcd目錄下,並沖洗掉相關的元數據,如節點ID和集群ID等。這意味着備份數據中,只包含數據,而不包含身份信息

  1. 用備份數據重建單節點集群
etcd --name etcd1 --data-dir=/data/backup/etcd --force-new-cluster --listen-peer-urls http://10.5.12.19:2380 --listen-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --advertise-client-urls http://10.5.12.19:2379,http://127.0.0.1:2379 --initial-advertise-peer-urls http://10.5.12.19:2380

當確定新集群正常后,就可以刪除原來的集群數據,暫停新集群,將新集群的數據目錄拷貝到原先數據的位置,並重新啟動

pkill etcd
rm -rf /data/etcd
mv /data/backup/etcd /data/etcd
etcd --name etcd0 --data-dir /data/etcd ....

注:如果還是使用之前的節點創建集群,一定要kill掉之前的etcd進程,並清除掉之前的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM