ceph灾备之cephfs snapshot mirror和rsync对比
背景
最近要做ceph集群之间的灾备功能,主要讨论文件存储,因为ceph集群容量越来越大,接入的业务也越来越多,一旦出现故障,恢复时间都是小时级(根据经验每年都会出现几次这种事故),对于核心业务无法接受,最近搭建了一套集群做灾备,对cephfs数据的同步进行调研
cephfs同步方案
- cephfs snapshot mirror
- inotify+rsync
cephfs snapshot mirror
cephfs数据同步由cephfs-mirror守护进程管理,pacific以及之后的版本支持,详细说明见官方文档。
测试集群环境如下:
| 集群名称 | ceph版本 | osd | MDS |
|---|---|---|---|
| local集群 | 16.2.5 | 2个1T的HDD,组成两副本 | 1主1备 |
| remote集群 | 16.2.5 | 2个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端
- mgr是能mirror
remote$ ceph mgr module enable mirroring
- 创建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端
- mgr使能mirror
local$ ceph mgr module enable mirroring
- 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>
查看状态
- mirror进程的状态
local$ ceph fs snapshot mirror daemon status <fs_name>
- 同步的状态
#通过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的创建有两种方式:
- 使用官方的scheduled snapshots,每隔一定周期创建一个snap,cephfs mirror自动扫描最新的snapshot开始同步
- 手动在同步的目录下创建文件夹,如当前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做数据同步。但是有两个问题需要继续调研解决的:
- 无论cephfs mirror还是rsync都是对目录的扫描,如果cephfs目录小文件达到几十万上百万个,一次扫描下来会导致文件锁死的隐患影响业务性能,如果在ceph侧做文件数限制比较困难,因为每个业务都要调整自己的读写模式,局限性太大。当然,如果文件数不多,这也就不是问题了
- 增量更新都是基于文件的,如果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集群之间的灾备功能,主要讨论文件存储,因为ceph集群容量越来越大,接入的业务也越来越多,一旦出现故障,恢复时间都是小时级(根据经验每年都会出现几次这种事故),对于核心业务无法接受&…...
【工具分享】Plutocrypt勒索病毒解密工具
前言 Plutocrypt勒索软件首次出现在2021年,作为CryptoJoker勒索软件的变种。该恶意软件通过钓鱼邮件和恶意链接传播,主要针对个人和小型企业用户。Plutocrypt使用了.NET框架开发,并依赖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 翻译: 下载预构建的共享索引 使用预构建的JDK共享索引减少索引时间和CPU负载. 使用预构建的JDK共享索引可以显著减少索引构建时间和CPU负载…...
[HCTF 2018]WarmUp 1--详细解析
打开靶机,进入界面: 信息搜集 当前界面没有任何有用信息。 想到查看页面源代码。右键–查看页面源代码 看到hint:<!--source.php--> 进入/source.php页面,看到页面源代码: <?phphighlight_file(__FILE_…...
软考教材重点内容 信息安全工程师 第1章 网络信息安全概述
第 1 章 网络信息安全概述 1.1.1 网络信息安全相关概念 狭义上的网络信息安全特指网络信息系统的各组成要素符合安全属性的要求,即机密性、完整性、可用性、抗抵赖性、可控性。 广义上的网络信息安全是涉及国家安全、城市安全、经济安全、社会安全、生产安全、人身安…...
TOSHIBA 74VHC00FT COMS汽车、工业企业的选择
74VHC00FT 是一种四路双输入 NAND 门,属于 CMOS 系列数字集成电路。它采用东芝先进的硅栅 C2MOS 技术设计,能够实现类似于双极性肖特基 TTL 逻辑电路的高速运行,同时保持 CMOS 器件的低功耗。这种独特的结合使其非常适合需要高性能和低功耗的…...
【Android】使用productFlavors构建多个变体
项目需求 在一个设备上安装两个一样的程序app 需求解决 我们知道每一个app都有一个包名的,如果一个app在Android设备上安装之后,再安装这个app的话会进行覆盖安装,因为他们两个的包名是一样的,默认是一个app。 但是我们现在需…...
ubuntu 22.04 防火墙 ufw
Ubuntu(22.04)云主机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版的安装方法不一样,下面的是压缩包版本的安装详细图解: 总地址下载地址:MySQL :: Download MySQL Community Server MySQL :: Download MySQL Community Server (Archived Versions) 压缩版下载MySQL :: Dow…...
elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法
elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法 试过网上其他方法,发现表单清空数据还是有问题,索性用下面方法解决: // 给弹框里面添加 v-ifvisible测试无问题,暂时先这样解决,如果有其他方法&#x…...
软件开发项目管理:实现目标的实用指南
由于软件项目多数是复杂且难以预测的,对软件开发生命周期的深入了解、合适的框架以及强大的工作管理平台是必不可少的。项目管理系统在软件开发中通常以监督为首要任务,但优秀的项目计划、管理框架和软件工具可以使整个团队受益。 软件开发项目管理的主要…...
Jenkins面试整理-如何在 Jenkins 中进行并行构建?
在 Jenkins 中,并行构建 是通过并行执行多个任务来提高构建效率的常见方法。并行构建特别适用于需要执行多个独立步骤的工作流,如并行测试、构建不同平台上的软件或并行执行多个阶段。Jenkins 提供了两种方式来配置并行构建:Declarative Pipeline 和 Scripted Pipeline。下面…...
DPDK(F-Stack) 实现UDP通信
因刚开始学习DPDK,在学习过程中了解到需使用用户态协议栈,在网上找到F-Stack的相关介绍,但是缺乏DPDK的相关知识,导致使用F-Stack 时UDP数据无法收到 一文了解dpdk rte_ring无锁队列F-Stack实现UDP服务端、客户端,并进…...
基于ExtendSim的库存与订购实验
说明: 库存和订购实验室是一个单部件模拟模型,旨在测试从组件需求站点到组件分发站点的订购策略,以及 在组件分销现场的生产区域内。最佳解决方案允许为需求站点提供高服务级别,同时最大限度地降低总库存水平。 该模型演示了分层模…...
操作系统个人八股文总结
1.进程和线程的区别 进程和线程的定义 进程: 进程是一个运行中的程序实例,是资源分配的基本单位。每个进程都有自己的地址空间、数据、堆栈以及其他辅助数据。线程: 线程是进程中的一个执行单元,是CPU调度的基本单位。一个进程可…...
scala set训练
Set实训内容: 1.创建一个可变Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示),初始化为包含几本你喜欢的书籍 2.添加两本新的书籍到图书馆集合中,使用操作符 3.删除一本图书馆集合中的书籍&…...
【d63】【Java】【力扣】141.训练计划III
思路 使用递归实现 出口 ,遇到null 每一层要做:把下层放进去,把本层放下去 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { …...
【Linux】- 权限(2)
接上一篇文章,继续介绍linux权限的相关知识。https://blog.csdn.net/hffh123/article/details/143432940?spm1001.2014.3001.5501j 目录 一、chown:修改文件的拥有者 二、chgrp:修改文件所属组 三、关于other的介绍 四、文件类型 1、分类…...
如何设置内网IP的端口映射到公网
在现代网络环境中,端口映射(Port Mapping)是一项非常实用的技术,它允许用户将内网设备的服务端口映射到公网,使外网用户可以访问内网中的服务。这项技术在远程办公、设备远程控制、游戏服务器、家庭监控等场景中得到了…...
Matplotlib | 条形图中的每个条形(patch)设置标签数据的方法
方法一 不使用子图对象如何给形图中的每个条形设置数据 plt.figure(figsize(8, 4)) sns.countplot(xWorkout_Frequency (days/week), datadf)plt.title(会员每周锻炼频率分布) plt.xlabel(锻炼频率 (每周次数)) plt.ylabel(人数)# 获取当前活动的轴对象 ax plt.gca()# 循环遍…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
