应用程序主备库切换方案
目的:异地容灾库已经搭建完毕,使用Oracle GoldenGate实现主库和备库的数据实时同步。如果主库存储发生故障,应用程序如何快速切换至备库。
主库和备库SCAN必须设置相同,此处SCAN为 oltpscan
为了避免修改应用程序的配置文件,使用负载均衡F5建立虚服务,其中虚服务的节点成员为主库和备库的SCAN监听,正常情况下,负载均衡中备库SCAN监听成员Disable状态,应用程序只会连接到主库。
1)JBOSS应用发起连接请求:目标地址为负载均衡虚地址172.31.177.215,源地址为JBOSS服务器的IP地址
2)负载均衡接收到连接请求,做DNAT,将其报文的目标地址修改为172.31.6.83,将其报文转发至LISTENER_SCAN1(172.31.6.83),在转发之前,负载均衡会将其报文的源地址亦变更为172.31.177.230
3)SCAN监听器返回报文,SCAN监听会根据数据库负载情况决定,让其JBOSS应用服务器连接节点1的监听器或者节点2的监听器,此处假设节点1负载较轻。
4)负载均衡转发报文至JBOSS应用服务器
5)JBOSS服务器直接发送数据库连接请求到节点1.
如果主库故障,必须将其JBOSS应用程序连接备库。首先备库触发器和约束生效,接着将其负载均衡的虚服务成员重新设置,将其备库监听Enable,主库监听Disable。主数据库将其原有会话断开。JBOSS应用程序自动重新连接数据库。因此应用程序必须实现数据库连接断开时,自动重新连接的功能。
注意:由于应用程序直接与主库进行连接,F5负载均衡不会主动断开原有连接,已经建立的连接仍然可以使用。
应用程序连接备库的流程和原理与上面所述大同小异。
在备库的SCAN监听所在节点上,抓包分析第2步和第3步的报文,如下所示:
172.31.177.230是负载均衡SNAT之后的地址,172.20.223.75是SCAN监听IP地址172.20.223.73为备库节点1的IP地址。蓝色字体为SCAN监听的应答内容,告知客户端即JBOSS应用服务程序,重新请求连接172.20.223.73监听器。
JBOSS部署于Linux操作系统上,修改/etc/hosts,将其oltpscan解析为F5负载均衡的一个虚服务的地址172.31.177.215,虚服务的成员为主从数据库的SCAN监听器。
vi /etc/hosts
172.31.177.215 oltpscan
每台连接数据库的服务器上面都设置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。
F5负载均衡设置虚拟服务172.31.177.215,成员节点两个,分别为主库和备库的SCAN IP,此处主库和备库的SCAN IP地址为172.31.6.8和172.20.223.75,其中172.20.223.75节点disable,即备库的SCAN IP失效,通过负载均衡都连接到主数据库。
将其备库主键、约束和触发器等使能。
F5负载均衡的虚拟服务172.31.177.215,成员设置,将其172.31.6.8成员失效,172.20.223.74成员生效,即主数据库的SCAN IP失效,备数据库的SCAN IP生效。
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')) ;
至此备库作为主库运行,同时应用程序亦切换至备库正常运行。待原有主库修复之后,需要使用OGG重新初始化,并且配置抽取和应用进程,重复上述步骤,将其应用切回至原来的主库。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31142205/viewspace-2121255/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31142205/viewspace-2121255/