本文介绍了金融机构关键业务系统数据存储实施配置中的一些实践,读者可以利用本文提供的存储、组网、参数等信息,在实践中进行参考,减少在实施方案规划时的负担与实施过程中的风险。
【作者】张鹏,某金融科技公司高级技术主管
关键业务系统数据存储规划实施与配置
存储的实施需要从存储本身及存储组网环境几个方面来设计。
存储侧的配置主要包含容量、存储池、文件系统以及网络的规划。使用存储之前,建议首先分析清楚业务性能和容量需求,做好存储系统的硬盘数规划,降低运维风险。
存储系统用于存储业务数据和系统数据,为了保证有足够的容量用于存储业务数据,需要对存储系统的可用容量进行合理规划。规划可用容量时,需要考虑单盘标称容量、热备容量、RAID利用率等因素。硬盘厂商和操作系统对硬盘容量定义的算法是存在偏差的,因此,硬盘的标称容量和操作系统中显示的实际容量也存在着一定的偏差。通常硬盘厂商的算法:1GB=1,000MB、1MB=1,000KB、1KB=1,000bytes。操作系统的算法:1GB =1,024MB、1MB =1,024KB、1KB=1,024bytes。存储系统支持热备空间,用于承载失效成员盘中的数据,在规划存储可用容量时要考虑热备空间的占用。不同的RAID级别中,校验数据带来的容量开销是不同的,也就是说RAID有效磁盘空间利用率也是规划实际可用容量需要考虑的。除此之外,不同厂商可用容量数据块大小计算也有差异,所以计算规划可用容量的时候,最好有一定的余量。
存储池,是存放存储空间资源的容器。为了更好地利用存储系统的存储空间,需要根据实际的业务需求,对存储池的RAID策略进行合理的规划。根据RAID中检验位的个数不同提供不同的保护级别。RAID保护级别的选择可以参考前文描述,根据业务特点不同提供更合理的容量和性能。创建存储池时,允许设置容量分配比的告警阈值,默认是80(百分比),这里特别强调关键业务环境下不建议增大这个预警值。在使用瘦磁盘(Thin LUN)的时候,容量告警尤其重要,用户可以根据业务数据量增长的速度设置合理的告警阈值,避免业务因为存储池容量不足而造成服务中断。存储池中RAID的划分,还要考虑磁盘冗余和磁盘柜冗余,以及热备盘的配比。RAID是否跨磁盘柜,在空间利用率、可靠性、性能方面还是有差异,不跨磁盘柜的RAID空间利用率高,跨磁盘柜的RAID可靠性高,两者随机读与顺序读性能相当,其中不跨磁盘柜的RAID顺序写性能高于随机写性能。
存储区域网络SAN中,逻辑单元号LUN是用来标识一个逻辑单元的数字,这个逻辑单元是通过SCSI寻址的设备。存储系统将物理硬盘进行分区,成为拥有逻辑地址的各个部分,进而允许服务器进行访问,这样的一个分区便称为一个LUN。通常说的LUN也指在SAN存储上创建的逻辑磁盘。不同厂商对LUN和卷的定义不同,本文针对一般情况进行描述,即卷只是针对服务器来讲。存储系统上创建一个LUN,此时LUN相对于存储系统是一个逻辑设备。当网络中的服务器连接到存储系统时,就可以识别到存储系统上的逻辑设备LUN,此时LUN相对于服务器来讲就是一个物理硬盘。在该物理硬盘上创建一个或多个分区,就可以得到一个或多个卷。此时卷相对于服务器是一个逻辑设备。数据库或应用系统创建LUN时,为了存储系统的性能达到最优状态,需要根据实际的数据存储情况,为LUN选择合适的策略。通常存储厂商会提供不同应用类型的预置配置策略,如果没有匹配特定的应用类型,也可以选择通用类型。LUN数量的设置,要考虑LUN是否跨越RAID组中的所有硬盘,新型的RAID技术的存储池会将LUN的数据块尽量分布在所有硬盘上,发挥最大性能,所以要参考不同厂商提供的配置策略设置合理的LUN数量。同时满足数量的前提下,使用尽量大的LUN容量,以简化管理开销,但是建议单个LUN不要超过2TByte。
网络侧配置,不管通过以光纤通道为代表的存储区域网络还是通过以太网互联,存储和服务器之间的网络侧规划要充分考虑可靠性和负载均衡等特性,通常要遵循几个原则,即服务器链路双交换组网,每个服务器至少两张HBA卡(这里的HBA卡不是泛指光纤通道卡,可以理解为服务器通过不同协议连接存储的接口卡),每张卡到两个交换机均有链路;存储到交换机双交换组网,每个控制器至少两张接口卡,每张接口卡到两个交换机均有链路。
存储和服务器间的访问控制也需要规划。LUN Masking逻辑单元号掩蔽是指LUN与服务器HBA卡的WWN地址绑定,与服务器HBA卡建立一对一或多对一的连接和访问关系。以存储为中心的,在一个存储前端端口掩码多个LUN的加强型方法。LUN Masking在存储控制器级别上进行服务器HBA的WWN绑定,因此存储控制能够将不同LUN划分给一个或多个服务器,可以提供LUN级别的访问控制。LUN Masking也允许磁盘存储资源在多个独立服务器之间共享。LUNMapping逻辑单元号映射是指LUN与存储设备的服务器端口进行绑定,服务器连接不同的服务器端口时所能访问的LUN不同。实现不同的LUN与不同的存储服务器端口绑定,不同的服务器端口与不同的FC交换机或者不同的ZONE连接,从而实现不同的服务器只能访问不同的存储端口。不同厂商对LUN Masking和LUN Mapping的定义和解释不完全相同,有的甚至就定义成一个名称。本位以映射视图作为统称,主要图定义了LUN、阵列端口、服务器端口之间的逻辑映射。创建映射视图,建议为了便于管理,建立类似LUN组的对象,将同一种业务的LUN加入到一个LUN组内。建立类似服务器组的对象,将包含一组需要共享存储资源的“服务器”,以及每个“服务器”包含多个启动器(主机端口)。为每一个服务器创建一个“服务器”,将该服务器的所有启动器添加到该“服务器”内。如果为了可以更精细化的控制存储端口的分配,可以考虑建立类似端口组的对象,一个端口组应至少包含来自于每个控制器的一个端口,以增加运维的灵活性,降低业务之间的性能影响,同时避免单点故障。
服务器侧的配置,主要考虑在服务器硬件资源有限的情况下,最大程度地发挥出服务器性能,提高系统的并发处理能力与稳定性是一项相当重要的工作。操作系统内核参数的调整是必不可少的。例如Linux系统下,TCP断开连接以后会以TIIME_WAIT状态保留一定的时间,然后才会释放端口。当并发请求过多的时候,就会产生大量的TIME_WAIT状态的连接,不及时断开将会占用大量的端口资源。通过优化TCP的内核参数,及时清理掉TIME_WAIT状态的端口。编辑/etc/sysctl.conf并添加参数内容。net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用Cookies来处理,可防范少量SYN攻击,默认为0表示关闭。net.ipv4.tcp_tw_reuse = 1表示开启重用。允许将TIME_WAIT sockets重新用于新的TCP连接。默认为0表示关闭。net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME_WAIT sockets的快速回收。默认为0表示关闭。net.ipv4.tcp_fin_timeout = 30 表示修改系统默认的TIMEOUT时间。让内核参数修改生效记得执行命令sysctl –p。
服务器侧还需要进行多路径的配置,主要是服务器操作系统自身的多路径管理软件和存储厂商提供的多路径管理软件。一般存储厂商提供的多路径管理软件是基于操作系统上的增强。可以通过更丰富的参数配置,灵活配置路径的选择算法,和分配I/O负载。尤其是在存储双活的解决方案中,多路径管理软件的配合非常重要。
关键数据存储在数据库中,数据库侧的配置也是非常重要,企业级数据库的日志文件和数据文件的存储方式不同,对存储的要求也不同,例如日志文件会存在频繁的覆盖写的操作,如果存储中有SSD磁盘,就要特别注意SSD磁盘对写入次数的限制,那么就需要通过对数据库参数的调整,来减少磁盘离散写入,增加磁盘顺序写入的量,并且尽量分布均匀的写入磁盘空间。不同的数据库的数据引擎对存储的I/O要求差异较大,具体情况请参考数据库相关文档。
实施中配置步骤参考
OLTP数据库场景下,存储配置步骤可参考下表。
表1 OLTP数据库场景下存储配置步骤表