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

資訊專欄INFORMATION COLUMN

搭建 etcd 集群 - 暴走漫畫容器實踐系列 Part3

happen / 3524人閱讀

摘要:如果用命令行參數(shù),應(yīng)該將下列參數(shù)附在的啟動命令后面其中表示這是在從無到有搭建集群。命令行參數(shù)環(huán)境變量以命令行參數(shù)啟動方式為例公共服務(wù)如果沒有已有的集群,也可以用提供的公共服務(wù)。

etcd 是一個高可用的分布式 key-value(鍵值) 存儲系統(tǒng)。在暴漫我們用他用來做配置管理和服務(wù)發(fā)現(xiàn)。

這一次我們主要介紹關(guān)于 etcd 集群的搭建與管理。

1. etcd 集群概述

首先我們需要理解,etcd 是一個分布式的 key-value 存儲系統(tǒng),所以其基本原理和前面我們介紹過的
分布式數(shù)據(jù)庫相關(guān)理論 是一致的。

兩種不同的 node(節(jié)點(diǎn))

值得注意的是,為了方便使用,etcd 引入了 proxy 的概念,所以 etcd 的節(jié)點(diǎn)分為兩種:集群節(jié)點(diǎn)代理節(jié)點(diǎn)。

集群節(jié)點(diǎn)代理節(jié)點(diǎn) 在使用上幾乎沒有任何區(qū)別。這使得我們可以在每臺機(jī)器上都安裝 etcd,進(jìn)而把 etcd 當(dāng)作本地服務(wù)來使用(通過 0.0.0.0)。
他們的區(qū)別在于:內(nèi)部原理不同。
集群節(jié)點(diǎn)是真正的 etcd 集群的構(gòu)成者,這些節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)存取,集群管理等等。
代理節(jié)點(diǎn)可以理解為一個反向代理,它只是簡單的接受請求,轉(zhuǎn)發(fā)請求給 etcd 集群。

集群大小與容錯

集群的大小指集群節(jié)點(diǎn)的個數(shù)。根據(jù) etcd 的分布式數(shù)據(jù)冗余策略,集群節(jié)點(diǎn)越多,容錯能力(Failure Tolerance)越強(qiáng),同時寫性能也會越差。
所以關(guān)于集群大小的優(yōu)化,其實就是容錯和寫性能的一個平衡。

另外, etcd 推薦使用 奇數(shù) 作為集群節(jié)點(diǎn)個數(shù)。因為奇數(shù)個節(jié)點(diǎn)與和其配對的偶數(shù)個節(jié)點(diǎn)相比(比如 3節(jié)點(diǎn)和4節(jié)點(diǎn)對比),
容錯能力相同,卻可以少一個節(jié)點(diǎn)。

所以綜合考慮性能和容錯能力,etcd 官方文檔推薦的 etcd 集群大小是 3, 5, 7。至于到底選擇 3,5 還是 7,根據(jù)需要的容錯能力而定。

關(guān)于節(jié)點(diǎn)數(shù)和容錯能力對應(yīng)關(guān)系,如下表所示:

集群大小 最大容錯
1 0
3 1
4 1
5 2
6 2
7 3
8 3
9 4
2. etcd 集群的搭建(初始化一個 etcd 集群)

這里說的搭建指“從無到有”搭建。關(guān)于在已有集群中添加減少集群節(jié)點(diǎn),屬于下面"第3節(jié):etcd 集群的管理"的內(nèi)容。

etcd 集群的搭建有三種方式,包括:static 方式,etcd discovery 方式 和 DNS discovery。

這里,我們以一個例子來講解 etcd 集群各種方式的搭建。假設(shè)我們需要搭建一個3節(jié)點(diǎn)的 etcd 集群。這三個節(jié)點(diǎn)的 name(我們需要給每個節(jié)點(diǎn)取個名字)和 ip 分別是:

name ip
etcd0 10.0.0.10
etcd1 10.0.0.11
etcd2 10.0.0.12
2.1 static 方式

static 方式是最簡單的一種搭建 etcd 的方式。
不像其他兩種方式, static 方式不需要任何額外的服務(wù),只需要你知道你準(zhǔn)備用來運(yùn)行 etcd 的所有節(jié)點(diǎn)(的name和ip)。

本例中,我們來看看如何在3個節(jié)點(diǎn)上構(gòu)建 etcd 集群。

首先我們需要構(gòu)造一個描述集群所有節(jié)點(diǎn)的參數(shù),這個參數(shù)可以以命令行參數(shù)的方式傳給 etcd 程序,也可以以環(huán)境變量的方式。

如果用命令行參數(shù),應(yīng)該將下列參數(shù)附在 etcd 的啟動命令后面:

-initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 
  -initial-cluster-state new

其中 -initial-cluster-state new 表示這是在從無到有搭建 etcd 集群。
-initial-cluster 參數(shù)描述了這個新集群中總共有哪些節(jié)點(diǎn),其中每個節(jié)點(diǎn)用 name=ip的形式描述,節(jié)點(diǎn)之間用,分隔。

如果用環(huán)境變量,應(yīng)該在啟動 etcd 時,加入如下環(huán)境變量:

ETCD_INITIAL_CLUSTER="etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380"
ETCD_INITIAL_CLUSTER_STATE=new

ETCD_INITIAL_CLUSTER 變量和 -initial-cluster 作用相同,
ETCD_INITIAL_CLUSTER_STATE 變量和 -initial-cluster-state 作用相同。

接著,分別在3個節(jié)點(diǎn)上啟動 etcd,以命令行參數(shù)方式啟動為例:

$ etcd -name etcd0 -initial-advertise-peer-urls http://10.0.1.10:2380 
  -listen-peer-urls http://10.0.1.10:2380 
  -listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.10:2379 
  -initial-cluster-token my-etcd-cluster 
  -initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 
  -initial-cluster-state new
$ etcd -name etcd1 -initial-advertise-peer-urls http://10.0.1.11:2380 
  -listen-peer-urls http://10.0.1.11:2380 
  -listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.11:2379 
  -initial-cluster-token my-etcd-cluster 
  -initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 
  -initial-cluster-state new
$ etcd -name etcd2 -initial-advertise-peer-urls http://10.0.1.12:2380 
  -listen-peer-urls http://10.0.1.12:2380 
  -listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.12:2379 
  -initial-cluster-token my-etcd-cluster 
  -initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 
  -initial-cluster-state new

注意

值得注意的是,無論是 -initial-cluster參數(shù),還是對應(yīng)的環(huán)境變量,只有在第一次啟動 etcd 的時候才起作用。
之后如果重啟 etcd,這個參數(shù)或環(huán)境變量會被自動忽略。所以當(dāng)成功初始化了一個 etcd 集群以后,你就不在需要這個參數(shù)或環(huán)境變量了。

2.2 etcd discovery 方式

很多時候,你只知道你要搭建一個多大(包含多少節(jié)點(diǎn))的集群,但是并不能事先知道這幾個節(jié)點(diǎn)的 ip,從而無法使用 -initial-cluster 參數(shù)。
這個時候,你就需要使用 discovery 的方式來搭建 etcd 集群。discovery 方式有兩種:etcd discoveryDNS discovery。

這里我們先介紹下 etcd discovery 方式,etcd discovery 有兩種:自定義的 etcd discovery公共 etcd discovery

2.2.1 自定義的 etcd discovery 服務(wù)

這種方式就是利用一個已有的 etcd 集群來提供 discovery 服務(wù),從而搭建一個新的 etcd 集群。

假設(shè)已有的 etcd 集群的一個訪問地址是:myetcd.local,那么我們首先需要在已有 etcd 中創(chuàng)建一個特殊的 key,方法如下:

$ curl -X PUT https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3

其中 value=3 表示本集群的大小,即: 有多少集群節(jié)點(diǎn)。而 6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 就是用來做 discovery 的 token。

接下來你在 3 個節(jié)點(diǎn)上分別啟動 etcd 程序,并加上剛剛的 token。
加 token 的方式同樣也有 命令行參數(shù)環(huán)境變量 兩種。

命令行參數(shù):

-discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

環(huán)境變量

ETCD_DISCOVERY=https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

命令行參數(shù)啟動方式為例:

$ etcd -name etcd0 -initial-advertise-peer-urls http://10.0.1.10:2380 
  -listen-peer-urls http://10.0.1.10:2380 
  -listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.10:2379 
  -discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83
$ etcd -name etcd1 -initial-advertise-peer-urls http://10.0.1.11:2380 
  -listen-peer-urls http://10.0.1.11:2380 
  -listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.11:2379 
  -discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83
$ etcd -name etcd2 -initial-advertise-peer-urls http://10.0.1.12:2380 
  -listen-peer-urls http://10.0.1.12:2380 
  -listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.12:2379 
  -discovery https://myetcd.local/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83

2.2.2 公共 etcd discovery 服務(wù)

如果沒有已有的 etcd 集群,也可以用 etcd 提供的公共服務(wù): discovery.etcd.io。
步驟和 2.2.1 節(jié)基本一致。

你得先創(chuàng)建一個用于 discovery 的 token,創(chuàng)建方式如下:

$ curl https://discovery.etcd.io/new?size=3

返回:

https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

返回值作為啟動節(jié)點(diǎn)時的 -discovery 參數(shù)或者 ETCD_DISCOVERY環(huán)境變量的值。

環(huán)境變量啟動方式為例:

$ ETCD_DISCOVERY=https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de 
etcd -name etcd0 -initial-advertise-peer-urls http://10.0.1.10:2380 
  -listen-peer-urls http://10.0.1.10:2380 
  -listen-client-urls http://10.0.1.10:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.10:2379 
  -discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
$ ETCD_DISCOVERY=https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de 
etcd -name etcd1 -initial-advertise-peer-urls http://10.0.1.11:2380 
  -listen-peer-urls http://10.0.1.11:2380 
  -listen-client-urls http://10.0.1.11:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.11:2379 
  -discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
$ ETCD_DISCOVERY=https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de 
etcd -name etcd2 -initial-advertise-peer-urls http://10.0.1.12:2380 
  -listen-peer-urls http://10.0.1.12:2380 
  -listen-client-urls http://10.0.1.12:2379,http://127.0.0.1:2379 
  -advertise-client-urls http://10.0.1.12:2379 
  -discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

2.2.3 注意點(diǎn)

值得注意的是:如果實際啟動的 etcd 節(jié)點(diǎn)個數(shù)大于 discovery token創(chuàng)建時指定的size
多余的節(jié)點(diǎn)會自動變?yōu)?proxy 節(jié)點(diǎn)。

2.3 DNS discovery 方式

這個方式?jīng)]有實踐,而且對于一般團(tuán)隊實用性也不高,所以就不做分享了。

2.4 后續(xù)

到這里為止,我們已經(jīng)有一個3節(jié)點(diǎn)的 etcd 集群了,下一篇博客我會介紹如何進(jìn)行 etcd 集群的管理

--

更多文章歡迎關(guān)注自由風(fēng)暴博客

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

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

相關(guān)文章

  • etcd 集群的管理 - 暴走漫畫容器實踐系列 Part4

    摘要:搭建完集群后,接下來就是集群的管理了。集群的管理主要包括節(jié)點(diǎn)的重啟,監(jiān)控以及集群的運(yùn)行時更改。這樣,新節(jié)點(diǎn)就會運(yùn)行起來并且加入到已有的集群中了。 搭建完 etcd 集群后,接下來就是集群的管理了。集群的管理主要包括節(jié)點(diǎn)的重啟,監(jiān)控以及集群的運(yùn)行時更改(Runtime Reconfiguration)。 關(guān)于節(jié)點(diǎn)的重啟、監(jiān)控相對來說比較簡單,這里主要介紹下集群的運(yùn)行時更改。 1. 在什么...

    tulayang 評論0 收藏0
  • 利用K8S技術(shù)棧打造個人私有云(連載之:K8S集群搭建

    摘要:最近被業(yè)務(wù)折騰的死去活來,實在沒時間發(fā)帖,花了好多個晚上才寫好這篇帖子,后續(xù)會加油的利用技術(shù)棧打造個人私有云系列文章目錄利用技術(shù)棧打造個人私有云連載之初章利用技術(shù)棧打造個人私有云連載之集群搭建利用技術(shù)棧打造個人私有云連載之環(huán)境理解和練手利用 showImg(https://segmentfault.com/img/remote/1460000013077799); 最近被業(yè)務(wù)折騰的死...

    Ryan_Li 評論0 收藏0
  • 利用K8S技術(shù)棧打造個人私有云(連載之:K8S集群搭建

    摘要:最近被業(yè)務(wù)折騰的死去活來,實在沒時間發(fā)帖,花了好多個晚上才寫好這篇帖子,后續(xù)會加油的利用技術(shù)棧打造個人私有云系列文章目錄利用技術(shù)棧打造個人私有云連載之初章利用技術(shù)棧打造個人私有云連載之集群搭建利用技術(shù)棧打造個人私有云連載之環(huán)境理解和練手利用 showImg(https://segmentfault.com/img/remote/1460000013077799); 最近被業(yè)務(wù)折騰的死...

    邱勇 評論0 收藏0
  • etcd 集群運(yùn)維實踐

    摘要:是集群的數(shù)據(jù)核心,最嚴(yán)重的情況是,當(dāng)出問題徹底無法恢復(fù)的時候,解決問題的辦法可能只有重新搭建一個環(huán)境。因此圍繞相關(guān)的運(yùn)維知識就比較重要,可以容器化部署,也可以在宿主機(jī)自行搭建,以下內(nèi)容是通用的。 etcd 是 Kubernetes 集群的數(shù)據(jù)核心,最嚴(yán)重的情況是,當(dāng) etcd 出問題徹底無法恢復(fù)的時候,解決問題的辦法可能只有重新搭建一個環(huán)境。因此圍繞 etcd 相關(guān)的運(yùn)維知識就比較重要...

    pcChao 評論0 收藏0
  • etcd 集群運(yùn)維實踐

    摘要:是集群的數(shù)據(jù)核心,最嚴(yán)重的情況是,當(dāng)出問題徹底無法恢復(fù)的時候,解決問題的辦法可能只有重新搭建一個環(huán)境。因此圍繞相關(guān)的運(yùn)維知識就比較重要,可以容器化部署,也可以在宿主機(jī)自行搭建,以下內(nèi)容是通用的。 etcd 是 Kubernetes 集群的數(shù)據(jù)核心,最嚴(yán)重的情況是,當(dāng) etcd 出問題徹底無法恢復(fù)的時候,解決問題的辦法可能只有重新搭建一個環(huán)境。因此圍繞 etcd 相關(guān)的運(yùn)維知識就比較重要...

    Noodles 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<