IT #NDMP

NDMP协议,全称 Network Data Management Protocol,网络数据管理协议。原先是 NetApp 和 Legato Systems 公司(后来Legato被EMC收购,EMC又被DELL收购)联合开发的用于备份网络设备(主要是存储)的协议。常见于对 NetApp Filer 和 EMC Isilon, Unity 等存储设备的备份。

NDMP 被设计得像一个专业的“翻译官”,它让备份软件和不同品牌、不同类型的存储设备(如NAS文件服务器)能够用同一种“语言”交流,从而实现高效、统一的数据备份和恢复。

NDMP 在业内被当作一个高效的企业级NAS备份解决方案。但它几乎是一个私有协议,它要求NAS或存储必须支持NDMP协议,只有NetApp,EMC,Oracle这些大厂的存储支持。而国民级的小型NAS存储如群晖、威联通等是不支持这个协议的。

为什么需要NDMP协议

NAS存储不能直接用通用的文件系统备份方法来备份吗?为什么还要专门开发一个NDMP协议呢?

主要因为两点:

  1. 备份效率

    1. 用传统的文件系统备份方式备份需要将NAS设备上的文件系统通过NFS或CIFS协议共享给备份服务器,备份服务器才能读取数据进行备份。这会产生大量不必要的网络流量,而且效率低下。

      1. NAS或存储设备上的数据量巨大(一般是10TB-1000T这个数量级),通过NFS或CIFS协议直接读取的方式会需要非常久的时间,很难控制在24小时内,甚至一个周都不能完成首次备份。

      2. 增量备份时,虽然没有变更的数据不需要再次传输,但进行变更文件识别和判断的时间却不能省,这要求NAS设备遍历所有文件的元数据,如Ctime,Mtime等。这在数据量大的时候也非常耗费时间和硬件资源。

  2. 备份管理

    1. 不同品牌的设备各有各的备份方法,没有统一标准,管理起来非常困难。

      1. ·设想一个场景:我的环境中有NetApp、EMC、群晖的存储设备和一套支持NDMP的备份软件,我将很容易地用备份软件管理对NetApp 和 EMC存储的备份。但群晖的存储设备不支持NDMP,我就需要额外为该设备寻找另外的备份解决方案。这在规模较大的公司会产生不小的额外工作和管理开销。

NDMP的核心工作原理

NDMP的核心思想是 “将备份控制流和数据流分离”

您可以把它想象成一次高效的物流运输:

  1. 备份软件(总指挥):负责制定整个备份计划(“要备份什么”、“备份到哪里”、“什么时候开始”)。

  2. NDMP协议(指令):备份软件通过一个NDMP加速节点(靠近源端),直接与源设备(如NAS)和目标设备(如磁带库)进行通信,下达命令。

  3. 源设备(NAS):NAS设备自己“动手”,根据指令从自己的硬盘上读取需要备份的数据,并提交给NDMP加速节点。

  4. 数据流(数据运输):备份数据不再经过备份服务器,而是由加速节点进行去重/压缩/加密处理后直接通过网络发送到目标存储设备(如磁带库或另一台备份用存储)。这条“数据高速路”将大部分数据流在源头压缩了。

  5. 快照:NAS存储支持快照,NDMP协议利用快照功能进行快速定位变更块,当变更数据量小的时候,使用快照方式进行的增量备份极大地减少了寻找变更的时间。数十TB的数据可能不到半小时就能完成增量备份。

    1. PS:这也有点类似于VMware虚拟机备份的CBT技术和Hyper-V虚拟机备份的RCT技术。

关键优势

  • 备份服务器只发送控制命令,不处理实际的海量数据,极大减轻了它的负担和网络压力。

  • 对增量备份的模式和数据传输模式都进行了优化。

NDMP备份架构(如图)

NAS 1 ──────┐ 
            │ 
NAS 2 ──────┼──→ NDMP Accelerator ───→ Backup Server 
            │ 
NAS 3 ──────┘

说明:NDMP Accelerator(加速节点),充当数据源(NAS)和备份软件(以及备份存储)之间的桥梁和翻译官, 可备份多个NAS设备。

  1. 备份指令由备份软件发起,加速节点收到指令后,通过NDMP预定义的TCP/10000管理端口连接到NAS。在这个通信过程中,加速节点充当了NDMP客户端的角色,而NAS充当了NDMP服务端的角色。

  2. 加速节点和NAS的10000端口建立连接后,将备份的控制信息传达给NAS,NAS准备好相关数据(或快照)的传输端口。一般会动态开放10001-65535之间的数据端口,并告知加速节点。

  3. 加速节点得知数据传输端口后,启动备份进程连接之,然后处理和传输通过数据端口拿到的备份数据。将处理后最终需要落盘的部分写入到目标存储中(用于备份的目标存储或磁带库)。