欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Docker微服務(wù)的ETCD集群搭建教程詳解

 更新時(shí)間:2021年11月16日 08:58:05   作者:秋天的春  
這篇文章主要為大家介紹了關(guān)于Docker微服務(wù)的ETCD集群搭建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

etcd是一個(gè)高可用的鍵值存儲(chǔ)系統(tǒng),主要用于共享配置和服務(wù)發(fā)現(xiàn)。etcd是由CoreOS開(kāi)發(fā)并維護(hù)的,靈感來(lái)自于 ZooKeeper 和 Doozer,它使用Go語(yǔ)言編寫,并通過(guò)Raft一致性算法處理日志復(fù)制以保證強(qiáng)一致性。Raft是一個(gè)來(lái)自Stanford的新的一致性算法,適用于分布式系統(tǒng)的日志復(fù)制,Raft通過(guò)選舉的方式來(lái)實(shí)現(xiàn)一致性,在Raft中,任何一個(gè)節(jié)點(diǎn)都可能成為L(zhǎng)eader。Google的容器集群管理系統(tǒng)Kubernetes、開(kāi)源PaaS平臺(tái)Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。

etcd的特性

    簡(jiǎn)單: curl可訪問(wèn)的用戶的API(HTTP+JSON)定義明確,面向用戶的API(gRPC)

    安全: 可選的SSL客戶端證書認(rèn)證

    快速: 單實(shí)例每秒 1000 次寫操作

    可靠: 使用Raft保證一致性

Etcd構(gòu)建自身高可用集群主要有三種形式

    1)靜態(tài)發(fā)現(xiàn): 預(yù)先已知 Etcd 集群中有哪些節(jié)點(diǎn),在啟動(dòng)時(shí)直接指定好Etcd的各個(gè)node節(jié)點(diǎn)地址
    2)Etcd動(dòng)態(tài)發(fā)現(xiàn): 通過(guò)已有的Etcd集群作為數(shù)據(jù)交互點(diǎn),然后在擴(kuò)展新的集群時(shí)實(shí)現(xiàn)通過(guò)已有集群進(jìn)行服務(wù)發(fā)現(xiàn)的機(jī)制
    3)DNS動(dòng)態(tài)發(fā)現(xiàn): 通過(guò)DNS查詢方式獲取其他節(jié)點(diǎn)地址信息

本次搭建的基礎(chǔ)環(huán)境

底層OS:Centos7
docker版本:Docker version 18.06.1-ce
IP:
    服務(wù)器A:192.167.0.168
    服務(wù)器B:192.167.0.170
    服務(wù)器C:192.167.0.172
首先在各個(gè)服務(wù)器上下載最新的etcd鏡像

# docker pull quay.io/coreos/etcd

本人因機(jī)器有限,在一臺(tái)機(jī)器配置了3個(gè)容器,在機(jī)器上創(chuàng)建了子網(wǎng)絡(luò),三臺(tái)容器在一個(gè)網(wǎng)絡(luò)里

# docker network create --subnet=192.167.0.0/16 etcdnet 

接下來(lái)我采用了兩種方式來(lái)創(chuàng)建集群:1、將三個(gè)服務(wù)器挨個(gè)添加進(jìn)集群;2、將三個(gè)服務(wù)器統(tǒng)一添加進(jìn)集群。以下命令標(biāo)注A的代表在A機(jī)器上執(zhí)行,同理B、C。

1、將服務(wù)器挨個(gè)添加進(jìn)集群

  A  在 容器/服務(wù)器 A上運(yùn)行一個(gè)ETCD實(shí)例,取名為autumn-client0,注意其狀態(tài)為new,“-initial-cluster”中只有自己的IP

# docker run -d -p 2379:2379 -p 2380:2380 --net etcdnet --ip 192.167.0.168 --name etcd0 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client0 -advertise-client-urls http://192.167.0.168:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.168:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380" -initial-cluster-state new

參數(shù)說(shuō)明

—data-dir 指定節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)目錄,這些數(shù)據(jù)包括節(jié)點(diǎn)ID,集群ID,集群初始化配置,Snapshot文件,若未指定—wal-dir,還會(huì)存儲(chǔ)WAL文件;
—wal-dir 指定節(jié)點(diǎn)的was文件的存儲(chǔ)目錄,若指定了該參數(shù),wal文件會(huì)和其他數(shù)據(jù)文件分開(kāi)存儲(chǔ)。
—name 節(jié)點(diǎn)名稱
—initial-advertise-peer-urls 告知集群其他節(jié)點(diǎn)url.
— listen-peer-urls 監(jiān)聽(tīng)URL,用于與其他節(jié)點(diǎn)通訊
— advertise-client-urls 告知客戶端url, 也就是服務(wù)的url
— initial-cluster-token 集群的ID
— initial-cluster 集群中所有節(jié)點(diǎn)

配置文件說(shuō)明,例如

# [member]
# 節(jié)點(diǎn)名稱
ETCD_NAME=node1
# 數(shù)據(jù)存放位置
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
#ETCD_WAL_DIR=""
#ETCD_SNAPSHOT_COUNT="10000"
#ETCD_HEARTBEAT_INTERVAL="100"
#ETCD_ELECTION_TIMEOUT="1000"
# 監(jiān)聽(tīng)其他 Etcd 實(shí)例的地址
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
# 監(jiān)聽(tīng)客戶端地址
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
#ETCD_MAX_SNAPSHOTS="5"
#ETCD_MAX_WALS="5"
#ETCD_CORS=""
#
#[cluster]
# 通知其他 Etcd 實(shí)例地址
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
# 初始化集群內(nèi)節(jié)點(diǎn)地址
ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380,etcd2=http://etcd2:2380"
# 初始化集群狀態(tài),new 表示新建
ETCD_INITIAL_CLUSTER_STATE="new"
# 初始化集群 token
ETCD_INITIAL_CLUSTER_TOKEN="mritd-etcd-cluster"
# 通知 客戶端地址
ETCD_ADVERTISE_CLIENT_URLS=http://node1:2379,http://node1:4001

  A  在服務(wù)器A的ETCD服務(wù)上,通過(guò)調(diào)用API添加一個(gè)新的節(jié)點(diǎn):192.167.0.170

# curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.170:2480"]}'
  

  B  在容器/服務(wù)器B上運(yùn)行一個(gè)ETCD實(shí)例,取名為autumn-client1,注意其狀態(tài)為existing,“-initial-cluster”中有前一個(gè)IP及自己的IP

# docker run -d -p 2479:2479 -p 2480:2480 --name etcd1 quay.io/coreos/etcd /usr/local/bin/etcd --name autumen-client1 -advertise-client-urls http://192.167.0.170:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.170:2380 -listen-peer-urls http://0.0.0.0:2480 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480" -initial-cluster-state existing
  

  A  在服務(wù)器A的ETCD服務(wù)上,通過(guò)調(diào)用API添加一個(gè)新的節(jié)點(diǎn):192.168.7.172

# curl http://127.0.0.1:2379/v2/members -XPOST -H "Content-Type: application/json" -d '{"peerURLs": ["http://192.167.0.172:2580"]}'
  

  C 在服務(wù)器C上運(yùn)行一個(gè)ETCD實(shí)例,取名為autumn-client2,注意其狀態(tài)為existing,“-initial-cluster”中有之前所有節(jié)點(diǎn)的IP及自己的IP

# docker run -d -p 2579:2579 -p 2580:2580 --name etcd quay.io/coreos/etcd -name autumn-client2 -advertise-client-urls http://192.167.0.172:2579 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.172:2580 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster "autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580" -initial-cluster-state existing

2、將服務(wù)器統(tǒng)一添加進(jìn)集群

(“-initial-cluster”中包含所有節(jié)點(diǎn)的IP,狀態(tài)均為new)

   A上執(zhí)行

# docker run -d -p 2379:2379 -p 2380:2380 --restart=always --net etcdnet --ip 192.167.0.168 --name etcd0 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client0 -advertise-client-urls http://192.167.0.168:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http://192.167.0.168:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new
  

  B上執(zhí)行

# docker run -d -p 2479:2479 -p 2480:2480 --restart=always --net etcdnet --ip 192.167.0.170  --name etcd1 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client1 -advertise-client-urls http://192.167.0.170:2479 -listen-client-urls http://0.0.0.0:2479 -initial-advertise-peer-urls http://192.167.0.170:2480 -listen-peer-urls http://0.0.0.0:2480 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new
  

  C上執(zhí)行

# docker run -d -p 2579:2579 -p 2580:2580 --restart=always --net etcdnet --ip 192.167.0.172  --name etcd2 quay.io/coreos/etcd /usr/local/bin/etcd --name autumn-client2 -advertise-client-urls http://192.167.0.172:2579 -listen-client-urls http://0.0.0.0:2579 -initial-advertise-peer-urls http://192.167.0.172:2580 -listen-peer-urls http://0.0.0.0:2580 -initial-cluster-token etcd-cluster -initial-cluster autumn-client0=http://192.167.0.168:2380,autumn-client1=http://192.167.0.170:2480,autumn-client2=http://192.167.0.172:2580 -initial-cluster-state new

集群驗(yàn)證。兩種方法創(chuàng)建的集群可通過(guò)以下方式進(jìn)行驗(yàn)證

  1、驗(yàn)證集群members。在集群中的每臺(tái)機(jī)器上查看members,得出的結(jié)果應(yīng)該是相同的

[root@localhost ~]# curl -L http://127.0.0.1:2379/v2/members
{"members":[{"id":"1a661f2b9997ba39","name":"autumn-client0","peerURLs":["http://192.167.0.168:2380"],"clientURLs":["http://192.168.7.168:2379"]},{"id":"4932c8ea462e079c","name":"autumn-client2","peerURLs":["http://192.167.0.172:2580"],"clientURLs":["http://192.167.0.172:2579"]},{"id":"c1dbdde07e61741e","name":"autumn-client1","peerURLs":["http://192.167.0.170:2480"],"clientURLs":[http://192.167.0.170:2479]}]}

  2、某臺(tái)機(jī)器上添加數(shù)據(jù),其他機(jī)器上查看數(shù)據(jù),得出的結(jié)果應(yīng)該是相同的
  A上執(zhí)行

[root@localhost ~]# curl -L http://127.0.0.1:2379/v2/keys/message -XPUT -d value="Hello autumn"
{"action":"set","node":{"key":"/message","value":"Hello autumn","modifiedIndex":13,"createdIndex":13},"prevNode":{"key":"/message","value":"Hello world1","modifiedIndex":11,"createdIndex":11}}
  

  B、C上執(zhí)行

[root@localhost ~]#  curl -L http://127.0.0.1:2379/v2/keys/message
{"action":"get","node":{"key":"/message","value":"Hello autumn","modifiedIndex":13,"createdIndex":13}}

etcd api接口

  基本操作api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/api.md
 
  集群配置api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/members_api.md
 
  鑒權(quán)認(rèn)證api: https://github.com/coreos/etcd/blob/6acb3d67fbe131b3b2d5d010e00ec80182be4628/Documentation/v2/auth_api.md
 
  配置項(xiàng):https://github.com/coreos/etcd/blob/master/Documentation/op-guide/configuration.md
  
  https://coreos.com/etcd/docs/latest/runtime-configuration.html
  https://coreos.com/etcd/docs/latest/clustering.html
  https://coreos.com/etcd/docs/latest/runtime-configuration.html
  https://coreos.com/etcd/docs/latest/
  https://coreos.com/etcd/docs/latest/admin_guide.html#disaster-recovery
  采用標(biāo)準(zhǔn)的restful 接口,支持http 和 https 兩種協(xié)議。

服務(wù)注冊(cè)與發(fā)現(xiàn)


傳統(tǒng)的服務(wù)調(diào)用一般通過(guò)配置文件讀取ip進(jìn)行調(diào)用,這里有諸多限制,如不靈活,無(wú)法感知服務(wù)的狀態(tài),實(shí)現(xiàn)服務(wù)調(diào)用負(fù)載均衡復(fù)雜等缺點(diǎn),而引入etcd后,問(wèn)題將大大化簡(jiǎn),這里劃分為幾個(gè)步驟

服務(wù)啟動(dòng)后向etcd注冊(cè),并上報(bào)自己的監(jiān)聽(tīng)的端口以及當(dāng)前的權(quán)重因子等信息,且對(duì)該信息設(shè)置ttl值。

服務(wù)在ttl的時(shí)間內(nèi)周期性上報(bào)權(quán)重因子等信息。

client端調(diào)用服務(wù)時(shí)向etcd獲取信息,進(jìn)行調(diào)用,同時(shí)監(jiān)聽(tīng)該服務(wù)是否變化(通過(guò)watch方法實(shí)現(xiàn))。
當(dāng)新增服務(wù)時(shí)watch方法監(jiān)聽(tīng)到變化,將服務(wù)加入代用列表,當(dāng)服務(wù)掛掉時(shí)ttl失效,client端檢測(cè)到變化,將服務(wù)踢出調(diào)用列表,從而實(shí)現(xiàn)服務(wù)的動(dòng)態(tài)擴(kuò)展。

另一方面,client端通過(guò)每次變化獲取到的權(quán)重因子來(lái)進(jìn)行client端的加權(quán)調(diào)用策略,從而保證后端服務(wù)的負(fù)載均衡。
 

以上就是Docker微服務(wù)的ETCD集群搭建教程詳解的詳細(xì)內(nèi)容,更多關(guān)于Docker微服務(wù)ETCD集群搭建的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程

    用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程

    這篇文章主要介紹了如何用docker一鍵部署前后端分離項(xiàng)目的詳細(xì)流程,通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • docker?run容器運(yùn)行的方法實(shí)現(xiàn)

    docker?run容器運(yùn)行的方法實(shí)現(xiàn)

    本文主要介紹了docker?run容器運(yùn)行的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • docker修改未啟動(dòng)容器的配置信息操作

    docker修改未啟動(dòng)容器的配置信息操作

    這篇文章主要介紹了docker修改未啟動(dòng)容器的配置信息操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Centos 7中Docker私有倉(cāng)庫(kù)的搭建方法

    Centos 7中Docker私有倉(cāng)庫(kù)的搭建方法

    本篇文章主要介紹了Centos 7中Docker私有倉(cāng)庫(kù)的搭建方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)的圖文教程詳解

    Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)的圖文教程詳解

    這篇文章主要介紹了Docker開(kāi)啟遠(yuǎn)程安全訪問(wèn)的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Docker使用Link在容器之間建立連接

    Docker使用Link在容器之間建立連接

    這篇文章主要介紹了Docker使用Link在容器之間建立連接的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • docker cgroup 資源監(jiān)控的詳解

    docker cgroup 資源監(jiān)控的詳解

    這篇文章主要介紹了docker cgroup 資源監(jiān)控的詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Docker 教程之基本概念(鏡像,容器,倉(cāng)庫(kù))詳解

    Docker 教程之基本概念(鏡像,容器,倉(cāng)庫(kù))詳解

    這篇文章主要介紹了Docker 教程之基本概念(鏡像,容器,倉(cāng)庫(kù))詳解的相關(guān)資料,這里對(duì)Docker 的基本知識(shí)做一個(gè)介紹,需要的朋友可以參考下
    2016-12-12
  • Idea通過(guò)docker compose?發(fā)布項(xiàng)目的過(guò)程

    Idea通過(guò)docker compose?發(fā)布項(xiàng)目的過(guò)程

    這篇文章主要介紹了Idea結(jié)合docker-compose發(fā)布項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 使用docker+devpi搭建本地pypi源的方法

    使用docker+devpi搭建本地pypi源的方法

    這篇文章主要介紹了使用docker+devpi搭建本地pypi源的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04

最新評(píng)論