首页 > 数据库 >etcd 数据库的备份和恢复

etcd 数据库的备份和恢复

时间:2024-03-06 14:55:05浏览次数:14  
标签:key kubernetes -- 备份 etc etcd pki 数据库

在K8s中,很多etcd服务都是以容器的方式运行,比如使用 ranche r和 kubeadm 部署管理的容器等。

由于kubeadm部署的etcd没有etcdctl命令,需要下载etcd二进制包。通过在宿主机上使用etcdctl操作容器中的etcd。

1、etcdctl安装

# wget https://github.com/etcd-io/etcd/releases/download/v3.4.13/etcd-v3.4.13-linux-amd64.tar.gz
# tar zxvf etcd-v3.4.13-linux-amd64.tar.gz
# cp -rp etcd-v3.4.13-linux-amd64/etcdctl /usr/bin

2、k8s中,etcd集群以pod方式运行

查看etcd pod运行状态
# kubectl -n kube-system get pod |grep etcd
etcd-10.0.8.105                           1/1     Running   0          42d
etcd-10.0.8.116                           1/1     Running   0          42d
etcd-10.0.8.117                           1/1     Running   0          42d
 
查看ETCD的详细信息,包括证书、文件存储位置等信息.
# kubectl -n kube-system describe pod etcd-10.0.8.105
 
查看ETCD的运行:
# ps -ef | grep etcd

3、基础命令检查

复制代码
# ECTD_API=3 etcdctl  \
    --cacert=/etc/kubernetes/pki/etcd/ca.crt  \
    --cert=/etc/kubernetes/pki/etcd/server.crt \
    --key=/etc/kubernetes/pki/etcd/server.key  \
    --endpoints=https://10.0.8.105:2379 endpoint health
执行结果如下:
https://10.0.8.105:2379 is healthy: successfully committed proposal: took = 19.038298ms
复制代码

# 查看所有的key

# ECTD_API=3 etcdctl  --cacert=/etc/kubernetes/pki/etcd/ca.crt  \
    --cert=/etc/kubernetes/pki/etcd/server.crt \
    --key=/etc/kubernetes/pki/etcd/server.key  \
    --endpoints=https://10.0.8.105:2379 \
    get /  --prefix --keys-only

# 查看某一个key

#ECTD_API=3 ECTD_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --endpoints=https://10.0.8.105:2379 \
  get /registry/namespaces/default

 4、备份,备份命令如下:

复制代码
创建备份目录
# mkdir -p /opt/etcd_backup/
备份etcd数据
ETCDCTL_API=3 etcdctl \
    snapshot save /opt/etcd_backup/snap-etcd-$(date +%F-%H-%M-%S).db \
    --endpoints=https://10.0.8.105:2379 \
    --cacert=/etc/kubernetes/pki/etcd/ca.crt \
    --cert=/etc/kubernetes/pki/etcd/server.crt \
    --key=/etc/kubernetes/pki/etcd/server.key


注: 会生成一个路径为"/opt/etcd_backup/snap-etcd-2021-11-12-15-09-38.db" 的etcd备份文件。
复制代码

 5、ETCD恢复测试:

(1)为了方便测试,先删除pod,或者创建某个namespace.

# kubectl delete pod rabbitmq-d78d7ff5f-zn9jt

(2) 恢复etcd备份

复制代码
1) 停掉kube-apiserver和etcd容器
# mv /etc/kubernetes/manifests/ /etc/kubernetes/manifests-backup/

2) 对现在的etcd数据进行备份
# mv /var/lib/etcd/ /var/lib/etcd-$(date +%F-%H-%M-%S)-backup/

3) 恢复之前备份的etcd数据
# ETCDCTL_API=3 etcdctl \
snapshot restore /opt/etcd_backup/snap-etcd-2021-11-12-13-34-15.db \
--data-dir=/var/lib/etcd/
注: /var/lib/etcd/目录不存在时,还原时会自动创建
4) 启动kube-apiserver和etcd容器 # mv /etc/kubernetes/manifests-backup/ /etc/kubernetes/manifests/ 注: 容器启动需要一定时间,请耐心等待还原完成 5) 然后重启所有节的kube-proxy容器和kubelet服务,否则pod无法正常进行访问 # kubectl delete pod/<kube-proxy容器名> -n kube-system # system restart kubelet.service 6) 再次查看,发现之前删除的pod恢复回来了 # kubectl get pod -o wide
复制代码

 

参考文档:https://www.cnblogs.com/LiuChang-blog/p/15352764.html

        https://zhuanlan.zhihu.com/p/281742226

标签:key,kubernetes,--,备份,etc,etcd,pki,数据库
From: https://www.cnblogs.com/user-sunli/p/18056612

相关文章

  • JDBC中的数据库事务实现
    1packagecom.atsyc.api.transaction;23//银行卡业务方法,调用dao方法45importorg.junit.Test;67importjava.sql.Connection;8importjava.sql.DriverManager;910/*11*TODO:12*事物添加是在业务方法中13*利用trycatch代码块,......
  • 神通数据库异机恢复(主库不停机)
    1.主库上需要确保在归档模式[root@localhostbin]#./isql-hlocalhost-p2003-dHXLsysdbaSQL>selectlog_modefromv$database;LOG_MODE------------ARCHIVELOG(1row)若数据库不在归档模式,需要按照如下命令进行修改为归档模式mkdir-p/opt/ShenTong/archalterd......
  • 私有网盘服务dzzoffice备份脚本
    这里的备份脚本基于上一篇文章中记录的dzzoffice部署方式进行备份#!/bin/bash#备份网盘服务#备份路径BACKUP=/data/backup/#dzzoffice路径DZZOFFICE=/data/dzzofficeDATE=$(date+\%Y-\%m-\%d)#要备份的数据库,多个用空格分隔dblist=(dzzoffice)echo'开始执行备份......
  • MySQL 数据库巡检都有哪些内容
    一套正常运行的系统是一个复杂的系统工程,牵涉到主机、操作系统、网络、数据库、中间件、底层存储,还有系统的核心:应用。任何层面的故障都可能造成系统的不可用。今天聊一聊数据库层面的巡检问题。数据库巡检的目的:保障数据库的正常运行,保证数据的安全性,完整性、可靠性。这篇文章......
  • 神通数据库异机恢复
     1.主库上需要确保在归档模式[root@localhostbin]#./isql-hlocalhost-p2003-dHXLsysdbaSQL>selectlog_modefromv$database;LOG_MODE------------ARCHIVELOG(1row) 若数据库不在归档模式,需要按照如下命令进行修改为归档模式mkdir-p/opt/ShenTo......
  • Docker数据库容器(四)
    前言前面都以Nginx容器为例,介绍很Docker容器的运用。但是对于数据库的容器,在创建的时候却涉及到了Docker的环境变量设置,这个对于很多项目都是非常重要的。所以这里单独深入了解这类型的容器创建。一、创建这里以Mysql容器为例,用之前Nginx的创建方式来创建容器。~]#d......
  • Mysql数据库安全和备份
    一、用户权限认证Mysql通过用户认证机制来和业务系统建立连接通道,当认证成功后,还需要通过访问控制模块来进行相关的权限验证,只有两次验证都通过后,才能继续执行SQL语句操作,这个过程涉及用户管理和访问控制两个模块。用户管理模块用于管理登录用户信息、设置相关权限,Mysql......
  • .NET6 + EF Core + MySQL 创建实体和数据库、EFCore 数据迁移、属性导航
    一、创建asp.netcoreweb(MVC)项目二、导包Microsoft.EntityFrameworkCore.DesignMicrosoft.EntifyFrameworkCore.ToolsPomelo.EntityFrameworkCore.MySql三、创建实例这里创建了两个实例namespacedemo.Models{publicclassSupplier{[DatabaseGe......
  • Oceanbase数据库创建分区时报错
    报错信息:ERROR1044(42000):Accessdeniedforuser'root'@'%'todatabase'oceanbase'报错原因:由于OceanBase数据库中,oceanbase库是系统库,里面存放的是系统的很多表,所以不能进行操作,换个库即可,一般到test库下,执行操作......
  • 数据库
    首先下载安装MySQL和navicat(用于管理数据源)下载和安装MySQL-Wild-bokeyuan-博客园(cnblogs.com)navicat免费下载-Wild-bokeyuan-博客园(cnblogs.com)打开navicat有多种数据源可选 点击MySQL连接本地mysql数据源密码是MySQL的密码 点击此选项新建一个库,可......