Nutanix超融合体系架构之:运行机制数据保护目前,Nutanix 平台使用复制因子(RF) 来确保节点或磁盘发生故障时数据的冗余和可用性。
如“架构设计”部分所述,OpLog 充当一个临时区域,将传入的写入吸收到低延迟的SSD 层。
将数据写入本地OpLog 时,在被主机确认(Ack) 为成功写入之前,数据将会同步复制到另外的一个或两个Nutanix CVM 的OpLog 中(取决于RF)。
这将确保数据存在于至少两个独立的位置,且具有容错能力。
所有节点均参与OpLog 复制以避免出现任何“热节点”并确保扩展时的线性性能。
然后,将数据异步排出到隐式维持RF 的盘区存储中。
之后在节点或磁盘出现故障的情况下,会将数据在群集中的所有节点之间重新复制以维持RF。
下面我们将展示此过程的逻辑表现形式的一个示例:数据位置作为一个融合的(计算+存储)平台,I/O 和数据位置对与Nutanix 有关的群集和VM 性能至关重要。
如前面I/O 路径中所述,所有读取/写入IO 均由本地控制器VM (CVM) 提供服务,本地控制器VM 位于邻近常规VM 的每个虚拟机监控程序中。
在CVM 的控制下,VM 的数据将在本地由CVM 提供服务并且位于本地磁盘中。
当VM 从一个虚拟机监控程序节点移动到另一个时(或发生HA 事件时),最新迁移的VM 的数据将由现在的本地CVM 提供服务。
在读取旧数据(存储在现在的远程节点/CVM 上)时,I/O 将由本地CVM 转发到远程CVM。
所有写入I/O 将立即在本地出现。
NDFS 会检测到I/O 从另一节点出现,并在后台将数据迁移到本地,现在将允许在本地为所有读取I/O 提供服务。
为了不泛洪网络,只在读取时迁移数据。
下面我们将展示数据在虚拟机监控程序的节点之间移动时如何“跟随”VM 的一个示例:可伸缩元数据元数据是任何智能系统的核心,对文件系统或存储阵列而言甚至更为重要。
就NDFS 而言,一些关键结构对于它的成功至关重要:它必须时刻保持正确(又称“严格一致性”),它必须可伸缩,而且它必须能够大规模执行。
如前面架构部分所述,NDFS 使用“环式”结构作为键值存储,键值存储将存储重要元数据及其他平台数据(如状态等)。
为了确保元数据的可用性和冗余,在奇数节点(如3、5 等)之间使用RF。
当元数据写入或更新时,写入或更新的行将被写入环中的一个节点,然后复制到n 个对等节点中(其中n 取决于群集大小)。
大部分节点必须同意,然后才能提交任何内容,内容的提交是使用paxos 算法强制执行的。
这将确保所有作为平台一部分存储的数据和元数据的严格一致性。
下面我们将展示4 节点群集的元数据插入/更新的一个示例:扩展时的性能也是NDFS 元数据的另一个重要结构。
与传统的双控制器或“主”模型不同,每个Nutanix 节点负责整个平台元数据的一个子集。
这消除了传统上允许群集中所有节点为元数据提供服务并进行管理的瓶颈现象。
通过一致性哈希方案来尽量减少修改群集大小时键的重新分配(又称“添加/移除节点”)当群集扩展时(例如从4 个扩展到8 个节点),为了确保“块感知”和可靠性,这些节点将被插入整个环中的节点之间。
下面我们将展示元数据“环”及其如何伸缩的一个示例:Shadow ClonesNutanix 分布式文件系统有一个称为“影子克隆”的功能,它支持“多读取者”场景下特定虚拟磁盘或VM 数据的分布式缓存。
有关该功能的一个典型例子是,在VDI 部署期间,许多“链接克隆”会将读取请求转发到中心主VM 或“基准VM”。
在VMware View 中,这被称为副本磁盘,通过所有链接的克隆读取,而在XenDesktop 中,这被称为MCS 主VM。
这在任何可能有多个读取者的场景(如部署服务器、存储库等)中也会起作用。
数据或I/O 本地化是实现最高VM 性能的重要因素,也是NDFS 的关键结构。
借助影子克隆,NDFS 将监控vDisk 访问趋势,这与监控数据本地化类似。
但是,如果两个以上远程CVM(以及本地CVM)发出请求,并且所有请求都是读取I/O,则vDisk 将标记为不可变。
一旦磁盘标记为不可变,则可通过每个向磁盘发出请求的CVM 在本地缓存vDisk (也称基准vDisk 的影子克隆)。
如此一来,每个节点上的VM 即可在本地读取基准VM 的vDisk。
对于VDI 而言,这意味着副本磁盘可以通过每个节点进行缓存,所有针对基准的读取请求可以在本地获得服务。
注意:为了不泛洪网络并有效利用缓存,只在读取时迁移数据。
如果基准VM 已修改,将会放弃影子克隆并重新开始这一过程。
影子克隆默认为禁用状态(在3.5 版及之前版本中),可以使用以下NCLI 命令启用/禁用:ncli cluster edit-paramsenable-shadow-clones=true下面的示例将展示影子克隆的工作原理及其如何实现分布式缓存:Elastic Dedupe Engine弹性重复数据删除引擎是基于软件的NDFS 功能,可以在容量(HDD) 和性能(SSD/内存)层执行重复数据删除。
在插入数据的过程中,会使用SHA-1 哈希以16K 的粒度为连续的数据流提取指纹。
指纹只在插入数据时提取,之后则会永久性地存储到写入块的元数据中。
这与传统方法相反,传统方法是利用后台扫描,需要重新读取数据,而Nutanix 直接在插入时提取指纹。
对于能够在容量层执行重复数据删除的重复数据,则不需要扫描或重新读取数据,实际上可以删除重复副本。
注意:最初提取指纹时使用的是4K 的粒度,但在测试之后,16K 在重复数据删除和降低元数据开销这两方面的综合性能最佳。
完成重复数据删除的数据保存到缓存中时,则使用4K。
下面的示例将展示弹性重复数据删除引擎伸缩和处理本地VM I/O 请求的方式:当数据I/O 大小为64K 或更大时,在插入数据时会提取指纹。
SHA-1 计算利用Intel 加速技术,这一过程仅产生非常小的CPU 开销。
如果在插入数据时没有完成指纹提取(例如I/O 大小较小时),可以作为后台进程完成指纹提取。
弹性重复数据删除引擎不仅适用于容量磁盘层(HDD),而且适用于性能层(SSD/内存)。
在确定重复数据后,依据相同指纹的多个副本,后台进程将使用NDFS MapReduce 框架(管理者)移除重复数据。
对于正被读取的数据,数据会保存到NDFS 内容缓存,这是一个多层/池缓存。
对具有相同指纹的数据的任何后续请求都将直接从缓存中提取。
有关内容缓存和池结构的详细信息,请参阅I/O 路径概述中的“内容缓存”小节,或者单击此处。
下面的示例将展示展示弹性重复数据删除引擎如何与NDFS I/O 路径进行交互:网络和I/ONutanix 平台没有利用任何底板来实现节点间通信,只依靠标准10GbE 网络。
专用私有网络上的虚拟机监控程序可以处理在Nutanix 节点上运行的VM 的所有存储I/O。
虚拟机监控程序处理I/O 请求,然后将请求转发到本地CVM 上的私有IP。
随后,CVM 将使用其外部IP,通过公有10GbE 网络对其他Nutanix 节点执行远程复制。
对于所有读取请求,大多数情况下都可以在本地完成,而不需要利用10GbE 网络。
这意味着,利用公有10GbE 网络的流量只有NDFS 远程复制流量和VM 网络I/O。
但是,如果CVM 发生故障或数据位于远程位置,CVM 会将请求转发到群集中的其他CVM。
同时,群集范围内的任务(例如磁盘平衡)会在10GbE 网络上临时生成I/O。
下面的示例将展示VM 的I/O 路径如何与私有和公有10GbE 网络进行交互:CVM Autopathing对于NDFS,可靠性和灵活性即使不是最重要的部分,也是一个关键部分。
作为一个分布式系统,NDFS 的作用是处理组件、服务和CVM 故障。
本节将介绍如何处理CVM 故障(未来的更新中将介绍如何处理组件故障)。
CVM 故障包括用户关闭CVM 电源、CVM 滚动升级或可能导致CVM 发生故障的任何事件。
NDFS 有一个称为“自动寻路”的功能,当本地CVM 不可用时,则由另一个CVM 透明地处理I/O。
虚拟机监控程序和CVM 使用私有192.168.5.0 网络在专用vSwitch 上进行通信(前文已有详细说明)。
这意味着,对于所有存储I/O,这一过程发生在CVM 的内部IP 地址上(192.168.5.2)。
CVM 的外部IP 地址用于远程复制和CVM 通信。
下面的示例将展示此过程:如果本地CVM 发生故障,之前由本地CVM 托管的本地192.168.5.2 地址将不可用。
NDFS 将自动检测到这一中断,并通过10GbE 将这些I/O 重定向到群集中的另一个CVM。
重新路由过程对主机上运行的虚拟机监控程序和VM 都是透明的。
这意味着,即使CVM 电源已经关闭,VM 仍然能够继续为NDFS 执行I/O。
NDFS 也能够自我修复,这意味着它将检测到CVM 已经关闭电源,并将自动重新启动或开启本地CVM 电源。
一旦本地CVM 恢复并可用,流量将无缝地回传并由本地CVM 提供服务。
下面我们将展示故障CVM 的这一过程的图形表示:磁盘平衡NDFS 采用极其动态的平台设计,可以处理各种工作负载,并且一个群集可以混合使用多种异类节点:计算密集型(3050 等)和存储密集型(60X0 等)。
混合使用具有较大存储容量的节点时,必须确保数据均匀分布。
NDFS 拥有一个称为“磁盘平衡”的本机功能,该功能用于确保数据在整个群集中均匀分布。
磁盘平衡控制节点对其本地存储容量的利用率,并与NDFS ILM 集成。
其目的是,一旦利用率达到一定阈值,就让节点之间的利用率保持均匀。
下面的示例将展示处于“不平衡”状态的混合群集(3050 + 6050) :磁盘平衡利用NDFS 管理者框架,作为预定进程运行,并在超过阈值时运行(例如本地节点容量利用率> n %)。
如果数据不平衡,管理者将确定需要移动的数据,并将任务分布到群集中的各个节点。
如果节点类型是同类(例如3050),利用率应特别均匀。
但是,如果某个节点上运行的某些VM 写入的数据多于其他节点,则每个节点的容量利用率会有所倾斜。
在这种情况下,磁盘平衡会开始运行,并将该节点上的最冷数据移动到群集中的其他节点。
如果节点类型是异类(例如3050 + 6020/50/70),或者某个节点用于“仅限存储”模式(不运行任何VM),则可能需要移动数据。
下面的示例将展示运行磁盘平衡后处于“平衡”状态的混合群集:在有些情况下,客户可能需要以“仅限存储”状态运行某些节点,CVM 只在主要用于批量存储容量的节点上运行。
下面的示例将展示混合群集中的仅限存储节点,磁盘平衡将数据从活动VM 节点移动到该节点:软件定义的控制器架构如上所述(可能有无数次),Nutanix 平台是基于软件的解决方案,以“捆绑式的软件+硬件设备”进行销售。