一种保持Oracle数据库服务高可用的实现方法和系统
技术领域
本发明涉及一种保持ORACLE数据库服务高可用的方法,特别适用于ORACLE数据库的DATAGUARD特性,通过与开源软件DRBD和Keepalived的组合搭配,无论在switchover(计划内切换,无损切换)或者是failover(计划外切换,有损切换)时,均可以在不丢失数据的前提下实现数据库的主从切换,并保障数据库服务的高可用。
背景技术
目前ORACLE数据库软件的Dataguard特性(以下简称Dataguard)是应用较为普遍的数据库高可用解决方案,它通过一主(Primary)多从(Standby)的运行机制,当主库出现故障时,可以通过提升某个从库的角色为新主库的方式,实现数据库服务的高可用。
Dataguard提供有两种故障切换机制,分别应用于不同的场景,操作步骤和实现原理也略有差异,下面对上述两种切换机制的操作步骤分别进行描述:
A>.SWITCHOVER(计划内切换,无损切换)的操作步骤如下:
1).检查Dataguard环境,验证归档文件、初始化参数等是否符合需求;
2).查询主库端数据库状态,验证是否可执行角色切换;
3).如状态允许,则切换主库身份为Standby;
4).关闭原主库;
5).重新启动原主库到加载(mount)模式;
6).查询从库端数据库状态,验证是否可执行角色切换;
7).如状态允许,则切换从库身份为Primary;
8).打开新主库;
9).原主库启动归档文件接收和应用。
B>.FAILOVER(计划外切换,有损切换)的操作步骤如下:
1).检查Dataguard环境,验证归档文件、初始化参数等是否符合需求;
2).取消当前归档应用进程;
3).执行完成归档应用操作;
4).查询从库数据库状态,验证是否可执行角色切换;
5).如状态允许,则切换从库身份为Primary;
6).打开新主库。
但是,上述方式也有缺憾,主要表现在:
1>.操作复杂度高,必须由专业的数据库管理员(DBA)经过培训后才能够处理;
2>.执行切换操作时,主库和从库之间需要有交互,无法实现自动无值守的切换;
3>.切换操作步骤多,停机时间较长,出现问题的机率大;
4>.切换对现有环境影响较大,如执行FAILOVER时,将破坏当前的Dataguard环境,导致操作后必须重建Dataguard环境;
5>.无法实现访问IP的统一,由于主从分别为不同的数据库节点,每个节点的物理IP均不相同,当执行过切换操作后,前端应用连接的数据库服务IP也必须同步变更。
因此,需要提供一种快速、可靠、易于实施和维护、故障快速恢复的数据库服务高可性综合解决方案。
发明内容
本发明主要解决大型ORACLE数据库软件平台,服务中断导致业务长时间停顿的问题,针对传统的DataGuard灾备方案无法提供实时全面的高可用服务,故障切换时间长,并且一旦执行切换,前端的应用程序也必须同步进行修改等不足,通过在现有DataGuard环境中引入DRBD(DistributedReplicatedBlockDevice)和Keepalived软件的方式,提供一种快速、可靠、易于实施和维护、故障快速恢复的数据库服务高可性综合解决方案。
根据本发明,提供一种保持Oracle数据库服务高可用的实现方法,该方法包括:
为各数据库节点分配虚拟IP;
对数据库节点进行心跳检测,判断数据库主、从节点是否存活,当发现主节点不可访问时,自动将虚拟IP飘移至从节点,并切换从节点的身份为主节点。
优选地,该方法进一步包括:
当启动数据库节点服务器时,检查该节点的数据库服务是否可用,若不可用,则启动当前节点为主节点或从节点。
优选地,在各数据库节点中分别创建有两块DRBD共享盘,用于存储各数据库节点中的差异性数据,通过DRBD内置的C型完全同步协议保持主从节点的数据的一致性,所述两块DRBD共享盘分别定义为主共享盘和从共享盘,通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点,从而实现数据库主从节点的切换或启动。
优选地,通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点包括:
检测当前节点的DRBD主共享盘的角色,若当前节点的DRBD磁盘状态中显示另一节点的身份为从节点,则启动当前节点为主节点,若当前节点的DRBD磁盘状态中显示另一节点的身份为主节点,则启动当前节点为从节点。
优选地,启动当前节点为主节点包括以下步骤:
检查当前节点是否启动了数据库服务,如已启动则首先关闭;
放弃从共享盘的主角色,将其改为从角色;
持有主共享盘的主角色;
映射DRBD共享盘至具有主角色的DRBD共享盘;
创建软链接指向具有主角色的DRBD共享盘的数据文件目录;
正常启动当前节点数据库。
优选地,启动当前节点为从节点包括以下步骤:
检查当前节点是否启动了数据库服务,如已启动则首先关闭;
放弃主共享盘的主角色,将其改为从角色;
持有从共享盘的主角色;
映射DRBD共享盘至具有从角色的DRBD共享盘;
创建软链接指向具有从角色的DRBD共享盘的数据文件目录;
启动当前节点数据库到只读打开模式;
启动Dataguard的实时日志应用。
根据本发明的另一个方面,提供一种保持Oracle数据库服务高可用的系统,该系统包括:
Dataguard模块,该模块与DRBD之间组织搭配,在各数据库节点中分别创建有两块DRBD共享盘,用于存储各数据库节点中的差异性数据,所述两块DRBD共享盘分别定义为主共享盘和从共享盘;
DRBD数据保护模块,该模块利用DRBD内置的C型完全同步协议保持主从节点的数据的一致性;
角色控制模块,该模块通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点,从而实现数据库主从节点的切换和启动。
优选地,该系统进一步包括:
虚拟IP模块,该模块为各数据库节点分配虚拟IP;对数据库节点进行心跳检测,判断数据库主、从节点是否存活,当发现主节点不可访问时,自动将虚拟IP飘移至从节点,并切换从节点的身份为主节点;当启动数据库节点服务器时,检查该节点的数据库服务是否可用,若不可用,则启动当前节点为主节点或从节点。
优选地,所述差异性数据包括控制文件、联机日志文件。
本发明为解决上述现有解决方案中的不足,在传统Dataguard在基础上引入了第三方开源软件DRBD和Keepalived,组合构建了一套易维护,实现数据库服务高可用性的全面解决方案。本方案在保留OracleDataguard特性在保护数据方面的所有功能的同时,有下列功能上的增强:
摆脱了原有Dataguard切换操作的专业性,基本避免了数据库层的操作,将角色切换的步骤转换为操作系统层的命令,进行一系列封装之后,使得普通SA人员也可以轻松执行,降低原有Dataguard环境的维护复杂度;
完全规避了Dataguard中failover切换对数据库环境的破坏,减少了后期的维护成本;
提供了虚拟IP,使得前端的应用程序不会因后端数据库层服务的变动而进行修改,减少了维护操作、降低了耦合度;
自动检测功能,自动角色切换,实现了数据库服务的高可用性。
附图说明
图1示出根据本发明实施例的一种保持Oracle数据库服务高可用的实现方法的流程图。
图2示出根据本发明实施例的一种保持Oracle数据库服务高可用的系统的结构图。
图3示出根据本发明实施例的一种保持Oracle数据库服务高可用的实现方法的基础架构图。
具体实施方式
下面结合附图和具体实施方式对本发明作进一步描述。
图1示出根据本发明实施例的一种保持Oracle数据库服务高可用的实现方法的流程图。
在步骤S11中,为各数据库节点分配虚拟IP。
在步骤S12中,对数据库节点进行心跳检测,判断数据库主、从节点是否存活,当发现主节点不可访问时,自动将虚拟IP飘移至从节点,并切换从节点的身份为主节点。
根据本发明实施例,当启动数据库节点服务器时,检查该节点的数据库服务是否可用,若不可用,则启动当前节点为主节点或从节点。
具体地,在各数据库节点中分别创建有两块DRBD共享盘,用于存储各数据库节点中的差异性数据,通过DRBD内置的C型完全同步协议保持主从节点的数据的一致性,所述两块DRBD共享盘分别定义为主共享盘和从共享盘,通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点,从而实现数据库主从节点的切换或启动。
通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点包括:检测当前节点的DRBD主共享盘的角色,若当前节点的DRBD磁盘状态中显示另一节点的身份为从节点,则启动当前节点为主节点,若当前节点的DRBD磁盘状态中显示另一节点的身份为主节点,则启动当前节点为从节点。
启动当前节点为主节点包括以下步骤:检查当前节点是否启动了数据库服务,如已启动则首先关闭;放弃从共享盘的主角色,将其改为从角色;持有主共享盘的主角色;映射DRBD共享盘至具有主角色的DRBD共享盘;创建软链接指向具有主角色的DRBD共享盘的数据文件目录;正常启动当前节点数据库。
启动当前节点为从节点包括以下步骤:检查当前节点是否启动了数据库服务,如已启动则首先关闭;放弃主共享盘的主角色,将其改为从角色;持有从共享盘的主角色;映射DRBD共享盘至具有从角色的DRBD共享盘;创建软链接指向具有从角色的DRBD共享盘的数据文件目录;启动当前节点数据库到只读打开模式;启动Dataguard的实时日志应用。
图2示出根据本发明实施例的一种保持Oracle数据库服务高可用的系统的结构图。
该系统包括:Dataguard模块,该模块与DRBD之间组织搭配,在各数据库节点中分别创建有两块DRBD共享盘,用于存储各数据库节点中的差异性数据,所述两块DRBD共享盘分别定义为主共享盘和从共享盘。DataGuard模块以传统的ORACLEDataGuard特性为基础,需要首先部署一套Dataguard环境,为了与DRBD之间组织搭配,数据库的相关文件应放置于DRBD共享盘中,考虑到大型数据库平台的数据规模较大,如将所有文件均放置于DRBD共享盘,则DRBD共享盘之间的交互将会非常的频繁,这可能会对磁盘I/O能力和网络带宽均带来考验,为了降低DRBD共享盘上保存的数据量,通过对Dataguard环境中各类文件的抽象处理,可以发现Dataguard环境中主从两端差异主要是在控制文件、联机日志文件两种类型。
DRBD数据保护模块,该模块利用DRBD内置的C型完全同步协议保持主从节点的数据的一致性。确保即使主端意外宕机也不会丢失数据。通过DRBD确保Dataguard环境中的主(primary)角色永远固定存在(相当于避免了failover的情形),实现了无论何时、何种情况下执行切换操作,均不会对Dataguard环境造成影响。
角色控制模块,该模块通过检测当前节点的DRBD主共享盘的角色,启动当前节点为主节点或从节点,从而实现数据库主从节点的切换和启动。通过BashShell实现一系列功能。
根据本发明实施例,该系统进一步包括:虚拟IP模块,该模块通过Keepalived实现三项功能:
虚拟IP:为各数据库节点分配虚拟I,P前端应用只要连接虚拟IP即可,而不用关心该IP究竟在哪个数据库节点;
心跳检测:判断数据库的主和从节点是否存活,当发现主节点不可访问时,自动将虚拟IP飘移至从节点,并切换从节点的身份为主节点;
启动数据库服务:当启动数据库节点服务器时,检查该节点的数据库服务是否可用,若不可用,则启动当前节点为主节点或从节点。
图3示出根据本发明实施例的一种保持Oracle数据库服务高可用的实现方法的基础架构图。具体实施方式如下:
1、创建DRBD共享磁盘
DRBD数据保护模块使用DRBD内置的c型完全同步协议,保持主端和从端数据的一致性,确保即使主端意外宕机也不会丢失数据。通过DRBD确保Dataguard环境中的primary角色永远固定存在,相当于避免了failover的情形,实现了无论何时、何种情况下执行切换操作,均不会对Dataguard环境造成影响。
根据上述的DRBD数据保护模块的功能,由DRBD提供主从节点间数据的一致性保护,考虑到ORACLE数据库作为大型数据库软件,通常提供大量数据的存储服务,如果将所有ORACLE数据库的相关文件均放置于DRBD共享磁盘,那么不仅需要超大的DRBD共享磁盘,而且由于主从之间相互同步的需要,对网络层的要求也会比较高。
通过对数据文件类型的分析,我们注意到ORACLEDataguard的主节点和从节点之间,文件的差异主要体现在下列三种文件:
主节点 |
从节点 |
Redolog Files |
没有或有却未使用 |
没有或有却未使用 |
Standby Redolog Files |
Control Files |
Standby Control Files |
这两类文件数量很少而且文件大小一般都不大(规模以Gb计),其它如datafile、spfile、archivelogfiles,密钥文件等在主从两端均相同(spfile小有差异但不影响主从身份),基于它的这个特点,我们可以设计每个数据库节点中均创建两块DRBD共享磁盘,并将这两块DRBD共享磁盘分别定义为主共享盘(pridata)和从共享盘(stddata),仅用于保存主节点和从节点上的这几种不同类型的文件,这样设计的优点在于能够大大降低DRBD盘同步的数据量,进而提高性能。
2、配置Dataguard环境
按照ORACLE的标准步骤配置Dataguard环境,唯一需要注意的是,在存储相关数据文件时,除主从节点中的RedologFiles、ControlFiles、StandbyRedologFiles和StandbyControlFiles几类文件保存在DRBD的共享盘外,其它文件则保存在本地存储设备中,如图3所示。
3、创建控制模块
主从节点中的控制模块完全相同,该控制模块由BashShell编写,主要实现下列功能:
A>.检测当前服务器是否启动了数据库服务,如已启动则首先关闭;
B>.检测当前节点DRBD主共享盘pridata的角色,如果另一节点的角色是从(secondary),则执行启动当前节点为主(primary)节点的操作,后续步骤如下:
1).放弃DRBD从共享盘stddata的主角色,改为从角色;
2).持有DRBD主共享盘pridata的主角色;
3).映射DRBD共享盘至具有主角色的DRBD共享盘;
4).创建软链接指向具有主角色的DRBD共享盘的数据文件目录;
5).正常启动当前节点数据库。
C>.如果当前节点DRBD主共享盘pridata的角色状态显示另一节点的角色为主角色,则执行启动当前节点为从节点的操作,后续步骤如下:
1).放弃DRBD主共享盘pridata的主角色,改为从角色;
2).持有DRBD从共享盘stddata的主角色;
3).映射DRBD共享盘至具有从角色的DRBD共享盘;
4).创建软链接指向具有从角色的DRBD共享盘的数据文件目录;
5).启动当前节点数据库到只读打开模式;
6).启动Dataguard的实时日志应用;
4、配置虚拟IP模块:安装和配置Keepalived,通过Keepalived实现三项功能:
■虚拟IP:前端应用只要连接虚拟IP即可,而不用关心该IP究竟在哪个数据库节点;
■心跳检测:判断数据库的主和从节点是否存活,当发现主节点不可访问时,自动将虚拟IP飘移至从节点,并切换从节点的身份为主节点。
■启动数据库服务:当操作系统启动时调用keepalived,由keepalived调用角色控制模块中的功能,启动数据库服务。
虽然keepalived是最后配置,但实现上对于整个解决方案来说,却是先调用keepalived,再由keepalived调用其它模块。
虚拟IP的配置和启动数据库服务均是在keepalived软件的配置文件haresource中进行配置,注意上述两项功能对应的脚本程序应该位于keepalived能够访问到的路径下。本发明使ORACLEDataguard故障切换(角色切换)环节避开了主/从两节点数据库层面的交互,并尽可能的减化了DB层的操作,将切换的主要工序前置到OS层,提高了切换的响应速度,同时降低了操作门槛,使得具有系统操作权限的普通操作人员,也可以通过调用角色控制模块中的脚本,执行数据库主从身份的切换。
通过与开源软件DRBD+Keepalived的组合搭配,可以在不丢失数据(无论是角色切换switchover或者是故障切换failover)的前提下实现数据库的主从切换,并能够保障数据库服务的高可用,无须前端应用程序进行同步修改,提供一种快速、可靠、易于实施和维护、故障快速恢复的数据库服务高可性综合解决方案。
应当理解,以上借助本发明的优选实施例对本发明的技术方案进行了详细说明。本领域的普通技术人员在阅读本发明说明书的基础上可以对实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。本发明的保护范围仅由随附权利要求书限定。