1、概述

  在 Kubernetes 集群中,所有操作的资源数据都存储在 Etcd 数据库上。为了确保在节点故障、集群迁移或其他异常情况下能够尽快恢复集群数据,我们需要定期对 Etcd 数据进行容灾备份操作。

  在 Kubernetes 集群中,可以非常方便的针对 Etcd 数据进行备份,通常,只需在一个节点上对 Etcd 进行快照,即可完成数据备份。快照文件包含了所有 Kubernetes 的状态和关键信息。有了 Etcd 集群数据的备份,即使在灾难性场景下(如丢失所有控制平面节点),也能够快速恢复 Kubernetes 集群。

注意:您可以参考博文《定时备份etcd数据》,详细了解 Etcd 数据备份的步骤。即便是高可用 Etcd 集群,只需要在一个节点上进行 Etcd 数据备份即可。然而,为了预防节点故障,强烈建议在所有 Etcd 节点上进行数据备份,并且建议定期将备份的 Etcd 快照数据传输到专门的数据存储服务器进行保存。

2、使用 Etcd 快照文件恢复 Etcd 数据实战

2.1 单节点恢复

描述: 当单节点资源清单数据丢失时,我们可采用如下方式进行快速恢复数据。

操作流程:

(1)停止单节点 Etcd 服务

systemctl stop etcd

(2)备份 Etcd 数据目录

mv /var/lib/etcd /var/lib/etcd.bak

(3)使用 Etcd 快照文件恢复 Etcd 数据

etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem  --endpoints 10.20.30.31:2379 snapshot restore  /var/backups/kube_etcd/etcd-2024-0206-snapshot.db \
--name=etcd01 \
--initial-cluster=etcd01=https://10.20.30.31:2380 \
--initial-advertise-peer-urls=https://10.20.30.31:2380 \
--data-dir=/var/lib/etcd

注意 1:本博文 etcdctl 客户端命令默认使用 v3 版本 API。

注意 2:执行恢复命令时,命令中涉及的节点IP、私钥、证书、快照文件等信息需要集群实际情况进行替换。

(4)启动单节点 Etcd 服务

systemctl start etcd

(5)查看 Etcd 节点状态

通过查看 Etcd 服务状态、Etcd 日志以及通过 Etcd 客户端查看 Etcd 节点状态、查看 Etcd 快照中保存的 key 来检查 Etcd 节点数据恢复情况。如果检查 Etcd 节点状态正常的话,至此单节点 Etcd 恢复正常。下面仅粘贴通过 Etcd 客户端查看 Etcd 节点状态命令。

etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.20.30.31:2379" endpoint status --write-out=table

2.2 高可用集群恢复

对于使用 Etcd 快照文件恢复高可用 Etcd 集群数据,需要对每个 Etcd 节点进行数据恢复,下面以 3 个节点 Etcd 集群为例,实战下对于高可用 Etcd 集群恢复。

(1)待恢复高可用集群节点信息

模拟高可用集群三台节点全部数据损坏情况,针对三台节点数据全部损坏并没法恢复情况, 需要重新安装高可用 Etcd 集群,并基于存储服务器上保存的 Etcd 快照文件进行数据恢复。

新安装 Etcd 集群 etcd.service 配置文件。

# /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target [Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd
Restart=on-failure
LimitNOFILE=65536 [Install]
WantedBy=multi-user.target

新安装 Etcd 集群 etcd 节点配置文件,这里仅展示 103 节点配置文件,104 和 105 节点配置文件仅是 ip 不同。

#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="https://10.20.31.103:2380"
ETCD_LISTEN_CLIENT_URLS="https://10.20.31.103:2379,http://127.0.0.1:2379" #[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://10.20.31.103:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://10.20.31.103:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://10.20.31.103:2380,etcd02=https://10.20.31.104:2380,etcd03=https://10.20.31.105:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_ENABLE_V2="true" #[Security]
ETCD_CERT_FILE="/opt/etcd/ssl/server.pem"
ETCD_KEY_FILE="/opt/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/opt/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/opt/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/opt/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"
 

通过 etcdctl 客户端查看当前新安装 Etcd 集群节点信息。

[root@xxx ~]# /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.20.31.103:2379,https://10.20.31.104:2379,https://10.20.31.105:2379" endpoint status --write-out=table
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.20.31.103:2379 | 3681f3c1503c3f87 | 3.4.13 | 20 kB | true | false | 2 | 8 | 8 | |
| https://10.20.31.104:2379 | 24b3b3c0efa27a98 | 3.4.13 | 20 kB | false | false | 2 | 8 | 8 | |
| https://10.20.31.105:2379 | 7acc5e40b5c32ffd | 3.4.13 | 20 kB | false | false | 2 | 8 | 8 | |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

通过 etcdmanager 客户端查看当前新安装 Etcd 集群节点信息。

通过 etcdctl 客户端查看当前新安装 Etcd 集群存储的 key。

[root@xxx ~]# /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.20.31.103:2379,https://10.20.31.104:2379,https://10.20.31.105:2379" get --prefix "" --keys-only=true
[root@xxx ~]#

通过 etcdmanager 客户端查看当前新安装 Etcd 集群存储的 key。

注意 1:高可用 Etcd 集群安装步骤可以参考 《搭建高可用Kubernetes集群之etcd v3.4.13集群搭建(一)》这篇博文,本文不再赘余。

(2)所有 Etcd 节点停止 Etcd 服务

三台 Etcd 节点分别停止 Etcd 服务。

systemctl stop etcd

(3)所有 Etcd 节点备份 Etcd 数据目录

三台 Etcd 节点分别备份 Etcd 数据目录。

mv /var/lib/etcd /var/lib/etcd.bak

(4)所有 Etcd 节点使用快照文件恢复 Etcd 数据

10.20.31.103 节点使用快照文件恢复 Etcd 数据:注意 data-dir 需要与 etcd 节点配置文件中配置路径一致,不然后面启动 etcd 服务会基于 etcd 节点配置文件中配置的路径作为新节点数据目录。

/opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem snapshot restore  snapshot.db \
--name etcd01 \
--initial-cluster=etcd01=https://10.20.31.103:2380,etcd02=https://10.20.31.104:2380,etcd03=https://10.20.31.105:2380 \
--initial-cluster-token=etcd-cluster \
--initial-advertise-peer-urls=https://10.20.31.103:2380 \
--data-dir=/var/lib/etcd

10.20.31.104节点使用快照文件恢复 Etcd 数据注意 data-dir 需要与 etcd 节点配置文件中配置路径一致,不然后面启动 etcd 服务会基于 etcd 节点配置文件中配置的路径作为新节点数据目录。

/opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem snapshot restore  snapshot.db \
--name etcd02 \
--initial-cluster=etcd01=https://10.20.31.103:2380,etcd02=https://10.20.31.104:2380,etcd03=https://10.20.31.105:2380 \
--initial-cluster-token=etcd-cluster \
--initial-advertise-peer-urls=https://10.20.31.104:2380 \
--data-dir=/var/lib/etcd

10.20.31.105节点使用快照文件恢复 Etcd 数据注意 data-dir 需要与 etcd 节点配置文件中配置路径一致,不然后面启动 etcd 服务会基于 etcd 节点配置文件中配置的路径作为新节点数据目录。

注意 1:本博文 etcdctl 客户端命令默认使用 v3 版本 API。

注意 2:执行恢复命令时,命令中涉及的节点IP、私钥、证书、快照文件等信息需要集群实际情况进行替换。

(5)所有节点启动 Etcd 服务

systemctl start etcd

(6)查看 Etcd 集群状态

通过 etcdctl 客户端查看当前新安装 Etcd 集群节点信息。

[root@xxx ~]# /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.20.31.103:2379,https://10.20.31.104:2379,https://10.20.31.105:2379" endpoint status --write-out=table

通过 etcdctl 客户端查看当前新安装 Etcd 集群存储的 key。

[root@xxx ~]# /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://10.20.31.103:2379,https://10.20.31.104:2379,https://10.20.31.105:2379" get --prefix "" --keys-only=true
[root@xxx ~]#

至此,高可用 Etcd 集群通过 Etcd 快照文件恢复集群数据成功, Etcd 集群能够在快照数据基础上对外提供服务了。

3、总结

只要一个快照文件,就能恢复 Etcd 集群,使用 etcdctl snapshot restore 命令,创建一个新的 Etcd 数据目录,所有节点都将从同一个快照文件进行恢复。恢复会覆写快照文件中一些元数据,例如 member ID 和 cluster ID,这些节点也就丢失它们之前的身份信息。抹掉元数据是为了防止新节点不小心加入别的 etcd 集群。

高可用 Etcd 集群安装:《搭建高可用Kubernetes集群之etcd v3.4.13集群搭建(一)

定时备份 Etcd 数据:定时备份etcd数据

使用 Etcd 快照文件恢复 Etcd 数据:应对单节点及高可用集群情况的更多相关文章

  1. 入门大数据---基于Zookeeper搭建Kafka高可用集群

    一.Zookeeper集群搭建 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本 Zooke ...

  2. 入门大数据---基于Zookeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  3. kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483891&idx=1&sn=17dcd7cd ...

  4. kubeadm 使用 Calico CNI 以及外部 etcd 部署 kubernetes v1.23.1 高可用集群

    文章转载自:https://mp.weixin.qq.com/s/2sWHt6SeCf7GGam0LJEkkA 一.环境准备 使用服务器 Centos 8.4 镜像,默认操作系统版本 4.18.0-3 ...

  5. 使用Ansible部署etcd 3.2高可用集群

    之前写过一篇手动搭建etcd 3.1集群的文章<etcd 3.1 高可用集群搭建>,最近要初始化一套新的环境,考虑用ansible自动化部署整套环境, 先从部署etcd 3.2集群开始. ...

  6. 高可用Kubernetes集群-3. etcd高可用集群

    五.部署高可用etcd集群 etcd是key-value存储(同zookeeper),在整个kubernetes集群中处于中心数据库地位,以集群的方式部署,可有效避免单点故障. 这里采用静态配置的方式 ...

  7. 大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群

    下载Hadoop安装包 登录 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 镜像站,找到我们要安装的版本,点击进去复制下载链接 ...

  8. 大数据高可用集群环境安装与配置(07)——安装HBase高可用集群

    1. 下载安装包 登录官网获取HBase安装包下载地址 https://hbase.apache.org/downloads.html 2. 执行命令下载并安装 cd /usr/local/src/ ...

  9. 大数据高可用集群环境安装与配置(08)——安装Ganglia监控集群

    1. 安装依赖包和软件 在所有服务器上输入命令进行安装操作 yum install epel-release -y yum install ganglia-web ganglia-gmetad gan ...

  10. 大数据高可用集群环境安装与配置(05)——安装zookeeper集群

    1. 下载安装包 登录官网下载安装包 https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 2. 执行命令下载并安装 cd /usr/local ...

随机推荐

  1. freeswitch xml_rpc模块

    概述 freeswitch有非常多的周边模块,给我们提供各种各样的功能,有些功能在适当的场景下可以极大的方便我们的开发和应用. 今天我们介绍一个不常用的模块mod_xml_rpc. freeswitc ...

  2. C++ 利用模板偏特化和 decltype(()) 识别表达式的值类别

    刚刚看到一篇 C++ 博客,里面讲到用模板偏特化和 decltype() 识别值类别:lvalue glvalue xvalue rvalue prvalue.依照博客的方法试了一下,发现根本行不通. ...

  3. Win10 高效语音输入方案:听写功能 win + H

    win + H 打开听写功能,即可打开语音输入,帮你快速糊完文档 (队友亲测好用)

  4. 分享一个在线二维码生成器(基于qrcode.js开发)

    一种二维码扫描与生成的工具, 它可生成个性化二维码, 支持文本.网址.图片.短信.电话等格式及主题,提供融合码功能 演示地址 https://qrcode.gitapp.cn 关键代码 var qrc ...

  5. Go-包-package-modules-import

  6. Nginx的日志处理

    Nginx的日志处理 背景 之前一直被各种咨询nginx的使用问题. 大部分都是性能, 加模块, 以及一些tcp端口等的问题. 其实这些都还好, 还有一个比较麻烦的问题时日志相关的. nginx的日志 ...

  7. MySQL数据库页存储结构学习与了解

    MySQL数据库页存储结构学习与了解 背景 MySQL总是出现奇奇怪怪的问题. 想着自己能够学习与提高一下. 最近看了很多文档.关于MySQL数据库相关的. 想着总结和提炼一下, 希望能够给未来的工作 ...

  8. [转帖]VMware vCenter证书过期解决方法

    https://www.yii666.com/blog/395521.html vCenter证书过期解决方法 目录 1 概述 2 详细操作步骤 2.1 检查关键的STS证书是否过期并修复 2.2 检 ...

  9. 【转帖】通过docker配置DNS服务

    https://blog.whsir.com/post-3185.html   在办公室开发人员经常会测试所写的页面,每次都要输入对应的IP地址或者更改hosts,为了让开发大爷省心,不如搭建一个dn ...

  10. Harbor简单搭建以及异常排查的过程与思路

    Harbor简单搭建以及异常排查的过程与思路 前言 我发现我总是能够遇到别人遇不到的问题. 本来搭建十分钟就可以搭建完成 结果我硬生生的搭建了四十分钟. 为了保证下次不再浪费时间. 这里加单总结一下遇 ...