go-micro v2运开实践-框架篇(2)安装etcd集群,部署注册中心

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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!