摘要:搭建完集群后,接下來就是集群的管理了。集群的管理主要包括節點的重啟,監控以及集群的運行時更改。這樣,新節點就會運行起來并且加入到已有的集群中了。
搭建完 etcd 集群后,接下來就是集群的管理了。集群的管理主要包括節點的重啟,監控以及集群的運行時更改(Runtime Reconfiguration)。
關于節點的重啟、監控相對來說比較簡單,這里主要介紹下集群的運行時更改。
1. 在什么情況下需要集群的運行時更改?讓我們來看看需要集群的運行時更改的幾個場景。他們中的絕大多數只需要運用到重配置中的 “添加/刪除” 節點操作的組合。
如果你因為進行諸如硬件升級或者斷網等計劃維護,而需要移動多個節點到新機器上,最好是逐個節點移動,一次操作一個。
移動 leader 節點是安全的,只不過 leader 節點下線后,需要耗費更多的時間選舉新節點,所以建議最后移動。
如果你的集群有超過 50M 的數據,最好進行節點的遷移(見3.1節 遷移節點),而不要通過刪除舊節點,增加新節點來實現節點的移動。
如上一篇博客所說的,增加集群節點的個數,容錯能力越強,讀性能也越好。不過相應的,寫性能也會下降。減少集群節點的個數,容錯能力下降,不過寫性能也會提高。
更改集群大小也需要集群運行時更改。
如果一個節點的機器因為硬件出錯而宕機了,那需要盡快用新機器替換。替換的操作就是簡單地分為兩步:(通過集群運行時更改)先刪除壞掉的節點,再添加新的節點(見2節 集群節點的操作)。不過,如果你的集群有超過 50M 的數據,最好進行節點遷移(見3.1節 遷移節點)
如果你的集群出現了多數宕機(例如超過(N-1)/2的節點當機),或者所有的節點都更改了 IP,你就需要手動操作,重啟(恢復)集群了。基本步驟包括:1.基于原先的數據創建新集群;2.強制讓一個節點成為 leader 節點,并最終通過運行時更改添加新節點的方式將其他節點添加到這個新的集群中。
2. 集群運行時更改的操作知道了什么樣的情況下需要運行時更改,下面讓我們來了解下具體的運行時更改的操作。
一般來說,這些操作需要確保集群的多數節點是正常服務的,并且一次只操作一個節點。
升級單個節點的 peerURLs,需要執行一個更新節點操作
替換一個節點,需要先執行一個添加節點操作,再執行一個刪除節點操作
將集群大小從 3 更改到 5,需要執行兩個添加節點操作
將集群大小從 5 降低到 3,需要執行兩個刪除節點操作
下面的所有例子都是利用 etcdctl 命令實現操作,其本質是調用 etcd 的 REST API。你也可以使用其他你習慣的客戶端。
如果你想更新一個節點的 IP(peerURLS),首先你需要知道那個節點的 ID。你可以列出所有節點,找出對應節點的 ID。
$ etcdctl member list 6e3bd23ae5f1eae0: name=node2 peerURLs=http://localhost:23802 clientURLs=http://127.0.0.1:23792 924e2e83e93f2560: name=node3 peerURLs=http://localhost:23803 clientURLs=http://127.0.0.1:23793 a8266ecf031671f3: name=node1 peerURLs=http://localhost:23801 clientURLs=http://127.0.0.1:23791
在本例中,我們假設要更新 ID 為 a8266ecf031671f3 的節點的 peerURLs 為:http://10.0.1.10:2380
$ etcdctl member update a8266ecf031671f3 http://10.0.1.10:2380 Updated member with ID a8266ecf031671f3 in cluster
假設我們要刪除 ID 為 a8266ecf031671f3 的節點
$ etcdctl member remove a8266ecf031671f3 Removed member a8266ecf031671f3 from cluster
執行完后,目標節點會自動停止服務,并且打印一行日志:
etcd: this member has been permanently removed from the cluster. Exiting.
如果刪除的是 leader 節點,則需要耗費額外的時間重新選舉 leader。
增加一個新的節點分為兩步:
通過 etcdctl 或對應的 API 注冊新節點
使用恰當的參數啟動新節點
先看第一步,假設我們要新加的節點取名為 infra3, peerURLs 是 http://10.0.1.13:2380
$ etcdctl member add infra3 http://10.0.1.13:2380 added member 9bf1b35fc7761a23 to cluster ETCD_NAME="infra3" ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra3=http://10.0.1.13:2380" ETCD_INITIAL_CLUSTER_STATE=existing
etcdctl 在注冊完新節點后,會返回一段提示,包含3個環境變量。然后在第二部啟動新節點的時候,帶上這3個環境變量即可。
$ export ETCD_NAME="infra3" $ export ETCD_INITIAL_CLUSTER="infra0=http://10.0.1.10:2380,infra1=http://10.0.1.11:2380,infra2=http://10.0.1.12:2380,infra3=http://10.0.1.13:2380" $ export ETCD_INITIAL_CLUSTER_STATE=existing $ etcd -listen-client-urls http://10.0.1.13:2379 -advertise-client-urls http://10.0.1.13:2379 -listen-peer-urls http://10.0.1.13:2380 -initial-advertise-peer-urls http://10.0.1.13:2380 -data-dir %data_dir%
這樣,新節點就會運行起來并且加入到已有的集群中了。
值得注意的是,如果原先的集群只有1個節點,在新節點成功啟動之前,新集群并不能正確的形成。因為原先的單節點集群無法完成leader的選舉。
直到新節點啟動完,和原先的節點建立連接以后,新集群才能正確形成。
移動節點有兩種方式:1. 刪除舊的節點,增加新的節點; 2. 遷移節點。當集群的數據超過 50M 的時候,建議通過遷移節點的方式來移動節點。
遷移節點的核心就是數據目錄的遷移。因為 etcd 的各個節點會將自己的 ID 存放在自己的數據目錄下面,所以遷移節點不會改變節點的 ID。
遷移節點的步驟簡單來說,包括以下幾步:
停止需要遷移的節點的服務
從老機器上拷貝數據目錄到新機器上
通過集群運行時更改的更新操作,改變節點的 peerURLs 值為新機器的 IP:port
在新機器上指定拷貝過來的數據目錄,啟動 etcd 的節點服務
下面通過一個例子具體說明。
假設我們已有的集群是這樣的:
name | peerURLs |
---|---|
infra0 | 10.0.1.10:2380 |
infra1 | 10.0.1.11:2380 |
infra2 | 10.0.1.12:2380 |
$ etcdctl member list 84194f7c5edd8b37: name=infra0 peerURLs=http://10.0.1.10:2380 clientURLs=http://127.0.0.1:2379,http://10.0.1.10:2379 b4db3bf5e495e255: name=infra1 peerURLs=http://10.0.1.11:2380 clientURLs=http://127.0.0.1:2379,http://10.0.1.11:2379 bc1083c870280d44: name=infra2 peerURLs=http://10.0.1.12:2380 clientURLs=http://127.0.0.1:2379,http://10.0.1.12:2379
我們要移動 infra1 從 10.0.1.11 到 10.0.1.13
$ssh 10.0.1.11
$ kill `pgrep etcd`
$ tar -cvzf infra1.etcd.tar.gz %data_dir% $ scp infra1.etcd.tar.gz 10.0.1.13:~/
$ curl http://10.0.1.10:2379/v2/members/b4db3bf5e495e255 -XPUT -H "Content-Type: application/json" -d "{"peerURLs":["http://10.0.1.13:2380"]}"
或者利用 etcdctl
etcdctl member update b4db3bf5e495e255 http://10.0.1.13:2380
$ ssh 10.0.1.13 $ tar -xzvf infra1.etcd.tar.gz -C %data_dir% $ etcd -name infra1 > -listen-peer-urls http://10.0.1.13:2380 > -listen-client-urls http://10.0.1.13:2379,http://127.0.0.1:2379 > -advertise-client-urls http://10.0.1.13:2379,http://127.0.0.1:2379
總的來說,etcd 的集群還是相當可靠的,但是也不能排除極端情況的出現。當出現災難性的多數節點宕機,就不得不進行災難恢復了。
災難恢復需要以下幾個步驟:
備份操作需要在一臺還"活著"的節點上進行
$ etcdctl backup --data-dir %data_dir% --backup-dir %backup_data_dir%
這個命令會備份原數據到 %backup_data_dir% 目錄下,并重新相關的元數據(例如 節點的 id 和 集群的 id)。
這意味著在 %backup_data_dir% 中只包含原先的數據,而不包含原先的身份信息。
接下來我們就可以基于備份的數據創建一個單節點的集群。
$ etcd -data-dir=%backup_data_dir% -force-new-cluster ...
...部分省略了其他相關的參數,例如-peer-urls -client-urls 等等
這時候,應該就成功創建了一個新的只包含一個節點的集群,并包含之前的所有數據。
當你確認新集群正常后,就可以刪除原來集群的數據,暫停新集群,將新集群的數據目錄拷貝回原先數據的位置,并重新啟動。
$ pkill etcd $ rm -rf %data_dir% $ mv %backup_data_dir% %data_dir% $ etcd -data-dir=%data_dir% ...
現在已經有了一個擁有之前數據的單節點的集群了。接下來,你可以通過添加節點的操作,重建出一個同樣大小的集群。
值得注意的是,如果你還是使用之前的其他機器來重建這個新的集群,一定殺掉之前的etcd 進程,并且清除掉之前的數據。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7948.html
摘要:如果用命令行參數,應該將下列參數附在的啟動命令后面其中表示這是在從無到有搭建集群。命令行參數環境變量以命令行參數啟動方式為例公共服務如果沒有已有的集群,也可以用提供的公共服務。 etcd 是一個高可用的分布式 key-value(鍵值) 存儲系統。在暴漫我們用他用來做配置管理和服務發現。 這一次我們主要介紹關于 etcd 集群的搭建與管理。 1. etcd 集群概述 首先我們需要理解,...
摘要:容器云的背景伴隨著微服務的架構的普及,結合開源的和等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。 容器云的背景 伴隨著微服務的架構的普及,結合開源的Dubbo和Spring Cloud等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。應用從有狀態到無狀態,具體來說將業務狀態數據如:會話、用戶數據等存儲到中間件中服務中。 showI...
摘要:容器云的背景伴隨著微服務的架構的普及,結合開源的和等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。 容器云的背景 伴隨著微服務的架構的普及,結合開源的Dubbo和Spring Cloud等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。應用從有狀態到無狀態,具體來說將業務狀態數據如:會話、用戶數據等存儲到中間件中服務中。 showI...
摘要:容器云架構方案。容器云架構方案基于容器技術,運維技術團隊開發了五阿哥網站的容器云平臺。多云對接私有云和公有云進行統一托管,包含網絡區域配置,實例開通及的環境初始化配置等。技術選型及實踐鏡像標準眾所周知,的鏡像是分層的。 前言 五阿哥鋼鐵電商平臺(www.wuage.com)是由鋼鐵行業第一的中國五礦與互聯網第一的阿里巴巴聯手打造,并充分運用雙方股東優勢資源,即:阿里巴巴在大數據、電商運...
摘要:大會是由國內容器社區組織的專為一線開發者和運維工程師設計的頂級容器技術會議,會議強調實踐和交流,話題設置圍繞容器運維云計算等技術領域,力求全方位多角度為參會者解讀容器技術。 @Container大會是由國內容器社區 DockOne 組織的專為一線開發者和運維工程師設計的頂級容器技術會議,會議強調實踐和交流,話題設置圍繞容器、運維、云計算等技術領域,力求全方位、多角度為參會者解讀容器技術...
閱讀 1583·2021-09-02 15:41
閱讀 993·2021-09-02 15:11
閱讀 1274·2021-07-28 00:15
閱讀 2297·2019-08-30 15:55
閱讀 1138·2019-08-30 15:54
閱讀 1687·2019-08-30 15:54
閱讀 2967·2019-08-30 14:02
閱讀 2518·2019-08-29 16:57