首页 > 其他分享 >使用 Etcd 快照文件恢复 Etcd 数据:应对单节点及高可用集群情况

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

时间:2024-02-07 10:35:51浏览次数:32  
标签:opt 10.20 快照 Etcd -- etcd 节点

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 节点配置文件中配置的路径作为新节点数据目录。

/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 etcd03 \
--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.105:2380 \
--data-dir=/var/lib/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数据

标签:opt,10.20,快照,Etcd,--,etcd,节点
From: https://www.cnblogs.com/zhangmingcheng/p/18010039

相关文章

  • vue2中el-tree组件实现双击树的节点来修改节点名称
    目标在没双击之前,树的节点是文本样式。在双击之后,节点位置变成输入框形式,原节点的名称显示在输入框中,可以进行修改。修改完毕之后,当输入框失去焦点的时候,输入框消失,又变成原本的文本样式,并且显示的是修改后的节点名称。添加一个树<template><div><el-tree......
  • Etcd读写性能测试
    单节点etcd集群,etcd版本是3.4.9。编译etcdbenchmarkgitclonehttps://github.com/etcd-io/etcd.gitcdetcd/gitcheckoutv3.4.9rm-rfvendorgoinstall-v./tools/benchmarkgolist-f"{{.Target}}"./tools/benchmark写入测试KeyENDPOINTS=https://192.168.3.14:2......
  • 【JAVA】Java 使用 XPath表达式定位节点读取自定义XML方法
    *加载配置文件节点*@paramattributeValue节点属性值*@paramareaCode节点属性值*/publicstaticMap<String,String>getConfigXml(StringattributeValue,StringareaCode){StringfilePath="config.xml";Map<St......
  • 深入解析 Flink CDC 增量快照读取机制
    深入解析FlinkCDC增量快照读取机制一、Flink-CDC1.x痛点FlinkCDC1.x使用Debezium引擎集成来实现数据采集,支持全量加增量模式,确保数据的一致性。然而,这种集成存在一些痛点需要注意:一致性通过加锁保证:在保证数据一致性时,Debezium需要对读取的库或表加锁。全局锁可能导致数......
  • 在K8S中,etcd组件功能及其特点是什么?
    在Kubernetes(简称K8s)中,etcd是一个极其重要的组件,它是分布式键值存储系统,用于保存集群的配置数据和状态信息。以下是etcd的主要特点:高可用性:etcd设计为集群模式运行,支持多节点部署,通过Raft一致性算法实现数据复制与故障恢复,即使部分节点出现故障,集群也能继续提供服务。强一致......
  • 在K8S中,etcd适应的场景有哪些?
    在Kubernetes(简称K8s)中,etcd作为核心组件,主要用于以下场景:集群状态存储:etcd是Kubernetes控制平面的核心部分,用于持久化存储整个集群的状态信息。所有关于Pods、Services、ReplicaSets、Deployments、Namespaces等各类资源对象的配置数据和状态变更都会被记录在etcd中。服务发......
  • XmlDocument 解决 Clone、CloneNode、ImportNode 等节点克隆后的标签自闭合问题
    前言:这两天在对Taurus.Mvc 做html 加载性能优化时,发现存在这个问题。具体优化的是CYQ.Data 组件的XHtmlAction 相关类。问题过程:之前XmlDocument 调用 LoadXml(xml)之后,缓存对象,再次使用时,都是重新LoadXml:XmlDocumentnewDoc=newXmlDocument();......
  • ganache搭建私有测试节点
    1.Ganche简介1.1.什么是Ganache?Ganache是DApp的测试网络,提供图形化界面,log日志等;智能合约部署时需要连接测试网络。Ganache是一个运行在本地测试的网络,通过结合cpolar内网穿透软件,即可比较简单实现远程或者不同局域网进行连接访问,下面简单概括设置和连接方法1.2.环境......
  • 动力节点最新RocketMQ基本操作-01
    动力节点最新RocketMQ基本操作1. RocketMQ简介MQ====MessageQueue编程中的 同步:排队一个一个走;一个动作做完以后,才能进行下一个异步:各走各的;两个动作可以同时做;官网:  http://rocketmq.apache.org/ RocketMQ是阿里巴巴2016年MQ中间件,使用Java语言开发,RocketMQ 是......
  • 单节点多集群流量转发方法
    引言在实验环境(裸机)中部署多个有雀CRC集群(CRC介绍请看 容器云平台本地集群UCCPSCRC介绍),导致集群间抢占宿主机80、443端口情况,本文用外部负载均衡方案解决端口冲突问题。当然本方法也对裸机搭建的Kubernete的Ingress或者gatewayAPI也有效。本方案适用于根据域名转发流量的......