Bootstrap

ETCD配置文件详解

配置etcd 有三种方式 :

etcd可通过配置文件、各种命令行标志环境变量进行配置。

一个可复用的配置文件是一个YAML文件,其中包含下面描述的一个或多个命令行标志的名称和值。为了使用这个文件,需要将文件路径作为值指定给--config-file标志。示例配置文件可以用作创建新配置文件的起点,根据需要进行调整。

命令行上设置的选项会覆盖环境变量中的设置。如果提供了配置文件,则其他命令行标志和环境变量将被忽略。例如,etcd --config-file etcd.conf.yml.sample --data-dir /tmp会忽略--data-dir标志。

标志对应的环境变量格式为ETCD_MY_FLAG,这适用于所有标志。

etcd的官方端口是2379用于客户端请求2380用于集群成员(peers)通信。etcd端口可以设置为接受TLS流量、非TLS流量或同时接受TLS和非TLS流量。

要在Linux上使用自定义设置在启动时自动启动etcd,强烈建议使用systemd单元。

成员标志

--name


此成员的易读名称。
默认值:“default”
环境变量:ETCD_NAME
此值被引用为在--initial-cluster标志中列出的此节点自己的条目(例如,default=http://localhost:2380) 如果使用静态引导,则需要与标志中使用的键匹配。在使用发现时,每个成员都必须有唯一的名称。主机名或机器ID可以是不错的选择。

--data-dir


数据目录的路径。
默认值:“${name}.etcd”
环境变量:ETCD_DATA_DIR

--wal-dir


专用WAL目录的路径。如果设置了此标志,etcd会将WAL文件写入walDir而不是dataDir。这允许使用专用磁盘,并有助于避免日志记录和其他IO操作之间的IO竞争。
默认值:""
环境变量:ETCD_WAL_DIR

--snapshot-count


触发磁盘快照的已提交事务数量。
默认值:“100000”
环境变量:ETCD_SNAPSHOT_COUNT

--heartbeat-interval


心跳间隔的时间(以毫秒为单位)。
默认值:“100”
环境变量:ETCD_HEARTBEAT_INTERVAL

--election-timeout


选举超时的时间(以毫秒为单位)。详细信息请参阅Documentation/tuning.md。
默认值:“1000”
环境变量:ETCD_ELECTION_TIMEOUT

--initial-election-tick-advance


是否在启动时快速前进初始选举滴答以加快选举。当它为true时,本地成员会快速前进选举滴答以加速“初始”领导者选举触发。这有利于较大的选举滴答的情况。禁用此功能会减慢跨数据中心部署的初始引导过程。通过以初始引导速度变慢为代价配置此标志来做出自己的权衡。
默认值:true
环境变量:ETCD_INITIAL_ELECTION_TICK_ADVANCE

--listen-peer-urls


用于集群成员流量的监听URL列表。此标志告诉etcd在指定的scheme://IP:port组合上接受来自其对等方的传入请求。方案可以是http或https。另外,对于unix套接字,可以使用unix://<file-path>或unixs://<file-path>。如果指定0.0.0.0作为IP,etcd将在所有接口上的给定端口上监听。如果同时提供了IP地址和端口,etcd将在给定的端口和接口上监听。可以使用多个URL来指定要监听的多个地址和端口。etcd将响应来自任何列出地址和端口的请求。


默认值:“http://localhost:2380”

环境变量:ETCD_LISTEN_PEER_URLS
示例:“http://10.0.0.1:2380”
无效示例:“http://example.com:2380”(域名对于绑定无效)

--listen-client-urls


用于客户端流量的监听URL列表。此标志告诉etcd在指定的scheme://IP:port组合上接受来自客户端的传入请求。 Scheme可以是http或https。另外,对于unix套接字,可以使用unix://<file-path>或unixs://<file-path>。如果指定0.0.0.0作为IP,etcd将在所有接口上的给定端口上监听。如果同时提供了IP地址和端口,etcd将在给定的端口和接口上监听。可以使用多个URL来指定要监听的多个地址和端口。etcd将响应来自任何列出地址和端口的请求。
默认值:“http://localhost:2379”
环境变量:ETCD_LISTEN_CLIENT_URLS
示例:“http://10.0.0.1:2379”
无效示例:“http://example.com:2379”(域名对于绑定无效)

--max-snapshots


要保留的快照文件的最大数量(0表示无限制)
默认值:5
环境变量:ETCD_MAX_SNAPSHOTS
对于Windows用户,默认值是无限制,建议手动清理到5个(或出于安全考虑的其他偏好)。

--max-wals


要保留的WAL文件的最大数量(0表示无限制)
默认值:5
环境变量:ETCD_MAX_WALS
对于Windows用户,默认值是无限制,建议手动清理到5个(或出于安全考虑的其他偏好)。

--cors


CORS(跨域资源共享)的白名单来源,用逗号分隔。
默认值:""
环境变量:ETCD_CORS

--quota-backend-bytes


当后端大小超过给定配额时发出警报(0默认为低空间配额)。
默认值:0
环境变量:ETCD_QUOTA_BACKEND_BYTES

--backend-batch-limit


BackendBatchLimit是在提交后端事务之前的最大操作数。
默认值:0
环境变量:ETCD_BACKEND_BATCH_LIMIT

--backend-batch-interval


BackendBatchInterval是在提交后端事务之前的最大时间。
默认值:0
环境变量:ETCD_BACKEND_BATCH_INTERVAL

--max-txn-ops


事务中允许的最大操作数。
默认值:128
环境变量:ETCD_MAX_TXN_OPS

--max-request-bytes


服务器将接受的客户端请求的最大字节大小。
默认值:1572864
环境变量:ETCD_MAX_REQUEST_BYTES

--grpc-keepalive-min-time


客户端在ping服务器之前应等待的最小持续时间间隔。
默认值:5s
环境变量:ETCD_GRPC_KEEPALIVE_MIN_TIME

--grpc-keepalive-interval


服务器到客户端ping的频率持续时间,以检查连接是否处于活动状态(0表示禁用)。
默认值:2h
环境变量:ETCD_GRPC_KEEPALIVE_INTERVAL

--grpc-keepalive-timeout


在关闭无响应连接之前要等待的额外持续时间(0表示禁用)。
默认值:20s
环境变量:ETCD_GRPC_KEEPALIVE_TIMEOUT

集群标志(Flags)说明

--initial-advertise-peer-urls--initial-cluster--initial-cluster-state--initial-cluster-token标志用于引导(静态引导、发现服务引导或运行时重新配置)新成员,并在重启现有成员时被忽略。

--discovery 前缀标志:在使用发现服务时,需要设置--discovery前缀标志。

--initial-advertise-peer-urls


此成员要向集群其余部分通告的对等URL列表。这些地址用于在集群中传递etcd数据。至少有一个地址必须对所有集群成员可路由。这些URL可以包含域名。
默认值:“http://localhost:2380”
环境变量:ETCD_INITIAL_ADVERTISE_PEER_URLS
示例:“http://example.com:2380http://10.0.0.1:2380”

--initial-cluster

  • 引导时的初始集群配置。
  • 默认值:“default=http://localhost:2380”
  • 环境变量:ETCD_INITIAL_CLUSTER
  • 键是每个提供的节点的--name标志的值。默认使用default作为键,因为这是--name标志的默认值。

--initial-cluster-state


初始集群状态(“new”或“existing”)。在初始静态或DNS引导期间,为所有在场成员设置为“new”。如果此选项设置为“existing”,etcd将尝试加入现有集群。如果设置了错误的值,etcd将尝试启动但会安全失败。
默认值:“new”
环境变量:ETCD_INITIAL_CLUSTER_STATE

--initial-cluster-token


引导时etcd集群的初始集群令牌。
默认值:“etcd-cluster”
环境变量:ETCD_INITIAL_CLUSTER_TOKEN

--advertise-client-urls


此成员要向集群其余部分通告的客户端URL列表。这些URL可以包含域名。
默认值:“http://localhost:2379”
环境变量:ETCD_ADVERTISE_CLIENT_URLS
示例:“http://example.com:2379http://10.0.0.1:2379”
注意:如果从集群成员通告如http://localhost:2379这样的URL,并且正在使用etcd的代理功能,请小心。这会导致循环,因为代理会将请求转发给自己,直到其资源(内存、文件描述符)最终被耗尽。

--discovery


用于引导集群的发现URL。
默认值:""
环境变量:ETCD_DISCOVERY

--discovery-srv


用于引导集群的DNS srv域。
默认值:""
环境变量:ETCD_DISCOVERY_SRV

--discovery-fallback


发现服务失败时的预期行为(“exit”或“proxy”)。“proxy”仅支持v2 API。
默认值:“proxy”
环境变量:ETCD_DISCOVERY_FALLBACK

--discovery-proxy


用于发现服务流量的HTTP代理。
默认值:""
环境变量:ETCD_DISCOVERY_PROXY

--strict-reconfig-check


拒绝会导致失去法定人数的重新配置请求。
默认值:true
环境变量:ETCD_STRICT_RECONFIG_CHECK

--auto-compaction-retention


mvcc键值存储的自动压缩保留时间(小时)。0表示禁用自动压缩。
默认值:0
环境变量:ETCD_AUTO_COMPACTION_RETENTION

--auto-compaction-mode


解释“auto-compaction-retention”之一:“periodic”、“revision”。“periodic”表示基于持续时间的保留,如果未提供时间单位,则默认为小时(例如“5m”)。“revision”表示基于修订号的保留。
默认值:periodic
环境变量:ETCD_AUTO_COMPACTION_MODE

--enable-v2


接受etcd V2客户端请求。
默认值:true
环境变量:ETCD_ENABLE_V2

代理标志(Proxy Flags)

--proxy prefix 标志配置etcd以代理模式运行。“proxy”仅支持v2 API。

--proxy


代理模式设置(“off”、“readonly”或“on”)。
默认:“off”
环境变量:ETCD_PROXY

--proxy-failure-wait


在重新考虑代理请求之前,端点将在失败状态下保持的时间(以毫秒为单位)。
默认:5000
环境变量:ETCD_PROXY_FAILURE_WAIT

--proxy-refresh-interval


端点刷新间隔的时间(以毫秒为单位)。
默认:30000
环境变量:ETCD_PROXY_REFRESH_INTERVAL

--proxy-dial-timeout


拨号超时的时间(以毫秒为单位),或设置为0以禁用超时。
默认:1000
环境变量:ETCD_PROXY_DIAL_TIMEOUT

--proxy-write-timeout


写入超时的时间(以毫秒为单位),或设置为0以禁用超时。
默认:5000
环境变量:ETCD_PROXY_WRITE_TIMEOUT

--proxy-read-timeout


读取超时的时间(以毫秒为单位),或设置为0以禁用超时。
如果使用监视功能,请不要更改此值,因为监视功能使用长轮询请求。
默认:0
环境变量:ETCD_PROXY_READ_TIMEOUT

安全标志(Security Flags)

这些安全标志有助于构建安全的etcd集群。

(注意:部分安全标志已被弃用,如--ca-file和--peer-ca-file,建议使用--trusted-ca-file和--peer-trusted-ca-file等替代选项。)

日志标志(Logging Flags)

--logger


从v3.4版本开始可用
指定使用结构化日志的“zap”或“capnslog”。
默认:capnslog
环境变量:ETCD_LOGGER

--log-outputs


指定“stdout”或“stderr”以跳过systemd下的journald日志记录,或列出逗号分隔的输出目标。
默认:default(在zap日志迁移期间,v3.4版本默认使用“stderr”配置)
环境变量:ETCD_LOG_OUTPUTS

--debug


将所有子包的默认日志级别降低为DEBUG。
默认:false(所有包为INFO)
环境变量:ETCD_DEBUG

--log-package-levels


将etcd的各个子包设置为特定的日志级别。例如:etcdserver=WARNING,security=DEBUG
默认:""(所有包为INFO)
环境变量:ETCD_LOG_PACKAGE_LEVELS

不安全标志(Unsafe Flags)

在使用不安全标志时请务必小心,因为它会破坏共识协议所提供的保证。例如,如果集群中的其他成员仍然存活,它可能会导致panic。在使用这些标志时,请遵循相关说明。

--force-new-cluster


强制创建一个新的单成员集群。它通过提交配置更改来强制删除集群中的所有现有成员并添加自己,但强烈不建议这样做。请查阅灾难恢复文档以了解首选的v3恢复程序。
默认:false
环境变量:ETCD_FORCE_NEW_CLUSTER

其他标志(Miscellaneous Flags)

--version


打印版本并退出。
默认:false

--config-file


从文件中加载服务器配置。
默认:""
示例:示例配置文件
环境变量:ETCD_CONFIG_FILE

性能分析标志(Profiling Flags)

--enable-pprof


通过HTTP服务器启用运行时性能分析数据。地址位于客户端URL + “/debug/pprof/”。
默认:false
环境变量:ETCD_ENABLE_PPROF

--metrics


设置导出指标的详细程度,指定’extensive’以包含直方图指标。
默认:basic
环境变量:ETCD_METRICS

--listen-metrics-urls


要监听的额外URL列表,这些URL将对/metrics和/health端点做出响应。
默认:""
环境变量:ETCD_LISTEN_METRICS_URLS

认证标志(Auth Flags)

--auth-token


指定令牌类型和令牌特定选项,特别是针对JWT。其格式为“type,var1=val1,var2=val2,…”。可能的类型为“simple”或“jwt”。可能的变量包括用于指定jwt签名方法的“sign-method”(其可能值为“ES256”、“ES384”、“ES512”、“HS256”、“HS384”、“HS512”、“RS256”、“RS384”、“RS512”、“PS256”、“PS384”或“PS512”)、用于指定验证jwt的公钥路径的“pub-key”、用于指定签名jwt的私钥路径的“priv-key”以及用于指定jwt令牌TTL的“ttl”。
对于非对称算法(“RS”、“PS”、“ES”),公钥是可选的,因为私钥包含足够的信息来签名和验证令牌。
JWT的示例选项:“--auth-token jwt,pub-key=app.rsa.pub,priv-key=app.rsa,sign-method=RS512,ttl=10m”
默认:“simple”
环境变量:ETCD_AUTH_TOKEN

--bcrypt-cost


指定用于哈希认证密码的bcrypt算法的成本/强度。有效值在4到31之间。
默认:10
(注意:环境变量不支持此标志)

实验性标志(Experimental Flags)

--experimental-backend-bbolt-freelist-type


etcd后端(bboltdb)使用的freelist类型(支持array和map类型)。
默认:array
环境变量:ETCD_EXPERIMENTAL_BACKEND_BBOLT_FREELIST_TYPE

--experimental-corrupt-check-time


集群腐败检查通过之间的时间间隔。
默认:0s
环境变量:ETCD_EXPERIMENTAL_CORRUPT_CHECK_TIME

参考 

Configuration flags | etcd

;