etcd数据备份数据恢复数据压缩碎片整理

2024-01-17 15:36

本文主要是介绍etcd数据备份数据恢复数据压缩碎片整理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这#!/usr/bin/python3
# encoding: utf-8
#filename: etcd-backups-restore-compress-defragmentation.py
#author: gaohaixiang
#writetime:202401161055"""
脚本功能:
etcd 数据备份,使用备份数据进行数据库重构,数据压缩,碎片整理数据压缩及碎片整理的原因:
etcd数据写入频繁,导致版本不断叠加,从而导致数据库不断变大 \
需要对其进行压缩,进行碎片整理,从而减小etcd数据库的大小etcd默认的数据存储大小为2G,当超过这个存储大小,可能会限制数据写入 \
或者报错mcc、NOSPACE,除了进行数据压缩碎片整理外,还可以进行参数调整 \
etcd启动添加参数 --quota-backend-bytes ,将etcd存储调整到多少 \
单位为B,10737418240 为10Getcd启动示例:
/opt/etcd/etcd --quota-backend-bytes=10737418240 --auth-token jwt --config-file=/opt/etcd/nodefile.yml注意:
备份恢复是选择最新的一个备份进行数据恢复,不是指定固定的备份来进行操作"""import json
import subprocess
import datetime
import os
import stat
import getpass# 命令执行
def run_command(command):process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)stdout, stderr = process.communicate()return process.returncode, stdout, stderr# 目录权限检查
def check_directory_access(directory):if not os.path.isdir(directory):# print(f"Directory {directory} does not exist")# return False# 创建目录os.makedirs(directory)# 更改目录的权限,使得所有用户都可以读取和写入os.chmod(directory, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)if not os.access(directory, os.R_OK):#print(f"User {getpass.getuser()} does not have read access to directory {directory}")#return False# 更改目录的权限,使得所有用户都可以读取和写入os.chmod(directory, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)if not os.access(directory, os.W_OK):#print(f"User {getpass.getuser()} does not have write access to directory {directory}")#return False# 更改目录的权限,使得所有用户都可以读取和写入os.chmod(directory, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)return True# 备份
def backup_etcd(endpoints, backup_dir):# 检查备份目录的访问权限if not check_directory_access(backup_dir):return False# 生成备份文件的名称backup_file = f"{backup_dir}/etcd_backup_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.db"# 执行备份操作backup_command = f"ETCDCTL_API=3 etcdctl --endpoints={endpoints} snapshot save {backup_file}"ret, stdout, stderr = run_command(backup_command)if ret != 0:print(f"Failed to backup etcd. Error: {stderr}")return Falseprint(f"Etcd backup completed successfully. Backup file is {backup_file}")return True# 备份恢复,etcd重构
def restore_etcd(backup_dir, restore_dir, name, initial_cluster, initial_advertise_peer_urls):# 检查备份目录和恢复目录的访问权限if not check_directory_access(backup_dir) or not check_directory_access(restore_dir):return False# 选择最新的备份文件backup_files = [f for f in os.listdir(backup_dir) if os.path.isfile(os.path.join(backup_dir, f))]backup_files.sort(reverse=True)if not backup_files:print("No backup files found")return Falsebackup_file = os.path.join(backup_dir, backup_files[0])# 执行恢复操作restore_command = f"ETCDCTL_API=3 etcdctl snapshot restore {backup_file} --name {name} --data-dir {restore_dir} --initial-cluster {initial_cluster} --initial-advertise-peer-urls {initial_advertise_peer_urls}"ret, stdout, stderr = run_command(restore_command)if ret != 0:print(f"Failed to restore etcd. Error: {stderr}")return Falseprint(f"Etcd restore completed successfully. Restored data is in {restore_dir}")return True# 数据压缩及碎片整理
def compact_and_defrag(endpoints):status_command = f"ETCDCTL_API=3 etcdctl --endpoints={endpoints} endpoint status --write-out=json"ret, stdout, stderr = run_command(status_command)if ret != 0:print(f"Failed to get etcd status. Error: {stderr}")returnstatus = json.loads(stdout)for s in status:revision = s['Status']['raftIndex']# 执行压缩操作compact_command = f"ETCDCTL_API=3 etcdctl --endpoints={endpoints} compact {revision}"ret, stdout, stderr = run_command(compact_command)if ret != 0:print(f"Failed to compact etcd. Error: {stderr}")return# 执行碎片整理操作defrag_command = f"ETCDCTL_API=3 etcdctl --endpoints={endpoints} defrag"ret, stdout, stderr = run_command(defrag_command)if ret != 0:print(f"Failed to defrag etcd. Error: {stderr}")returnprint("Etcd compact and defrag completed successfully")# etcd数据恢复,配置文件修改及启动
def etcd_start(timenow,restore_dir):etcdfiledata = """name: node1data-dir: %slisten-client-urls: 'http://192.168.73.10:2380'advertise-client-urls: 'http://192.168.73.10:2380'listen-peer-urls: 'http://192.168.73.10:2379'initial-advertise-peer-urls: 'http://192.168.73.10:2379'initial-cluster: node1=http://192.168.73.10:2379initial-cluster-token: etcd-cluster-1initial-cluster-state: new""" % restore_diretcdfile = "/data/etcd/nodefile%s.yml" % timenowff = open(etcdfile,"w")ff.writelines(etcdfiledata)ff.close()# 关闭etcdetcdKillCommand = "ps -ef |grep etcd|grep 'config-file'|grep -v grep|awk '{print $2}'|xargs kill -9"ret, stdout, stderr = run_command(etcdKillCommand)if ret != 0:print(f"Failed to start etcd. Error: {stderr}")# 启动etcdetcdStartCommand = "setsid nohup etcd --config-file=%s >> /data/etcd/etcd%s.log &" % (etcdfile,timenow)ret = subprocess.Popen(etcdStartCommand, shell=True)if not ret:print(f"Failed to start etcd. Error: {stderr}")def main():endpoints = "http://192.168.73.10:2379"  # 你的 etcd 节点的地址backup_dir = "/data/etcd/etcddatabak/"  # 你的备份目录timenow = datetime.datetime.now().strftime('%Y%m%d%H%M%S')restore_dir = "/data/etcd/etcddata%s" % timenow  # 你的恢复目录name = "node1"  # 你的 etcd 节点的名称initial_cluster = "node1=http://192.168.73.10:2379"  # 你的初始集群配置initial_advertise_peer_urls = "http://192.168.73.10:2379"  # 你的初始对等广播地址# # 先进行备份,然后再进行数据压缩,碎片整理# if backup_etcd(endpoints, backup_dir):#     compact_and_defrag(endpoints)# 数据备份backup_etcd(endpoints, backup_dir)# # 依据最新备份进行数据恢复# restore_etcd(backup_dir, restore_dir, name, initial_cluster, initial_advertise_peer_urls)# # 启动etcd# etcd_start(timenow, restore_dir)if __name__ == "__main__":main()

这篇关于etcd数据备份数据恢复数据压缩碎片整理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/616485

相关文章

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

rtmp流媒体编程相关整理2013(crtmpserver,rtmpdump,x264,faac)

转自:http://blog.163.com/zhujiatc@126/blog/static/1834638201392335213119/ 相关资料在线版(不定时更新,其实也不会很多,也许一两个月也不会改) http://www.zhujiatc.esy.es/crtmpserver/index.htm 去年在这进行rtmp相关整理,其实内容早有了,只是整理一下看着方

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

JavaScript整理笔记

JavaScript笔记 JavaScriptJavaScript简介快速入门JavaScript用法基础语法注释关键字显示数据输出innerHTML innerText属性返回值的区别调试 数据类型和变量数据类型数字(Number)字符串(String)布尔值(Boolean)null(空值)和undefined(未定义)数组(Array)对象(Object)函数(Function) 变量

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

损坏SD数据恢复的8种有效方法

SD卡被用于许多不同的产品来存储重要数据,如图片和重要的商业文件。如果您的SD卡坏了,您需要SD数据恢复来获取您的信息。通过从损坏的SD卡中取回数据,您可以确保重要文件不会永远丢失,这对于工作或个人原因是非常重要的。 有许多东西会损坏SD卡,因此有必要从中恢复数据。处理不当,如打碎或沾湿,会使卡无法使用。文件系统中的错误或错误倾倒都可能导致损坏。另一个需要好的SD卡恢复软件的常见问题是意外删除文

站长常用Shell脚本整理分享(全)

站长常用Shell脚本整理分享 站长常用Shell脚本整理分享1-10 站长常用Shell脚本整理分享11-20 站长常用Shell脚本整理分享21-30 站长常用Shell脚本整理分享31-40 站长常用Shell脚本整理分享41-50 站长常用Shell脚本整理分享51-59 长期更新

我自己常用的eclipse 快捷键整理

---------------- 我自己改的快捷键: 复制当前行单下一行  ctrl alt n   --------------------- 自带快捷键: 快速定位到一行  CTRL+L 向上(下)移动选中的行:ALT+UP/DOWN ARROW 删除行(Delete Line):CTRL+D CTRL + 1也很有用     ----------

C/C++ 网络聊天室在线聊天系统(整理重传)

知识点: TCP网络通信 服务端的流程: 1.创建socket套接字 2.给这个socket绑定一个端口号 3.给这个socket开启监听属性 4.等待客户端连接 5.开始通讯 6.关闭连接 解释: socket:类似于接口的东西,只有通过这个才能跟对应的电脑通信。 每一台电脑都有一个IP地址,一台电脑上有多个应用,每个应用都会有一个端口号。 socket一般分为两种类型,一种是通讯,一种是监听