中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Docker自發現注冊服務基礎etcd的部署及使用方法

發布時間:2021-10-12 09:26:36 來源:億速云 閱讀:518 作者:柒染 欄目:云計算

這期內容當中小編將會給大家帶來有關Docker自發現注冊服務基礎etcd的部署及使用方法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1. 背景

自發現服務基礎需要一個高可用鍵值存儲系統, 很容易聯想到redis, memcached等KV內存數據庫, 但是我最后選擇了etcd, 主要是因為他天生就是為集群化而設計的, 并且生來就是用作conf的節點數據同步.

1) etcd為coreos的一個基礎部件, 也是用于保存配置信息, 在這里我們主要討論非coreos系統的etcd部署及使用

2) 目前etcd最新版本為: v2.3.6, 測試版為: v3.x, 我們基于v2版本進行演練

2. 注意

我的所有docker鏡像都是基于alpine 3.x版本進行構建, 如果需要其他版本請自行修改

3. 準備

1) etcd官方地址

https://github.com/coreos/etcd

2) Linux最新版本下載地址

https://github.com/coreos/etcd/releases/download/v2.3.6/etcd-v2.3.6-linux-amd64.tar.gz

3) 構建基于alpine的etcd docker鏡像

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

4. 概念

1) 靜態配置和自發現

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, 所以我要保證內存的使用情況


2) etcd節點

由于etcd采用Raft算法, 因此在做決策時需要多數節點的投票, 所以一般部署為奇數節點: 3, 5, 7

3) etcd四個主要概念

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不推薦使用, 已基本廢棄, 主要用于兼容老服務)

5. 使用

1) 創建一個discovery服務配置信息

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, 因為語義不明, 最好起一個自己能記住的名稱, 方便以后辨識

2) 在3個節點服務器上分別啟動etcd服務

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的部署及使用方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

石景山区| 石首市| 马关县| 石楼县| 肥西县| 合肥市| 泽普县| 吉隆县| 天长市| 永昌县| 鹿邑县| 和静县| 涿鹿县| 河南省| 盐边县| 阜康市| 芜湖县| 安化县| 重庆市| 谢通门县| 安溪县| 时尚| 玉树县| 平武县| 永平县| 长宁县| 万年县| 元氏县| 佛坪县| 中山市| 安新县| 水城县| 江山市| 资中县| 突泉县| 吉首市| 灵丘县| 社旗县| 普兰县| 宁武县| 平舆县|