etcd配置:文件、标签、环境变量
etcd可以通过配置文件、各种命令行标志和环境变量进行配置。
要在Linux中启动时使用自定义设置自动启动etcd,强烈建议使用systemd单元。
可多次使用的配置文件
可重用的配置文件是由一个或多个命令行标志的名称和值组成的YAML文件,如下所述。要使用此文件,请将文件路径指定为--config-file标签,或者ETCD_CONFIG_FILE环境变量值。示例配置文件可以用作根据需要创建新配置文件的初始文件。
示例配置文件:https://raw.githubusercontent.com/etcd-io/etcd/release-3.4/etcd.conf.yml.sample
配置文件、命令行标签、环境变量生效优先级
命令行上设置的选项优先于环境中设置的选项。如果提供了配置文件,则会忽略其他命令行标志和环境变量。
例如:etcd --config-file etcd.conf.yml.sample --data-dir/tmp 将忽略--data-dir标志。
环境变量的格式和标签的格式的关系
标签:--my-flag
对应环境变量:ETCD_MY_FLAG
对于所有的标签都是这样的格式。
标签详解
Member flags-成员标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--name | 成员的可读名称 | default | ETCD_NAME | 该值被引用为该节点自己在--initial-cluster标记中列出的条目(例如,default=http://localhost:2380)。如果使用静态引导,这需要匹配标志中使用的键。使用发现时,每个成员必须具有唯一的名称。Hostname或者machine-id可以是一个不错的选择。 |
--data-dir | 数据目录 | ${name}.etcd | ETCD_DATA_DIR | |
--wal-dir | 专用 wal 目录的路径。 | 空 | ETCD_WAL_DIR | 如果设置了这个标志,etcd 会将 WAL 文件写入 walDir 而不是 dataDir。这允许使用专用磁盘,并有助于避免日志记录和其他 IO 操作之间的 io 竞争。 |
--snapshot-count | 要触发磁盘快照的已提交事务数。 | 100000 | ETCD_SNAPSHOT_COUNT | |
--hearbeat-interval | 心跳检查间隔的时间(单位:毫秒)。 | 100 | ETCD_HEARTBEAT_INTERVAL | |
--election-timeout | 选择超时的时间(毫秒)。 | 1000 | ETCD_ELECTION_TIMEOUT | 有关详细信息,请参阅Documentation/tuning.md |
--listen-peer-urls | 用于侦听对等流量的 URL 列表。 | http://localhost:2380 | ETCD_LISTEN_PEER_URLS | 该标志告诉 etcd 接受来自指定 scheme://IP:port 组合上的对等方的传入请求。方案可以是 http 或 https。或者,使用unix://<file-path>或unixs://<file-path>用于 unix 套接字。如果将 0.0.0.0 指定为 IP,则 etcd 将侦听所有接口上的给定端口。如果给出了 IP 地址和端口,etcd 将侦听给定的端口和接口。多个 URL 可用于指定要侦听的多个地址和端口。etcd 将响应来自任何列出的地址和端口的请求。 无效示例:“http://example.com:2380“(域名绑定无效) |
--listen-client-urls | 用于侦听客户端流量的 URL 列表。 | http://localhost:2379 | ETCD_LISTEN_CLIENT_URLS | 该标志告诉 etcd 接受来自客户端的指定 scheme://IP:port 组合的传入请求。Scheme 可以是 http 或 https。或者,使用unix://<file-path>或unixs://<file-path>用于 unix 套接字。如果将 0.0.0.0 指定为 IP,则 etcd 将侦听所有接口上的给定端口。如果给出了 IP 地址和端口,etcd 将侦听给定的端口和接口。多个 URL 可用于指定要侦听的多个地址和端口。etcd 将响应来自任何列出的地址和端口的请求。 无效示例:“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-bbolt-freelist-type | etcd 后端(bboltdb)使用的空闲列表类型。 | 0 | ETCD_BACKEND_BBOLT_FREELIST_TYPE | 支持类型array 和 map |
--backend-batch-interval | BackendBatchInterval 是提交后端事务之前的最长时间。 | 0 | ETCD_BACKEND_BATCH_INTERVAL | |
--max-txn-ops | 事务中允许的最大操作数。 | 128 | ETCD_MAX_TXN_OPS | |
--max-request-bytes | 服务器将接受的最大客户端请求大小(以字节为单位)。 | 1572864(1.5MB) | ETCD_MAX_REQUEST_BYTES | |
--grpc-keepalive-min-time | 客户端在 ping 服务器之前应等待的最小持续时间间隔。 | 5s | ETCD_GRPC_KEEPALIVE_MIN_TIME | |
--grpc-keepalive-interval | 服务器到客户端 ping 检查连接是否处于活动状态的频率持续时间(0 表示禁用)。 | 2小时 | ETCD_GRPC_KEEPALIVE_INTERVAL | |
-grpc-keepalve-timeout | 关闭无响应连接之前的额外等待时间(0 表示禁用)。 | 20s | ETCD_GRPC_KEEPALIVE_TIMEOUT |
Clusetr flags-集群标志
--initial-advertise-peer-urls、--initial-cluster、--initial-cluster-state和--initial-cluster-token标志用于引导(静态引导、发现服务引导或运行时重新配置)新成员,并在重新启动现有成员时被忽略。
--discovery使用发现服务时需要设置前缀标志。
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--initial-advertise-peer-urls | 此成员的对等 URL 列表,用于向集群的其余部分做广播。 | http://localhost:2380 | ETCD_INITIAL_ADVERTISE_PEER_URLS | 这些地址用于在集群周围通信 etcd 数据。至少一个必须可路由到所有集群成员。这些 URL 可以包含域名。 示例:“ http://example.com:2380 , http://10.0.0.1:2380” |
--initial-cluster | 用于引导的初始集群配置。 | default=http://localhost:2380 | ETCD_INITIAL_CLUSTER | 这个标志的key是每个节点--name的值。默认key是default,是因为--name的默认值是default |
--init-cluster-state | 初始集群状态(new 或 existing) | new | ETCD_INITIAL_CLUSTER_STATE | new为初始化静态或 DNS 引导期间出现的所有成员设置为。如果此选项设置为existing,etcd 将尝试加入现有集群。如果设置了错误的值,etcd 将尝试启动但会安全失败。 |
--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-srv-name | 使用 DNS 引导时查询的 DNS srv 名称的后缀。 | 空 | ETCD_DISCOVERY_SRV_NAME | |
--discovery-fallback | 发现服务失败时的预期行为(“exit” or “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 | ETCD_AUTO_COMPACTION_MODE | 'periodic' 用于基于持续时间的保留,如果没有提供时间单位(例如 '5m'),则默认为小时。'revision' 用于基于修订号的保留。 |
--enable-v2 | 接受 etcd V2 客户端请求 | false | ETCD_ENABLE_V2 |
Proxy flags-代理标识
--proxy 前缀标志将 etcd 配置为在代理模式下运行。“proxy”仅支持 v2 API。
proxy mode:https://etcd.io/docs/v2.3/proxy/
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--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集群。
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--ca-file(弃用) | 客户端服务器 TLS CA 文件的路径。 | 空 | ETCD_CA_FILE | --ca-file ca.crt可以被替换为--trusted-ca-file ca.crt --client-cert-auth,并且 etcd 将执行相同的操作。 |
--cert-file | 客户端服务器 TLS 证书文件的路径 | 空 | ETCD_CERT_FILE | |
--key-file | 客户端服务器 TLS 密钥文件的路径。 | 空 | ETCD_KEY_FILE | |
--client-cert-auth | 启用客户端证书身份验证。 | false | ETCD_CLIENT_CERT_AUTH | gRPC 网关不支持 CN 身份验证。 |
--client-crl-file | 客户端证书吊销列表文件的路径。 | 空 | ETCD_CLIENT_CRL_FILE | |
--client-cert-allowed-hostname | Allowed 用于客户端证书身份验证的允许的TLS 名称。 | 空 | ETCD_CLIENT_CERT_ALLOWED_HOSTNAME | |
--trusted-ca-file | 客户端服务器 TLS 可信 CA 证书文件的路径。 | 空 | ETCD_TRUSTED_CA_FILE | |
--auto-tls | 使用生成的证书的客户端 TLS | false | ETCD_AUTO_TLS | |
--peer-ca-file(弃用) | 对等服务器 TLS CA 文件的路径。 | 空 | ETCD_PEER_CA_FILE | --peer-ca-file ca.crt可以被替换为--peer-trusted-ca-file ca.crt --peer-client-cert-auth,并且 etcd 将执行相同的操作。 |
--pree-cert-file | 对等服务器 TLS 证书文件的路径。这是点对点流量的证书,用于服务器和客户端。 | 空 | ETCD_PEER_CERT_FILE | |
--peer-key-file | 对等服务器 TLS 密钥文件的路径。这是对等通信的关键,用于服务器和客户端。 | 空 | ETCD_PEER_KEY_FILE | |
--peer-client-cert-auth | 启用对等客户端证书身份验证。 | false | ETCD_PEER_CLIENT_CERT_AUTH | |
--peer-crl-file | 对等证书吊销列表文件的路径。 | 空 | ETCD_PEER_CRL_FILE | |
--peer-trusted-ca-file | 对等服务器 TLS 可信 CA 文件的路径。 | 空 | ETCD_PEER_TRUSTED_CA_FILE | |
--peer-auto-tls | 使用生成的证书的对等 TLS | false | ETCD_PEER_AUTO_TLS | |
--peer-cert-allowed-cn | 允许 CommonName 用于对等身份验证。 | 空 | ETCD_PEER_CERT_ALLOWED_CN | |
--peer-cert-allowed-hostname | 允许的 TLS 证书名称用于对等身份验证。 | 空 | ETCD_PEER_CERT_ALLOWED_HOSTNAME | |
--cipher-suites | 服务器/客户端和对等方之间支持的 TLS 密码套件的逗号分隔列表。 | 空 | ETCD_CIPHER_SUITES |
logging flags-日志标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--logger | 指定zap结构化日志或者capnslog 3.5版本将弃用capnslog | capnslog | ETCD_LOGGER | |
--log-outputs | 指定 'stdout' 或 'stderr' 以跳过日志记录,即使在 systemd 或逗号分隔的输出目标列表下运行时也是如此。 | default | ETCD_LOG_OUTPUTS | 在v3.4版本,zip logger迁移期间。default使用stderr配置 |
--log-level | 配置日志级别(supports debug, info, warn, error, panic, or fatal ) 3.4版本可用 | info | ETCD_LOG_LEVEL | |
--debug | 将所有子包的默认日志级别删除,设置为 DEBUG。 3.5版本弃用 | false(所有子包的信息) | ETCD_DEBUG | |
--log-package-levels | 将各个 etcd 子包设置为特定的日志级别。 3.5版本弃用 | 空(所有包的信息) | ETCD_LOG_PACKAGE_LEVELS |
Unsafe flags-不安全的标志
使用不安全标志时请小心,因为它会破坏共识协议给出的保证。例如,如果集群中的其他成员还活着,它可能会发生恐慌。使用这些标志时请按照说明进行操作。
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--force-new-cluster | 强制创建一个新的单成员集群。 | false | ETCD_FORCE_NEW_CLUSTER | 它提交配置更改,强制删除集群中的所有现有成员并添加自己,但强烈建议不要这样做。请查看灾难恢复文档以了解首选的 v3 恢复程序。 |
Miscellaneous flags-其他标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--version | 输出版本信息并且退出 | false | ||
--config-file | 从配置文件载入服务配置。 | 空 | ETCD_CONFIG_FILE | 请注意,如果提供了配置文件,则会忽略其他命令行标志和环境变量。 |
Profiling flags-性能分析标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--enable-pprof | 通过 HTTP 服务器启用运行时分析数据。地址在客户端 URL + “/debug/pprof/” | false | ETCD_ENABLE_PPROF | |
--metrics | 设置导出指标的详细程度,指定“extensive”以包含服务器端 grpc 直方图指标。 | basic | ETCD_METRICS | |
--listen-metrics-urls | 展示/metrics和/health的监听URL列表 | 空 | ETCD_LISTEN_METRICS_URLS |
Auth flags-认证标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--auth-token | 指定令牌类型和令牌特定选项,尤其是对于 JWT。 | simple | ETCD_AUTH_TOKEN | 其格式为“type,var1=val1,var2=val2,...”。可能的类型是“simple”或“jwt”。 可能的变量是 : 'sign-method',用于指定 jwt 的符号方法(其可能的值为 'ES256'、'ES384'、'ES512'、'HS256'、'HS384'、'HS512'、'RS256'、'RS384 ', 'RS512', 'PS256', 'PS384', or 'PS512'), 'pub-key' 指定公钥路径以验证 jwt, 'priv-key' 指定私钥路径用于签署 jwt, 'ttl' 用于指定 jwt 令牌的 TTL。 对于非对称算法(“RS”、“PS”、“ES”),公钥是可选的,因为私钥包含足够的信息来签署和验证令牌。 JWT 的示例选项:'–auth-token jwt,pub-key=app.rsa.pub,priv-key=app.rsa,sign-method=RS512,ttl=10m' |
--bcrypt-cost | 指定用于散列身份验证密码的 bcrypt 算法的成本/强度。有效值介于 4 和 31 之间。 | 10 | 不支持 |
Experimental flags-实验性的标志
flag | 说明 | 默认值 | 对应环境变量格式 | 备注 |
--experimental-corrupt-check-time | 集群损坏检查通过的时间间隔 | 0s | ETCD_EXPERIMENTAL_CORRUPT_CHECK_TIME | |
--experimental-compaction-batch-limit | 设置每个压缩批次中删除的最大修订 | 1000 | ETCD_EXPERIMENTAL_COMPACTION_BATCH_LIMIT | |
--experimental-peer-skip-client-san-verification | 跳过客户端证书中对等连接的 SAN 字段的验证。 | false | ETCD_EXPERIMENTAL_PEER_SKIP_CLIENT_SAN_VERIFICATION | 这会很有帮助,例如,如果集群成员在 NAT 后面的不同网络中运行。 在这种情况下,请确保使用基于私有证书颁发机构的对等证书,使用--peer-cert-file, --peer-key-file,--peer-trusted-ca-file |