复制策略深入探讨

在之前的博客中,我们讨论了复制最佳实践和不同类型的复制,例如批量、站点和存储桶。但是,随着所有这些不同类型的复制类型的出现,人们不得不想知道在哪里使用哪种复制策略?从现有 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://xiahunao.cn/news/2809707.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

SV-6301 IP网络可视对讲报警柱简介

SV-6301 IP网络可视对讲报警柱简介 18123651365微信 功能特点&#xff1a; 1.全金属外壳&#xff0c;户外防风雨&#xff0c;坚固耐用&#xff0c;易于识别 2.单键呼叫&#xff0c;可通过软件指定呼叫目标&#xff0c;双向可视对讲广播喊话 3.终端内置扬声器和话筒眯头&…

GZ036 区块链技术应用赛项赛题第10套

2023年全国职业院校技能大赛 高职组 “区块链技术应用” 赛项赛卷&#xff08;10卷&#xff09; 任 务 书 参赛队编号&#xff1a; 背景描述 养老保险是对于老年人的最基本的生活保障。各种数据显示&#xff0c;当前的养老金市场规模庞大。2016年美国的养老金资…

SpringCloud-Docker原理解析

Spring Cloud和Docker的结合为微服务架构的部署和管理提供了强大的支持。本文深入剖析Spring Cloud与Docker的集成原理&#xff0c;从服务注册与发现、配置管理、负载均衡到容器化部署等方面展开详细解析。探讨Spring Cloud如何利用Docker容器技术实现服务的弹性伸缩&#xff0…

Linux系统中前后端分离项目部署指南

目录 一.nginx安装以及字启动 解压nginx 一键安装4个依赖 安装nginx 启动 nginx 服务 开放端口号 并且在外部访问 设置nginx自启动 二.配置负载均衡 1.配置一个tomact 修改端口号 8081端口号 2.配置负载均衡 ​编辑 三.部署前后端分离项目 1.项目部署后端 ​编辑…

SpringBoot3——核心特性——快速入门(三)

4、核心技能 4.1、常用注解 SpringBoot摒弃XML配置方式&#xff0c;改为全注解驱动 4.1.1、组件注册 Configuration、SpringBootConfiguration Bean、Scope Controller、 Service、Repository、Component Import ComponentScan 步骤&#xff1a; 1、Configuration 编写一个配置…

MFC由初值终值步长生成数值序列

matlab的冒号运算符可以生成数值序列; 下面来生成自己的数值序列; vc6新建一个对话框工程; 放几个控件;添加成员变量如下; void CMycolonDlg::OnButton1() {// TODO: Add your control notification handler code hereUpdateData(TRUE);double d1, d2;CString str1, …

Linux基础命令—进程管理

基础知识 linux进程管理 什么是进程 开发写代码->代码运行起来->进程 运行起来的程序叫做进程程序与进程区别 1.程序是一个静态的概念,主要是指令集和数据的结合,可以长期存放在操作系统中 2.进程是一个动态的概念,主要是程序的运行状态,进程存在生命周期,生命周期结…

YOLO算法改进Backbone系列之:EfficientViT

EfficientViT: Memory Effificient Vision Transformer with Cascaded Group Attention 摘要&#xff1a;视觉transformer由于其高模型能力而取得了巨大的成功。然而&#xff0c;它们卓越的性能伴随着沉重的计算成本&#xff0c;这使得它们不适合实时应用。在这篇论文中&#x…

ChatGPT/GPT4科研应用与AI绘图及论文高效写作

原文&#xff1a;ChatGPT/GPT4科研应用与AI绘图及论文高效写作 第一&#xff1a;2024年AI领域最新技术 1.OpenAI新模型-GPT-5 2.谷歌新模型-Gemini Ultra 3.Meta新模型-LLama3 4.科大讯飞-星火认知 5.百度-文心一言 6.MoonshotAI-Kimi 7.智谱AI-GLM-4 第二&#xff1a;…

【CT成像】VGSTUDIO MAX最小系统要求检查缺少支持OpenGL3.3的解决办法

【CT成像】VGSTUDIO MAX最小系统要求检查缺少支持OpenGL3.3的解决办法 1.背景2.分析3.解决办法4.资源 1.背景 我把自己的台式机电脑进行了VMware ESXi 虚拟化。 在vmware ESXi系统中安装了windows系统&#xff0c; 并在windows系统中安装了VGSTUDIO MAX软件。 在运行VGSTUDIO…

matlab一维二维和三维RBF插值方法

1、内容简介 略 50-可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 matlab一维二维和三维RBF插值方法_哔哩哔哩_bilibili 4、参考论文 略

电商赠品数据可以监测吗

很多店铺为了引流&#xff0c;会在标题、图片上标明促销活动&#xff0c;常见的有赠品描述&#xff0c;由于现在监测价格技术的壁垒&#xff0c;其实很多时候&#xff0c;主图上的赠品信息因其描述方式、字体等的不同&#xff0c;会导致监测不出来的情况出现&#xff0c;这也给…

代码签名常见问题解答!!!

1、什么是代码签名证书&#xff1f; 代码签名证书&#xff08;Code Signing Certificate&#xff09;是受信任的证书颁发机构颁发给软件开发者&#xff0c;对其开发的可执行脚本、软件代码和内容进行数字签名的数字证书。代码签名证书用于验证开发者身份真实性、保护代码的完整…

【计算机网络】传输层——TCP和UDP详解

文章目录 一. TCP和UDP简介二. UDP 协议详解1. UDP报文格式2. UDP的使用场景 三. TCP 协议详解1. TCP报文格式2. TCP协议的重要机制确认应答&#xff08;保证可靠传输的最核心机制&#xff09;超时重传连接管理&#xff08;三次握手、四次挥手&#xff09;&#xff01;&#xf…

微信小程序-宿主环境-开发文档学习笔记

查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever 微信小程序开发指南 微信小程序开发文档 渲染层和逻辑层 WXML 模板和 WXSS 样式工作在渲染层&#xff0c;JS 脚本工作在逻辑层 渲染层和数据相关。逻辑层负责产生、处理数据。逻辑层通过 Page 实例的 setD…

09 Redis之分布式系统(数据分区算法 + 系统搭建与集群操作)

6 分布式系统 Redis 分布式系统&#xff0c;官方称为 Redis Cluster&#xff0c;Redis 集群&#xff0c;其是 Redis 3.0 开始推出的分布式解决方案。其可以很好地解决不同 Redis 节点存放不同数据&#xff0c;并将用户请求方便地路由到不同 Redis 的问题。 什么是分布式系统?…

unity发布webGL压缩方式的gzip,使用nginx作为web服务器时的配置文件

unity发布webGL压缩方式的gzip&#xff0c;使用nginx作为web服务器时的配置文件 Unity版本是&#xff1a;2021.3 nginx的版本是&#xff1a;nginx-1.25.4 Unity发布webgl时的测试 设置压缩方式是gzip nginx配置文件 worker_processes 1;events {worker_connections 102…

Open CASCADE学习|提取面的内外环线

在Open CASCADE中&#xff0c;区分内环和外环主要基于面的参数域内环线方向的定义。具体来说&#xff0c;在面的参数域内&#xff0c;沿着环线正方向前进时&#xff0c;如果左侧为面内、右侧为面外&#xff0c;那么该环线被视为外环&#xff1b;反之&#xff0c;如果左侧为面外…

k8s Pod基础(概念,容器功能及分类,镜像拉取和容器重启策略)

目录 pod概念 Kubernetes设计Pod概念和特殊组成结构的用意 Pod内部结构&#xff1a; 网络共享&#xff1a; 存储共享&#xff1a; pause容器主要功能 pod创建方式 pod使用方式 pod分类 pod的容器分类 基础容器&#xff08;infrastructure container&#xff09;&…

【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术

文生视频 Diffusion Transformer&#xff1a;Sora 核心架构、Stable Diffusion 3 同源技术 提出背景输入输出生成流程变换器的引入Diffusion Transformer (DiT)架构Diffusion Transformer (DiT)总结 OpenAI Sora 设计思路阶段1: 数据准备和预处理阶段2: 架构设计阶段3: 输入数据…