etcd集群安装

在微服务架构中,注册中心作为基础设施,承担着服务注册以及服务发现的重要功能。etcd作为一个分布式一致性的KV存储系统,按照etcd官网给出的性能测试, 在2CPU,1.8G内存,SSD磁盘这样的配置下,单节点的写性能可以达到16K QPS, 而先写后读也能达到12K QPS,这个性能相当可观。而在go-micro中etcd作为注册中心默认驱动,得益于其灵活的拓展机制,要在go-micro中使用etcd相对简单,下面我们使用docker-compose部署一个etcd集群。

编写docker-compose

创建yaml和配置文件

  1. touch docker-compose.yaml
  2. touch .env

为etcd持久化提供挂载目录

  1. mkdir -p data/etcd1
  2. mkdir -p data/etcd2
  3. mkdir -p data/etcd3

.env添加通用参数

  1. # 设置时区
  2. TZ=Asia/Shanghai
  3. # 设置etcd镜像版本
  4. ETCD_VERSION=3.5
  5. # 设置e3w镜像版本
  6. E3W_VERSION=latest

编写docker-compose.yaml

:::info 这里我们主要通过 environment 配置项设置 etcd启动参数来定义集群配置,在启动过程中需要确保三个 etcd节点可以相互连接并通信。 :::

  1. # docker-compose.yml
  2. version: '3.3'
  3. services:
  4. etcd1:
  5. image: bitnami/etcd:${ETCD_VERSION}
  6. environment:
  7. TZ: ${TZ}
  8. ALLOW_NONE_AUTHENTICATION: "yes"
  9. ETCD_NAME: "etcd1"
  10. ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd1:2380"
  11. ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
  12. ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
  13. ETCD_ADVERTISE_CLIENT_URLS: "http://etcd1:2379"
  14. ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
  15. ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
  16. ETCD_INITIAL_CLUSTER_STATE: "new"
  17. volumes:
  18. - ./data/etcd1:/bitnami/etcd
  19. ports:
  20. - 23791:2379
  21. - 23801:2380
  22. networks:
  23. - micro-network
  24. etcd2:
  25. image: bitnami/etcd:${ETCD_VERSION}
  26. environment:
  27. TZ: ${TZ}
  28. ALLOW_NONE_AUTHENTICATION: "yes"
  29. ETCD_NAME: "etcd2"
  30. ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd2:2380"
  31. ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
  32. ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
  33. ETCD_ADVERTISE_CLIENT_URLS: "http://etcd2:2379"
  34. ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
  35. ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
  36. ETCD_INITIAL_CLUSTER_STATE: "new"
  37. volumes:
  38. - ./data/etcd2:/bitnami/etcd
  39. ports:
  40. - 23792:2379
  41. - 23802:2380
  42. networks:
  43. - micro-network
  44. etcd3:
  45. image: bitnami/etcd:${ETCD_VERSION}
  46. environment:
  47. TZ: ${TZ}
  48. ALLOW_NONE_AUTHENTICATION: "yes"
  49. ETCD_NAME: "etcd3"
  50. ETCD_INITIAL_ADVERTISE_PEER_URLS: "http://etcd3:2380"
  51. ETCD_LISTEN_PEER_URLS: "http://0.0.0.0:2380"
  52. ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2379"
  53. ETCD_ADVERTISE_CLIENT_URLS: "http://etcd3:2379"
  54. ETCD_INITIAL_CLUSTER_TOKEN: "etcd-cluster"
  55. ETCD_INITIAL_CLUSTER: "etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380"
  56. ETCD_INITIAL_CLUSTER_STATE: "new"
  57. volumes:
  58. - ./data/etcd3:/bitnami/etcd
  59. ports:
  60. - 23793:2379
  61. - 23803:2380
  62. networks:
  63. - micro-network
  64. networks:
  65. micro-network:
  66. external: true

创建内部通信网络

  1. docker network create micro-network

Docker默认状态下的三个network对象,上述命令默认是bridge:

  • none: 只有一个回环网卡,没有任何的网络通信能力
  • host: 与宿主机共用一块网卡
  • bridge: 利用虚拟路由器进行网络通信

    启动etcd集群

    1. docker-compose up -d
    image.png
    查看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对集群进行管理。

    创建配置文件

    1. mkdir -p conf/e3w
    2. touch 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=

  1. <a name="w4jhx"></a>
  2. #### docker-compose安装e3w
  3. 修改docker-compose.yaml,然后执行`docker-compose up -d e3w`

e3w: image: soyking/e3w:${E3W_VERSION} environment: TZ: ${TZ} ports:

  1. - "8088:8080"
  2. volumes:
  3. - ./conf/e3w/config.ini:/app/conf/config.default.ini
  4. networks:
  5. - micro-network

  1. 访问[http://127.0.0.1:8088](http://127.0.0.1:8088/)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26186945/1650806554128-ef589acd-23b0-4c55-9cb9-57cc267280d9.png#clientId=u730c8cb0-5acf-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=845&id=u5c4982b0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=929&originWidth=1920&originalType=binary&ratio=1&rotation=0&showTitle=false&size=57395&status=done&style=none&taskId=u741ba6ed-9d14-486a-9884-d1fd5c25d76&title=&width=1745.4545076228378)
  2. <a name="sX18g"></a>
  3. ## 安装micro-web
  4. micro-web是由micro工具包提供的微服务web管理界面,可以用来查看、管理、测试所有服务接口。能为我们后续开发工作提供很多便利。
  5. <a name="CVfxj"></a>
  6. #### docker-compose安装micro-web
  7. 修改docker-compose.yaml,然后执行`docker-compose up -d micro-web`

micro-web: container_name: micro-web image: micro/micro:v2.9.3 ports:

  1. - 8082:8082
  2. environment:
  3. MICRO_REGISTRY: "etcd"
  4. MICRO_REGISTRY_ADDRESS: "etcd1:2379,etcd2:2379,etcd3:2379"
  5. command: web
  6. networks:
  7. - micro-network

… ``` 访问http://127.0.0.1:8082
image.png