etcd 简单使用备份与恢复

本文介绍etcd作为Kubernetes的重要组件,在集群中的角色及其实现原理。etcd采用Raft一致性算法来保证数据的一致性和高可用性。文章详细讲解了etcd的数据同步流程、安全性保障机制以及如何进行备份与恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

etcd是kubernetes中的一个用于存储k8s元数据信息的存储单元(存储pod node deployment等资源信息),它是类似于redis的存储使用

etcd集群个数推荐或者说必须是奇数个
因为etcd遵循raft协议,需要选主 若为比如4个节点,当有两个节点follower(election time)选举时间到了成为candicate,它们会各自投自己一票,然后还剩两个,如果是一人一票,2比2则要重新投票,所以一般是奇数个etcd节点(http://thesecretlivesofdata.com/raft/)
下一任的leader的任期比上一任的要长。
数据同步是以心跳包的形式,比如etcd leader接受到了数据,它会将数据以心跳包的形式发送到follower上。
每一个key都有ttl,如果不续约就会过期。
raft协议类似下图:
在这里插入图片描述
日志复制
当Leader收到客户端的日志(事务请求)后,先把日志追加到本地的log中,然后通过heartbeat把entry同步给follower,follower接收到后像leader发送ACK,当Leader收到(n/2+1)follower的ACK后,将日志设置为以提交,并存到local磁盘中,通过hearbeat通知所有的follower将日志存储到本地磁盘。
安全性
如果leader坏了,那么需要保证新选的leader一定要包含之前的committed log的机制

**

WAL 日志(write ahead log)

**
wal日志是二进制的,解析出来是四个字段
第一个字段 type(0 nomal 1 ConfChange 表示etcd本身配置变更同步,比如有新的节点加入等)
第二个字段 term(任期),
第三个字段是index,递增的
第四个数据是二机制data,是protobuf结构

export ETCDCTL_API=3
目前大部分都是使用的etcd 版本三

etcdctl 是需要认证的一般使用格式如下
etcdctl --endpoints+https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/health-client.crt --key=/etc/health-client.key snapshot save /opt/data.db
可以使用别名
etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key member list -w table

查看所有key值
etcdctl get / --prefix --keys-only

查看集群节点状态
etcdctl endpoint status -w table
etcdctl endpoint health -w table

设置key值
etcdctl put wuyong 18
取key值
etcdctl get wuyong

etcd备份与恢复

etcd
etcdctl --endpoints+https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/health-client.crt --key=/etc/health-client.key snapshot save /opt/data.db

etcdctl restore /opt/data.db

Kubernetes 中进行 etcd备份恢复操作是保障集群元数据安全的重要措施。etcdKubernetes 集群的核心组件之一,用于存储集群的状态信息和配置数据。因此,定期备份 etcd 数据可以防止数据丢失,并在发生故障时实现快速恢复。以下是基于 etcd v3.5.9 的备份恢复流程说明。 ### 一、etcd 备份 etcd 提供了内置的快照功能,可用于备份集群状态。以下是一个使用 `etcdctl` 命令行工具进行备份的示例: ```bash ETCDCTL_API=3 etcdctl \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \ --key=/etc/kubernetes/pki/apiserver-etcd-client.key \ --endpoints=https://<etcd-host>:2379 \ snapshot save /backup/etcd-snapshot.db ``` 其中 `<etcd-host>` 是 etcd 集群的一个健康节点地址。此命令会将当前 etcd 集群的状态保存为一个快照文件 `etcd-snapshot.db`,并输出快照的哈希值、版本号、键值对数量和文件大小等信息[^2]。 为了实现自动化备份,可以使用 Kubernetes 的 CronJob 资源定期执行上述命令,确保 etcd 数据的持续保护。 ### 二、etcd 恢复 当需要恢复 etcd 数据时,可以通过 `etcdctl` 的快照恢复功能来完成。假设当前 etcd 集群已经无法正常运行,则可以使用如下命令恢复数据: ```bash ETCDCTL_API=3 etcdctl \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \ --key=/etc/kubernetes/pki/apiserver-etcd-client.key \ snapshot restore /backup/etcd-snapshot.db \ --data-dir=/var/lib/etcd-from-backup ``` 此命令将快照文件 `etcd-snapshot.db` 恢复到指定的数据目录 `/var/lib/etcd-from-backup` 中。恢复完成后,需要更新 etcd 的配置文件(如 `/etc/kubernetes/manifests/etcd.yaml`),将数据目录指向新的位置,并重启 etcd 服务以应用更改。 ### 三、跨节点迁移版本一致性 如果需要在不同节点之间迁移 etcd 数据或确保所有节点使用相同的 etcd 版本(如 v3.5.9),可以通过 `scp` 命令复制快照文件和 etcd 二进制文件: ```bash scp /backup/etcd-snapshot.db user@remote-host:/backup/ scp -r /opt/etcd-v3.5.9-linux-amd64/ user@remote-host:/opt/ ``` 此操作确保了目标节点拥有源节点一致的 etcd 版本和数据快照,从而实现了 etcd 的跨节点迁移和版本一致性维护[^3]。 ### 四、使用 Docker 快速部署 etcd 对于测试环境或快速部署需求,可以使用 Docker 容器化方式快速启动一个带有证书的 etcd 实例。以下是一个简单的 Docker 命令示例: ```bash docker run -d \ --name etcd \ -p 2379:2379 \ -v $(pwd)/certs:/certs \ quay.io/coreos/etcd:v3.5.9 \ etcd \ --name my-etcd \ --data-dir /etcd-data \ --listen-client-urls https://0.0.0.0:2379 \ --advertise-client-urls https://localhost:2379 \ --cert-file /certs/server.crt \ --key-file /certs/server.key \ --trusted-ca-file /certs/ca.crt \ --client-cert-auth ``` 此命令启动了一个带有 TLS 证书的 etcd 容器,并监听 2379 端口。通过这种方式,可以在短时间内快速搭建起一个安全的 etcd 环境用于测试或开发目的[^4]。 ### 五、验证 etcd 快照内容 在执行备份恢复操作后,可以通过以下命令验证快照中的数据是否完整: ```bash ETCDCTL_API=3 etcdctl \ --cacert=./ca.crt \ --cert=./server.crt \ --key=./server.key \ --endpoints=localhost:2389 \ get / --prefix --keys-only ``` 此命令将列出 etcd 中的所有键,有助于确认快照中是否包含了预期的数据[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值