您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Docker自發現注冊服務基礎etcd的部署及使用方法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
自發現服務基礎需要一個高可用鍵值存儲系統, 很容易聯想到redis, memcached等KV內存數據庫, 但是我最后選擇了etcd, 主要是因為他天生就是為集群化而設計的, 并且生來就是用作conf的節點數據同步.
1) etcd為coreos的一個基礎部件, 也是用于保存配置信息, 在這里我們主要討論非coreos系統的etcd部署及使用
2) 目前etcd最新版本為: v2.3.6, 測試版為: v3.x, 我們基于v2版本進行演練
我的所有docker鏡像都是基于alpine 3.x版本進行構建, 如果需要其他版本請自行修改
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"]
注意:
根據自己的alpine 鏡像地址修改repository地址, 構建自己的alpine本地鏡像, 請參考我的另外一篇文章: Alpine Linux Repository本地鏡像制作我在這里做了一個文件池, 放在一臺服務器上, 如果你們相應的文件池服務器, 修改etcd下載地址為: https://github.com/coreos/etcd/releases/download/v${ETCD_VER}/etcd-v${ETCD_VER}-linux-amd64.tar.gz
a) 靜態配置: 通過initial-cluster啟動參量來啟動etcd服務, 用于已經預知集群地址
-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
或者使用環境變量
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) 自發現模式: 通過指定discovery發現服務token地址來自動配置集群服務
可以使用官方地址: https://discovery.etcd.io/new?size=3, 當然在國內最好還是自己構建一個etcd-discovery服務, 使用之前構建的etcd鏡像, 跑一個docker container, 并放開discovery端口, 我這里使用的是80端口, container內部端口是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數據是一件比較繁瑣的事情, 所以盡量把data掛載到host上, 如果是EC2的話, 最好是重新掛載一個EBS來作為所有docker的掛載盤 (我的習慣, 你們也可以提出自己的意見和建議)snapshot-count的改小, 是因為我的機器都是1G內存的輕量host, 所以我要保證內存的使用情況
由于etcd采用Raft算法, 因此在做決策時需要多數節點的投票, 所以一般部署為奇數節點: 3, 5, 7
a) listen-peer-urls
用于節點與節點之間數據交換, 因此需要監聽在其他節點可以訪問的IP地址上
默認端口為: 2380 & 7001 (7001不推薦使用, 已基本廢棄, 主要用于兼容老服務)
b) listen-client-urls
用戶客戶機訪問etcd數據, 一般監聽在本地, 如果需要集中管理, 可以監聽在管理服務器可以訪問的IP地址上
默認端口為: 2379 & 4001 (4001不推薦使用, 已基本廢棄, 主要用于兼容老服務)
c) initial-advertise-peer-urls
該參數表示節點監聽其他節點同步信號的地址
默認端口為: 2380 & 7001 (7001不推薦使用, 已基本廢棄, 主要用于兼容老服務)
d) advertise-client-urls
在加入proxy節點后, 會使用該廣播地址, 因此需要監聽在一個proxy節點可以訪問的IP地址上
默認端口為: 2379 & 4001 (4001不推薦使用, 已基本廢棄, 主要用于兼容老服務)
TOKEN=test-1 curl -X PUT http://127.0.0.1/v2/keys/discovery/${TOKEN}/_config/size -d value=3
在這里, 我們使用的是test-1作為token, 你可以UUID一個來作為token
注意:
生產環境請注意該名稱, 我不建議使用UUID來做token, 因為語義不明, 最好起一個自己能記住的名稱, 方便以后辨識
a) 獲取本地IP (此為舉例, 我使用EC2, 因此以下shell已經足夠, 如果網絡配置較復雜的服務器上, 根據自行條件獲取對應的對外IP)
IP=$(hostname --all-ip-addresses | awk '{print $1}') && echo $IP
b) 在3個服務器上啟動etcd節點
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個節點的話, 必須湊齊3個節點, 服務才能正常運行, 超出部分將啟動為proxy節點, 因此在第4個服務器上, 我們應該將節點啟動為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是用這個來確定節點的, 如果使用--initial-cluster, 我們還會使用該名稱作為集群的節點名稱 (一般使用節點IP來作為名稱, 你也可以使用hostname)discovery地址修改為你的discovery服務地址
上述就是小編為大家分享的Docker自發現注冊服務基礎etcd的部署及使用方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。