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 |
+------------------+---------+--------+-----------------------------+-----------------------------+------------+
复制代码

 

posted @   不会跳舞的胖子  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示