k8s etcd定时备份与恢复
数据备份
定时脚本
#!/bin/bash ETCDCTL_API=3 /usr/local/bin/etcdctl --endpoints=https://192.168.43.129:2379 --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/etcd-server.pem --key=/opt/etcd/ssl/etcd-server-key.pem snapshot save /opt/etcd/data/bak/etcd-snapshot-$(date +%Y-%m-%d-%H:%M:%S).db
注意事项:
1. 在定时任务中,需要配置命令的完整路径,不然会报错命令找不到,如
/usr/local/bin/etcdctl
2. 备份尽量异地备份,如使用共享存储。
数据恢复
1. 查看etcd 配置文件
[root@master-1 data]# cat /opt/etcd/cfg/etcd.conf #[Member] ETCD_NAME="etcd-1" ETCD_DATA_DIR="/opt/etcd/data/default.etcd" ETCD_LISTEN_PEER_URLS="https://192.168.43.129:2380" ETCD_LISTEN_CLIENT_URLS="https://192.168.43.129:2379,http://192.168.43.129:2379" #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.43.129:2380" ETCD_ADVERTISE_CLIENT_URLS="https://192.168.43.129:2379" ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.43.129:2380,etcd-2=https://192.168.43.130:2380,etcd-3=https://192.168.43.131:2380" ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new"
2. 复制快照到所有节点,所有节点的快照文件保持一致
3. 执行恢复命令
ETCDCTL_API=3 etcdctl snapshot restore /opt/loki/etcd-snapshot-2024-12-16-09\:30\:01.db \ --name etcd-1 \ --initial-cluster etcd-1=https://192.168.43.129:2380,etcd-2=https://192.168.43.130:2380,etcd-3=https://192.168.43.131:2380 \ --initial-cluster-token etcd-cluster \ --initial-advertise-peer-urls https://192.168.43.129:2380 \ --data-dir=/opt/etcd1-restore # 此目录不用提前创建,会自动创建,若存在,则会报错 [root@master-1 data]# etcdctl snapshot restore /opt/loki/etcd-snapshot-2024-12-16-09\:30\:01.db --name etcd-1 --initial-cluster etcd-1=https://192.168.43.129:2380,etcd-2=https://192.168.43.130:2380,etcd-3=https://192.168.43.131:2380 --initial-cluster-token etcd-cluster --initial-advertise-peer-urls https://192.168.43.129:2380 --data-dir=/opt/etcd1-restore/ {"level":"info","ts":1734315527.124146,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd1-restore/member/wal","data-dir":"/opt/etcd1-restore/","snap-dir":"/opt/etcd1-restore/member/snap"} {"level":"info","ts":1734315527.214909,"caller":"mvcc/kvstore.go:380","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":1070749} {"level":"info","ts":1734315527.2241535,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"2a1559f789f2f01c","added-peer-peer-urls":["https://192.168.43.130:2380"]} {"level":"info","ts":1734315527.2242646,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"72f0a7c73854cb6b","added-peer-peer-urls":["https://192.168.43.129:2380"]} {"level":"info","ts":1734315527.2243366,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"a997b65b1c7f6dbc","added-peer-peer-urls":["https://192.168.43.131:2380"]} {"level":"info","ts":1734315527.226858,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd1-restore/member/wal","data-dir":"/opt/etcd1-restore/","snap-dir":"/opt/etcd1-restore/member/snap"} ETCDCTL_API=3 etcdctl snapshot restore /opt/loki/etcd-snapshot-2024-12-16-09\:30\:01.db \ --name etcd-2 \ --initial-cluster etcd-1=https://192.168.43.129:2380,etcd-2=https://192.168.43.130:2380,etcd-3=https://192.168.43.131:2380 \ --initial-cluster-token etcd-cluster \ --initial-advertise-peer-urls https://192.168.43.130:2380 \ --data-dir=/opt/etcd2-restore {"level":"info","ts":1734315601.9400942,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd2-restore/member/wal","data-dir":"/opt/etcd2-restore","snap-dir":"/opt/etcd2-restore/member/snap"} {"level":"info","ts":1734315602.0290384,"caller":"mvcc/kvstore.go:380","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":1070749} {"level":"info","ts":1734315602.0360742,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"2a1559f789f2f01c","added-peer-peer-urls":["https://192.168.43.130:2380"]} {"level":"info","ts":1734315602.036177,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"72f0a7c73854cb6b","added-peer-peer-urls":["https://192.168.43.129:2380"]} {"level":"info","ts":1734315602.0362353,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"a997b65b1c7f6dbc","added-peer-peer-urls":["https://192.168.43.131:2380"]} {"level":"info","ts":1734315602.0412529,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd2-restore/member/wal","data-dir":"/opt/etcd2-restore","snap-dir":"/opt/etcd2-restore/member/snap"} ETCDCTL_API=3 etcdctl snapshot restore /opt/loki/etcd-snapshot-2024-12-16-09\:30\:01.db \ --name etcd-3 \ --initial-cluster etcd-1=https://192.168.43.129:2380,etcd-2=https://192.168.43.130:2380,etcd-3=https://192.168.43.131:2380 \ --initial-cluster-token etcd-cluster \ --initial-advertise-peer-urls https://192.168.43.131:2380 \ --data-dir=/opt/etcd3-restore {"level":"info","ts":1734315610.9840155,"caller":"snapshot/v3_snapshot.go:296","msg":"restoring snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd3-restore/member/wal","data-dir":"/opt/etcd3-restore","snap-dir":"/opt/etcd3-restore/member/snap"} {"level":"info","ts":1734315611.040503,"caller":"mvcc/kvstore.go:380","msg":"restored last compact revision","meta-bucket-name":"meta","meta-bucket-name-key":"finishedCompactRev","restored-compact-revision":1070749} {"level":"info","ts":1734315611.0466678,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"2a1559f789f2f01c","added-peer-peer-urls":["https://192.168.43.130:2380"]} {"level":"info","ts":1734315611.0468342,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"72f0a7c73854cb6b","added-peer-peer-urls":["https://192.168.43.129:2380"]} {"level":"info","ts":1734315611.0468822,"caller":"membership/cluster.go:392","msg":"added member","cluster-id":"aff3c3baaedacae9","local-member-id":"0","added-peer-id":"a997b65b1c7f6dbc","added-peer-peer-urls":["https://192.168.43.131:2380"]} {"level":"info","ts":1734315611.0507963,"caller":"snapshot/v3_snapshot.go:309","msg":"restored snapshot","path":"/opt/loki/etcd-snapshot-2024-12-16-09:30:01.db","wal-dir":"/opt/etcd3-restore/member/wal","data-dir":"/opt/etcd3-restore","snap-dir":"/opt/etcd3-restore/member/snap"}
4. 将恢复后的数据拷贝到etcd配置文件中的数据目录
[root@master-1 data]# mv /opt/etcd1-restore/ default.etcd [root@master-1 data]# ll 总用量 16 drwxr-xr-x 2 root root 8192 12月 16 10:00 bak drwx------ 3 root root 20 12月 16 10:18 default.etcd drwx------ 4 root root 40 12月 16 10:00 default.etcd-bak -rw-r--r-- 1 root root 329 12月 16 09:30 etcd-bak.sh [root@master-1 data]# ll default.etcd/member/ 总用量 0 drwx------ 2 root root 62 12月 16 10:18 snap drwx------ 2 root root 51 12月 16 10:18 wal
5. 启动并查看集群状态
[root@node-2 data]# /usr/local/bin/etcdctl --endpoints="https://192.168.43.129:2379,https://192.168.43.130:2379,https://192.168.43.131:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/etcd-server.pem --key=/opt/etcd/ssl/etcd-server-key.pem endpoint health --write-out=table +-----------------------------+--------+-------------+-------+ | ENDPOINT | HEALTH | TOOK | ERROR | +-----------------------------+--------+-------------+-------+ | https://192.168.43.129:2379 | true | 18.988352ms | | | https://192.168.43.131:2379 | true | 19.712134ms | | | https://192.168.43.130:2379 | true | 20.048917ms | | +-----------------------------+--------+-------------+-------+ [root@node-2 data]# /usr/local/bin/etcdctl --endpoints="https://192.168.43.129:2379,https://192.168.43.130:2379,https://192.168.43.131:2379" --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/etcd-server.pem --key=/opt/etcd/ssl/etcd-server-key.pem member list --write-out=table +------------------+---------+--------+-----------------------------+-----------------------------+------------+ | ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER | +------------------+---------+--------+-----------------------------+-----------------------------+------------+ | 2a1559f789f2f01c | started | etcd-2 | https://192.168.43.130:2380 | https://192.168.43.130:2379 | false | | 72f0a7c73854cb6b | started | etcd-1 | https://192.168.43.129:2380 | https://192.168.43.129:2379 | false | | a997b65b1c7f6dbc | started | etcd-3 | https://192.168.43.131:2380 | https://192.168.43.131:2379 | false | +------------------+---------+--------+-----------------------------+-----------------------------+------------+
越学越感到自己的无知
分类:
K8S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现