文档章节

ETCD数据库备份与还原

 拜了个拜
发布于 05/27 11:29
字数 911
阅读 26
收藏 0

1 备份etcd数据

etcdctl backup --data-dir /var/lib/etcd/default.etcd --backup-dir /root/etcdback

2 etcd备份脚本

#!/bin/bash
date_time=`date +%Y%m%d`
etcdctl backup --data-dir /var/lib/etcd/default.etcd --backup-dir /root/etcd71-${date_time}.etcd
tar cvzf etcd71-${date_time}.tar.gz etcd71-${date_time}.etcd
 
find /root/*.etcd -ctime +7 -exec rm -r {} \;
find /root/*.gz -ctime +7 -exec rm -r {} \;
tar cvzf etcdback-

3 V3版本备份

# mkdir -p /var/lib/etcd_backup/
# ETCDCTL_API=3 etcdctl snapshot  save /var/lib/etcd_backup/etcd_$(date "+%Y%m%d%H%M%S").db

4 恢复etcd数据(集群不可用,灾难恢复)

下面介绍下当整个etcd集群不可用的情况下,如何快速的恢复一个etcd集群。

1.首先需要停止master节点的kube-apiserver服务:

systemctl stop kube-apiserver

确保kube-apiserver已经停止了,执行下列命令返回值为0

2 停掉集群中的所有etcd服务

systemctl stop etcd
# ps -ef|grep etcd|grep -v etcd|wc -l
0
确保etcd停止成功

3 移除所有etcd服务实例的数据目录

mv /var/lib/etcd/data.etcd /var/lib/etcd/data.etcd_bak

分别在各个节点恢复数据,首先需要拷贝数据到每个etcd节点,假设备份数据存储在/var/lib/etcd_backup/backup_20180107172459.db

scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd01:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd02:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd03:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd04:/var/lib/etcd_backup/
scp /var/lib/etcd_backup/backup_20180107172459.db root@etcd05:/var/lib/etcd_backup/

在需要恢复的所有etcd实例上执行恢复命令:

ETCDCTL_API=3 etcdctl snapshot --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem  restore <备份数据> --name=<ETCD_NAME> --data-dir=<元数据存储路径> --initial-cluster=<ETCD_CLUSTER> --initial-cluster-token=<ETCD_INITIAL_CLUSTER_TOKEN>

4.同时启动etcd集群的所有etcd实例

systemctl start etcd

5.检查etcd集群member及健康状态

etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list
etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem cluster-health

6.启动master节点的所有kube-apiserver服务:

# systemctl start kube-apiserver
# systemctl status kube-apiserver

摘除etcd节点

向我们遇到的问题,需要将ceph节点的机器换成本地sata盘的机器,就需要先将部署在ceph上的etcd实例从集群中先摘除掉,然后在增加新的etcd实例到集群中。

1.查看etcd集群member信息

etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list

2.根据member信息移除具体的etcd实例

etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member remove <member_id>

3.停止etcd集群中被移除的etcd实例

# systemctl stop etcd
# yum remove -y etcd-xxxx

4.查看etcd实例是否从集群中被移除

etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member list

新增etcd节点

在已经存在的etcd节点上执行如下命令,增加新的etcd节点到集群中。

# etcdctl --ca-file=/etc/etcd/ssl/ca.pem --cert-file=/etc/etcd/ssl/etcd.pem --key-file=/etc/etcd/ssl/etcd-key.pem member add <etcd_name> http://<etcd_node_address>:2380
ETCD_NAME=etcd01
ETCD_INITIAL_CLUSTER="etcd01=http://ip1:2380,etcd02=http://ip2:2380,etcd03=http://ip3:2380,etcd04=http://ip4:2380,etcd05=http://ip5:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

注意:

  • etcd_name: etcd.conf配置文件中ETCD_NAME内容
  • etdc_node_address: etcd.conf配置文件中的ETCD_LISTEN_PEER_URLS内容

此时新的etcd节点已经被加到了现有的etcd集群。修改新增加的etcd节点的配置文件/etc/etcd/etcd.conf, 将ETCD_INITIAL_CLUSTER修改成上面输出的内容,并增加相关的配置。

启动新的etcd节点:

systemctl start etcd

并对已经存在的etcd节点的配置项ETCD_INITIAL_CLUSTER增加<new_etcd_node_name>=http://<new_etcd_node_address>:2380参数。并“同时”重启所有的etcd。

更新etcd节点

ETCDCTL_API=3 etcdctl member update  <member-ID> http://<etcd_node_address_ip>:2380

 

© 著作权归作者所有

粉丝 6
博文 119
码字总数 132667
作品 0
深圳
运维
私信 提问
Kubernetes集群的主节点备份与恢复

通常安装模式下(如使用kubeadm)的Kubernetes集群,主节点(Master)只有一个,而且集群数据存储服务etcd也只运行了一个实例。如果遇到极端情况(如整机故障、主硬盘损坏、数据误删除等)导...

openthings
2018/12/06
581
0
Kubernetes Master节点 灾备恢复操作指南

花了快很久时间测试,才完成的。 还有优化的可能的。 就是插件pod的认证。 Kubernetes Master节点 灾备恢复操作指南 目录 一,Etcd数据备份及恢复... 1 A,单节点etcd数据备份和恢复... 2 B,...

天飞
2018/03/22
0
0
Kubernetes探秘—etcd状态数据及其备份

Kubernetes使用etcd来存储集群的实时运行数据(如节点状态信息),而其它pod都是无状态的、可以根据负载调度,在多个节点(node)间进行漂移。etcd本身是可以部署为无中心的多节点互备集群,...

openthings
2018/12/05
1K
0
SQL Server还原数据库操作详细步骤

企业管理器 --右键"数据库" --所有任务 --还原数据库 --"还原为数据库库"中输入还原后的数据库名 --还原选择"从设备"--选择设备--添加--添加你的备份文件--确定,回到数据库还原的界面 --备份...

牛哞哞
2013/07/16
23
0
MSSQL-最佳实践-如何监控备份还原进度

title: MSSQL · 最佳实践 · 如何监控备份还原进度 author: 风移 摘要 本期月报是SQL Server备份还原专题分享系列的第六期,打算分享给大家如何监控SQL Server备份还原进度。 场景引入 由于...

风移
2018/05/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot初探---spring-boot-starter-web究竟干了啥

上一篇已经简单介绍了启动类的部分,这一篇主要讨论一下springboot引入的哪些依赖 我们都知道想用springboot做一个web应用,首先要做的是引入相关依赖,两步操作: 1、添加spring-boot-start...

计算机狼
33分钟前
5
0
基于Rocket.chat搭建内网聊天系统(使用docker,本机不需要安装meteor)

您可能不希望使用标准的Docker命令,而是希望对部署进行更多的自动化管理。这就是使用Docker-compose可能会派上用场的地方。 确保您已安装Docker和Docker-compose并且可以正常运行。 docker...

吴伟祥
35分钟前
6
0
conda 更新源

更新conda 源为阿里源 conda config --add channels http://mirrors.aliyun.com/pypi/simple conda config --set show_channel_urls yes 阿里云: http://mirrors.aliyun.com/pypi/simple/ 豆......

Mr_Tea伯奕
36分钟前
4
0
java 泛型使用

每次写泛型方法都翻下百度,还是自己记录下把。 1、定义一个泛型方法,使用传入参数类型来传递泛型。这种用法在封装json序列化工具类应该会用到。 List<xxx> aa = getList(xxx.class);pr...

朝如青丝暮成雪
40分钟前
6
0
深入了解Java模板引擎Freemarker

前言 常用的Java模板引擎包括:JSP、Freemarker、Thymeleaf、Velocity,从Github上查阅到这几款主流的模板引擎的性能的对比,总体上看,JSP、Freemarker、Thymeleaf、Velocity在性能上差别不...

code-ortaerc
41分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部