当前位置: 首页 > news >正文

ceph灾备之cephfs snapshot mirror和rsync对比

背景

最近要做ceph集群之间的灾备功能,主要讨论文件存储,因为ceph集群容量越来越大,接入的业务也越来越多,一旦出现故障,恢复时间都是小时级(根据经验每年都会出现几次这种事故),对于核心业务无法接受,最近搭建了一套集群做灾备,对cephfs数据的同步进行调研

cephfs同步方案

  • cephfs snapshot mirror
  • inotify+rsync

cephfs snapshot mirror

cephfs数据同步由cephfs-mirror守护进程管理,pacific以及之后的版本支持,详细说明见官方文档。
测试集群环境如下:

集群名称ceph版本osdMDS
local集群16.2.52个1T的HDD,组成两副本1主1备
remote集群16.2.52个1T的HDD,组成两副本1主1备

创建用户

local端用户

通过cephadm启动的cephfs-mirror进程,会自动创建用户,不需要单独创建

local$ ceph orch apply cephfs-mirror #ceph orch apply cephfs-mirror --placement=<placement-spec>
remote端用户

官方提供的ceph fs authorize <fs_name> client.mirror_remote / rwps 还需要赋mgr权限,所以直接使用以下命令:

remote$ ceph auth get-or-create client.mirror_remote mon 'allow r fsname=cephfs' mds 'allow rwps fsname=cephfs' osd 'allow rw tag cephfs data=cephfs' mgr 'allow *'

local和remote同步配置

remote端
  1. mgr是能mirror
remote$ ceph mgr module enable mirroring
  1. 创建peer的启动配置
    使用Bootstrap Peers管理比较方便,否则要在local端维护remote的ceph集群配置
remote$ ceph fs snapshot mirror peer_bootstrap create FILE_SYSTEM_NAME CLIENT_NAME SITE_NAME
remote$ ceph fs snapshot mirror peer_bootstrap create cephfs client.mirror_remote remote-site
{"token": 
"eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjo
gImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjogInNpdGUtcmVtb3RlIiwgImtleSI6ICJBUUFhcDBCZ0xtRmpOeEF
BVnNyZXozai9Y}
local端
  1. mgr使能mirror
local$ ceph mgr module enable mirroring
  1. cephfs开启mirror
ceph fs snapshot mirror enable <fs_name>
#关闭使用ceph fs snapshot mirror disable <fs_name>

3.添加peer端
把remote端创建的token导入到local

local$ ceph fs snapshot mirror peer_bootstrap import cephfs 
eyJmc2lkIjogIjBkZjE3MjE3LWRmY2QtNDAzMC05MDc5LTM2Nzk4NTVkNDJlZiIsICJmaWxlc3lzdGVtIjogImJhY2t1cF9mcyIsICJ1c2VyIjog
ImNsaWVudC5taXJyb3JfcGVlcl9ib290c3RyYXAiLCAic2l0ZV9uYW1lIjo
#如果取消添加对端 执行 ceph fs snapshot mirror peer_remove FILE_SYSTEM_NAME PEER_UUID
查看peer端状态

查看添加的remote信息

local$ ceph fs snapshot mirror peer_list cephfs
{"e5ecb883-097d-492d-b026-a585d1d7da79": {"client_name": "client.mirror_remote", "site_name": "remote-site", 
"fs_name": "cephfs", "mon_host": "[v2:10.0.211.54:3300/0,v1:10.0.211.54:6789/0] [v2:10.0.210.56:3300/0,v1:
10.0.210.56:6789/0] [v2:10.0.210.65:3300/0,v1:10.0.210.65:6789/0]"}}
添加同步目录

上述步骤完成后就可以开始配置同步的目录了

 local$ ceph fs snapshot mirror add <fs_name> <path>
查看状态
  1. mirror进程的状态
 local$ ceph fs snapshot mirror daemon status <fs_name>
  1. 同步的状态
#通过help可以看到有两条查看同步状态的命令
local$ ceph --admin-daemon /path/to/mirror/daemon/admin/socket help
:
local$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror status filesystem-name@filesystem-id
local$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status filesystem-name@filesystem-id peer-uuid 
:
#查看镜像状态
local$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror status cephfs@360
#查看往remote端同步的状态
local$ ceph --admin-daemon /var/run/ceph/cephfs-mirror.asok fs mirror peer status cephfs@360 a2dc7784-e7a1-4723-
b103-03ee8d8768f8

开始同步

上述配置完成后还不能同步目录,因为cephfs snapshot mirror同步的是snap,因此需要创建snap才能够同步,snap的创建有两种方式:

  1. 使用官方的scheduled snapshots,每隔一定周期创建一个snap,cephfs mirror自动扫描最新的snapshot开始同步
  2. 手动在同步的目录下创建文件夹,如当前mirror同步配置的目录是/test_sync,则cd /test_sync/.snap/snap_test,cephfs-mirror默认10秒扫描一次,如果扫描到snap_test为最新的snapshot,开始同步。这种方式不用等调度,可以快速验证同步机制。cephfs mirror是根据local和remote的snapid判断是否为最新,详细原理可以参考cephfs mirror同步工具源码

inotify+rsync

inotify+rsync是从客户端角度的同步方案,rsync可以全量和增量同步数据,结合inotify获取当前变更的文件进行同步,减少无效的目录扫描,由于rsync是很成熟的方案,这里不再详细介绍

测试结论

  • cephfs snapshot mirror同步10MB以下的文件时性能比直接写入remote的性能差,性能损耗50%左右,把10MB作为分割点应该和测试环境有关,但是可以确认的是同步4k、64k等的小文件性能会有很大的损耗。10MB以上的大文件的同步和直接写入性能相当。
  • 此外基于快照的同步因两次快照的间隔会出现数据丢失的问题,如果使用schedule
    snap的方式管理,粒度最小是1h,做灾备要允许丢至少1h的数据。
  • 在测试过程中对cephfs mirror的源码进行了解,cephfs mirror是基于libcephfs进行快照同步,通过扫描快照中的文件进行同步,对于文件数比较多的目录会对mds会造成很大的压力,甚至导致锁住文件影响正常业务读写。

总结和思考

从测试结果来看mirror的同步适用场景比较局限,大文件、允许丢失一段时间的数据、文件数比较小的场景比较适合。通过以上的测试对比,最终还是选择inotify+rsync做数据同步。但是有两个问题需要继续调研解决的:

  1. 无论cephfs mirror还是rsync都是对目录的扫描,如果cephfs目录小文件达到几十万上百万个,一次扫描下来会导致文件锁死的隐患影响业务性能,如果在ceph侧做文件数限制比较困难,因为每个业务都要调整自己的读写模式,局限性太大。当然,如果文件数不多,这也就不是问题了
  2. 增量更新都是基于文件的,如果1G的文件更新了数据,同步的时候是整个文件,业务频繁更新会产生大量的同步带宽,占用无效资源。目前还没有发现有工具能解决这个问题,当前的解决方案是通过拉长同步时间线的方式,比如把更新调整为10分钟内更新一次,无论这10分钟更新多少次或更新10次之后再更新等等,具体方案要结合业务场景制定;或有什么办法能够知道文件更新了哪些数据,这样只需要更新这部分数据即可,还需要调研。

以上是对cephfs snapshot mirror和rsync的测试思考,如果有哪位大佬有更好的方案,或在以上测试结论中有疑问的地方,还请多多指教,一起探讨。

参考

cephfs-mirroring
snap-schedule
source code cephfs_mirror
rsync
inotify-tools

相关文章:

ceph灾备之cephfs snapshot mirror和rsync对比

背景 最近要做ceph集群之间的灾备功能&#xff0c;主要讨论文件存储&#xff0c;因为ceph集群容量越来越大&#xff0c;接入的业务也越来越多&#xff0c;一旦出现故障&#xff0c;恢复时间都是小时级(根据经验每年都会出现几次这种事故)&#xff0c;对于核心业务无法接受&…...

【工具分享】Plutocrypt勒索病毒解密工具

前言 Plutocrypt勒索软件首次出现在2021年&#xff0c;作为CryptoJoker勒索软件的变种。该恶意软件通过钓鱼邮件和恶意链接传播&#xff0c;主要针对个人和小型企业用户。Plutocrypt使用了.NET框架开发&#xff0c;并依赖AES-256和RSA-4096的加密算法来加密受害者的文件。与Cr…...

IDEA启动提示Downloading pre-built shared indexes

Download pre-built shared indexes Reduce the indexing time and CPU load with pre-built JDK shared indexes 翻译&#xff1a; 下载预构建的共享索引 使用预构建的JDK共享索引减少索引时间和CPU负载. 使用预构建的JDK共享索引可以显著减少索引构建时间和CPU负载&#xf…...

[HCTF 2018]WarmUp 1--详细解析

打开靶机&#xff0c;进入界面&#xff1a; 信息搜集 当前界面没有任何有用信息。 想到查看页面源代码。右键–查看页面源代码 看到hint&#xff1a;<!--source.php--> 进入/source.php页面&#xff0c;看到页面源代码&#xff1a; <?phphighlight_file(__FILE_…...

软考教材重点内容 信息安全工程师 第1章 网络信息安全概述

第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求&#xff0c;即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…...

TOSHIBA 74VHC00FT COMS汽车、工业企业的选择

74VHC00FT 是一种四路双输入 NAND 门&#xff0c;属于 CMOS 系列数字集成电路。它采用东芝先进的硅栅 C2MOS 技术设计&#xff0c;能够实现类似于双极性肖特基 TTL 逻辑电路的高速运行&#xff0c;同时保持 CMOS 器件的低功耗。这种独特的结合使其非常适合需要高性能和低功耗的…...

【Android】使用productFlavors构建多个变体

项目需求 在一个设备上安装两个一样的程序app 需求解决 我们知道每一个app都有一个包名的&#xff0c;如果一个app在Android设备上安装之后&#xff0c;再安装这个app的话会进行覆盖安装&#xff0c;因为他们两个的包名是一样的&#xff0c;默认是一个app。 但是我们现在需…...

ubuntu 22.04 防火墙 ufw

Ubuntu&#xff08;22.04&#xff09;云主机SSH安全加固 https://blog.csdn.net/qq_44846097/article/details/141098092 ubuntu22.04防火墙策略 https://blog.csdn.net/sunyuhua_keyboard/article/details/139493464 Ubuntu 22.04 防火墙设置和开放端口命令 https://blog.c…...

MySQL压缩版安装详细图解

1.下载 mysql压缩包版本和msi版的安装方法不一样&#xff0c;下面的是压缩包版本的安装详细图解&#xff1a; 总地址下载地址&#xff1a;MySQL :: Download MySQL Community Server MySQL :: Download MySQL Community Server (Archived Versions) 压缩版下载MySQL :: Dow…...

elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法

elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法 试过网上其他方法&#xff0c;发现表单清空数据还是有问题&#xff0c;索性用下面方法解决: // 给弹框里面添加 v-ifvisible测试无问题&#xff0c;暂时先这样解决&#xff0c;如果有其他方法&#x…...

软件开发项目管理:实现目标的实用指南

由于软件项目多数是复杂且难以预测的&#xff0c;对软件开发生命周期的深入了解、合适的框架以及强大的工作管理平台是必不可少的。项目管理系统在软件开发中通常以监督为首要任务&#xff0c;但优秀的项目计划、管理框架和软件工具可以使整个团队受益。 软件开发项目管理的主要…...

Jenkins面试整理-如何在 Jenkins 中进行并行构建?

在 Jenkins 中,并行构建 是通过并行执行多个任务来提高构建效率的常见方法。并行构建特别适用于需要执行多个独立步骤的工作流,如并行测试、构建不同平台上的软件或并行执行多个阶段。Jenkins 提供了两种方式来配置并行构建:Declarative Pipeline 和 Scripted Pipeline。下面…...

DPDK(F-Stack) 实现UDP通信

因刚开始学习DPDK&#xff0c;在学习过程中了解到需使用用户态协议栈&#xff0c;在网上找到F-Stack的相关介绍&#xff0c;但是缺乏DPDK的相关知识&#xff0c;导致使用F-Stack 时UDP数据无法收到 一文了解dpdk rte_ring无锁队列F-Stack实现UDP服务端、客户端&#xff0c;并进…...

基于ExtendSim的库存与订购实验

说明&#xff1a; 库存和订购实验室是一个单部件模拟模型&#xff0c;旨在测试从组件需求站点到组件分发站点的订购策略&#xff0c;以及 在组件分销现场的生产区域内。最佳解决方案允许为需求站点提供高服务级别&#xff0c;同时最大限度地降低总库存水平。 该模型演示了分层模…...

操作系统个人八股文总结

1.进程和线程的区别 进程和线程的定义 进程&#xff1a; 进程是一个运行中的程序实例&#xff0c;是资源分配的基本单位。每个进程都有自己的地址空间、数据、堆栈以及其他辅助数据。线程&#xff1a; 线程是进程中的一个执行单元&#xff0c;是CPU调度的基本单位。一个进程可…...

scala set训练

Set实训内容&#xff1a; 1.创建一个可变Set&#xff0c;用于存储图书馆中的书籍信息&#xff08;假设书籍信息用字符串表示&#xff09;&#xff0c;初始化为包含几本你喜欢的书籍 2.添加两本新的书籍到图书馆集合中&#xff0c;使用操作符 3.删除一本图书馆集合中的书籍&…...

【d63】【Java】【力扣】141.训练计划III

思路 使用递归实现 出口 &#xff0c;遇到null 每一层要做&#xff1a;把下层放进去&#xff0c;把本层放下去 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { …...

【Linux】- 权限(2)

接上一篇文章&#xff0c;继续介绍linux权限的相关知识。https://blog.csdn.net/hffh123/article/details/143432940?spm1001.2014.3001.5501j 目录 一、chown&#xff1a;修改文件的拥有者 二、chgrp&#xff1a;修改文件所属组 三、关于other的介绍 四、文件类型 1、分类…...

如何设置内网IP的端口映射到公网

在现代网络环境中&#xff0c;端口映射&#xff08;Port Mapping&#xff09;是一项非常实用的技术&#xff0c;它允许用户将内网设备的服务端口映射到公网&#xff0c;使外网用户可以访问内网中的服务。这项技术在远程办公、设备远程控制、游戏服务器、家庭监控等场景中得到了…...

Matplotlib | 条形图中的每个条形(patch)设置标签数据的方法

方法一 不使用子图对象如何给形图中的每个条形设置数据 plt.figure(figsize(8, 4)) sns.countplot(xWorkout_Frequency (days/week), datadf)plt.title(会员每周锻炼频率分布) plt.xlabel(锻炼频率 (每周次数)) plt.ylabel(人数)# 获取当前活动的轴对象 ax plt.gca()# 循环遍…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...