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:2380, http://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:2379, http://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