构建基于Oracle RAC和AccelStor Shared-Nothing架构的故障转移解决方案

大量的企业应用程序和虚拟化系统都有自己的机制来构建容错解决方案。 特别是,Oracle RAC(Oracle实际应用程序集群)是两个或多个Oracle数据库服务器的集群,它们协同工作以平衡负载并在服务器/应用程序级别提供容错能力。 要在这种模式下工作,需要一个公用存储,其作用通常是存储。


正如我们在一篇文章中已经讨论的那样,尽管存在重复的组件(包括控制器),但存储系统本身仍然存在故障点-主要是单个数据集的形式。 因此,要构建对可靠性有更高要求的Oracle解决方案,“ N个服务器-一个存储”方案必须很复杂。




首先,当然,您需要确定我们要努力防范的风险。 在本文中,我们将不考虑针对诸如陨石到来之类的威胁进行防护。 因此,构建地理上分散的灾难恢复解决方案将仍然是以下文章之一的主题。 在这里,我们看一下所谓的“跨机架”灾难恢复解决方案,它是在服务器机柜级别构建保护的。 橱柜本身可以位于同一房间,也可以位于不同的位置,但通常位于同一建筑物内。


这些机柜应包含所有必要的设备和软件,以确保Oracle数据库的运行,无论“邻居”处于什么状态。 换句话说,使用跨机架灾难恢复解决方案,我们消除了失败的风险:


  • Oracle应用服务器
  • 储物系统
  • 交换系统
  • 机柜中所有设备完全故障:
    • 停电
    • 冷却系统故障
    • 外部因素(人,自然等)

Oracle服务器的复制隐含着Oracle RAC的基本原理,并通过应用程序实现。 切换工具的重复也不是问题。 但是随着存储系统的复制,一切都不是那么简单。


最简单的选择是将数据从主存储复制到备份。 同步还是异步,取决于存储功能。 异步复制立即引起确保与Oracle数据一致性的问题。 但是,即使在应用程序中集成了软件,在任何情况下,如果主存储系统发生事故,都将需要管理员手动干预才能将群集切换到备份存储。


一个更复杂的选择是存储系统的软件和/或硬件“虚拟化器”,这将消除一致性和手动干预的问题。 但是,部署和后续管理的复杂性以及此类解决方案的不合理成本使许多人望而却步。


仅对于诸如跨机架灾难恢复的场景,使用无共享架构的全闪存AccelStor NeoSapphire™ H710阵列完美的 。 该模型是一个使用其自身的FlexiRemap®技术用于闪存驱动器的两个单一存储系统。 得益于FlexiRemap®NeoSapphire™H710,它可以提供高达600K IOPS @ 4K随机写入和1M + IOPS @ 4K随机读取,这是传统的基于RAID的存储无法实现的。


但是NeoSapphire™H710的主要功能是将两个节点作为独立的机柜执行,每个节点都有自己的数据副本。 节点同步通过外部InfiniBand接口执行。 得益于此架构,节点可以分布在长达100m的不同位置的不同位置,从而提供了跨机架灾难恢复解决方案。 两个节点都完全在同步模式下工作。 从主机方面看,H710看起来像一个普通的双控制器存储。 因此,无需执行其他软件和硬件选项以及特别复杂的设置。


如果将上述所有跨机架灾难恢复解决方案进行比较,则AccelStor版本将在其他方面脱颖而出:


AccelStor NeoSapphire™无共享架构存储的软件或硬件“虚拟化器”复制解决方案
有空
服务器故障无停机时间无停机时间无停机时间
开关故障无停机时间无停机时间无停机时间
储存失败无停机时间无停机时间停机时间
整个机柜故障无停机时间无停机时间停机时间
成本和复杂性
解决方案成本低*
部署困难低位

* AccelStor NeoSapphire™仍然是全闪存阵列,从定义上讲它不需要花费“ 3科比”,特别是因为它具有双倍的容量储备。 但是,将基于该解决方案的解决方案的总成本与其他供应商提供的同类解决方案进行比较,可以认为成本较低。


连接应用程序服务器和所有Flash阵列节点的拓扑如下所示:



在规划拓扑时,还强烈建议您复制管理交换机和服务器互连。


在下文中,我们将讨论通过光纤通道进行连接。 在使用iSCSI的情况下,一切都将相同,并根据所使用的交换机类型和稍有不同的阵列设置进行调整。


阵列的准备工作


二手硬件和软件

服务器和交换机规格


组成部分内容描述
Oracle Database 11g服务器两个
服务器操作系统Oracle Linux
Oracle数据库版本11克(RAC)
每台服务器的处理器两个16核Intel®Xeon®CPU E5-2667 v2 @ 3.30GHz
每台服务器的物理内存128GB
FC网络具有多路径功能的16Gb / s FC
FC HBAEmulex Lpe-16002B
专用的公共1GbE端口用于集群管理英特尔以太网适配器RJ45
16Gb / s FC交换机博科6505
专用的10GbE专用端口,用于数据同步英特尔X520

AccelStor NeoSapphhire™全闪存阵列规格


组成部分内容描述
储物系统NeoSapphire™高可用性型号:H710
图片版本4.0.1
驱动器总数48
驱动器大小1.92TB
驱动类型固态硬盘
FC目标端口16个16Gb端口(每个节点8个)
管理端口1GbE以太网电缆通过以太网交换机连接到主机
心跳端口连接两个存储节点之间的1GbE以太网电缆
数据同步端口56Gb / s InfiniBand电缆


开始使用数组之前,必须对其进行初始化。 默认情况下,两个节点的控制地址是相同的(192.168.1.1)。 您需要一次连接一个,并设置新的(已经不同的)管理地址并配置时间同步,然后将管理端口连接到单个网络。 之后,通过将子网分配给Interlink连接,将节点组合为HA对。



初始化完成后,您可以从任何节点控制阵列。


接下来,创建必要的卷并将其发布给应用程序服务器。



强烈建议您为Oracle ASM创建多个卷,因为这将增加服务器的目标数量,最终将提高整体性能(另一篇文章中有关队列的更多信息)。


测试配置
存储卷名称体积大小
数据01200GB
数据02200GB
数据03200GB
数据04200GB
数据05200GB
数据06200GB
数据07200GB
数据08200GB
数据09200GB
数据10200GB
网格011GB
网格021GB
网格031GB
网格041GB
网格051GB
网格061GB
重做01100GB
重做02100GB
重做03100GB
重做04100GB
重做05100GB
重做06100GB
重做07100GB
重做08100GB
重做09100GB
重做10100GB


有关阵列操作模式和紧急情况下发生的过程的一些说明



每个节点数据集都有一个“版本号”参数。 初始初始化后,它是相同的并且等于1。如果由于某种原因版本号不同,则始终会从较早版本到较新版本进行数据同步,此后,该编号将与较新版本对齐,即 这意味着副本是相同的。 版本可能有所不同的原因:


  • 计划重启其中一个节点
  • 由于突然关闭(电源,过热等)而导致节点之一发生事故。
  • InfiniBand连接断开,无法同步
  • 由于数据损坏,导致其中一个节点崩溃。 它将已经需要创建新的HA组并完全同步数据集。

在任何情况下,保持联机状态的节点的版本号都会增加一个,因此在与该对重新连接后,将同步其数据集。


如果通过以太网链接丢失了连接,则心跳将暂时切换到InfiniBand,并在恢复后的10秒钟内返回。


主机配置


为确保容错并提高性能,必须为阵列启用MPIO支持。 为此,将行添加到/etc/multipath.conf文件,然后重新加载多路径服务。


隐藏文字
设备{
设备{
供应商“ AStor”
path_grouping_policy“ group_by_prio”
path_selector“队列长度0”
path_checker“ tur”
具有“ 0”
hardware_handler“ 0”
prio“ const”
立即故障回复
fast_io_fail_tmo 5
dev_loss_tmo 60
user_friendly_names是
detect_prio是的
rr_min_io_rq 1
no_path_retry 0
}
}


此外,为了使ASM通过ASMLib与MPIO配合使用,您需要修改/ etc / sysconfig / oracleasm文件,然后运行/etc/init.d/oracleasm scandisks


隐藏文字

#ORACLEASM_SCANORDER:匹配模式以命令磁盘扫描
ORACLEASM_SCANORDER =“ dm”



#ORACLEASM_SCANEXCLUDE:匹配模式以从扫描中排除磁盘
ORACLEASM_SCANEXCLUDE =“ sd”


注意事项


如果您不想使用ASMLib,则可以使用UDEV规则,这是ASMLib的基础。


从12.1.0.2版Oracle数据库开始,该选件可作为ASMFD软件的一部分进行安装。



请确保为Oracle ASM创建的磁盘与该阵列实际使用的块的大小(4K)对齐。 否则,可能会出现性能问题。 因此,必须使用适当的参数创建卷:


分开/开发/映射器/设备名mklabel gpt mkpart primary 2048s 100%align-check best 1


在我们测试配置的已创建卷上分发数据库


存储卷名称体积大小卷LUN映射ASM卷设备详细信息分配单位大小
数据01200GB将所有存储卷映射到存储系统的所有数据端口冗余:正常
名称:DGDATA
目的:数据文件
4MB
数据02200GB
数据03200GB
数据04200GB
数据05200GB
数据06200GB
数据07200GB
数据08200GB
数据09200GB
数据10200GB
网格011GB冗余:正常
名称:DGGRID1
目的:网格:CRS和投票
4MB
网格021GB
网格031GB
网格041GB冗余:正常
名称:DGGRID2
目的:网格:CRS和投票
4MB
网格051GB
网格061GB
重做01100GB冗余:正常
名称:DGREDO1
目的:线程1的重做日志

4MB
重做02100GB
重做03100GB
重做04100GB
重做05100GB
重做06100GB冗余:正常
名称:DGREDO2
目的:线程2的重做日志

4MB
重做07100GB
重做08100GB
重做09100GB
重做10100GB

数据库设置
  • 块大小= 8K
  • 交换空间= 16GB
  • 禁用AMM(自动内存管理)
  • 禁用透明大页面


其他设定

#vi /etc/sysctl.conf
✓fs.aio-max-nr = 1048576
✓fs.file-max = 6815744
✓kernel.shmmax 103079215104
✓kernel.shmall 31457280
✓kernel.shmmn 4096
✓kernel.sem = 250 32000 100128
✓net.ipv4.ip_local_port_range = 9000 65500
✓net.core.rmem_default = 262144
✓net.core.rmem_max = 4194304
✓net.core.wmem_default = 262144
✓net.core.wmem_max = 1048586
✓vm.swappiness = 10
✓vm.min_free_kbytes = 524288#如果您使用的是Linux x86,请不要设置此项
✓vm.vfs_cache_pressure = 200
✓vm.nr_hugepages = 57000



#vi /etc/security/limits.conf
✓网格软nproc 2047
✓网格硬nproc 16384
✓网格软nofile 1024
✓网格硬nofile 65536
✓网格软堆栈10240
✓网格硬堆栈32768
✓Oracle软nproc 2047
✓oracle硬nproc 16384
✓Oracle软Nofile 1024
✓oracle硬nofile 65536
✓Oracle软堆栈10240
✓oracle硬堆栈32768
✓软记忆锁120795954
✓硬记忆锁120795954


sqlplus“ /作为sysdba”
更改系统设置进程= 2000范围= spfile;
alter system set open_cursors = 2000作用域= spfile;
更改系统集session_cached_cursors = 300作用域= spfile;
alter system set db_files = 8192作用域= spfile;




容错测试


出于演示目的,使用HammerDB模拟OLTP负载。 HammerDB配置:


仓库数量256
每个用户的总交易额1000000000000
虚拟用户256

结果,获得了2.1M TPM指标,该指标距离H710阵列的性能极限还很远,但这是服务器(主要由于处理器)当前硬件配置及其数量的“上限”。 该测试的目的仍然是证明整个解决方案的容错能力,而不是为了获得最佳性能。 因此,我们将仅基于此数字。



测试节点之一的故障




主机丢失了通往存储的某些路径,继续通过第二个节点处理其余路径。 由于路径的重组,性能下降了几秒钟,然后恢复正常。 没有服务中断发生。


所有设备的机柜故障测试




在这种情况下,由于路径的重组,性能也下降了几秒钟,然后又恢复到原始指标值的一半。 由于排除了一个应用程序服务器的运行,结果与原始结果相比减少了一半。 服务中断也没有发生。


如果您需要以合理的成本并以很少的部署/管理工作来为Oracle实施容错跨机架灾难恢复解决方案,那么与Oracle RAC和AccelStor Shared-Nothing体系结构一起工作将是最佳选择之一。 除了Oracle RAC,可以有其他任何提供集群的软件,例如,相同的DBMS或虚拟化系统。 构建解决方案的原理将保持不变。 RTO和RPO的最终得分为零。

Source: https://habr.com/ru/post/zh-CN448538/


All Articles