数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析

问题:

用户一套Oracle19c RAC集群,出现一个奇怪的现象,通过SCAN IP访问的连接会话都集中在节点一实例,而且用户并没有做任何的节点服务访问去控制会话的连接节点,比如常见的通过集群的高可用服务去控制应用访问连接集中在同一节点,从而避免gc产生性能消耗问题。

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第1张图片


问题分析:

因为应用都是通过scan ip去连接的数据库,所以我们首先先检查了scan监听listener_scan1的服务注册情况,发现监听上面的服务注册存在问题,监听上的每个服务注册实例只有节点一,并没有节点二的实例,这也解释了为什么应用访问RAC集群都集中在节点一的原因,因为节点二实例根本就没有服务注册进scan监听

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第2张图片

接下来检查节点二的scan监听实例配置参数remote_listener,确认是否有配置向scan 监听进行注册的地址,可以看到remote_listener有配置scan ip的域名以及端口

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第3张图片
检查scan_listener的日志,发现存在一些异常的报错信息,显示出现访问被拒绝的情况,这里的169.254.31.131为节点二的haip

Incoming connection from 169.254.31.131 rejected

TNS-12546: TNS:permission denied

TNS-12560: TNS:protocol adapter error

TNS-00516:Permission denied

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第4张图片


怀疑是不是设置了白名单访问导致的问题,检查节点一的sqlnet.ora配置,发现白名单的IP列表有包含整个业务网段(public ip,vip,scan ip所在的网段)xxx.xxx.3.*

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第5张图片

通过跟踪数据库注册服务的过程,获取进一步详细的信息,需要注意的事,在12c之后,数据库向监听动态注册服务的后台进行为LREG (ListenerREGistration)进程,不是之前版本的pmon进程,对LREG开启跟踪

ORADEBUG针对进程的跟踪

--查看lreg进程spid
ps -ef |grep lreg
--进行跟踪
oradebug setospid xxx
oradebug dump sqlnet_server_trace 16
--关闭跟踪
oradebug dump sqlnet_server_trace 0


分析产生的跟踪文件xxx_lreg_xxx.trc,可以看到一开始数据库是向SCAN IP:xxx.xxx.3.20的地址进行注册

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第6张图片但后面解析地址又返回的是scan监听所在节点的haip169.254.7.254,然后遇到了错误TNS-12547,TNS-12560

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第7张图片

为什么注册scan监听最后变成是haip的通信,我们从Oracle mos官方上的文章ORA-12514 & Services Fail to Register to SCAN Listeners After HAIP Offline (Doc ID 2500067.1)发现了答案,原来从12c之后,scan监听通过配置参数REMOTE_REGISTRATION_ADDRESS_将haip作为远程注册的地址,从而限制实例的动态服务注册只能通过haip进行

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第8张图片

lsnrctl show remote_registration_address listener_scan1查看scan监听的远程注册地址, 可以看到scan监听的远程注册地址为169.254.7.254

这时我们再重新回到之前检查scan监听的日志错误以及白名单的配置,为啥会出现注册节点haip 169.254.31.131被拒绝的情况,就是因为白名单里面只配置了业务网段xxx.xxx.3.*,但没有加入haip网段169.254.*.*,导致节点二通过haip注册节点一的scan 监听时被拒绝

Incoming connection from 169.254.31.131 rejected

TNS-12546: TNS:permission denied

TNS-12560: TNS:protocol adapter error

TNS-00516:Permission denied

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第9张图片

问题解决

将haip网段169.254.*.*加入白名单的tcp.invited_nodes配置列表里面,然后重启scan监听恢复正常,节点二的实例也能注册到scan 监听里面

数据库学习日常案例20231218-oracle 19RAC hip远程注册服务到scan listener分析_第10张图片

你可能感兴趣的:(ORACLE数据库19C新特性,数据库,学习,oracle)