使用 AoE 构建您自己的 SAN

作者:Greg Bledsoe

当我第一次听说 ATA over Ethernet (AoE) 协议时,我对它的可能性感到兴奋。直接通过以太网物理层发送 ATA 命令具有极大的简洁性、灵活性和低开销,这可能会带来惊人的性能。随着关于正式被 Linux 内核接受的传言越来越响亮,我屏息等待。我相信这将彻底改变存储市场。当它进入官方内核树,并且在 2005 年初发布的 2.6.11 版本中内置了 AoE 支持时,我简直想站起来欢呼。

显而易见的问题是,究竟是什么值得如此兴奋?我们已经有了光纤通道和 iSCSI。为什么要再加入一种技术呢?存储几乎是一个完全成熟的市场,对吧?您不妨问问为什么人们在不久之前对 Voice over IP (VoIP) 感到兴奋。有远见的人理解开源经济学,他们可以看到这将把我们带向何方,而那个地方是颠覆性的。我们将把价格门槛提高到一个传统供应商会发现无法企及的水平,而且一切都会被颠倒过来——就像 VoIP 一样。如果您足够书呆子气,VoIP 可以让您几乎免费地为自己提供低成本、高质量的电话服务,并且允许您成为小型企业的电信服务商(我所在的行业)。同样,AoE 使 SAN 可供任何人使用,使具有一定技术技能和少量资本的人能够与 EMC 和 IBM 等公司竞争。现在,您确实可以用不到 100 美元的价格,使用 AoE 发起程序和目标程序构建自己的 SAN。请参阅“资源”部分中的操作指南。

本质上,AoE 是一种基于开放标准的协议,允许客户端主机直接网络访问磁盘驱动器。这意味着 AoE 允许您让一个盒子上的磁盘或 RAID 阵列被另一个盒子上的 IDE/ATA/SATA 驱动程序交互,使用 SATA 磁盘本身使用的 ATA 命令来完成,只是通过以太网网络——并且非常高效地完成。您在一个盒子上构建一个阵列,并将其导出为一个块设备,多个客户端可以看到和访问它。您可以将磁盘、阵列、单个分区、分割成多个分区的磁盘或阵列,甚至包含加密块设备的环回设备导出到任意数量的客户端。目标程序和发起程序(主机和客户端)的驱动程序存在于所有主要的操作系统中,并且现在已成为主流 Linux 内核的本地组件。

现在,想象一下,您可以构建一个专门设计为 AoE 目标的盒子,并通过您的以太网网络将您的阵列导出为块设备。想象一下,您优化了一个内核来专门执行此操作,在一个机架式机箱中放入足够的处理器和内存来运行您优化的内核和 AoE 目标驱动程序,并发现这样做,您可以使用商品磁盘,并以极低的成本超越光纤通道 SAN 的性能。想象一下,它足够简单,可以轻松构建和管理复杂的冗余设计。现在想象一下,已经有人完成了所有这些工作。现在睁开眼睛,意识到这一切都是真的。Coraid 一直在微调其产品,并准备彻底改变网络存储的性价比和可管理性。最新的结果表明,与其他技术相比,至少有五比一的性价比优势。

作为一个十足的 Linux 爱好者,我发现使用命令行工具配置事物,比起其他供应商繁琐的 GUI 工具,更令人感到舒适和放松。最初,对于 Coraid 的设备,您只能使用 SATA 和 SATA II 磁盘,虽然这对于绝大多数应用程序来说已经足够了,但与基于 SCSI 的解决方案相比,这确实有点劣势,后者可以利用 SCSI 更高的 RPM 和吞吐量性能,以及来自 SCSI 磁盘更严格的制造公差带来的更高的 MTBF 和组件可靠性。Coraid 非常好心地借给我一些演示设备,以测试其下一代解决方案。

我发现 Coraid 最新的 SRX 系列机架允许您使用更广泛的接口,包括 SSD 和 SAS,以及即将推出的 6GB SAS,这为您的架构提供了更高端的驱动器,以满足那些需要它的应用程序的需求。在使用 RAID 10 中的 16 个 15k rpm SAS 驱动器时,我甚至无法设计出一个在性能方面挑战我所拥有的演示设备的测试。要了解它在聚合四个 10 千兆位或六个 1 千兆位端口时能做什么,请查看“资源”部分中独立的 ESG 实验室报告。这有点令人难以置信。我还了解到,Coraid 正在构建一个点击式 GUI 界面,位于 CLI 之上,但老实说,只要它不夺走我友好的命令行,我就不在乎。

值得一提的是,一些安全组织攻击了 AoE 协议的相对简单性,并声称这使其“不安全”,因为它没有强大的身份验证机制,并且可能被劫持或受到其他恶作剧的影响,例如 MAC 地址欺骗等简单技术。值得庆幸的是,AoE 是不可路由的,这意味着人们必须将他们的恶意主机物理地、直接地插入到您的以太网 LAN 网段中才能构成威胁,因此您的 AoE 架构的安全性完全取决于您的以太网交换机的物理安全性。因此,在物理位置和访问您的设备方面,这将是需要牢记的重点。AoE 运行在比 IP 更低的网络层上,而 IP 层使 TCP/IP 和互联网可路由,但我强烈怀疑,如果我需要将 AoE 块设备导出到比光纤和媒体转换器更远的地方,我可以使用 GRE(通用路由封装)和 VPN 解决问题,尽管这不是我测试过的。还要记住,当您的客户端看到 AoE 块设备时,AoE 协议中没有任何东西阻止您在多台机器上挂载文件系统,但是对于大多数文件系统来说,这将对您的数据完整性产生破坏性影响。因此,您需要采取预防措施来防止这种情况发生。

AoE 在许多方面与光纤通道和 iSCSI 重叠。它相对于它们的 глав优势在于其简洁性。AoE 规范只有 12 页,而 iSCSI 则有 276 页,光纤通道甚至不再是单个规范,而是有多个版本,分为多个部分,每个部分都有数百页,最新的版本打破了所有向后兼容性。如果您想进行一次令人绞尽脑汁的受虐狂练习,请尝试构建一个光纤通道 SAN,其中有五个客户端,没有单点故障,并且在所有组件之间实现自动故障转移。您不仅很可能破产,而且仍然无法做到这一点,而且复杂性将使其几乎无法扩展,并成为您无法摆脱的噩梦来管理。iSCSI 会使这项任务变得稍微容易一些且成本更低,但您会发现性能会受到 TCP/IP 标头处理开销的拖累。为了找到可管理性、灵活性和性能的最佳平衡点,您将无法击败 AoE 设备——这甚至在您考虑价格承受能力之前。

为了证明这一点,我将带您了解我是如何使用 Coraid 较旧的 SR 机架和 CLN21 故障转移套件为我们的环境构建“永不宕机”解决方案的。Coraid 正在停止生产我购买的确切前端设备,但构建等效设备并不十分困难,并且已经存在操作指南。我并不打算简单地重新创建操作指南,例如此处“资源”部分列出的那些,所以我将只突出重点,以演示一些注意事项以及此构建的实际简易程度。

我需要满足的设计目标如下。首要任务是客户媒体、数据和应用程序信息的高可用性。应该没有单点故障,并且在所有故障情况下都应该自动进行故障转移。性能必须允许从大量电话呼叫中录制语音邮件,并允许多个并发客户同时从多个应用程序服务器访问和播放该语音邮件。此外,我还将应用程序数据存储在 SAN 上。鉴于未来几年的预期增长,满足可用性要求将比满足性能要求更困难。

在考虑和定价了几个选项后,我决定使用两个 Coraid 的 16 盘位机架及其故障转移套件,该套件配备了两个基于 Debian 的服务器,用于 NFS/CIFS 网关和一个 STONITH-(Shoot The Other Node In The Head,射杀另一个节点)就绪电源。在决定了这一点之后,接下来的决定是使用什么磁盘和什么以太网设备。经过大量考虑,我选择了 Western Digital RE3 系列,因为它在 SATA II 设备中具有良好的性能和相对较高的 MTBF。我选择了 500 GB 的磁盘,因为它们具有成本/GB(在我购买它们时)以及易于获取和可用性。我最初每个机架使用十个磁盘,配置为 RAID 10 阵列。这些阵列已经运行了大约两年,到目前为止,我只丢失了最初的磁盘中的一个。我还发现更换这些机架上的磁盘是多么容易和顺利。

另一个重要的考虑因素是,您绝对需要确保您的客户端 NIC 和交换机支持巨型以太网帧,因为聚合 ATA 命令和返回数据块的能力将极大地提高您的性能,因此请查看“资源”部分中支持巨型帧的设备列表。我最终购买了四个较旧的 Cisco Catalyst 交换机,运行 IOS,我能够以低廉的价格获得它们,并在 9K MTU 下运行,这为我提供了两个用于生产环境,两个备用待命。

网关服务器上的配置将两个阵列(每个机架上的一个 RAID 10 阵列)组合成一个 RAID 1 阵列。这样做会带来性能损失,因为每次写入都必须复制到两个设备,这会使开销加倍,但可用性是这里最重要的问题。任何一个组件都可能发生故障,并且您在网关上的阵列将降级,但会继续运行,直到您可以修复发生故障的机架和/或磁盘。两个网关服务器通过串行电缆上的心跳连接,因此,如果主服务器发生故障,在几秒钟内,备份服务器将联机,将 AoE 块设备挂载到 RAID 1 中,并且在暂停之后,客户端会继续工作,就像什么都没发生一样。“资源”部分详细介绍了如何设置此项。

我在各种场景中对此进行了测试,我遇到的最大障碍是当每个设备都单宿主连接到一个交换机时。在这种情况下,一个网关和一个机架在一个交换机上,另一个服务器和另一个机架在另一个交换机上,交换机之间有一个中继端口。如果您丢失任何一个交换机,就会出现问题。除非您对用于故障转移的 arpping 实用程序和脚本进行一些手动调整,否则这会导致事情无限期地挂起。我有点害怕这种情况,所以我不得不弄清楚如何双宿主连接所有组件,并确保我在交换机之间有多个上行链路。

上行链路很容易,只需插入两条电缆,调整生成树,然后让 STP 找出答案。当然,生成树不会“软故障”,因此您也可以在 IOS 中使用冗余中继或类似的措施。一旦我解决了这个问题,我就将注意力转向肯定是最困难的部分。在尝试使用 iSCSI 和光纤通道进行多端口配置后,我真的很害怕使用 AoE 设置双宿主。这是我让它工作的曲折故事。

首先,从每个机架将一个额外的端口插入到每个交换机中,并在配置中打开这些端口。其次,将网关上的第二个端口插入到 AoE 交换机中,调整其 MTU,并在配置中打开它。接下来是困难的部分。擦去额头上的汗水,宣布今天结束,然后去吹嘘您是如何掌握多路径 AoE 的。是的,就这么容易。Coraid 的设备和 AoE 协议使用查询包机制自动发现设备和到设备的路径,这使得设置非常简单,当它在目标和客户端之间找到多条路径时,使用轮询方法发送数据包。一旦您完成了这项工作,您可能会丢失每个组件中的一个:网关、链路、交换机和机架,并继续运行。

配置 LUN 并导出它非常简单,并且在多个操作指南中都有介绍,这些操作指南可以在多个地方找到。您可以使用名为 cec(Coraid Ethernet 控制台)的实用程序登录到同一以太网网段上运行 AoE 的设备上的机架,并发出命令序列(下面的示例用于与上面提到的驱动器不同的驱动器组)

SR shelf 1> show -l
1.0  500GB up
1.1  500GB up
1.2  500GB up
1.3  500GB up
1.4  500GB up
1.5  500GB up
1.6  500GB up
1.7  500GB up
1.8  500GB up
1.9  500GB up
1.10 500GB up
1.11 500GB up
1.12 500GB up
1.13 500GB up
1.14 500GB up
1.15 500GB up

SR shelf 1> make 0 raid10 1.0-15

SR shelf 1> list -l
0 4000GB offline
0.0 4000GB raid10 normal
0.0.0 normal
...

SR shelf 1> online 0

SR shelf 1> online
0 4000GB online

当然,您可以在此处使用 RAID 0,1,5,6,10 JBOD 或任何其他支持的 RAID 类型的任意组合创建任意数量的 LUN。

要在连接的服务器上使用您的新 LUN,它就像

client:/# aoe-discover
client:/# aoe-stat
     e1.0       4000GB   eth0 up

client:/# mkfs.ext4 /dev/etherd/e1.0

client:/# mount /dev/etherd/e1.0 /mnt/aoe

它真的就这么简单。我希望您能看到这种方法提供的灵活性和强大功能——针对复杂架构的简单管理。在过去的两年中,我通过在生产环境中使用这种架构和方法验证了它。还有很多事情可以做,还有很多事情我计划做。如果您还记得我在 2010 年 10 月刊的 LJ 中关于 VirtualBox 的最后一篇文章,您就会知道我的下一个项目是将我们的虚拟机映像移动到 AoE 后端,以完成允许我在我们的生产环境中在虚拟机主机之间传送运行中的虚拟机的要求。我的下一个项目之后将是尝试 AoE 和 GFS(全局文件系统),以消除网关服务器,并使多台服务器同时访问相同的 LUN。应该会很有趣!

资源

Ed L. Cashin 的“ATA Over Ethernet: Putting Hard Drives on the LAN”,LJ,2005 年 6 月: www.linuxjournal.com/article/8149

如何构建低成本 SAN: howtoforge.net/how-to-build-a-low-cost-san

Chris Mellor 的“Simplest Ethernet Storage”: www.theregister.co.uk/2010/08/10/coraid_esg

Ed. L. Cashin 的 CLN 故障转移套件操作指南: support.coraid.com/support/cln/ft/failover-kit.html

Daniel Bartholomew 的“Getting Started with Heartbeat”,LJ,2007 年 11 月: www.linuxjournal.com/article/9838

巨型帧清洁网络设备: www.uoregon.edu/~joe/jumbo-clean-gear.html

Greg Bledsoe 是 Standout VoIP Startup Aptela (www.aptela.com) 的技术运营经理,一位作家、丈夫、六个孩子的父亲、葡萄酒爱好者、业余哲学家和万事通,欢迎您在 lj@bledsoehome.net 提出评论和批评。

加载 Disqus 评论