1. Clustering 集群配置

etcd 集群运行时会同时监听2个端口,一个是客户端端口(如:2379)用于给客户端连接,一个是集群成员之间(或伙伴,或 peer)通讯的端口(如:2380)。

etcd 集群配置的参数名称有一定规则,一般 --initial 前缀标记用于静态部署时启动集群,--discovery 前缀标记在使用发现服务的方式启动集群。

1.1. --initial-advertise-peer-urls

  --initial-advertise-peer-urls 'http://localhost:2380'
    List of this member's peer URLs to advertise to the rest of the cluster.
  • 描述: 列出为集群成员之间通信的 URLs 地址
  • 默认: "http://localhost:2380"
  • 环境变量: ETCD_INITIAL_ADVERTISE_PEER_URLS

解释:

列出这个成员在集群中互相通信时自己的 URLs 信息,让其他的成员能够与自己通信,成员之间的关系就是 peer 。

在集群部署时,这里的地址应该是能够跨节点访问的,不能只有1个 localhost 或 127.0.0.1 。可以是机器的网卡 IP 地址,或者是 0.0.0.0 监听所有的 IP。

同时,这个地址信息需要和 --initial-cluster 中的信息一致。

例如:

    - --advertise-client-urls=https://10.100.0.13:2379

1.2. --initial-cluster

  --initial-cluster 'default=http://localhost:2380'
    Initial cluster configuration for bootstrapping.
  • 描述: 集群初始成员配置
  • 默认: "default=http://localhost:2380"
  • 环境变量: ETCD_INITIAL_CLUSTER

描述:

该配置是 etcd 静态部署的核心初始化配置,他说明了当前集群有哪些 URLs (协议://地址:端口)组成。

注意:

这里的 key 是每个提供的节点的 --name 标记的值。 默认为这个 key 使用 default 因为这是 --name 标记的默认值.

例如:

ETCD_INITIAL_CLUSTER="etcd1=https://10.100.0.13:2380,etcd2=https://10.100.0.12:2380,etcd3=https://10.100.0.11:2380"

1.3. --initial-cluster-state

  --initial-cluster-state 'new'
    Initial cluster state ('new' or 'existing').
  • 初始化集群状态('new' 或 'existing')
  • 默认: "new"
  • 环境变量: ETCD_INITIAL_CLUSTER_STATE

解释:

该参数指定初始化集群状态,可以配置为 new 或者 existing

在新建集群时,无论是静态部署或是动态发现部署,所有成员都应该设置为 new 。而且在集群启动后,后续重启服务会忽略该参数。

如果集群在运行过程节点信息发生变化,比如在已有的集群中新加节点时,新节点的配置应该设置为 existing。而且在集群启动后,后续重启服务会忽略该参数。

如果设置为错误的值,etcd 将尝试启动但安全失败。

1.4. --initial-cluster-token

  --initial-cluster-token 'etcd-cluster'
    Initial cluster token for the etcd cluster during bootstrap.
    Specifying this can protect you from unintended cross-cluster interaction when running multiple clusters.
  • 描述:在集群启动期间初始化的 token 值
  • 默认: "etcd-cluster"
  • 环境变量: ETCD_INITIAL_CLUSTER_TOKEN

解释:

每套 etcd 都应该有其唯一的 token 值。在集群启动期间用于 etcd 集群的初始化集群记号 ,主要是为了区分不同的集群。

1.5. --advertise-client-urls

  --advertise-client-urls 'http://localhost:2379'
    List of this member's client URLs to advertise to the public.
    The client URLs advertised should be accessible to machines that talk to etcd cluster. etcd client libraries parse these URLs to connect to the cluster.
  • 描述:要向公众公布的此成员的客户端 URLs 的列表。与 etcd 集群通信的机器可以访问该的客户端 url 。etcd 客户端解析这些 url 以连接到集群。
  • 默认: "http://localhost:2379"
  • 环境变量: ETCD_ADVERTISE_CLIENT_URLS

解释:

列出这个成员的客户端 URLs,客户端(etcdctl/etcd-sdk/api)可以通过该地址访问到 etcd 集群 。与 peer 的 URLs 用于集群内通信不同,这个 URLs 是实际对外提供服务的地址。

注意:

如果来自集群成员的通告 URL 比如 http://localhost:2379 正在使用 etcd 的 proxy 特性。这将导致循环,因为代理将转发请求给它自己直到它的资源(内存,文件描述符)最终耗尽。

1.6. --discovery

  --discovery ''
    Discovery URL used to bootstrap the cluster.
  • 描述:启动集群时动态发现的 URL
  • 默认: none
  • 环境变量: ETCD_DISCOVERY

解释:

etcd 有两类部署方式,其一是已知具体 peer 成员列表的静态部署,另外一种就是不知道 peer 成员列表的动态服务发现部署。而该参数就是应用在动态服务发现部署模式中。

用于动态发现一般有两种方式,基于已有 etcd 集群的的动态发现,或基于 DNS 的域名解析方式的服务发现。该参数就是运用于 基于 etcd 的动态发现来创建新集群。

例如:

--discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

扩展阅读:

etcd 基于 etcd 的发现

1.7. --discovery-fallback

  --discovery-fallback 'proxy'
    Expected behavior ('exit' or 'proxy') when discovery services fails.
    "proxy" supports v2 API only.
  • 描述: 当服务发现失败时期望的行为('exit' or 'proxy')
  • 默认: "proxy"
  • 环境变量: ETCD_DISCOVERY_FALLBACK

解释:

当发现服务失败时的期待行为("exit" 或 "proxy").

"proxy" 仅支持 v2 API.

1.8. --discovery-proxy

  --discovery-proxy ''
    HTTP proxy to use for traffic to discovery service.
  • 描述:用于请求到发现服务的 HTTP 代理。
  • 默认: none
  • 环境变量: ETCD_DISCOVERY_PROXY

1.9. --discovery-srv

  --discovery-srv ''
    DNS srv domain used to bootstrap the cluster.
  • 描述:用于启动集群的 DNS srv 域名。
  • 默认: none
  • 环境变量: ETCD_DISCOVERY_SRV

解释:

etcd 动态发现创建集群两种方式中的一种,这个参数就是使用基于 DNS 域名的方式发现集群 peer 成员。

一般是给一个域名添加多条域名解析结果。

例如:

--discovery-srv example.com 

域名解析

$ dig +noall +answer SRV _etcd-server._tcp.example.com
_etcd-server._tcp.example.com. 300 IN  SRV  0 0 2380 infra0.example.com.
_etcd-server._tcp.example.com. 300 IN  SRV  0 0 2380 infra1.example.com.
_etcd-server._tcp.example.com. 300 IN  SRV  0 0 2380 infra2.example.com.

扩展阅读:

etcd 基于 DNS 发现

1.10. --discovery-srv-name

  --discovery-srv-name ''
    Suffix to the dns srv name queried when bootstrapping.
  • 描述:引导时查询的 dns srv 名称的后缀
  • 默认值: ''
  • 环境变量: ETCD_DISCOVERY_SRV_NAME

解释:

在使用 dns 的动态发现创建集群时 (--discovery-srv) ,用于指定的域名的后缀。

1.11. --strict-reconfig-check

  --strict-reconfig-check 'true'
    Reject reconfiguration requests that would cause quorum loss.
  • 描述:拒绝将导致法定人数丢失的重配置请求。
  • 默认: false
  • 环境变量: ETCD_STRICT_RECONFIG_CHECK

1.12. --pre-vote

  --pre-vote 'false'
    Enable to run an additional Raft election phase.

1.13. --auto-compaction-retention

  --auto-compaction-retention '0'
    Auto compaction retention length. 0 means disable auto compaction.
  • 描述:自动压缩用于 mvcc 键值存储的保持力(注:应该指多版本保存),单位小时。 0 表示关闭自动压缩。
  • 默认: 0
  • 环境变量: ETCD_AUTO_COMPACTION_RETENTION

解释:

对于服务注册等只保存运行时动态信息的场合,建议开启。完全没有理由损失存储空间和效率来保存之前的版本信息。推荐设置为1,每小时压缩一次。

1.14. --auto-compaction-mode

  --auto-compaction-mode 'periodic'
    Interpret 'auto-compaction-retention' one of: periodic|revision. 'periodic' for duration based retention, defaulting to hours if no time unit is provided (e.g. '5m'). 'revision' for revision number based retention.
  • 描述: 进一步解释 auto-compaction-retention 的工作机制 :periodic|revisionperiodic 用于基于持续时间的保留,如果没有提供时间单位,则默认为小时(例如 '5m')。revision 用于基于版本号的保留。
  • 默认: 'periodic'
  • 环境变量: ETCD_AUTO_COMPACTION_MODE

1.15. --enable-v2

  --enable-v2 'false'
    Accept etcd V2 client requests.
  • 描述: 是否接受 etcd V2 版本的请求
  • 默认值: 'false'
  • 环境变量: ETCD_ENABLE_V2

解释:

由于 etcd 的 V3 版本相对 V2 版本有几大的改动,版本之间的 API 已经不能很好的兼容了。V3 版本的 API 可以兼容 V2 版本,但是 V2 版本的无法兼容 V3 版本,这里的参数用于指定在 V3 版本下是否还同意接受 V2 版本的请求,一般情况下为 false 即可。

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2023-10-26 17:23:11

results matching ""

    No results matching ""