8. 公司核心业务数据—ONTAP平台Snapshot副本和SnapMirror灾备介绍

 

以往,ONTAP 复制技术用来满足灾难恢复 (DR) 和数据归档的需求。随着云服务的出现,ONTAP 复制已经进行了调整以应对 NetApp Data Fabric 端点之间的数据传输。所有这些用途的基础是 ONTAP Snapshot 技术。

 

Snapshot 副本

Snapshot 副本是指某个卷在某个时间点的只读映像。此映像占用的存储空间极少,并且性能开销可以忽略不计,因为它仅会记录自上次执行 Snapshot 副本以来对文件所做的更改。

Snapshot 副本的效率归功于 ONTAP 的核心存储虚拟化技术任意位置写入文件布局 (WAFL)。与数据库一样,WAFL 使用元数据指向磁盘上的实际数据块。但与数据库不同的是,WAFL 不会覆盖现有块。它会将更新后的数据写入新块并更改元数据。

这是因为 ONTAP 在创建 Snapshot 副本时引用元数据,而不是复制数据块,因此 Snapshot 副本非常高效。这样,其他系统在定位要复制的块时便无需花费“查找时间”,同时消除了创建副本的成本。

您可以使用 Snapshot 副本恢复单个文件或 LUN,或者还原卷的整个内容。ONTAP 将 Snapshot 副本中的指针信息与磁盘上的数据进行比较,以便重建丢失或损坏的对象,而无需停机或高昂的性能成本。

Snapshot 策略用于定义系统如何创建卷的 Snapshot 副本。此策略用于指定何时创建 Snapshot 副本、要保留多少副本、如何为这些副本命名以及如何标记副本进行复制。例如,系统可能会在每天中午 12:10 创建一个 Snapshot 副本,保留两个最新副本,并将它们命名为“daily”(附加了时间戳),并标记为“daily”进行复制。

 

SnapMirror 灾难恢复和数据传输

SnapMirror 是一种灾难恢复技术,可用于从主存储故障转移到位于不同地理位置的远程站点上的二级存储。顾名思义,SnapMirror 会在二级存储上为您的工作数据创建一份副本或镜像,这样,在主站点发生灾难时,您仍可继续提供数据。

数据会在卷级别进行镜像。主存储中的源卷和二级存储中的目标卷之间的关系称为数据保护关系。卷所在的集群以及从此卷提供数据的 SVM 必须建立对等关系。通过对等关系,集群和 SVM 才能够安全地交换数据。

提示:您也可以在 SVM 之间创建数据保护关系。通过这种关系,可复制 SVM 的全部或部分配置(从 NFS 导出和 SMB 共享到 RBAC)以及此 SVM 中的卷数据。

首次调用 SnapMirror 时,它将执行从源卷到目标卷的基线传输。基线传输通常涉及以下步骤:

  • 为源卷创建 Snapshot 副本。
  • 将此 Snapshot 副本及其引用的所有数据块传输到目标卷。
  • 将源卷上其余非近期的 Snapshot 副本传输到目标卷,以便在“活动”镜像损坏时使用。

基线传输完成后,SnapMirror 仅将新 Snapshot 副本传输到镜像。更新是按照您配置的计划异步进行的。保留可镜像源上的 Snapshot 策略。当主站点发生灾难时,您可以激活目标卷,最大程度地减少中断。而一旦服务还原,您便可重新激活源卷。

由于 SnapMirror 仅在创建基线之后才传输 Snapshot 副本,因此复制速度快且不会造成中断。正如故障转移使用案例所示,二级系统上的控制器应与主系统上的控制器等效或接近等效,这样才能从镜像存储高效地提供数据。

 

SnapVault 归档

SnapVault 是一种归档技术,用于实现磁盘到磁盘 Snapshot 副本复制,以确保满足标准以及其他监管要求。与目标通常仅包含源卷上当前 Snapshot 副本的 SnapMirror 关系不同,SnapVault 目标一般可保留在较长时间段内创建的时间点 Snapshot 副本。

您可能需要为您的数据保留 20 年的每月 Snapshot 副本,例如,为了满足政府对贵公司制定的记帐规定。由于不要求从存储库中提供数据,因此您可以在目标系统上使用速度较慢、成本较低的磁盘。

与 SnapMirror 一样,SnapVault 也会在首次调用时执行基线传输。它会为源卷创建 Snapshot 副本,然后将此副本及其引用的数据块传输到目标卷。与 SnapMirror 类似,SnapVault 不会在基线中传输较早的 Snapshot 副本。

更新是按照您配置的计划异步进行的。您在此关系的策略中定义的规则可确定要更新哪些新 Snapshot 副本以及要保留多少副本。在此策略中定义的标签(例如“monthly”)必须与源上 Snapshot 策略中定义的一个或多个标签相匹配。否则,复制将失败。

注:SnapMirror 和 SnapVault 共用相同的命令基础架构。您可以指定在创建策略时要使用的方法。这两种方法都需要已建立对等关系的集群和 SVM。

MetroCluster 持续可用性

MetroCluster 配置可通过实施两个物理隔离的镜像集群来保护数据。每个集群都会同步复制另一个集群的数据和 SVM 配置。当一个站点发生灾难时,管理员可以激活镜像的 SVM,并开始从运行正常的站点提供数据。

  • 光纤连接的 MetroCluster 配置支持城域范围内的集群。
  • 延伸型 MetroCluster 配置支持园区范围内的集群。

无论何种情况,集群均必须建立对等关系。

MetroCluster 使用名为 SyncMirror 的 ONTAP 功能,可为副本中的每个集群或另一集群存储中的丛同步镜像聚合数据。如果发生切换,则运行正常的集群上的远程丛会联机,并且二级 SVM 会开始提供数据。

在非 MetroCluster 实施中使用 SyncMirror

您可以选择在非 MetroCluster 实施中使用 SyncMirror 保护。这样,如果出现故障的磁盘数量超过 RAID 类型可以保护的磁盘数量,仍可防止数据丢失。此功能仅适用于 HA 对。

聚合数据镜像至丛中,而丛存储在不同的磁盘架上。如果其中一个磁盘架不可用,则未受影响的丛可在您解决故障原因时继续提供数据。

请注意,使用 SyncMirror 进行镜像的聚合所需的存储是未镜像聚合的两倍。每个丛所需的磁盘数与其镜像的丛一样多。例如,镜像 1,440 GB 聚合时需要 2,880 GB 磁盘空间,每个丛需要 1,440 GB。

注:SyncMirror 还可用于 FlexArray 虚拟化实施。

更多IT解决方案:www.ihelpyou.com.cn

推荐最好最强NAS统一存储设备核心业务数据解决方案

 

NetApp FAS混合存储,VMware存储,虚拟化存储,文件存储,NAS存储,共享存储

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,关于Jetpack Compose 组件androidx.compose.material3.Button点击和长按同时监听代码示例,可以参考以下示例代码: ``` import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.gestures.detectTapAndLongPress import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel import com.example.myapp.viewmodel.CounterViewModel import kotlinx.coroutines.launch @ExperimentalFoundationApi @Composable fun ButtonClickListener() { val scaffoldState = rememberScaffoldState() var counterViewModel = viewModel<CounterViewModel>() Scaffold( scaffoldState = scaffoldState, modifier = Modifier.fillMaxSize(), content = { Column( modifier = Modifier .padding(top = 10.dp, start = 16.dp, end = 16.dp) .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { Text(text = "点击或长按按钮可触发计数") Spacer(modifier = Modifier.height(16.dp)) MyButton( onClick = { counterViewModel.incrementCount() }, onLongClick = { counterViewModel.decrementCount() } ) Spacer(modifier = Modifier.height(16.dp)) Text( text = "当前计数:${counterViewModel.count}", style = MaterialTheme.typography.h4 ) } }, bottomBar = { BottomAppBar(cutoutShape = RoundedCornerShape(topStart = 16.dp)) { IconButton(onClick = { }) { Icon(Icons.Default.Save, contentDescription = "Save") } Spacer(Modifier.weight(1f, true)) IconButton(onClick = { }) { Icon(Icons.Default.Share, contentDescription = "Share") } } } ) } @ExperimentalFoundationApi @Composable fun MyButton(onClick: () -> Unit, onLongClick: () -> Unit) { Surface( modifier = Modifier .padding(16.dp) .pointerInput(Unit) { detectTapAndLongPress(onLongClick = onLongClick, onTap = onClick) }, shape = MaterialTheme.shapes.small, color = MaterialTheme.colors.primary ) { Text( text = "Click or long press me", style = MaterialTheme.typography.button, color = Color.White, modifier = Modifier.padding( start = 16.dp, top = 8.dp, end = 16.dp, bottom = 8.dp ) ) } } ``` 这个示例使用了一个自定义的 MyButton 组件,通过 pointerInput() 来同时监听点击和长按事件,并在这两种事件发生时调用不同的回调函数。 另外,这个示例还使用了 Jetpack Compose 中的一些组件,如 Scaffold、Column、Text、BottomAppBar 等,并结合了 ViewModel 来管理计数器的状态,实现了点击或长按按钮可触发计数的效果。 希望这个示例能够对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT干货+136-6258-1235

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值