复制策略深入探讨

在之前的博客中,我们讨论了复制最佳实践和不同类型的复制,例如批量、站点和存储桶。但是,随着所有这些不同类型的复制类型的出现,人们不得不想知道在哪里使用哪种复制策略?从现有 S3 兼容数据存储迁移数据时,您使用 mc mirror 还是 Batch?在集群之间进行复制时,应该使用站点复制还是存储桶复制?

今天我们将揭开这些不同复制策略的神秘面纱,看看在哪种情况下应该使用哪种策略。

从现有源复制

通常,如果您本地驱动器或现有 S3 兼容存储上已有数据,我们建议您使用以下两种方法之一来复制数据。

  • 批量复制:这必须需要 MinIO 或其他 S3 兼容存储(例如 AWS)的现有源。

  • 使用 mc mirror :这可以是本地目录或 NFS 挂载等。

在详细介绍之前,让我们先看一下一些先决条件。

在 mc 中为 MinIO 集群创建一个名为 miniostore 的 alias 。

mc alias set miniostore 

在 miniostore 中创建一个存储桶, olderstore 中的数据将传输到其中。

mc mb miniostore/mybucket

在 mc 中为 S3 兼容存储中的现有存储桶创建另一个 alias 。

mc alias set olderstore 

在这种情况下,我们假设 oldstore 中已经有一个名为 mybucket 的存储桶。

让我们看一下如何使用批量复制将数据从现有的 S3 兼容源迁移到 MinIO 存储桶。

为批量复制配置创建yaml

mc batch generate olderstore/ replicate

您应该看到类似于下面的 replication.yaml 文件, source 是 olderstore ,目标是 miniostore 。

replicate:apiVersion: v1# source of the objects is `olderstore` aliassource:type: TYPE # valid values are "s3"bucket: BUCKETprefix: PREFIX# NOTE: if source is remote then target must be "local"# endpoint: ENDPOINT# credentials:#   accessKey: ACCESS-KEY#   secretKey: SECRET-KEY#   sessionToken: SESSION-TOKEN # Available when rotating credentials are used# target where the objects is `miniostore` aliastarget:type: TYPE # valid values are "s3"bucket: BUCKETprefix: PREFIX# NOTE: if target is remote then source must be "local"# endpoint: ENDPOINT# credentials:#   accessKey: ACCESS-KEY#   secretKey: SECRET-KEY#   sessionToken: SESSION-TOKEN # Available when rotating credentials are used[TRUNCATED]

使用以下命令执行批量复制

mc batch status olderstore/ E24HH4nNMcgY5taynaPfxu●∙∙Objects:    	28766Versions:   	28766Throughput: 	3.0 MiB/sTransferred:	406 MiBElapsed:    	2m14.227222868sCurrObjName:	share/doc/xml-core/examples/foo.xmlcatalogs

使用上面的复制作业 ID(在本例中为 E24HH4nNMcgY5taynaPfxu ),我们可以找到批处理作业的状态。

mc batch list olderstore/ID                  	TYPE        	USER        	STARTEDE24HH4nNMcgY5taynaPfxu  replicate   	minioadmin  	1 minute ago

您可以列出并查找当前正在运行的所有批处理作业的配置。

mc batch describe olderstore/ E24HH4nNMcgY5taynaPfxureplicate:apiVersion: v1
mc batch describe olderstore/ E24HH4nNMcgY5taynaPfxu

例如,如果批处理作业使网络饱和并且您需要稍后在流量最少时恢复它,您也可以取消并启动批处理作业。

mc mirror

让我们快速看一下 mc mirror 在这种情况下如何工作。

mc mirror --watch olderstore/mybucket miniostore/mybucket

上面的命令与rsync类似。它不仅会将数据从 olderstore 复制到 miniostore ,还会在 olderstore 上查找传入的较新对象,然后将它们复制到 miniostore

您可以比较两个桶,看看数据是否复制成功。

mc diff olderstore/mybucket miniostore/mybucket

就这么简单。

哪个是更好的选择?

虽然 mc mirror 看起来简单明了,但我们实际上推荐使用批量复制方法从现有的S3兼容存储中迁移数据,原因有几个。

批量复制在服务器端运行,而 mc mirror 在客户端运行。这意味着批复制拥有运行 MinIO 服务器来执行批处理作业的全部可用资源。另一方面, mc mirror 受到运行命令的客户端系统的瓶颈,因此您的数据会走更长的路线。换句话说,使用批量复制时,跟踪路由将类似于 olderstore -> miniostore ,但使用镜像时,将类似于 olderstore -> mc mirror -> miniostore 。

批处理作业是一次性过程,允许精细控制复制。例如,在运行复制时,如果您发现网络已饱和,您可以取消批量复制作业,然后在流量最少的非工作时间恢复。如果某些对象无法复制,作业将重试多次,以便最终复制对象。

那么批量复制就没有缺点吗?嗯,不是很多。我们在现实世界中看到的一个可能的问题是,有时批量复制很慢而且不是即时的。根据网络传输和速度,与其他方法相比,您可能会发现速度有些慢。话虽这么说,我们仍然建议批量复制,因为它更稳定,并且我们可以更好地控制数据迁移的方式和时间。

复制到另一个站点

一旦 MinIO 集群中有数据,您需要确保将数据复制到另一个站点的另一个 MinIO 集群,以实现冗余、性能和灾难恢复目的。有多种方法可以做到这一点,但在本例中我们讨论以下两种:

  • 站点复制
  • 桶复制

一旦数据进入 MinIO 对象存储集群,它就提供了多种不同的复制和管理数据的可能性。

第一步是设置 3 个相同的 MinIO 集群,并分别将它们命名为 minio1、minio2 和 minio3。我们假设 site1 已使用批量复制将数据迁移到它。

mc alias set minio1 http:// minioadmin minioadminmc alias set minio2 http:// minioadmin minioadminmc alias set minio3 http:// minioadmin minioadmin

跨所有 3 个站点启用站点复制

mc admin replicate info minio1SiteReplication enabled for:Deployment ID               		 | Site Name  	 | Endpointf96a6675-ddc3-4c6e-907d-edccd9eae7a4 | minio1 		 | http://0dfce53f-e85b-48d0-91de-4d7564d5456f | minio2 		 | http://8527896f-0d4b-48fe-bddc-a3203dccd75f | minio3 		 | http://

验证跨 3 个站点的站点复制设置是否正确

mc admin replicate info minio1

使用以下命令检查当前复制状态

mc admin replicate status minio1

启用站点复制后,数据将自动开始在所有站点之间复制。根据要传输的数据量、网络和磁盘速度,跨站点同步对象可能需要几个小时到几天的时间。

如果花费的时间比平时更长,或者您仍然没有看到所有内容都已复制,则可以执行 resync 命令,如下所示

mc admin replicate resync start minio1 minio2 minio3

可以使用以下命令检查 status

mc admin replicate resync status minio1 minio2 minio3

最终所有数据将被复制到 minio2 和 minio3 站点。

桶复制

桶复制,顾名思义,是基于 ARN 在 MinIO 中的特定桶上设置复制。

设置以下两个MinIO别名

来源:

mc alias set minio1 

目的地:


mc alias set minio2 

在 minio2 端设置两个别名后,创建一个复制用户 repluser 并在具有权限的 minio2 端存储桶上为此用户设置用户策略执行本策略中列出的操作作为复制的最低要求。

mc admin user add minio2 repluser repluserpwd

设置 repluser 运行复制操作所需的最低策略

$ cat > replicationPolicy.json << EOF{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["s3:GetBucketVersioning"],"Resource": ["arn:aws:s3:::destbucket"]},{"Effect": "Allow","Action": ["s3:ReplicateTags","s3:GetObject","s3:GetObjectVersion","s3:GetObjectVersionTagging","s3:PutObject","s3:ReplicateObject"],"Resource": ["arn:aws:s3:::destbucket/*"]}]}

将上面的 replpolicy 附加到 repluser


$ mc admin policy add minio2 replpolicy ./replicationPolicy.json
$ mc admin policy set minio2 replpolicy user=repluser

现在这就是有趣的地方。现在您已经在 minio2 集群上创建了复制用户 (repluser) 和复制策略 (replpolicy),您需要在 minio1 上实际设置存储桶复制目标。这还没有启动存储桶复制,它只是为稍后我们实际启动该过程时进行设置。

$ mc replicate add minio1/srcbucket https:/repluser:repluserpwd@replica-endpoint:9000/destbucket --service "replication" --region "us-east-1"Replication ARN = 'arn:minio:replication:us-east-1:28285312-2dec-4982-b14d-c24e99d472e6:destbucket'

最后,让我们开始复制过程。

$ mc replicate add minio1/srcbucket --remote-bucket https:/repluser:repluserpwd@replica-endpoint:9000/destbucket

现在,上传到源存储桶且满足复制条件的任何对象都将由 MinIO 服务器自动复制到远程目标存储桶。通过禁用配置中的特定规则或完全删除复制配置,可以随时禁用复制。

哪个是更好的选择?

那么,为什么我们不能对所有事情都使用站点到站点复制,而为什么我们需要使用批量复制呢?批量复制提供了对复制过程的更多控制。当您第一次启动站点复制时,请将其视为消防水带,一旦启动,站点复制过程就有可能使用网络上的所有可用网络带宽,达到其他应用程序无法使用网络吞吐量的程度。另一方面,虽然有时批量复制可能很慢,但它不会在初始数据传输期间中断您的现有网络。当您只想复制少数存储桶而不是整个集群时,存储桶复制通常很有用。

好的,那么站点复制呢?批量复制对于连续复制来说并不理想,因为一旦批量作业结束,它就不会复制任何新对象。因此,您必须以一定的时间间隔重新运行批量复制作业,以确保增量复制到 minio2 站点。另一方面,如果您有主动-主动复制设置,站点复制允许将数据从 minio1 复制到 minio2 ,反之亦然。

不可能同时启用存储桶和站点复制,您必须选择其中之一。因此,通常除非您只想复制特定存储桶中的某些存储桶或某些对象,否则我们强烈建议使用站点复制,因为它不仅会复制现有存储桶和对象,还会复制创建的任何新存储桶/对象。此外,无需太多配置,您就可以以分布式方式设置复制,北美可以有 minio1 ,非洲可以有 minio2 ,这样 MENA(中东和北非)区域就会添加数据 minio2 和北美地区将向 minio1 添加数据,并且它们将相互复制。

最后的想法

在这篇文章中,我们深入探讨了存储桶、批量和站点复制类型。虽然没有固定的规则来使用特定的复制策略,但我们 SUBNET 的工程师在处理了无数的集群设置、迁移它们、扩展它们、考虑灾难恢复场景之后,我们的工程师提出了上述复制策略,这应该对大多数人有帮助人们正在考虑将数据迁移到 MinIO。

如果您对复制或最佳实践有任何疑问,请联系我们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491719.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【03】逆序数组

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、逆序函数是什么&#xff1f; 二、逆序函数原码 1.直接逆序 2.创建临时数组逆序 三、结言 &#x1f4a5;一、逆序函数是什么&#xff1f; 示例&#xff1a;输入1 4 …

火绒(显示病毒HEUR:Trojan/AvKiller.c),误删explore.exe,导致电脑白屏,解决方法

桌面程序explore.exe被火绒当病毒清理了 对&#xff0c;就是火绒导致的&#xff0c;如果按照操作依然黑/白屏&#xff0c;直接找到火绒安装目录打开火绒在右上角设置区找到隔离区里把explorer全部恢复&#xff0c;然后根据提示加到白名单&#xff0c;最后关闭程序后重启或者直接…

在autodl搭建stable-diffusion-webui+sadTalker

本文介绍在autodl.com搭建gpu服务器&#xff0c;实现stable-diffusion-webuisadTalker功能&#xff0c;图片音频 可生成视频。 autodl租GPU 自己本地部署SD环境会遇到各种问题&#xff0c;网络问题&#xff08;比如huggingface是无法访问&#xff09;&#xff0c;所以最好的方…

Qt QWidget 简约美观的加载动画 第二季

&#x1f603; 第二季来啦 &#x1f603; 简约的加载动画,用于网络查询等耗时操作时给用户的提示. 这是最终效果: 一共只有三个文件,可以直接编译运行 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QVBoxLayout> #i…

【Golang】Golang使用embed加载、打包静态资源文件

【Golang】Golang使用embed加载、打包静态资源文件 大家好 我是寸铁&#x1f44a; 总结了一篇Golang使用embed加载静态资源文件的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 事情是这样的&#xff1a;前不久&#xff0c;有同学问我,golang怎么把静态资源文件打包成一…

STM32单片机基本原理与应用(九)

SDIO/SD卡实验 实验内容 将SD卡插入实训平台并烧写程序&#xff0c;开机后TFTLCD屏幕上会显示是否成功初始化SD卡并显示SD卡容量。 电路原理图 实验原理 SD卡的通信方式有两种&#xff1a;SPI和SDIO。SD卡有五种寄存器&#xff0c;如下表 SD 卡的指令由 6 个字节组成&…

2024年2月20日v1.0.5更新·优雅草便民工具youyacao-tools

2024年2月20日v1.0.5更新优雅草便民工具youyacao-tools apk下载 https://fenfacun.youyacao.com/tools105.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免…

pclpy OC-Tree “体素内的邻居搜索”、“K 最近邻搜索”和“半径内的邻居搜索”

pclpy OC-Tree “体素内的邻居搜索”、“K 最近邻搜索”和“半径内的邻居搜索” 一、算法原理1.介绍2.“体素内的邻居搜索”、“K 最近邻搜索”和“半径内的邻居搜索” 二、代码三、结果1.原点云2.体素内的邻居搜索3.K 最近邻搜索4.半径内的邻居搜索 四、相关数据 一、算法原理…

python实现线下缓存最优算法

对于现代计算机为了加快数据存储速度&#xff0c;一般会采用多级缓存的方法&#xff0c;以最简单的二级缓存来说&#xff0c;数据会存放在两个地方&#xff0c;一个地方就是存在内存当中&#xff0c;另一个存放的地方就是存放在硬盘当中&#xff0c;但是这两个地方数据读取的速…

面向面试的机器学习知识点(4)——分类模型

省流版&#xff1a; 本文介绍机器学习中的回归算法&#xff1a;逻辑回归、KNN、SVM、随机森林和XGBoost。作为机器学习的有监督学习方法&#xff0c;分类模型是最重要也是最常见的一类算法&#xff0c;在数据分析等岗位的笔试面试中都是常客&#xff0c;非常值得深入研究&…

【elasticsearch实战】知识库文件系统检索工具FSCrawler

需求背景 最近有一个需求需要建设一个知识库文档检索系统&#xff0c;这些知识库物料附件的文档居多&#xff0c;有较多文档格式如&#xff1a;PDF, Open Office, MS Office等&#xff0c;需要将这些格式的文件转化成文本格式&#xff0c;写入elasticsearch 的全文检索索引&am…

JAVA--反射机制

目录 1. 反射(Reflection)的概念 1.1 反射的出现背景 1.2 反射概述 1.3 Java反射机制研究及应用 1.4 反射相关的主要API 1.5 反射的优缺点 2. 理解Class类并获取Class实例 2.1 理解Class 2.1.1 理论上 2.1.2 内存结构上 2.2 获取Class类的实例(四种方法) 2.3 哪些类…