etcd错误:Failed to defragment etcd member[127.0.0.1:2379] (context deadline exceeded)
etcd 版本
# etcdctl version
etcdctl version: 3.5.1
API version: 3.5
问题
在 执行 etcdctl --endpoints=http://127.0.0.1:2379 defrag
命令时,可能遇到错误:
{"level":"warn","ts":"2024-06-12T18:20:17.444+0800","logger":"etcd-client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc00037c540/127.0.0.1:2379","attempt":0,"error":"rpc error: code = DeadlineExceeded desc = context deadline exceeded"}
Failed to defragment etcd member[http://127.0.0.1:2379] (context deadline exceeded)
错误原因
etcdctl
的默认命令超时为 5 秒,但碎片整理花费的时间比这更长。
解决方案
指定超时时间 --command-timeout
etcdctl --endpoints=http://127.0.0.1:2379 --command-timeout=30s defrag
参数
GLOBAL OPTIONS:
--cacert="" verify certificates of TLS-enabled secure servers using this CA bundle
--cert="" identify secure client using this TLS certificate file
--command-timeout=5s timeout for short running command (excluding dial timeout)
--debug[=false] enable client-side debug logging
--dial-timeout=2s dial timeout for client connections
-d, --discovery-srv="" domain name to query for SRV records describing cluster endpoints
--discovery-srv-name="" service name to query when using DNS discovery
--endpoints=[127.0.0.1:2379] gRPC endpoints
--hex[=false] print byte strings as hex encoded strings
--insecure-discovery[=true] accept insecure SRV records describing cluster endpoints
--insecure-skip-tls-verify[=false] skip server certificate verification (CAUTION: this option should be enabled only for testing purposes)
--insecure-transport[=true] disable transport security for client connections
--keepalive-time=2s keepalive time for client connections
--keepalive-timeout=6s keepalive timeout for client connections
--key="" identify secure client using this TLS key file
--password="" password for authentication (if this option is used, --user option shouldn't include password)
--user="" username[:password] for authentication (prompt if password is not supplied)
-w, --write-out="simple" set the output format (fields, json, protobuf, simple, table)
参考链接:https://github.com/etcd-io/etcd/issues/8260
清理集群 etcdctl defrag --cluster