第一部分:GPFS
一、GPFS并行文件系统
说起GPFS,大家已经比较了解了,这里再次不厌其烦地再介绍一遍---GPFS (General Parallel File System)是 IBM 公司第一个共享文件系统,它是一个并行的磁盘文件系统,它保证在资源组内的所有节点可以并行访问整个文件系统。GPFS 提供的文件系统操作服务可以支持并行应用和串行应用,它允许任何节点上的并行应用同时访问同一个文件或者不同的文件,提供统一命名接口。
既然是并行文件系统,GPFS相对于单一节点和单一文件系统它有以下几个特点:
1.文件系统的并发读写:多个节点的同一文件系统,同时受理I/O读写请求,提升文件系统读写的并发性,多个节点均为ACTIVE。
2.文件系统的高可靠性:文件系统的数据可通过日志或复制的方式存在多个副本,并且由于多个节点和多个磁盘的多活特性,可容忍故障节点数或磁盘数提升。
3.文件系统的高性能:通过将文件分布在多个节点和磁盘上,使得文件系统的读写操作分布到多个磁盘上和多个节点上,GPFS可以超越单一节点和单一文件系统的性能极限。
4.文件系统的可扩展性:文件系统可随节点数的增加和存储磁盘个数的增加,进行在线扩展和文件系统数据块均衡或调整。进一步提升性能、容量和可靠性。
在GPFS并行文件系统的应用中,通常有以下三种主要的应用架构模型:
1.SAN网络模式
这种架构也叫Direct Attached Storage架构,在该架构模式下,所有节点通过SAN网络共享同一存储,这些节点既是GPFS SERVER节点又是GPFS CLIENT节点,整个架构趋于扁平化,I/O深度浅,又由于节点与存储采用了Direct Attached的方式连接,所以这种架构模式下的节点I/O性能较好,GPFS的I/O性能主要取决于存储I/O性能。值得注意的是,这种模式下,为了保证仲裁2N+1的数量,通常选用存储盘作为TiebreakerDisk。
2.NSD服务模式
这种架构也叫Mixed NSD access架构,该架构模式下,两组NSD SERVER分别挂载两组不同的存储,这两组存储通过TCP/IP或者INFINIBAND网络传输数据,通常,两组存储的数据都保持一致,这种模式需要一个专门的仲裁节点来保证2N+1的仲裁数量,其中NSD SERVER既可作为GPFS服务端,又可作为GPFS客户端,应用节点跑在NSD SERVER上时,I/O深度也只有两层,但由于两组NSD盘间数据的实时同步会损耗一定的时间,所以NSD SERVER的I/O读写性能会稍稍降低。如果NSD SERVER上不跑应用,应用节点通过网络共享的方式对GPFS文件系统进行读写,那么整个应用读写I/O深度达到了三层,性能损耗又会提升。另外,为了实现多块NSD均衡由不同的NSD SERVER负载,可以在配置GPFS NSD时,区分不同NSD的NSD SERVER服务顺序。
3.无共享模式
这种架构也叫File Placement Optimizer (FPO)架构,这种架构模式下,每一个节点均挂载不同的存储,所有节点既作为GPFS服务端又作为GPFS客户端,GPFS文件系统横跨所有节点和所有存储,这就是所谓的分布式文件系统,通常利用节点的内置盘作为节点的存储,整个I/O深度也只有2层,这种架构的I/O读写性能最佳,GPFS并发读写最好,扩展性最佳。
以上可见GPFS作为并行文件系统,无论是性能、可靠性,还是可扩展性和灵活性上都有着自身卓越的属性。
二、基于GPFS技术的应用跨中心双活架构与容灾
在上一节中我们简要介绍了GPFS的三种架构模型,那么基于这三种架构模型,GPFS的跨中心容灾和双活架构,又该如何设计和考虑呢?
1.GPFS SAN网络模式架构下的容灾和双活
如下图所示,我们将GPFS SAN网络模式架构在SiteB一模一样的搭建,SAN网络交换机和TCP/IP网络交换机通过SiteA和SiteB间的裸光纤级联,两个站点的节点既可能是GPFS服务端,也可能是GPFS客户端。于是乎我们可以得出两种设计方案:
a.容灾方案:两个站点的所有节点搭建一个GPFS集群,所有节点均作为Quarum Node,SiteA的存储数据盘作为业务数据盘和TiebreakerDisk,SiteA和SiteB的两个存储通过存储自身的实时同步复制功能,保持数据一致性,这样一来,有两种容灾的方式,一种是SiteB的所有节点作为GPFS客户端,通过跨站点的TCP/IP网络,访问SiteA的GPFS服务端;另一种是SiteB的所有节点作为GPFS服务端,通过跨站点的SAN网络,访问SiteA的存储。这两种方式的差别在于第一种方式为:SiteB节点的GPFS文件系统读写I/O路径为跨站点的TCP/IP网络+SiteA的SAN网络;第二种方式为:SiteB节点的GPFS文件系统读写I/O路径为跨站点的SAN网络。所以在SiteB端,第一种方式的I/O路径略长于第二种方式。这两种方式的相同点在于存储的业务数据和TiebreakerDisk信息均通过存储的同步复制技术保持实时同步,为了实现站点级容灾,两种方式均需要编写脚本,判断 SiteA节点是否都活动,否则将自动将切换存储卷至SiteB,SiteB节点自动将GPFS服务拉起,继续对外提供服务。
所以总结GPFS SAN网络模式架构的容灾,可以得出,以上两种方式下的SiteB站点节点读写性能和稳定性需要重点关注;SiteB节点和存储全部故障不会对SiteA的GPFS访问造成影响;SiteA一半节点故障不会影像GPFS访问;SiteA两个节点或者TiebreakerDisk均故障需要触发脚本,使得存储盘切换至灾备端,SiteB全部节点启动GPFS服务,继续提供GPFS访问。
b.双活方案:GPFS SAN网络模式架构的跨站点双活方案,可以考虑两种方式,见下图一和图二。
图一:
图二:
图一为SAN网络模式架构模式容灾方案的延伸版,通过应用负载均衡地把服务请求分发至SiteA和SiteB两个站点,两个站点的所有节点均提供应用服务,SiteA节点的应用在本地对GPFS文件系统读写,SiteB节点的应用跨站点对GPFS文件系统读写。另外,SiteA节点既作为GPFS Servers,同时又担任Application Node,而SiteB节点既可按照容灾方案的第一种方式作为GPFS客户端,又可按照容灾方案的第二种方式作为GPFS的服务端。简单总结这种方式来说,两个站点的节点GPFS I/O读写路径和性能存在些许差异;
而图二将SiteA的NSD Server与Application Node分置于不同节点,SiteA和SiteB节点全部作为GPFS客户端,两个站点的节点GPFS I/O读写路径和性能一致。
当然,上述两种双活方案均是建立在容灾方案的基础之上,SiteA和SiteB的所有节点均加入一个GPFS集群中,利用存储到存储的同步复制功能,SiteA的TiebreakerDisk仲裁,自动探测与自动切换脚本也是必须的。
2.GPFS NSD服务模式架构下的容灾和双活
GPFS NSD服务模式下的容灾、双活和SAN网络模式架构容灾、双活有很大的不同,见下图所示。
a.SAN网络模式的容灾架构是需要存储的跨站点同步复制的,数据同步网络为SAN光纤网络;而NSD服务模式的容灾架构是通过两个站点的GPFS Server间进行数据复制和同步的,是跨站点NSD DISK与NSD DISK间的同步,数据同步网络为TCP/IP网络。基于SAN光纤网络的同步带宽、速率和TCP/IP网络会有差异,所以NSD服务模式的容灾架构的数据同步网络最好是Infiniband或者万兆TCP/IP网络,来提升整个数据同步的速率,避免同步带来的I/O性能损耗。
b.SAN网络模式的容灾架构下,两个站点GPFS读写I/O路径和性能不对称;而NSD服务模式的容灾架构下,两个站点GPFS读写I/O路径和性能非常对称,每个节点均读写各自站点的NSD数据盘。
c.SAN网络模式的容灾架构设立了TiebreakerDisk,来保证2N+1的仲裁数量;而NSD服务模式的容灾架构不需要设立TiebreakerDisk,取而代之的是第三站点仲裁节点。
d.SAN网络模式的容灾架构为了实现站点故障时,GPFS服务的自动切换功能,需要加入自动化监控和切换脚本(可考虑TSA软件);而NSD服务模式的容灾架构无需考虑这点,因为两个站点的所有节点均为Quarum Node,组成一个集群,两个站点节点数量对等,总共2N+1的仲裁数量,SiteA的N个节点故障,不会影响整个集群故障,SiteB仍然可以对外提供GPFS文件系统读写。
3.GPFS无共享模式下的容灾和双活
GPFS无共享模式作为分布式GPFS文件系统模式,在大数据方面,应用越来越广泛。另外它对GPFS性能的提升和扩展能力的提升,起着非常重要的作用。那么这种模式架构下的容灾和双活又是如何的呢?如下图所示:
我们将同一个GPFS集群中所有的GPFS-FPO节点拉开,均匀分布于不同的两个站点,所有节点既是GPFS服务端,又是GPFS客户端,同时还是应用软件的服务节点,两个站点的TCP/IP网络或者Infiniband网络通过裸光纤级联,并通过应用负载来接入服务请求和均衡分发服务请求,最终实现跨中心的双活应用服务。这里主要利用了GPFS-FPO的四大特性:
a.位置感知特性:由于GPFS文件系统的数据是打散在不同节点的不同存储当中,所以每个GPFS节点的读写操作都需要知道究竟文件都在哪个节点存放着,所以GPFS-FPP在缓存中专门划了一片区域,来存储存储块数据的位置信息和副本信息,也叫GPFS-MAP,无论哪个节点想要读取GPFS的哪个存储块,均会通过GPFS-MAP找到所在的节点和具体位置。
b.可配置的写亲和性:GPFS-FPO的写亲和性是指某节点的应用程序需要进行GPFS读操作时,在本节点的本地存储就能读取到的能力。对于这种能力,GPFS-FPO是可以进行设置的,当设置为write striping(写条带化)时,所有GPFS节点均衡分布着数据,某一节点的读操作可能从本地无法获取,需要通过网络(GPFS客户端)的方式从其他节点读取;当设置为write affinity时,可以设置某部分文件集属于某节点专属,或者所有节点均包含相同的存储数据,这样所有节点的读操作均能在本地获得。
c.管道复制:所有GPFS节点通过专属的网络连通,当某一节点应用对GPFS写数据时,写入该节点的存储数据,同时也会通过管道复制至其他多个节点的存储。
d.快速恢复:当某一GPFS节点故障时,该节点的存储也离线,但整个GPFS并不会丢失该存储数据,其他节点的存储依旧有相同的数据副本,继续提供读写访问。当故障节点恢复后,也能通过其他节点的副本数据,快速恢复新增变化数据。
基于以上四点,我们可以看出,GPFS无共享模式架构对某些应用场合来说,也是非常适合搭建跨中心的应用双活架构。
第二部分:并行Oracle、并行DB2
一、并行DB
在前面的章节中,我们详细介绍了GPFS的三种模式架构以及其容灾和双活方式,这是对需要共享存储的应用系统,利用软件架构的方式,去实现跨中心的应用双活,那么又该如何基于软件架构,去实现OLTP数据库的跨中心双活呢?
这里我们需要提到并行DB的概念:并行数据库系统的目标是高性能和高可用性,通过多个处理节点并行执行数据库任务,提高整个数据库系统的性能和可用性。
性能指标关注的是并行数据库系统的处理能力,具体的表现可以统一总结为数据库系统处理事务的响应时间。并行数据库系统的高性能可以从两个方面理解,一个是速度提升,一个是范围提升。速度提升是指,通过并行处理,可以使用更少的时间完成数据库事务。范围提升是指,通过并行处理,在相同的处理时间内,可以完成更多的数据库事务。并行数据库系统基于多处理节点的物理结构,将数据库管理技术与并行处理技术有机结合,来实现系统的高性能。
可用性指标关注的是并行数据库系统的健壮性也就是当并行处理节点中的一个节点或多个节点部分失效或完全失效时,整个系统对外持续响应的能力。高可用性可以同时在硬件和软件两个方面提供保障。在硬件方面,通过冗余的处理节点、存储设备、网络链路等硬件措施,可以保证当系统中某节点部分或完全失效时,其它的硬件设备可以接手其处理,对外提供持续服务。在软件方面,通过状态监控与跟踪、互相备份、日志等技术手段,可以保证当前系统中某节点部分或完全失效时,由它所进行的处理或由它所掌控的资源可以无损失或基本无损失地转移到其它节点,并由其它节点继续对外提供服务。
为了实现和保证高性能和高可用性,可扩充性也成为并行数据库系统的一个重要指标。可扩充性是指,并行数据库系统通过增加处理节点或者硬件资源(处理器、内存等),使其可以平滑地或线性地扩展其整体处理能力的特性。
那么基于以上的并行DB的高性能和高可用性概念,如何去理解并行DB的架构呢?又该如何去设计并行DB的跨中心双活架构呢?由于数据库产品众多,这里只挑选两款企业OLTP数据库系统用得非常多、认可度高的产品:ORACLE和DB2,进行深入的探讨。
二、Oracle RAC
对于Oracle RAC,想必大家已经非常了解了,那么下面开始一步步引导大家逐步过渡至跨中心双活的并行Oracle架构。
1.存储架构层
文件系统的选择是并行Oracle的关键。传统的文件系统不支持多系统的并行挂载。因此,必须将Oracle数据文件存储在支持多系统并发访问的文件系统中。这样并行Oracle节点才能同时对共享的文件系统进行读写操作。这里主要有三种方式来实现:
(1)自动存储管理(ASM)
ASM提供了一个纵向的统一管理的文件系统和卷标管理器,专门用于建立Oracle数据库文件。ASM可以提供文件系统给多个Oracle RAC的集群节点。ASM无需再手动调节I/O,它会自动的分配 I/O 负载到所有的可用资源中,从而优化性能。ASM可以维护数据的冗余备份,从而提高故障的容错。它也可以被安装到可靠的存储机制中。
(2)通用并行文件系统(GPFS)
前面已经详细介绍了,用在并行Oracle架构的话,GPFS的SAN模式架构和NSD服务模式均可。它相对于ASM这样一个黑盒子来说,优势主要体现在可视化、管理能力和灵活性上,但ASM是专用于的Oracle RAC产品,对非条带化的磁盘数据也能分布均匀,I/O均匀。
(3)存储双活
这里说的存储双活并不是单一存储中的控制器双活,而是两台存储的A-A模式,如在“基于SVC的三种主流双活数据中心架构深入探讨”活动中探讨的SVC Enhanced Stretched Cluster和SVC HyperSwap,通过这种存储双活的架构结合并行Oracle,也是一种非常好的想法,Oracle RAC节点可以分别挂载不同的A-A存储,而无需考虑底层存储间的同步和双活过程,相当于把并行文件系统的功能交由底层存储硬件去实现,Oracle RAC节点纯粹做好并行Oracle的工作即可,并且这种架构少了一层(ASM/GPFS)文件系统层,I/O深度更浅。
2.并行Oracle软件架构层
Oracle RAC的软件层是在多个节点上运行多个数据库实例,利用多个节点组成一个数据库,这样在保证了数据库高可用性的情况下更充分的利用了多个主机的性能,而且可以通过增加节点进行性能的扩展。实现Oracle RAC需要解决的关键问题就是多节点进行数据访问时如何保证数据的一致性,Oracle是通过各节点间的私有连接进行内存融合(cache fusion)来保证各节点数据访问的一致性。
什么是cache fusion?
这是Oracle RAC的重要概念,它是通过Oracle RAC节点间的互连网络,在各节点的 SGA 之间进行块数据传递,以实现SGA数据块共享和一致性。它相当于把所有节点实例的SGA虚拟成一个大的SGA区,每当不同的实例请求相同的数据块时,这个数据块就通过互连网络在实例间进行传递。这样一种方式可以避免不同实例需要相同数据����,ų��块时,首先将块推送到磁盘,然后再重新读入其他实例的缓存中这样一种低效的实现方式。
当一个数据块被读入 RAC 环境中某个实例的缓存时,该块会被赋予一个锁资源,以确保其他实例知道该块正在被使用。之后,如果另一个实例请求该块的一个副本,而该块已经处于前一个实例的缓存内,那么该块会通过互连网络直接被传递到另一个实例的 SGA。如果内存中的块已经被改变,但改变尚未提交,那么将会传递一个修改块副本。这就意味着只要可能,数据块无需写回磁盘即可在各实例的缓存之间移动,从而避免了同步多实例的缓存所花费的额外 I/O。
很明显,不同的实例缓存的数据可以是不同的。所以,一个实例要访问特定数据块,并且之前该实例从未访问过该数据块,那么它要么从其他实例 cache fusion 过来,要么从磁盘中读入。
既然cache fusion如此重要,要发挥cache fusion的作用,要有一个前提条件,那就是互连网络的速度要比访问磁盘的速度要快。否则,就根本没有引入cache fusion的意义。但是这样又带来了另外一个问题,随着Oracle RAC节点数的不断增加,节点间通信的成本也会随之增加,当到某个限度时,增加节点可能不会再带来性能上的提高,甚至可能造成性能下降。
这个问题的主要原因是 Oracle RAC对应用透明,应用可以连接至集群中的任意节点进行处理,当不同节点上的应用争用资源时,RAC 节点间的通信开销会严重影响集群的处理能力。所以通常而言,Oracle RAC 更多情况下用来提高可用性,而不是为了提高扩展性和性能。但是对于使用 ORACLE RAC 有以下三个建议:
(1)节点间通信尽量使用高速互连网络。
(2)每个ORACLE数据页面使用较少的行,通过数据库分区来避免热页面。
(3)尽可能将不同的应用分布在不同的节点上,利用业务分割的方式,来保证整体Oracle RAC的系统性能。业务分割的根本在于尽量使不同的实例不能访问相同的数据块,这样业务分割规则可以小到表的级别,大到表空间、Schema的级别。
可以看到,建议(2)和建议(3)实际上又削减了Oracle RAC的应用透明度,可见并行DB要同时提高高可用性、扩展能力、性能和应用透明度是十分艰难的。
3.跨中心的存储架构和并行Oracle扩展
前面谈到了并行Oracle存储架构的三种方式,那么这三种方式被拉伸至两个数据中心后,存储架构和并行Oracle又该如何扩展呢?
(1)自动存储管理(ASM)
Oracle RAC节点被拉开至两个站点后(Oralce Extend RAC),为了保证两个站点的存储数据一致,需要在所有节点操作系统层识别两个存储,并做LVM镜像。所有节点通过ASM对LV裸设备或者文件系统进行读写操作。
如果SiteA的存储作为主存储,那么SiteA的某一节点的写入操作需要如下过程:SiteA节点写SiteA存储,同时跨站点写SiteB存储,所有存储均写返回后,代表一次写入操作完成。SiteB的某一节点的写入操作需要如下过程:SiteB节点写SiteB存储,同时跨站点写SiteA存储,所有存储均写返回后,代表一次写入操作完成。所以这种方式下,一次写操作的速度取决于最慢的存储。
另外cache fusion是基于TCP/IP或者Infiniband的跨站点融合,对两个站点间的带宽、衰减和稳定性有很高的要求。
(2)通用并行文件系统(GPFS)
在单一站点的话,GPFS的三种模式中的SAN模式架构和NSD服务模式架构都是可以胜任并行Oracle的存储架构的。
SAN模式架构是Oracle RAC节点通过SAN网络共享存储,再在共享存储之上建立GPFS文件系统,Oracle的数据库文件存储在GPFS文件系统中,最终实现两个Oracle RAC节点并行对GPFS文件系统读写的功能。
当SAN模式架构扩展至两个站点的话,两个站点的存储需要保持实时同步,但是SiteB的Oracle RAC节点只能通过SAN网络或者TCP/IP网络访问SiteA的共享存储,对于OLTP数据库来说,站点B的RAC节点I/O访问路径过长,性能不够稳定,而且前面提及的cache fusion需要跨站点通讯,两个数据中心的距离不宜太远。所以这种模式并不理想。
NSD服务模式架构是Oracle RAC节点通过SAN网络分别挂载不同的存储盘,Oracle RAC节点均作为NSD SERVER,数据一致性是通过NSD盘间的实时复制保持的,通讯网络为TCP/IP网络或者INFINIBAND网络。
当NSD服务模式架构扩展至两个站点,每个站点均包含一个Oracle RAC节点和一套存储,这种模式下,每个站点的RAC节点访问各自站点的存储,存储数据块的同步为跨站点的NSD间的同步,通过跨站点的网络实现,每个站点的RAC节点I/O深度浅,路径短,但考验的是数据一致性、跨站点NSD实时同步和cache fusion的效率,最起码需要万兆或者INFINIBAND网络级联。
(3)存储双活
前面也讲了,当Oracle RAC的存储拉开至两个站点后,从底层存储的角度来看,这种方式较为理想,两个站点的RAC节点无需关心存储是否共享,底层存储会做好数据层所有数据同步的工作,RAC节点I/O深度浅,路径短,带宽高
相比前面两种方式,在跨中心并行Oracle的存储架构来说,最为合适,当然这里也需要考虑Oracle RAC节点间的cache fusion的效率,不建议过高并发的数据库系统需求,跨中心Oracle RAC节点的数量也需要控制。
上面三种方式,对于跨中心的Oracle RAC来讲,也是建议将业务尽量分割,对不同的表或者表空间操作的事物放在不同的Oracle RAC节点跑,尽量减少跨中心的I/O流量和网络流量,不至于为了双活而双活,反而导致可靠性和性能降低。
三、DB2 PureScale
DB2 PureScale是以IBM DB2 for z/OS技术(集中锁定和集中缓冲池技术)为基本原则,主要针对分布式系统的在线事务处理(OLTP)提供集群技术。
DB2 PureScale并不是一个硬件解决方案,它是一个应用在AIX系统(现在也可运行在Linux系统)上的数据库集群软件。如果该软件在IBM Power Systems上运行,在降低扩展IT系统的风险和成本的同时,可以帮助客户提高数据库交易能力。其目的是让企业在不牺牲性能的前提下扩展DB2集群,DB2 PureScale具有无限扩展、应用透明性、持续可用性等特点:
(1)无限扩展
DB2 PureScale为各种事务处理工作负载提供了几乎无限的产能。系统扩展非常简单,只需要与一个新节点连接,并发出两个简单的命令即可。DB2 PureScale基于集群、磁盘共享的架构通过有效利用系统资源,降低了成本。
(2)应用透明性
使用DB2 PureScale,无需改变企业的应用程序代码,就可以有效地运行在多个节点上。久经验证的、可扩展的架构能够随需扩展应用程序,以满足变化的业务需求。企业只需做少量改变或无需做任何改变,就能够运行为其他数据库软件编写的应用程序;DB2 为常用的语法规则和PL/SQL语言提供了全面的支持,使从Oracle数据库迁移到 DB2 变得比以往更轻松了。