当前位置:首页 > 问答 > 正文

DataGuard从单实例到RAC的搭建过程那些事儿,边学边搭感觉挺复杂

(引用来源:基于Oracle官方文档概念与个人实践经验总结)

说起把DataGuard从单实例环境整到RAC环境里头,这事儿确实容易让人头大,本来单实例对单实例,感觉就像两个人单线联系,虽然也有坑,但逻辑相对直白,可一旦主库或者备库有一方变成了RAC,好家伙,一下子就变成了“一对多”或者“多对多”的关系,复杂度蹭蹭往上涨,边学边搭,那种感觉就像是本来在平地上学骑自行车,突然给你换成了在盘山公路上开大卡车。

最大的一个感觉就是“乱花渐欲迷人眼”,网络配置这块儿就是个下马威,单实例的时候,主备库各有一个主机名或IP地址,tnsnames.oralistener.ora配置文件写起来清清楚楚,但RAC不一样,一个数据库有多个节点,每个节点有自己的虚拟IP(VIP)、扫描IP(SCAN),你得搞清楚,DataGuard的重做传输日志到底要连接到哪个“地址”上。(引用来源:Oracle DataGuard概念指南中关于网络连接的部分)是直接连到某个具体的节点VIP上,还是通过SCANIP让集群自己分配?这里的选择会影响故障切换的灵活性和复杂性,通常的建议是,在配置备库连接到主库,或者主库连接到备库时,使用SCAN名称,这样只要集群本身是健康的,就不需要关心具体是哪个节点在提供服务,增强了高可用性,但这就意味着你的网络解析必须非常可靠,SCAN的配置不能出岔子,光是理解SCAN、VIP的区别和用途,可能就得花上一阵子。

然后就是文件系统这块,感觉像是从“独栋别墅”搬进了“共享公寓”,单实例数据库,数据文件、日志文件通常就放在本地存储或者一个简单的共享盘上,路径是固定的,但RAC环境下,所有节点必须能同时访问到同样的数据库文件,这就必须用共享存储,比如ASM(自动存储管理),如果你原来的单实例主库用的不是ASM,而是文件系统,那么在搭建到RAC备库的DataGuard时,备库这边就必须用ASM了,这就涉及到文件路径的转换问题。(引用来源:Oracle DataGuard Broker以及DUPLICATE命令的相关文档)在创建备库控制文件、或者用RMAN复制数据库的时候,你得通过SET NEWNAME之类的命令,告诉系统怎么把源库的文件路径映射到目标库的ASM磁盘组路径上,这个过程要是没配置对,RMAN作业就会报一堆找不到文件的错误,非常折腾人。

再说说监听器配置,这种感觉就像是给一个公司装总机和分机,单实例就像一个小公司,一个总机号(监听器)管所有,RAC则像一个大公司,每个部门(节点)有自己的分机(节点监听器),还有一个统一的总机号(SCAN监听器),在配置DataGuard的tnsnames.ora时,用于重做传输的服务名连接串,必须指向一个能够提供数据库服务的主地址,在RAC环境下,这个地址通常就是SCAN监听器监听的数据库服务,你需要确保数据库服务在RAC集群中是均匀地注册到了所有节点监听器和SCAN监听器上,有时候会发现日志传输中断,一查原因,可能是某个节点的监听器没起来,或者服务没有正确注册,导致连接被错误地导向了一个不健康的节点,排查这种问题,就得熟悉srvctl命令来检查服务状态,以及lsnrctl命令来查看监听器的具体注册信息,对集群管理的知识要求一下子就上来了。

还有一个挺让人困惑的点是角色切换(Switchover)和故障转移(Failover),在单实例对单实例的环境下,切换相对简单,目标明确,但在涉及RAC时,情况就复杂了,如果你的主库是RAC,备库是单实例,进行角色切换后,原来的RAC主库变成了物理备库,但它有多个节点啊,这时候这些节点和新的主库(原来的单实例备库)之间如何协调日志传输?(引用来源:Oracle Maximum Availability Architecture白皮书中的相关案例)通常的做法是,将变成备库的RAC环境置于“只读”或“管理恢复模式”,但可能只启用其中一个节点来应用日志,其他节点作为备用,以节省资源,这需要在Broker配置中或者手动通过SQL进行精细的控制,如果是主备都是RAC,那逻辑就更复杂了,涉及到多对多的日志传输和应用节点的选择,必须提前规划好切换策略。

不得不提DataGuard Broker这个工具,在单实例环境中,不用Broker,手动用SQL命令管理DataGuard也还能忍受,但一旦环境升级到RAC,强烈建议使用Broker,Broker能把一个RAC数据库(多个实例)抽象成一个逻辑的数据库实体来管理,大大简化了配置和操作。(引用来源:Oracle DataGuard Broker管理指南)你不需要去每个RAC节点上单独操作,而是通过Broker的一个统一接口(DGMGRL命令行)来管理整个DataGuard配置,它会自动处理RAC环境下的复杂性,比如在某个节点失败时,将操作重定向到健康的节点,学习Broker本身又有一定的成本,它的配置文件和命令语法需要时间熟悉。

从单实例到RAC的DataGuard搭建,绝不仅仅是把IP地址改一下那么简单,它要求你对Oracle RAC集群的基本原理(网络、存储、服务管理)有更深的理解,对DataGuard的日志传输、应用机制有更清晰的把握,边学边搭的过程,确实会碰到很多意想不到的问题,但每解决一个,对Oracle高可用架构的认识就会加深一层,这个过程虽然复杂,但闯关成功后,那种对系统掌控感的提升,也是非常实在的。

DataGuard从单实例到RAC的搭建过程那些事儿,边学边搭感觉挺复杂