docker服務發現方案etcd

前言

服務發現簡單來說是指service的客戶端可以發送請求到動態變化的service實例上 。現在主流的docker 服務發現方案有三種:分別是etcd,consul,skyDNS。今天我們主要講解etcd解決方案。

etcd

它是一個鍵值存儲倉庫,用於配置共享和服務發現。 對於etcd更加細緻的介紹,可以自己科普下,我就不一一闡釋了。

etcd一般搭建集群,數量為奇數為佳。

host1上創建etcd容器,需要開放2379,2380,4001端口。設置訪問etcd所需要的URL,也就是監聽地址經由主機IP連接,還有集群中存在的所以節點。

docker run -d -p 2379:2379 -p 2380:2380 -p 4001:4001 \
--name etcd quay.io/coreos/etcd:v2.2.5 \
-name etcd-1 \
-initial-advertise-peer-urls http://172.16.2.234:2380 \
-listen-peer-urls http://0.0.0.0:2380 \
-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \
-advertise-client-urls http://172.16.2.234:2379 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd-1=http://172.16.2.234:2380,etcd-2=http://172.16.2.235:2380
-initial-cluster-state new

host2上創建etcd容器,需要開放2379,2380,4001端口。設置訪問etcd所需要的URL,也就是監聽地址經由主機IP連接,還有集群中存在的所以節點。這裡只需要修改對外開放端口為host地址即可。

docker run -d -p 2379:2379 -p 2380:2380 -p 4001:4001 \
--name etcd quay.io/coreos/etcd:v2.2.5 \
-name etcd-2 \
-initial-advertise-peer-urls http://172.16.2.235:2380 \
-listen-peer-urls http://0.0.0.0:2380 \
-listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \
-advertise-client-urls http://172.16.2.235:2379 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd-1=http://172.16.2.234:2380,etcd-2=http://172.16.2.235:2380 \

-initial-cluster-state new

curl查詢所有成員的名單

curl -s http://172.16.2.234:2379/v2/members
>>> {"members":[{"id":"3b1e9b838fe5f460","name":"etcd-2","peerURLs":["http://172.16.2.235:2380"],"clientURLs":["http://172.16.2.235:2379"]},{"id":"b2b7116e0f05b4fe","name":"etcd-1","peerURLs":["http://172.16.2.234:2380"],"clientURLs":["http://172.16.2.234:2379"]}]}

通過http put請求host1將service_address的值存儲在service_name目錄下

curl -s http://172.16.2.234:2379/v2/keys/service_name -XPUT -d value="service_address"
>>> {"action":"set","node":{"key":"/service_name","value":"service_address","modifiedIndex":6,"createdIndex":6}}

通過http get請求host2將該目錄下的值取出來

curl -s http://172.16.2.235:2379/v2/keys/service_name
>>> {"action":"get","node":{"key":"/service_name","value":"service_address","modifiedIndex":6,"createdIndex":6}}

總結

etcd已經搭建完了,現在有什麼收穫呢?我們在兩臺主機上,分別創建了etcd容器,設置了etcd容器可以被其他節點發現。最後我們在這個雙節點集群中,測試了在節點一上保存數據,節點二上獲取數據,可以發現數據是一致性的。服務發現,最核心的模塊就是要保持數據的一致性,通過多節點的記錄服務發現,在客戶端請求訪問數據時,我們的etcd集群才能準確無誤的告知到動態的實例上。

docker服務發現方案etcd


分享到:


相關文章: