go-micro v2運開實踐-框架篇(2)安裝etcd叢集,部署註冊中心

huangyanming發表於2022-04-25

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
...

訪問http://127.0.0.1:8088

安裝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

  ...

訪問http://127.0.0.1:8082

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章