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. 如何使用Markdown编写笔记

    Markdown是什么? Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber). 它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTM ...

  2. (已解决)C·lash 核心崩溃“failed to c·lash core, logs are not available”

    问题情况: 解决方案:管理员打开 cmd,输入 netsh winsock reset,重启电脑就可以了! 原经验帖:https://www.oleou.com/soft/715.html 谢谢这位大 ...

  3. Makeflie脚本使用

    1.目标 2.Makefile的作用 自动化编译仿真 文件有引用层级关系,Tb会引用RTL顶层,RTL顶层也会引用一些其他的小的模块,编译的时候被引用的文件需要先进行编译. 脚本有两种模式,debug ...

  4. JMS微服务开发示例(八)双机热备

    双机热备,指两个一模一样的微服务,两个同时在运行,但是只有一个在工作,当工作中的微服务垮掉后,另一个会自行补上. 要实现这个,只需要设置 SingletonService = true. var mi ...

  5. [转帖]Python安装模块(包/库)的方法

    这里写目录标题 通过pip安装 正常在线安装 pip命令补全 更改下载镜像 离线包安装 库的下载 库的安装 whl的安装 .tar.gz的安装 源码安装 本地安装报错(依赖) Pycharm中安装 手 ...

  6. [转帖]微服务集成skywalking实现全链路日志追踪方案

    目录 1.安装部署skywalking 1.1 环境准备 1.2 部署步骤 2.微服务整合skywalking实现链路监控 2.1 下载skywalking官方版本 2.2 将微服务引入skywalk ...

  7. [转帖]Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007)

    https://www.cnblogs.com/yoyoketang/p/10255100.html 前言 使用ab压力测试时候出现报错apr_pollset_poll: The timeout sp ...

  8. [转帖]查看堆内对象的工具:jmap

    文章目录 用途 命令格式 示例 一,no option 二,heap 三,histo[:live] 四,clstats 五,finalizerinfo 六,dump:<dump-options& ...

  9. [转帖]CPU Utilization is Wrong

    Brendan Gregg's Blog home CPU Utilization is Wrong 09 May 2017 The metric we all use for CPU utiliza ...

  10. 编译打包rabbitmq然后一键部署的简单方法

    摘要 之前总结过一版,但是感觉不太全面 想着本次能够将使用中遇到的问题总结一下. 所以本次是第二版 介质下载 rabbitmq 不区分介质的打包文件 rabbitmq-server-generic-u ...