应用程序主备库切换方案

应用程序主备库切换方案

 

1. 概述

目的:异地容灾库已经搭建完毕,使用Oracle GoldenGate实现主库和备库的数据实时同步。如果主库存储发生故障,应用程序如何快速切换至备库。

 

主库和备库SCAN必须设置相同,此处SCAN oltpscan

 

为了避免修改应用程序的配置文件,使用负载均衡F5建立虚服务,其中虚服务的节点成员为主库和备库的SCAN监听,正常情况下,负载均衡中备库SCAN监听成员Disable状态,应用程序只会连接到主库。

 

应用程序连接主库的过程,如下所示:
    应用程序主备库切换方案_第1张图片

 

1JBOSS应用发起连接请求:目标地址为负载均衡虚地址172.31.177.215,源地址为JBOSS服务器的IP地址

2)负载均衡接收到连接请求,做DNAT,将其报文的目标地址修改为172.31.6.83,将其报文转发至LISTENER_SCAN1(172.31.6.83),在转发之前,负载均衡会将其报文的源地址亦变更为172.31.177.230

3SCAN监听器返回报文,SCAN监听会根据数据库负载情况决定,让其JBOSS应用服务器连接节点1的监听器或者节点2的监听器,此处假设节点1负载较轻。

4)负载均衡转发报文至JBOSS应用服务器

5)JBOSS服务器直接发送数据库连接请求到节点1.

 

如果主库故障,必须将其JBOSS应用程序连接备库。首先备库触发器和约束生效,接着将其负载均衡的虚服务成员重新设置,将其备库监听Enable,主库监听Disable。主数据库将其原有会话断开。JBOSS应用程序自动重新连接数据库。因此应用程序必须实现数据库连接断开时,自动重新连接的功能。

注意:由于应用程序直接与主库进行连接,F5负载均衡不会主动断开原有连接,已经建立的连接仍然可以使用。

 

 

    应用程序连接备库的流程和原理与上面所述大同小异。

 

在备库的SCAN监听所在节点上,抓包分析第2步和第3步的报文,如下所示:

       应用程序主备库切换方案_第2张图片

172.31.177.230是负载均衡SNAT之后的地址,172.20.223.75SCAN监听IP地址172.20.223.73为备库节点1IP地址。蓝色字体为SCAN监听的应答内容,告知客户端即JBOSS应用服务程序,重新请求连接172.20.223.73监听器。

 

2. 配置

2.1 修改服务器/etc/hosts文件

JBOSS部署于Linux操作系统上,修改/etc/hosts,将其oltpscan解析为F5负载均衡的一个虚服务的地址172.31.177.215,虚服务的成员为主从数据库的SCAN监听器。

 

vi /etc/hosts

172.31.177.215  oltpscan

 

2.2 修改应用数据库连接串

每台连接数据库的服务器上面都设置JDBC连接串,如下所示:

jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =oltpscan)(PORT = 1521))(LOAD_BALANCE = yes)(FAILOVER = yes)(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =amsp)(FAILOVER_MODE=(TYPE = SELECT)(METHOD = BASIC)(RETIRES = 180)(DELAY = 5))))

注意:HOST中必须使用oltpscan,而不能使用172.31.177.215,否则应用程序连接数据库会报错,报错信息如下:ORA-12520: TNS:listener could not find available handler for requested type of server

 

2.3 配置F5负载均衡

F5负载均衡设置虚拟服务172.31.177.215,成员节点两个,分别为主库和备库的SCAN IP,此处主库和备库的SCAN IP地址为172.31.6.8172.20.223.75,其中172.20.223.75节点disable,即备库的SCAN IP失效,通过负载均衡都连接到主数据库。

3. 开始切换主从数据库

3.1 备库主键和约束生效

将其备库主键、约束和触发器等使能。

3.2 负载均衡

F5负载均衡的虚拟服务172.31.177.215,成员设置,将其172.31.6.8成员失效,172.20.223.74成员生效,即主数据库的SCAN IP失效,备数据库的SCAN IP生效。

3.3 杀掉原有会话

   select 'ALTER SYSTEM KILL SESSION ' ||   ''''  || gs.SID ||',' || gs.SERIAL#|| ','

|| ' @' || gs.INST_ID || ''';'

from gv$session gs

 where  USERNAME in ('SDP_PM','SDP_SMECD','SDPNSI',

'SDPRPI','SDPSDI',upper('sdp_usp'), upper('sdp_usm'), 

upper('sdp_miss')) ;

 

3.4 OGG应用进程关闭

 

 

至此备库作为主库运行,同时应用程序亦切换至备库正常运行。待原有主库修复之后,需要使用OGG重新初始化,并且配置抽取和应用进程,重复上述步骤,将其应用切回至原来的主库。

 

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31142205/viewspace-2121255/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31142205/viewspace-2121255/

你可能感兴趣的:(应用程序主备库切换方案)