您好,登錄后才能下訂單哦!
這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Docker自發(fā)現(xiàn)注冊(cè)服務(wù)基礎(chǔ)etcd的部署及使用方法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
自發(fā)現(xiàn)服務(wù)基礎(chǔ)需要一個(gè)高可用鍵值存儲(chǔ)系統(tǒng), 很容易聯(lián)想到redis, memcached等KV內(nèi)存數(shù)據(jù)庫(kù), 但是我最后選擇了etcd, 主要是因?yàn)樗焐褪菫榧夯O(shè)計(jì)的, 并且生來就是用作conf的節(jié)點(diǎn)數(shù)據(jù)同步.
1) etcd為coreos的一個(gè)基礎(chǔ)部件, 也是用于保存配置信息, 在這里我們主要討論非coreos系統(tǒng)的etcd部署及使用
2) 目前etcd最新版本為: v2.3.6, 測(cè)試版為: v3.x, 我們基于v2版本進(jìn)行演練
我的所有docker鏡像都是基于alpine 3.x版本進(jìn)行構(gòu)建, 如果需要其他版本請(qǐng)自行修改
https://github.com/coreos/etcd
https://github.com/coreos/etcd/releases/download/v2.3.6/etcd-v2.3.6-linux-amd64.tar.gz
FROM alpine:3.3 MAINTAINER Etcd Maintainers "kekuer@gmail.com" RUN ETCD_VER=2.3.6 && \ echo "http://127.0.0.1:8098/main" > /etc/apk/repositories && \ apk --update add curl && \ mkdir src && \ cd src && \ curl -O http://127.0.0.1:8080/etcd-v${ETCD_VER}-linux-amd64.tar.gz && \ tar xzvf etcd-v${ETCD_VER}-linux-amd64.tar.gz && \ cd etcd-v${ETCD_VER}-linux-amd64 && \ cp etcd etcdctl /usr/bin/ && \ apk --update del curl && \ rm -rf /var/cache/apk/* /src ENTRYPOINT ["/usr/bin/etcd"]
注意:
根據(jù)自己的alpine 鏡像地址修改repository地址, 構(gòu)建自己的alpine本地鏡像, 請(qǐng)參考我的另外一篇文章: Alpine Linux Repository本地鏡像制作我在這里做了一個(gè)文件池, 放在一臺(tái)服務(wù)器上, 如果你們相應(yīng)的文件池服務(wù)器, 修改etcd下載地址為: https://github.com/coreos/etcd/releases/download/v${ETCD_VER}/etcd-v${ETCD_VER}-linux-amd64.tar.gz
a) 靜態(tài)配置: 通過initial-cluster啟動(dòng)參量來啟動(dòng)etcd服務(wù), 用于已經(jīng)預(yù)知集群地址
-initial-cluster infra0=http://172.0.1.10:2380,http://172.0.1.11:2380,infra2=http://172.0.1.12:2380 \ -initial-cluster-state new
或者使用環(huán)境變量
ETCD_INITIAL_CLUSTER="infra0=http://172.0.1.10:2380,infra1=http://172.0.1.11:2380,infra2=http://172.0.1.12:2380" ETCD_INITIAL_CLUSTER_STATE=new
b) 自發(fā)現(xiàn)模式: 通過指定discovery發(fā)現(xiàn)服務(wù)token地址來自動(dòng)配置集群服務(wù)
可以使用官方地址: https://discovery.etcd.io/new?size=3, 當(dāng)然在國(guó)內(nèi)最好還是自己構(gòu)建一個(gè)etcd-discovery服務(wù), 使用之前構(gòu)建的etcd鏡像, 跑一個(gè)docker container, 并放開discovery端口, 我這里使用的是80端口, container內(nèi)部端口是2379
docker run --name etcd-discovery -d --restart=always --log-opt max-size=100m -p 80:2379 -v /docker/mount/etcd-discovery/:/etcd funwun.io/etcd:1.4 \ -data-dir /etcd \ -snapshot-count=100 \ -listen-client-urls http://0.0.0.0:2379 \ -advertise-client-urls http://0.0.0.0:2379
注意:
recover etcd數(shù)據(jù)是一件比較繁瑣的事情, 所以盡量把data掛載到host上, 如果是EC2的話, 最好是重新掛載一個(gè)EBS來作為所有docker的掛載盤 (我的習(xí)慣, 你們也可以提出自己的意見和建議)snapshot-count的改小, 是因?yàn)槲业臋C(jī)器都是1G內(nèi)存的輕量host, 所以我要保證內(nèi)存的使用情況
由于etcd采用Raft算法, 因此在做決策時(shí)需要多數(shù)節(jié)點(diǎn)的投票, 所以一般部署為奇數(shù)節(jié)點(diǎn): 3, 5, 7
a) listen-peer-urls
用于節(jié)點(diǎn)與節(jié)點(diǎn)之間數(shù)據(jù)交換, 因此需要監(jiān)聽在其他節(jié)點(diǎn)可以訪問的IP地址上
默認(rèn)端口為: 2380 & 7001 (7001不推薦使用, 已基本廢棄, 主要用于兼容老服務(wù))
b) listen-client-urls
用戶客戶機(jī)訪問etcd數(shù)據(jù), 一般監(jiān)聽在本地, 如果需要集中管理, 可以監(jiān)聽在管理服務(wù)器可以訪問的IP地址上
默認(rèn)端口為: 2379 & 4001 (4001不推薦使用, 已基本廢棄, 主要用于兼容老服務(wù))
c) initial-advertise-peer-urls
該參數(shù)表示節(jié)點(diǎn)監(jiān)聽其他節(jié)點(diǎn)同步信號(hào)的地址
默認(rèn)端口為: 2380 & 7001 (7001不推薦使用, 已基本廢棄, 主要用于兼容老服務(wù))
d) advertise-client-urls
在加入proxy節(jié)點(diǎn)后, 會(huì)使用該廣播地址, 因此需要監(jiān)聽在一個(gè)proxy節(jié)點(diǎn)可以訪問的IP地址上
默認(rèn)端口為: 2379 & 4001 (4001不推薦使用, 已基本廢棄, 主要用于兼容老服務(wù))
TOKEN=test-1 curl -X PUT http://127.0.0.1/v2/keys/discovery/${TOKEN}/_config/size -d value=3
在這里, 我們使用的是test-1作為token, 你可以UUID一個(gè)來作為token
注意:
生產(chǎn)環(huán)境請(qǐng)注意該名稱, 我不建議使用UUID來做token, 因?yàn)檎Z(yǔ)義不明, 最好起一個(gè)自己能記住的名稱, 方便以后辨識(shí)
a) 獲取本地IP (此為舉例, 我使用EC2, 因此以下shell已經(jīng)足夠, 如果網(wǎng)絡(luò)配置較復(fù)雜的服務(wù)器上, 根據(jù)自行條件獲取對(duì)應(yīng)的對(duì)外IP)
IP=$(hostname --all-ip-addresses | awk '{print $1}') && echo $IP
b) 在3個(gè)服務(wù)器上啟動(dòng)etcd節(jié)點(diǎn)
docker run --name etcd -d --log-opt max-size=100m -p 2379:2379 -p 2380:2380 -v /docker/mount/etcd:/etcd funwun.io/etcd:1.4 \ -name ${IP} \ -data-dir /etcd \ -snapshot-count=1000 \ -listen-client-urls http://0.0.0.0:2379 \ -advertise-client-urls http://${IP}:2379 \ -listen-peer-urls http://0.0.0.0:2380 \ -initial-advertise-peer-urls http://${IP}:2380 \ -discovery http://172.0.0.1/v2/keys/discovery/test-1
c) 在集群初始化為3個(gè)節(jié)點(diǎn)的話, 必須湊齊3個(gè)節(jié)點(diǎn), 服務(wù)才能正常運(yùn)行, 超出部分將啟動(dòng)為proxy節(jié)點(diǎn), 因此在第4個(gè)服務(wù)器上, 我們應(yīng)該將節(jié)點(diǎn)啟動(dòng)為proxy
docker run --name etcd -d --log-opt max-size=100m --net=host -v /docker/mount/etcd:/etcd funwun.io/etcd:1.4 \ -name ${IP} \ -data-dir /etcd \ -snapshot-count=1000 \ --proxy on \ -listen-client-urls http://0.0.0.0:2379 \ -discovery http://172.31.16.100/v2/keys/discovery/test-1
注意:
name必須是唯一的, etcd是用這個(gè)來確定節(jié)點(diǎn)的, 如果使用--initial-cluster, 我們還會(huì)使用該名稱作為集群的節(jié)點(diǎn)名稱 (一般使用節(jié)點(diǎn)IP來作為名稱, 你也可以使用hostname)discovery地址修改為你的discovery服務(wù)地址
上述就是小編為大家分享的Docker自發(fā)現(xiàn)注冊(cè)服務(wù)基礎(chǔ)etcd的部署及使用方法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。