Swift是软件,要实现一个存储系统,硬件是不可缺少的一部分,本系列的第三篇和第四篇将以一个小规模Swift集群为例,从硬件到软件一步步实现它的安装部署。我们希望这里的一些内容,对其他分布式存储系统的部署也有借鉴意义。
1、从软件到系统,软件工程师要硬一点
从上一篇《对象存储(2):开源对象存储Swift——概念、架构与规模部署》的介绍中,相信大家已经能看出来一个问题了,那就是:Swift本身是一个软件,要实现一个分布式存储另一个很重要的方面是硬件。我们在工作中看到很多玩开源玩得好的技术达人,是优秀的软件工程师,但是,对于硬件技术却很生疏,甚至闹出分不清SATA和SAS接口的笑话。这个问题不仅仅出现在分布式存储中,也不仅仅限于开源软件,而是软件定义基础设施这个领域中普遍存在的一个问题。我们很遗憾地看到这个领域中有一些很优秀的软件,用户在使用时遇到的很多问题,都是没有以正确的方法来使用硬件造成的。而这些软件本身的文档,更多的是说明软件的架构、安装与配置,对硬件的介绍很少,如果这是个开源软件,文档中的这个问题往往更为突出。
图1SATA和SAS借口外观上的区别
我们不期待一个软件工程师能够像他快速修复软件中的bug那样解决硬件问题,但是,起码他要了解他的软件适合跑在什么样的硬件上,遇到瓶颈和故障时,能够及时地正确判断这是由于软件还是硬件造成的,了解现在有哪些硬件能够帮助他们或者老板快、好、省地实现一个系统。
本系列的第三篇和第四篇试图从硬件到软件介绍一个Swift部署实现的过程,需要说明的是,这里介绍的Swift部署,是一个小规模的实验环境,目的是对Swift的安装部署过程做一个原理性的展示,如果要用于生产环境,还需要进一步的完善与扩充。
2、硬件环境概况本文所使用的硬件环境,是《旁观高密存储服务器(1):不择手段混合型》中介绍的超云R-G9服务器,该服务器也应用在了《对象存储(2):开源对象存储Swift——概念、架构与规模部署》文末的提到的案例中。这款服务器在一个4U机箱内放置4个双路服务器,每个服务器节点最多可安装12块3.5寸SATA硬盘。
图2该部署中使用的服务器
此次部署中,共为这些服务器配备了15块4TB希捷企业级SATA硬盘,三块SFP+接口的万兆以太网卡,六颗IntelXeonE5CPU,12条16GB内存。由于Swift对计算资源的消耗较低,所以这里用了较低端的4核心IntelXeonE5处理器。
我们用了四台服务器中的三台,一个作为Proxy节点,另两个作为Storage节点。每个节点均配备了两颗CPU、64GB内存和一块万兆网卡。需要说明的是,这里的内存配置略高,一般来说,对于一个8~12块SATA盘的SwiftStorage节点来说,8个处理器核心+32GB内存比较合适;而对于Proxy节点,情况略微复杂,要看Proxy节点与Storage节点的配比、外界访问负载、需不需要使用纠删码(ErasureCoding)、ProxyServer上通过Middleware扩展的功能的计算开销等因素。
Proxy节点中配备两块硬盘,每个Storage节点配备七块硬盘,拟在Swift中配置双副本策略。再次强调,这里的Swift部署只是一个小规模的实验环境,目的是对Swift的安装部署过程做一个原理性的展示,生产环境中一般不会采用双副本策略和单个Proxy节点的架构。实际上,由于Swift简洁的软件架构和逻辑架构,及其采用的无中心设计,Swift的部署架构可以非常灵活,在后续篇章中我们会讨论如何根据实际情况设计Swift生产环境的部署架构。
为了达到良好的散热效果,这里把Proxy节点放在了中间,如图所示。
图3一个Proxy节点和两个Storage节点
3、硬盘配置Proxy节点中配备两块硬盘做成RAID1,主要用来安装操作系统等软件和供ProxyServer等服务进程存储配置信息。
两个Storage节点均配备七块硬盘,一块盘用来安装操作系统等软件并供服务进程存储配置信息,其他六块盘用于存储数据。由于两个Storage节点的配置完全相同,所以对操作系统盘做RAID1不是很有必要,为了节省存储空间,这里没做RAID。如果Proxy节点有多个,也可以不做RAID1,因为ProxyServer是一个无状态服务,各个节点的配置应当是相同的。对于分布式系统中RAID的使用,我们后面会专门写一篇文章进行探讨。
需要注意的是,对于一些存储密度较高的服务器,常会采用板载SATA+SAS(板载RAID芯片)的方式,SAS兼容SATA,所以该部署中全部使用SATA硬盘是没有问题的,但是要特别注意的是:哪些盘位是可以是连接到板载SAS芯片提供的接口的,哪些盘位是连接到板载SATA接口的。前者通过SAS的BIOS管理(如图4、图7),后者由主板的BIOS管理(如图5);前者可以做RAID,后者不可以。对于该部署中所使用的服务器来说,图6所示是1~8盘位是连接到板载SAS(RAID)上的,而9~12是直接连到板载SATA接口上的。
图4SAS的BIOS相关信息,可以看到发现了六块硬盘,但尚未进行配置
图5主板BIOS里的相关信息,主板上有六个SATA接口,但实际上该服务器用了其中的四个
图6服务器中的十二个盘位和不同接口的对应关系
本部署中Storage节点用的7块盘的安装位置如图6所示,对于安装在1~8盘位几块盘,即便不做RAID,也需要在板载SAS/板载RAID的BIOS中对其进行设置,做成直通模式,如果该型号不支持直通,宜将其配置为单盘RAID0,如图7所示。
图7在板载SAS/板载RAID的BIOS里设置单盘RAID0
如今在分布式系统逐渐成为主流的趋势下,RAID的使用越来越少,很多系统中都依靠软件来保障可靠性,尤其是像Swift和Ceph这样的分布式存储,更不提倡在存储节点上使用RAID,否则会带来难以预测的性能问题。但是人们采购服务器时仍保留了(SAS)RAID卡,不论是如这里的板载RAID还是如《旁观高密度存储服务器(2):因地制宜保性能》中介绍的另行安装的RAID卡,其主要目的已经不是为了用RAID保障数据存储的可靠性,而是借SAS增加硬盘接口的数量。这时通常会让RAID卡工作在直通模式下或者做成单盘RAID0。
4、网络连接在该Swift部署中,有一个千兆(1Gb)的管理网络、一个万兆(10Gb)的存储网络和一个万兆的服务网络。外界对存储服务的访问(通过Proxy节点)和Proxy节点与Storage节点之间的账户、容器和对象数据流量均通过万兆网络,而运维人员对服务器和系统的管理是通过千兆网络。
图8该部署中的网络架构
服务器板载的网口是两个千兆口,为了实现万兆互联,我们在每个服务器上安装一块SFP+接口的万兆以太网卡。
安装万兆网卡后,我们可以看到服务器上有五个网口(图9)。下面的三个,最左边是IPMI接口,不在本文的讨论范围之内,靠右的两个是板载千兆RJ45接口。上面的两个是SFP+万兆口,图中左边的万兆口加了一个光电转换模块,简称光模块(图10左上)。
为了实现图8所示的网络架构,需要一台万兆交换机,目前国内最常见的万兆交换机是SFP+接口(俗称“光口”)的,RJ-45接口(俗称“电口”)的较为少见。我们使用的是迪普的LSW万兆交换机。
千兆互联可以通过接入一个千兆交换机来实现,也可以通过在万兆交换机的一些接口上增加千兆的RJ-45接口转换模块(俗称“电口模块”),此时要注意在交换机中将这几个口的速率设置为千兆。
图9给服务器增加万兆网卡
图10该环境中用到的一些网络组件
网络连线完成后,整个系统硬件的整体架构如前面的图3所示,图11将局部放大,可以看得更清楚一些。需要说明的是,在图3中,两个Storage节点也接入了对外的服务网络,但是实际上并没有使用,通常只要将Proxy节点接入服务网络即可(图3中将这两个节点接入服务网络是为其他实验准备的)。同样为万兆,服务网络和存储网络分别使用了铜缆和光纤,对于Swift或者其他上层软件来说,这二者无本质区别,在实际生产中,如果选用铜缆,价格较低,但是铜缆抗干扰能力弱、升级潜力小,而且因为铜缆较粗,节点数量较多时,如果选用铜缆,布线会比较困难。
图11服务器和交换机上的网络接线
由于存储网络、管理网络和提供对外访问的服务网络都应当工作在不同的网段,需要在交换机上划分VLAN将这三个网络进行隔离。尽管IP协议的寻址方法可以在不划分VLAN的情况让数据包到达它该去的地方,但是,在实际生产环境的规模部署中,使用VLAN便于进行IP地址管理、实现服务器发现和自动化部署,同时能降低网络中广播包的数量。
结束语
至此,一个小规模Swift部署的硬件环境就准备完毕了,我们可以看到,CPU、硬盘、网络……每一步硬件的配置,都考虑了对上层的系统软件甚至应用负载的支持。下一篇,我们将把重点放到Swift软件的安装和部署上,并将进一步看到软件和硬件是如何组成一体形成一个存储系统的。
北京企事录技术服务公司