成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

etcd 集群的管理 - 暴走漫畫容器實(shí)踐系列 Part4

tulayang / 1645人閱讀

摘要:搭建完集群后,接下來就是集群的管理了。集群的管理主要包括節(jié)點(diǎn)的重啟,監(jiān)控以及集群的運(yùn)行時(shí)更改。這樣,新節(jié)點(diǎn)就會(huì)運(yùn)行起來并且加入到已有的集群中了。

搭建完 etcd 集群后,接下來就是集群的管理了。集群的管理主要包括節(jié)點(diǎn)的重啟,監(jiān)控以及集群的運(yùn)行時(shí)更改(Runtime Reconfiguration)。

關(guān)于節(jié)點(diǎn)的重啟、監(jiān)控相對(duì)來說比較簡單,這里主要介紹下集群的運(yùn)行時(shí)更改。

1. 在什么情況下需要集群的運(yùn)行時(shí)更改?

讓我們來看看需要集群的運(yùn)行時(shí)更改的幾個(gè)場景。他們中的絕大多數(shù)只需要運(yùn)用到重配置中的 “添加/刪除” 節(jié)點(diǎn)操作的組合。

1.1. 維護(hù)和升級(jí)多個(gè)機(jī)器

如果你因?yàn)檫M(jìn)行諸如硬件升級(jí)或者斷網(wǎng)等計(jì)劃維護(hù),而需要移動(dòng)多個(gè)節(jié)點(diǎn)到新機(jī)器上,最好是逐個(gè)節(jié)點(diǎn)移動(dòng),一次操作一個(gè)。

移動(dòng) leader 節(jié)點(diǎn)是安全的,只不過 leader 節(jié)點(diǎn)下線后,需要耗費(fèi)更多的時(shí)間選舉新節(jié)點(diǎn),所以建議最后移動(dòng)。

如果你的集群有超過 50M 的數(shù)據(jù),最好進(jìn)行節(jié)點(diǎn)的遷移(見3.1節(jié) 遷移節(jié)點(diǎn)),而不要通過刪除舊節(jié)點(diǎn),增加新節(jié)點(diǎn)來實(shí)現(xiàn)節(jié)點(diǎn)的移動(dòng)。

1.2. 更改集群的大小

如上一篇博客所說的,增加集群節(jié)點(diǎn)的個(gè)數(shù),容錯(cuò)能力越強(qiáng),讀性能也越好。不過相應(yīng)的,寫性能也會(huì)下降。減少集群節(jié)點(diǎn)的個(gè)數(shù),容錯(cuò)能力下降,不過寫性能也會(huì)提高。

更改集群大小也需要集群運(yùn)行時(shí)更改。

1.3. 替換一個(gè)壞掉的節(jié)點(diǎn)

如果一個(gè)節(jié)點(diǎn)的機(jī)器因?yàn)橛布鲥e(cuò)而宕機(jī)了,那需要盡快用新機(jī)器替換。替換的操作就是簡單地分為兩步:(通過集群運(yùn)行時(shí)更改)先刪除壞掉的節(jié)點(diǎn),再添加新的節(jié)點(diǎn)(見2節(jié) 集群節(jié)點(diǎn)的操作)。不過,如果你的集群有超過 50M 的數(shù)據(jù),最好進(jìn)行節(jié)點(diǎn)遷移(見3.1節(jié) 遷移節(jié)點(diǎn))

1.4. 集群多數(shù)宕機(jī)(Majority Failure)后的重啟

如果你的集群出現(xiàn)了多數(shù)宕機(jī)(例如超過(N-1)/2的節(jié)點(diǎn)當(dāng)機(jī)),或者所有的節(jié)點(diǎn)都更改了 IP,你就需要手動(dòng)操作,重啟(恢復(fù))集群了?;静襟E包括:1.基于原先的數(shù)據(jù)創(chuàng)建新集群;2.強(qiáng)制讓一個(gè)節(jié)點(diǎn)成為 leader 節(jié)點(diǎn),并最終通過運(yùn)行時(shí)更改添加新節(jié)點(diǎn)的方式將其他節(jié)點(diǎn)添加到這個(gè)新的集群中。

2. 集群運(yùn)行時(shí)更改的操作

知道了什么樣的情況下需要運(yùn)行時(shí)更改,下面讓我們來了解下具體的運(yùn)行時(shí)更改的操作。

一般來說,這些操作需要確保集群的多數(shù)節(jié)點(diǎn)是正常服務(wù)的,并且一次只操作一個(gè)節(jié)點(diǎn)。

升級(jí)單個(gè)節(jié)點(diǎn)的 peerURLs,需要執(zhí)行一個(gè)更新節(jié)點(diǎn)操作

替換一個(gè)節(jié)點(diǎn),需要先執(zhí)行一個(gè)添加節(jié)點(diǎn)操作,再執(zhí)行一個(gè)刪除節(jié)點(diǎn)操作

將集群大小從 3 更改到 5,需要執(zhí)行兩個(gè)添加節(jié)點(diǎn)操作

將集群大小從 5 降低到 3,需要執(zhí)行兩個(gè)刪除節(jié)點(diǎn)操作

下面的所有例子都是利用 etcdctl 命令實(shí)現(xiàn)操作,其本質(zhì)是調(diào)用 etcd 的 REST API。你也可以使用其他你習(xí)慣的客戶端。

2.1 更新一個(gè)節(jié)點(diǎn)

如果你想更新一個(gè)節(jié)點(diǎn)的 IP(peerURLS),首先你需要知道那個(gè)節(jié)點(diǎn)的 ID。你可以列出所有節(jié)點(diǎn),找出對(duì)應(yīng)節(jié)點(diǎn)的 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

在本例中,我們假設(shè)要更新 ID 為 a8266ecf031671f3 的節(jié)點(diǎn)的 peerURLs 為:http://10.0.1.10:2380

$ etcdctl member update a8266ecf031671f3 http://10.0.1.10:2380
Updated member with ID a8266ecf031671f3 in cluster

2.2 刪除一個(gè)節(jié)點(diǎn)

假設(shè)我們要?jiǎng)h除 ID 為 a8266ecf031671f3 的節(jié)點(diǎn)

$ etcdctl member remove a8266ecf031671f3
Removed member a8266ecf031671f3 from cluster

執(zhí)行完后,目標(biāo)節(jié)點(diǎn)會(huì)自動(dòng)停止服務(wù),并且打印一行日志:

etcd: this member has been permanently removed from the cluster. Exiting.

如果刪除的是 leader 節(jié)點(diǎn),則需要耗費(fèi)額外的時(shí)間重新選舉 leader。

2.3 增加一個(gè)新的節(jié)點(diǎn)

增加一個(gè)新的節(jié)點(diǎn)分為兩步:

通過 etcdctl 或?qū)?yīng)的 API 注冊新節(jié)點(diǎn)

使用恰當(dāng)?shù)膮?shù)啟動(dòng)新節(jié)點(diǎn)

先看第一步,假設(shè)我們要新加的節(jié)點(diǎn)取名為 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 在注冊完新節(jié)點(diǎn)后,會(huì)返回一段提示,包含3個(gè)環(huán)境變量。然后在第二部啟動(dòng)新節(jié)點(diǎn)的時(shí)候,帶上這3個(gè)環(huán)境變量即可。

$ 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%

這樣,新節(jié)點(diǎn)就會(huì)運(yùn)行起來并且加入到已有的集群中了。

值得注意的是,如果原先的集群只有1個(gè)節(jié)點(diǎn),在新節(jié)點(diǎn)成功啟動(dòng)之前,新集群并不能正確的形成。因?yàn)樵鹊膯喂?jié)點(diǎn)集群無法完成leader的選舉。
直到新節(jié)點(diǎn)啟動(dòng)完,和原先的節(jié)點(diǎn)建立連接以后,新集群才能正確形成。

3. 遷移節(jié)點(diǎn)和災(zāi)難恢復(fù)

3.1 遷移節(jié)點(diǎn)

移動(dòng)節(jié)點(diǎn)有兩種方式:1. 刪除舊的節(jié)點(diǎn),增加新的節(jié)點(diǎn); 2. 遷移節(jié)點(diǎn)。當(dāng)集群的數(shù)據(jù)超過 50M 的時(shí)候,建議通過遷移節(jié)點(diǎn)的方式來移動(dòng)節(jié)點(diǎn)。

遷移節(jié)點(diǎn)的核心就是數(shù)據(jù)目錄的遷移。因?yàn)?etcd 的各個(gè)節(jié)點(diǎn)會(huì)將自己的 ID 存放在自己的數(shù)據(jù)目錄下面,所以遷移節(jié)點(diǎn)不會(huì)改變節(jié)點(diǎn)的 ID。

遷移節(jié)點(diǎn)的步驟簡單來說,包括以下幾步:

停止需要遷移的節(jié)點(diǎn)的服務(wù)

從老機(jī)器上拷貝數(shù)據(jù)目錄到新機(jī)器上

通過集群運(yùn)行時(shí)更改的更新操作,改變節(jié)點(diǎn)的 peerURLs 值為新機(jī)器的 IP:port

在新機(jī)器上指定拷貝過來的數(shù)據(jù)目錄,啟動(dòng) etcd 的節(jié)點(diǎn)服務(wù)

下面通過一個(gè)例子具體說明。

假設(shè)我們已有的集群是這樣的:

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

我們要移動(dòng) infra1 從 10.0.1.11 到 10.0.1.13

1. 停止 infra1 的 etcd 進(jìn)程
$ssh 10.0.1.11
$ kill `pgrep etcd`
2. 從 10.0.1.11 拷貝etcd的數(shù)據(jù)目錄到 10.0.1.13 的機(jī)器上
$ tar -cvzf infra1.etcd.tar.gz %data_dir%
$ scp infra1.etcd.tar.gz 10.0.1.13:~/
3. 變更 infra1 的 peerURLs
$ 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
4. 在新機(jī)器上使用 infra1 的數(shù)據(jù)和配置啟動(dòng) etcd
$ 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

3.2 災(zāi)難恢復(fù)

總的來說,etcd 的集群還是相當(dāng)可靠的,但是也不能排除極端情況的出現(xiàn)。當(dāng)出現(xiàn)災(zāi)難性的多數(shù)節(jié)點(diǎn)宕機(jī),就不得不進(jìn)行災(zāi)難恢復(fù)了。

災(zāi)難恢復(fù)需要以下幾個(gè)步驟:

1 備份數(shù)據(jù)

備份操作需要在一臺(tái)還"活著"的節(jié)點(diǎn)上進(jìn)行

$ etcdctl backup 
      --data-dir %data_dir% 
      --backup-dir %backup_data_dir%

這個(gè)命令會(huì)備份原數(shù)據(jù)到 %backup_data_dir% 目錄下,并重新相關(guān)的元數(shù)據(jù)(例如 節(jié)點(diǎn)的 id 和 集群的 id)。
這意味著在 %backup_data_dir% 中只包含原先的數(shù)據(jù),而不包含原先的身份信息。

接下來我們就可以基于備份的數(shù)據(jù)創(chuàng)建一個(gè)單節(jié)點(diǎn)的集群。

2 從備份數(shù)據(jù)中重建單節(jié)點(diǎn)集群
$ etcd 
      -data-dir=%backup_data_dir% 
      -force-new-cluster 
      ...

...部分省略了其他相關(guān)的參數(shù),例如-peer-urls -client-urls 等等

這時(shí)候,應(yīng)該就成功創(chuàng)建了一個(gè)新的只包含一個(gè)節(jié)點(diǎn)的集群,并包含之前的所有數(shù)據(jù)。
當(dāng)你確認(rèn)新集群正常后,就可以刪除原來集群的數(shù)據(jù),暫停新集群,將新集群的數(shù)據(jù)目錄拷貝回原先數(shù)據(jù)的位置,并重新啟動(dòng)。

$ pkill etcd
$ rm -rf %data_dir%
$ mv %backup_data_dir% %data_dir%
$ etcd 
    -data-dir=%data_dir% 
    ...
3 恢復(fù)集群

現(xiàn)在已經(jīng)有了一個(gè)擁有之前數(shù)據(jù)的單節(jié)點(diǎn)的集群了。接下來,你可以通過添加節(jié)點(diǎn)的操作,重建出一個(gè)同樣大小的集群。
值得注意的是,如果你還是使用之前的其他機(jī)器來重建這個(gè)新的集群,一定殺掉之前的etcd 進(jìn)程,并且清除掉之前的數(shù)據(jù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7948.html

相關(guān)文章

  • 搭建 etcd 集群 - 暴走漫畫容器實(shí)踐系列 Part3

    摘要:如果用命令行參數(shù),應(yīng)該將下列參數(shù)附在的啟動(dòng)命令后面其中表示這是在從無到有搭建集群。命令行參數(shù)環(huán)境變量以命令行參數(shù)啟動(dòng)方式為例公共服務(wù)如果沒有已有的集群,也可以用提供的公共服務(wù)。 etcd 是一個(gè)高可用的分布式 key-value(鍵值) 存儲(chǔ)系統(tǒng)。在暴漫我們用他用來做配置管理和服務(wù)發(fā)現(xiàn)。 這一次我們主要介紹關(guān)于 etcd 集群的搭建與管理。 1. etcd 集群概述 首先我們需要理解,...

    happen 評(píng)論0 收藏0
  • Kubernetes在宜信落地實(shí)踐

    摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會(huì)話、用戶數(shù)據(jù)等存儲(chǔ)到中間件中服務(wù)中。 showI...

    fxp 評(píng)論0 收藏0
  • Kubernetes在宜信落地實(shí)踐

    摘要:容器云的背景伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的和等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。 容器云的背景 伴隨著微服務(wù)的架構(gòu)的普及,結(jié)合開源的Dubbo和Spring Cloud等微服務(wù)框架,宜信內(nèi)部很多業(yè)務(wù)線逐漸了從原來的單體架構(gòu)逐漸轉(zhuǎn)移到微服務(wù)架構(gòu)。應(yīng)用從有狀態(tài)到無狀態(tài),具體來說將業(yè)務(wù)狀態(tài)數(shù)據(jù)如:會(huì)話、用戶數(shù)據(jù)等存儲(chǔ)到中間件中服務(wù)中。 showI...

    Labradors 評(píng)論0 收藏0
  • 五阿哥鋼鐵電商平臺(tái)Docker容器云平臺(tái)建設(shè)實(shí)踐——你想知道都在這里!

    摘要:容器云架構(gòu)方案。容器云架構(gòu)方案基于容器技術(shù),運(yùn)維技術(shù)團(tuán)隊(duì)開發(fā)了五阿哥網(wǎng)站的容器云平臺(tái)。多云對(duì)接私有云和公有云進(jìn)行統(tǒng)一托管,包含網(wǎng)絡(luò)區(qū)域配置,實(shí)例開通及的環(huán)境初始化配置等。技術(shù)選型及實(shí)踐鏡像標(biāo)準(zhǔn)眾所周知,的鏡像是分層的。 前言 五阿哥鋼鐵電商平臺(tái)(www.wuage.com)是由鋼鐵行業(yè)第一的中國五礦與互聯(lián)網(wǎng)第一的阿里巴巴聯(lián)手打造,并充分運(yùn)用雙方股東優(yōu)勢資源,即:阿里巴巴在大數(shù)據(jù)、電商運(yùn)...

    jeffrey_up 評(píng)論0 收藏0
  • Container容器技術(shù)大會(huì)PPT分享

    摘要:大會(huì)是由國內(nèi)容器社區(qū)組織的專為一線開發(fā)者和運(yùn)維工程師設(shè)計(jì)的頂級(jí)容器技術(shù)會(huì)議,會(huì)議強(qiáng)調(diào)實(shí)踐和交流,話題設(shè)置圍繞容器運(yùn)維云計(jì)算等技術(shù)領(lǐng)域,力求全方位多角度為參會(huì)者解讀容器技術(shù)。 @Container大會(huì)是由國內(nèi)容器社區(qū) DockOne 組織的專為一線開發(fā)者和運(yùn)維工程師設(shè)計(jì)的頂級(jí)容器技術(shù)會(huì)議,會(huì)議強(qiáng)調(diào)實(shí)踐和交流,話題設(shè)置圍繞容器、運(yùn)維、云計(jì)算等技術(shù)領(lǐng)域,力求全方位、多角度為參會(huì)者解讀容器技術(shù)...

    Zachary 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<