某应用系统采用RAC集群方式配置访问,出现间隙性重定向返回无法访问主机

排查分析: 
现场排查分析以及结合tcpdump抓包发现重定向数据库服务器10.x.x.x返回主机名suse-db1异常,发现下面与此有关的线索:
1、通过对rac的节点16、17两个服务实例的remote_listener,local_listener参数配置发现16节点没有对local_listener设置值,而17上则配置虚拟IP的访问方式。
由于它们配置不一致,根据rac集群运行方式及访问负载均衡原理,势必在相对创建连接频率高时,会影响到客户端的配置rac模式访问出现间隙无法正常获取到suse-db1的数据库实例。
原因有3点:
1)、由于RAC集群配置方式下,是先通过远程监听,再到本地监听,最后到service运行方式(scan listener 也就是remote listener,而service存在于数据库实例上)。此时因为scan
因rac的scan监听器注册两个节点实例,它能够负载均衡地分发连接请求到节点本地监听器上,也就是连接到其本地节点上实例上。另外就是remote service设置用于scan监听器。 

2)、在同一个RAC下,两个节点本地local_listener不一致,而local_listener配置host访问方式,决定客户端rac配置jdbc的host访问方式。加上我们原本的jdbc一直沿用的IP地址访问。

3)、对于为什么同一个配置,在A应用和B应用上面没有问题,主要是由于A应用和B应用的连接频率比较少,所以没有体现出来。

这个问题定位因为本地监听参数未配置导致,如截图:

1号节点:

某应用系统采用RAC集群方式配置访问,出现间隙性重定向返回无法访问主机_第1张图片

2号节点:

某应用系统采用RAC集群方式配置访问,出现间隙性重定向返回无法访问主机_第2张图片

针对这个问题解决方法有3种:

1)、取消remote listener远程注册的功能,每个监听实例只注册自己本地的实例服务
登录每个节点,取消remote_listener远程注册服务的功能
sqlplus / as sysdba

sql> alter system set remote_listener='';

2)、更改1号节点本地监听local_listener参数,并注册服务

SQL>conn / as sysdba;

    Connected.
SQL> ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = IP1)(PORT = 1521)) 'SID = 'prodb1';
系统已更改。

3)、所有应用主机/etc/hosts里面加入susedb-1,susedb-2的IP地址和主机名绑定

登录所有应用服务器,增加IP地址与主机名绑定指向,操作如下:

vi /etc/hosts

ip1  susedb-1

ip2 susedb-2


你可能感兴趣的:(Oracle相关)