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.yamltouch .env
为etcd持久化提供挂载目录
mkdir -p data/etcd1mkdir -p data/etcd2mkdir -p data/etcd3
.env添加通用参数
# 设置时区TZ=Asia/Shanghai# 设置etcd镜像版本ETCD_VERSION=3.5# 设置e3w镜像版本E3W_VERSION=latest
编写docker-compose.yaml
:::info 这里我们主要通过 environment 配置项设置 etcd启动参数来定义集群配置,在启动过程中需要确保三个 etcd节点可以相互连接并通信。 :::
# docker-compose.ymlversion: '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/etcdports:- 23791:2379- 23801:2380networks:- micro-networketcd2: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/etcdports:- 23792:2379- 23802:2380networks:- micro-networketcd3: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/etcdports:- 23793:2379- 23803:2380networks:- micro-networknetworks:micro-network:external: true
创建内部通信网络
docker network create micro-network
Docker默认状态下的三个network对象,上述命令默认是bridge:
- none: 只有一个回环网卡,没有任何的网络通信能力
- host: 与宿主机共用一块网卡
- bridge: 利用虚拟路由器进行网络通信
启动etcd集群
docker-compose up -d

查看docker-desktop中etcd集群已成功启动 :::warning 如果重启docker后etcd集群容器无法启动,请删除挂载目录下的data文件夹,或选择不持久化数据
rm -rf data/etcd1/data
rm -rf data/etcd2/data
rm -rf data/etcd3/data :::安装etcdWeb管理工具
etcd并没有像 Consul 的 Web 管理界面,导致我们不能直观地观看集群节点状态和管理数据。所以我们安装一个e3w对集群进行管理。创建配置文件
``` [app]mkdir -p conf/e3wtouch conf/e3w/config.ini
端口号
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=
<a name="w4jhx"></a>#### 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.ininetworks:- micro-network
…
访问[http://127.0.0.1:8088](http://127.0.0.1:8088/)<br /><a name="sX18g"></a>## 安装micro-webmicro-web是由micro工具包提供的微服务web管理界面,可以用来查看、管理、测试所有服务接口。能为我们后续开发工作提供很多便利。<a name="CVfxj"></a>#### 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:8082environment:MICRO_REGISTRY: "etcd"MICRO_REGISTRY_ADDRESS: "etcd1:2379,etcd2:2379,etcd3:2379"command: webnetworks:- micro-network
…
```
访问http://127.0.0.1:8082
