etcd叢集安裝
在微服務架構中,註冊中心作為基礎設施,承擔著服務註冊以及服務發現的重要功能。etcd
作為一個分散式一致性的KV儲存系統
,按照etcd
官網給出的效能測試, 在2CPU,1.8G記憶體,SSD磁碟這樣的配置下,單節點的寫效能可以達到16K QPS, 而先寫後讀也能達到12K QPS,這個效能相當可觀。而在go-micro中etcd
作為註冊中心預設驅動,得益於其靈活的擴充機制,要在go-micro中使用etcd相對簡單,下面我們使用docker-compose
部署一個etcd叢集。
編寫docker-compose
建立yaml和配置檔案
touch docker-compose.yaml
touch .env
為etcd持久化提供掛載目錄
mkdir -p data/etcd1
mkdir -p data/etcd2
mkdir -p data/etcd3
.env新增通用引數
# 設定時區
TZ=Asia/Shanghai
# 設定etcd映象版本
ETCD_VERSION=3.5
# 設定e3w映象版本
E3W_VERSION=latest
編寫docker-compose.yaml
這裡我們主要透過 environment 配置項設定 etcd啟動引數來定義叢集配置,在啟動過程中需要確保三個 etcd節點可以相互連線並通訊。
version: '3.3'
services:
etcd1:
image: bitnami/etcd:${ETCD_VERSION}
environment:
TZ: ${TZ}
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_NAME: "etcd1"
ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd1:2380"
ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS: "http://etcd1:2379"
ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
ETCD_INITIAL_CLUSTER_STATE: "new"
volumes:
- ./data/etcd1:/bitnami/etcd
ports:
- 23791:2379
- 23801:2380
networks:
- micro-network
etcd2:
image: bitnami/etcd:${ETCD_VERSION}
environment:
TZ: ${TZ}
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_NAME: "etcd2"
ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd2:2380"
ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS: "http://etcd2:2379"
ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
ETCD_INITIAL_CLUSTER_STATE: "new"
volumes:
- ./data/etcd2:/bitnami/etcd
ports:
- 23792:2379
- 23802:2380
networks:
- micro-network
etcd3:
image: bitnami/etcd:${ETCD_VERSION}
environment:
TZ: ${TZ}
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_NAME: "etcd3"
ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd3:2380"
ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS: "http://etcd3:2379"
ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
ETCD_INITIAL_CLUSTER_STATE: "new"
volumes:
- ./data/etcd3:/bitnami/etcd
ports:
- 23793:2379
- 23803:2380
networks:
- micro-network
networks:
micro-network:
external: true
建立內部通訊網路
docker network create micro-network
Docker預設狀態下的三個network物件,上述命令預設是bridge:
- none: 只有一個迴環網路卡,沒有任何的網路通訊能力
- host: 與宿主機共用一塊網路卡
- bridge: 利用虛擬路由器進行網路通訊
啟動etcd叢集
docker-compose up -d
檢視docker-desktop中etcd叢集已成功啟動
如果重啟docker後etcd叢集容器無法啟動,請刪除掛載目錄下的data資料夾,或選擇不持久化資料
rm -rf data/etcd1/data
rm -rf data/etcd2/data
rm -rf data/etcd3/data
安裝etcdWeb管理工具
etcd並沒有像 Consul 的 Web 管理介面,導致我們不能直觀地觀看叢集節點狀態和管理資料。所以我們安裝一個e3w對叢集進行管理。
建立配置檔案
mkdir -p conf/e3w
touch conf/e3w/config.ini
修改conf/e3w/config.ini
[app]
# 埠號
port=8080
# 是否需要登入認證
auth=false
[etcd]
# 根key
root_key=micro-service
# 根資料夾
dir_value=
# 叢集地址
addr=etcd1:2379,etcd2:2379,etcd3:2379
# 使用者名稱
username=
# 密碼
password=
cert_file=
key_file=
ca_file=
docker-compose安裝e3w
修改docker-compose.yaml,然後執行docker-compose up -d e3w
...
e3w:
image: soyking/e3w:${E3W_VERSION}
environment:
TZ: ${TZ}
ports:
- "8088:8080"
volumes:
- ./conf/e3w/config.ini:/app/conf/config.default.ini
networks:
- micro-network
...
安裝micro-web
micro-web是由micro工具包提供的微服務web管理介面,可以用來檢視、管理、測試所有服務介面。能為我們後續開發工作提供很多便利。
docker-compose安裝micro-web
修改docker-compose.yaml,然後執行docker-compose up -d micro-web
...
micro-web:
container_name: micro-web
image: micro/micro:v2.9.3
ports:
- 8082:8082
environment:
MICRO_REGISTRY: "etcd"
MICRO_REGISTRY_ADDRESS: "etcd1:2379,etcd2:2379,etcd3:2379"
command: web
networks:
- micro-network
...
本作品採用《CC 協議》,轉載必須註明作者和本文連結