oracle同城双活,一种同城双活架构快速切换的方法与流程

本发明涉及数据库技术领域,尤其涉及了一种同城双活架构快速切换的方法。

背景技术:

Oracle RAC(Oracle Real Application Cluster)即真正的应用集群,它作为一个整体向用户提供一组网络资源,是Oracle提供的一个并行集群系统。

集群就是一组计算机,它们作为一个整体向用户提供一组网络资源,这些单个的计算机系统就是集群的节点,集群提供了以下关键的特性:

1.可扩展性。集群的性能不限于单一的服务实体,新的服务实体可以动态的加入到集群,从而增强集群的性能。

2.高可用性。当一台节点服务器发生故障的时候,这台服务器上所运行的应用程序将在另一节点服务器上被自动接管。消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。

3.负载均衡。负载均衡能把任务比较均匀的分布到集群环境下的计算和网络资源,以便提高数据吞吐量。

4.错误恢复。如果集群中的某一台服务器由于故障或者维护需要而无法使用,资源和应用程序将转移到可用的集群节点上。这种由于某个节点中的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程叫做错误恢复。

Oracle RAC的核心是共享磁盘子系统,集群中所有节点必须能够访问所有数据、重做日志文件、控制文件和参数文件,数据磁盘必须是全局可用的,允许所有节点访问数据库,每个节点有它自己的重做日志和控制文件,但是其他节点必须能够访问它们以便在那个节点出现系统故障时能够恢复。Oracle RAC运行于集群之上,为Oracle数据库提供了最高级别的可用性、可伸缩性和低成本计算能力。

一个Oracle RAC数据库由多个服务器节点组成,提供稳定的HA(高可用)。其底层有OCR(Oracle数据库集群注册服务资源)和voting disk(表决磁盘)做保障,OCR主要记录RAC中集群和数据库的配置信息;集群中每个节点定期评估自身的健康状况,然后把它的状态信息放入到voting disk(表决磁盘)中,节点之间也会互相查看其运行状态,并把信息传递同步到voting disk(表决磁盘),当集群发生故障时,通过voting disk(表决磁盘)进行投票仲裁等。OCR(Oracle数据库集群注册服务资源)和voting disk(表决磁盘)需要放在共享存储设备上,Oracle RAC中创建共享存储设备来存放OCR(Oracle数据库集群注册服务资源)和voting disk(表决磁盘),其冗余度为大于3的奇数,最多允许丢失(冗余度-1)/2的数据,但是在同城双活架构中,当有计划的进行切换服务时,切换时间较长甚至网络资源终止导致数据库应用无法对外服务。

技术实现要素:

本发明针对现有技术中切换时间较长、效率低的缺点,提供了一种同城双活架构快速切换的方法。

为了解决上述技术问题,本发明通过下述技术方案得以解决。

一种同城双活架构快速切换的方法,包括如下步骤:

(1)第一共享存储设备搭建:准备三个服务器的标准配置,在本地机房和异地机房分别设有2个服务器,在第一共享存储设备搭建过程中,采用在本地机房的第一服务器和第二服务器上分别分配两个储存空间,在异地机房的第三服务器分配一个储存空间,通过一个块设备驱动,将本地机房的第一服务器、第二服务器和异地机房的第三服务器分配的储存空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第一共享存储设备;

(2)第二共享存储设备搭建:在数据库搭建完成后,在异地机房的第三服务器和第四服务器上分别分配两个储存空间,在本地机房的第一服务器分配一个储存空间,通过一个块设备驱动,将异地机房的第三服务器、第四服务器和本地机房的第一服务器分配的储存空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第二共享存储设备;

(3)数据操作:数据库正常运行不发生切换时,数据写入到第一共享存储设备,不写入到第二共享存储设备;当发生切换操作时,执行切换命令,在数据库中添加第二个数据库集群注册服务资源的共享存储设备;执行复制命令,将数据从第一个数据库集群注册服务资源的共享存储设备备份到第二个数据库集群注册服务资源的共享存储设备;

(4)检查工作:重启数据库,并检查数据库集群状态情况。

作为优选,储存空间的大小为5-10GB。

本发明由于采用了以上技术方案,具有显著的技术效果:本发明在同城双活架构的基础下,采用异地之间做冗余的方式实现同城双活架构下的快速切换,无需再增加成本的投入,切换过程中步骤精简,稳定可靠风险极小,切换过程消耗时间少。

附图说明

图1是本发明一种同城双活架构快速切换的方法中运行原理图。

具体实施方式

下面结合附图与实施例对本发明作进一步详细描述。

如图1所示,一种同城双活架构快速切换的方法,包括如下步骤:

(1)第一共享存储设备搭建:准备三个服务器的标准配置,在本地机房和异地机房分别设有2个服务器,在第一共享存储设备搭建过程中,采用在本地机房的第一服务器和第二服务器上分别分配两个储存空间,在异地机房的第三服务器分配一个储存空间,通过一个块设备驱动,将本地机房的第一服务器、第二服务器和异地机房的第三服务器分配的储存空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第一共享存储设备,储存空间的大小为5-10GB;

(2)第二共享存储设备搭建:在数据库搭建完成后,在异地机房的第三服务器和第四服务器上分别分配两个储存空间,在本地机房的第一服务器分配一个储存空间,通过一个块设备驱动,将异地机房的第三服务器、第四服务器和本地机房的第一服务器分配的储存空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第二共享存储设备;

(3)数据操作:数据库正常运行不发生切换时,数据写入到第一共享存储设备,不写入到第二共享存储设备;当发生切换操作时,执行切换命令,在数据库中添加第二个数据库集群注册服务资源的共享存储设备;执行复制命令,将数据从第一个数据库集群注册服务资源的共享存储设备备份到第二个数据库集群注册服务资源的共享存储设备;

(4)检查工作:重启数据库,并检查数据库集群状态情况。

本发明在同城双活架构的基础下,采用异地之间做冗余的方式实现同城双活架构下的快速切换,无需再增加成本的投入,切换过程中步骤精简,稳定可靠风险极小,切换过程消耗时间少。

实施例1

(1)同城双活架构中,需要在两个机房中分别配置,本实施例设置在本机机房、异地机房中。

(2)第一共享存储设备搭建:准备三个服务器的标准配置,在本地机房和异地机房分别设有2个服务器,在第一共享存储设备搭建过程中,采用在本地机房的第一服务器和第二服务器上分别分配两个6G大小的空间,在异地机房的第一服务器分配一个6G大小的空间,通过一个块设备驱动,将本地机房的第一服务器、第二服务器和异地机房的第一服务器分配的空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第一共享存储设备,称为OCRVOTE。

(3)第二共享存储设备搭建:在数据库搭建完成后,在异地机房的第一服务器和第二服务器上分别分配两个6G大小的空间,在本地机房的第一服务器分配一个6G大小的空间,通过一个块设备驱动,将异地机房的第一服务器、第二服务器和本地机房的第一服务器分配的空间分别生成块设备,使用这三个块设备创建数据库集群注册服务资源的第二共享存储设备,称为OCRVOTEBAK;

(4)数据操作:数据库正常运行不发生切换时,数据写入到第一共享存储设备OCRVOTE,不写入到第二共享存储设备OCRVOTEBAK;

(5)切换操作:执行数据库命令ocrconfig–add+OCRVOTEBAK,将事先搭建好的第二共享存储设备OCRVOTEBAK添加进数据库中,然后执行下一个数据库命令crsctl replace votedisk+OCRVOTEBAK,将第一共享存储设备OCRVOTE中的数据传输到第二共享存储设备OCRVOTEBAK,该命令执行成功后,进行下一步操作,重启数据库集群;反之,则进行OCRVOTEBAK共享设备检查。

(6)重启数据库集群:数据库集群重启成功,数据库集群状态恢复正常,则同城双活架构快速切换成功;反之,检查数据库日志排查错误,错误解决后重启数据库集群。

总之,以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所作的均等变化与修饰,皆应属本发明专利的涵盖范围。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SpringBoot中实现双数据源,需要使用到多个数据源的配置,以及动态切换数据源的代码。 在配置多个数据源时,需要在application.properties或application.yml文件中分别配置不同的数据源信息,包括数据源的驱动、url、用户名、密码等信息。例如: ``` spring.datasource.primary.driver-class-name=com.mysql.jdbc.Driver spring.datasource.primary.url=jdbc:mysql://localhost:3306/db1 spring.datasource.primary.username=root spring.datasource.primary.password=root spring.datasource.secondary.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.secondary.url=jdbc:oracle:thin:@localhost:1521:db2 spring.datasource.secondary.username=oracle spring.datasource.secondary.password=oracle ``` 在代码中,需要定义两个数据源的bean,并且使用@Primary注解标记其中一个数据源为主数据源。例如: ``` @Configuration public class DataSourceConfig { @Bean(name = "primaryDataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } } ``` 在使用数据源的时候,需要使用@Qualifier注解指定要使用的数据源。例如: ``` @Service public class UserService { @Autowired @Qualifier("primaryDataSource") private DataSource primaryDataSource; @Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource; public void addUser(User user) { // 使用主数据源插入用户信息 // ... } public User getUser(Long id) { // 使用从数据源查询用户信息 // ... } } ``` 在动态切换数据源时,可以使用ThreadLocal来保存当前线程使用的数据源。例如: ``` public class DynamicDataSourceContextHolder { private static final ThreadLocal<String> contextHolder = new ThreadLocal<>(); public static void setDataSource(String dataSource) { contextHolder.set(dataSource); } public static String getDataSource() { return contextHolder.get(); } public static void clearDataSource() { contextHolder.remove(); } } ``` 在使用数据源之前,需要先调用DynamicDataSourceContextHolder.setDataSource(dataSource)方法来设置当前线程使用的数据源。例如: ``` @Service public class UserService { @Autowired @Qualifier("primaryDataSource") private DataSource primaryDataSource; @Autowired @Qualifier("secondaryDataSource") private DataSource secondaryDataSource; public void addUser(User user) { DynamicDataSourceContextHolder.setDataSource("primaryDataSource"); // 使用主数据源插入用户信息 // ... } public User getUser(Long id) { DynamicDataSourceContextHolder.setDataSource("secondaryDataSource"); // 使用从数据源查询用户信息 // ... } } ``` 注意:在使用完数据源之后,需要调用DynamicDataSourceContextHolder.clearDataSource()方法清除当前线程使用的数据源,以免影响下一次使用数据源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值