基於已有集群動態發現方式部署 Etcd 集群


etcd提供了多種部署集群的方式,在「通過靜態發現方式部署etcd集群」 一文中我們介紹了如何通過靜態發現方式部署集群。

不過很多時候,你只知道你要搭建一個多大(包含多少節點)的集群,但是並不能事先知道這幾個節點的ip,從而無法使用--initial-cluster參數。

這個時候,你就需要使用discovery的方式來搭建etcd集群。discovery方式有兩種:etcd discoveryDNS discovery

這里我們先介紹下etcd discovery方式。這種啟動方式依賴另外一個ETCD集群,在該集群中創建一個目錄,並在該目錄中創建一個_config的子目錄,並且在該子目錄中增加一個size節點,指定集群的節點數目。在這種情況下,將該目錄在ETCD中的URL作為節點的啟動參數,即可完成集群啟動。

etcd discovery集群方式分為兩種:自定義的etcd discovery和公共 etcd discovery。

  • 公共etcd discovery服務

公共的discovery就是通過CoreOS提供的公共discovery服務申請token。

獲取集群標識

集群標識可以從已有的etcd集群中創建,這里通過CoreOS提供的公共discovery服務申請token

$ curl -w "\n" 'https://discovery.etcd.io/new?size=3'
https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420

以上命令會生成一個鏈接樣式的token,參數size代表要創建的集群大小。

修改etcd配置

依次編輯三個節點的etcd配置文件,刪除ETCD_INITIAL_CLUSTERETCD_INITIAL_CLUSTER_STATEETCD_INITIAL_CLUSTER_TOKEN配置參數並加上ETCD_DISCOVERY參數為獲取的集群標識即可。

這里以etcd1節點為例(etcd2、etcd3同理):

# 編輯etcd配置文件
$ vim /opt/etcd/config/etcd.conf

ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/etcd1"
ETCD_LISTEN_PEER_URLS="http://192.168.2.210:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.2.210:2379,http://192.168.2.210:4001"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.2.210:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.2.210:2379,http://192.168.2.210:4001"
ETCD_DISCOVERY="https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420"

測試etcd集群

按上面配置好各集群節點后,分別在各節點啟動etcd。

$ systemctl start etcd

啟動完成后,執行以下命令:

$ curl -w '\n' https://discovery.etcd.io/c5b52d9d8fd7af9017bd7b54cf13e420
{"action":"get","node":{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420","dir":true,"nodes":[{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/a44795c1770e34ec","value":"etcd1=http://192.168.2.210:2380","modifiedIndex":1301600912,"createdIndex":1301600912},{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/a085e7281cb15be2","value":"etcd2=http://192.168.2.211:2380","modifiedIndex":1301601030,"createdIndex":1301601030},{"key":"/_etcd/registry/c5b52d9d8fd7af9017bd7b54cf13e420/173070ace158b9d1","value":"etcd3=http://192.168.2.212:2380","modifiedIndex":1301601101,"createdIndex":1301601101}],"modifiedIndex":1301571633,"createdIndex":1301571633}}

從輸出結果看,說明集群已在discovery.etcd.io注冊成功。

查看集群成員

$ etcdctl --endpoints "http://192.168.2.210:2379" member list
173070ace158b9d1: name=etcd3 peerURLs=http://192.168.2.212:2380 clientURLs=http://192.168.2.212:2379,http://192.168.2.212:4001 isLeader=false
a085e7281cb15be2: name=etcd2 peerURLs=http://192.168.2.211:2380 clientURLs=http://192.168.2.211:2379,http://192.168.2.211:4001 isLeader=false
a44795c1770e34ec: name=etcd1 peerURLs=http://192.168.2.210:2380 clientURLs=http://192.168.2.210:2379,http://192.168.2.210:4001 isLeader=true

更多集群使用方法可參考「通過靜態發現方式部署etcd集群」一文。

自定義的etcd discovery服務

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

假設已有的etcd集群的一個訪問地址是:192.168.2.210,那么我們首先需要在已有etcd中創建一個特殊的key,方法如下:

$ curl http://192.168.2.210:2379/v2/keys/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size -d value=3

{"action":"create","node":{"key":"/discovery/8ebee6723eaf3f5c7724e879f8797e85/_config/size/00000000000000000011","value":"3","modifiedIndex":11,"createdIndex":11}}

其中value=3表示本集群的大小,即: 有多少集群節點。而 8ebee6723eaf3f5c7724e879f8797e85就是用來做discovery的token。

值得注意的是:如果實際啟動的etcd節點個數大於discovery token創建時指定的size,多余的節點會自動變為proxy節點。

etcd proxy模式簡介:

作為反向代理把客戶的請求轉發給可用的etcd集群,新節點加入集群如果核心節點數已滿足要求,則自動轉化為proxy模式,此項不會在節點不足時逆向轉化為實際節點。

接下來的配置就和公共etcd discovery服務中的方法類似,就不再重復闡述了。

參考文檔

http://www.google.com
http://t.cn/RXzZrI9
https://www.zhangluya.com/?p=147
https://segmentfault.com/a/1190000003852735


免責聲明!

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



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