一篇文章带你学会etcd运维
更多技术博客,请关注微信公众号:运维之美
一、etcd配置说明
Etcd 是一个分布式键值存储系统,用于配置管理和服务发现。它通常用于为分布式系统提供关键数据的一致性和高可用性。Etcd 的配置文件通常是一个 YAML 格式的文件,包含了一系列的参数和设置,用于调整 Etcd 服务器的行为。
k8s的etcd 走的https,使用了证书,证书位置如下配置中路径
etcd集群部署:
https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd/#multi-node-etcd-cluster
[root@ localhost]# cat /etc/systemd/system/etcd.service
...
[Service]
Type=notify
WorkingDirectory=/data/kube/etcd/
ExecStart=/data/kube/bin/etcd \
--name=etcd1 \
--cert-file=/etc/etcd/ssl/etcd.pem \ # 证书
--key-file=/etc/etcd/ssl/etcd-key.pem \
--peer-cert-file=/etc/etcd/ssl/etcd.pem \
--peer-key-file=/etc/etcd/ssl/etcd-key.pem \
--trusted-ca-file=/etc/kubernetes/cluster/ssl/ca.pem \
--peer-trusted-ca-file=/etc/kubernetes/cluster/ssl/ca.pem \
...
参数说明
参数名称 | 使用说明 |
---|---|
name | 定义了 Etcd 节点的名称 |
data-dir | 指定 Etcd 存储数据的目录路径 |
wal-dir | 指定 Etcd 的 Write-Ahead Logging (WAL) 日志文件存放的目录路径 |
snapshot-count | 定义了触发新的快照之前,可以进行多少次事务提交 |
heartbeat-interval | 定义了 Etcd 节点之间发送心跳的间隔时间 |
election-timeout | 定义了 Etcd 领导者选举的超时时间 |
listen-peer-urls | 定义了 Etcd 节点之间通信的 URL 列表 |
listen-client-urls | 定义了 Etcd 节点对外提供服务的 URL 列表 |
initial-advertise-peer-urls | 定义了 Etcd 节点在加入集群时,用于自我宣传的对等 URL |
advertise-client-urls | 定义了 Etcd 节点对外宣传的客户端 URL |
initial-cluster | 定义了 Etcd 集群的初始状态,包括集群中的所有节点及其名称 |
initial-cluster-token | 定义了 Etcd 集群的初始令牌,用于集群的初始化 |
initial-cluster-state | 定义了 Etcd 集群的状态,可以是 new(新集群)或 existing(现有集群) |
auto-compaction-retention=1 | 在一个小时内为mvcc键值存储的自动压实保留。0表示禁用自动碎片整理 |
max-request-bytes=10485760 | 消息最大字节数,ETCD默认该值为1.5M,注意:etcd容器使用的版本如果小于3.2.10,此参数不能加,低于这个版本的不支持此参数 |
max-snapshots | 定义了允许的最大快照数量 |
max-wals | 定义了允许的最大 WAL 文件数量 |
- etcd端口信息
端口 | 作用 |
---|---|
2380端口 | 伙伴通信,例如集群通信,交换选举等信息 |
2379端口 | 2379是http协议的RESTful接口,用于客户端连接 |
二、etcd高可用说明
在 etcd 集群中,领导者选举是 Raft 协议的一部分,用于在当前领导者失败或无法与集群中的其他节点通信时选出新的领导者。
1.节点失去领导者
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"raft.node: 9afce9447872453 lost leader 5ee9c643fc08f96b at term 52"}
这条日志表明节点 9afce9447872453 丢失了它的领者 5ee9c643fc08f96b,这通常发生在领导者无法响应其他节点的心跳或请求时。
2.开始新的选举
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 is starting a new election at term 52"}
由于丢失了领导者,节点 9afce9447872453 开始了一个新的选举过程。在 Raft 协议中,选举过程包括预投票(PreVote)和投票(Vote)阶段。
3.节点成为候选者
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 became pre-candidate at term 52"}
节点 9afce9447872453 成为了一个预候选者(pre-candidate),这是选举过程的第一步,节点会请求其他节点的预投票。
4.发送预投票请求
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 [logterm: 52, index: 456617084] sent MsgPreVote request to 2fa50bf947c1df3a at term 52"}
节点 9afce9447872453 向另一个节点 2fa50bf947c1df3a 发送了一个预投票请求。这是为了确认是否有其他节点已经在一个更高的任期(term)上。
5.接收预投票响应
{"level":"info","ts":"2024-05-07T01:54:04.948Z","logger":"raft","caller":"etcdserver/zap_raft.go:77","msg":"9afce9447872453 received MsgPreVoteResp from 9afce9447872453 at term 52"}
节点 9afce9447872453 接收到了它自己的预投票响应,这是预投票过程的一部分。
6.选举超时
{"level":"warn","ts":"2024-05-07T01:54:17.333Z","caller":"etcdserver/v3_server.go:852","msg":"timed out waiting for read index response (local node might have slow network)","timeout":"7s"}
这个警告表明在尝试进行线性化读取时,节点在等待 ReadIndex 响应时超时了。这可能是由于网络问题导致的通信延迟,也可能是由于节点性能问题。
7.健康检查失败
{"level":"warn","ts":"2024-05-07T01:54:17.332Z","caller":"etcdhttp/metrics.go:173","msg":"serving /health false; no leader"}
这条日志表明 etcd 集群的健康状况检查失败,原因是没有领导者。这通常意味着集群无法处理请求,直到新的领导者被选举出来。
在 Raft 协议中,如果一个节点在一段时间内没有收到领导者的消息,它就会认为自己是孤立的,并开始新的领导者选举过程。这个过程包括增加任期计数,并尝试通过预投票和投票阶段获得集群中大多数节点的支持。如果一个节点成功地获得了足够的投票,它就会成为新的领导者,并开始接受和处理请求。
解决领导者选举问题通常需要确保 etcd 集群中的所有节点都可以相互通信,并且没有任何网络分区或其他通信障碍。此外,可能需要检查节点的配置和系统资源,以确保它们可以正常运行。
在etcd集群中