Oracle RAC负载均衡:
1. 客户端
通过指定连接串中的LOAD_BALANCE = YES指定负载均衡节点。默认不开启。
2. server端
通过 local_listener 和 remote_listener 来知道本地和远端的负载情况进行负载分配
通过负载均衡,可以保证连接数层面的负载均衡。需要建议结合DNS使用。
分享下常见案例:
环境:
11.2.0.4
正确配置:
local_listener=(ADDRESS=(PROTOCOL=TCP)(HOST=local_vip_address)(PORT=1521))
remote_listener=scan_name:scan_port
案例一:local_listener配置错误:
现象:
数据库进行参数配置包含ASM,重启GI后发现数据库无法连接。很明显重启大法并不适用,而且做了重启和参数修改的动作,首先参数层面没有涉及监听或者连接相关的参数,排除掉。
疑问:
重启为什么会导致链接问题?
问题排查:
数据库连接不上,现象是链接超时,端口不通,发现local参数设置的不对,日志中有修改动作:
SUCCESS: diskgroup DATA was mounted
NOTE: dependency between database RAC and diskgroup resource ora.DATA.dg is established
Tue Jul 07 22:28:46 2020
ALTER SYSTEM SET local_listener=' (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.173)(PORT=1521))','(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.168.173)(PORT=1523))' SCOPE=MEMORY SID='RAC1';
原因分析:这个参数不是我们手工修改的,是GI拉起DB的时候自动设置的。这里的1523端口确实也是我们使用的,系统里有这样一个Listener用的是1523,尽管这不是Oracle的预期行为,但是这类问题确实要引起注意。
有相关的bug,没有最终确认:Parameter LOCAL_LISTENER is changed to the default value by the GI agent (Doc ID 1470041.1)
案例二:remote_listener配置错误
现象:
也是重启,重启后应用无法连接,前人挖坑后人踩。这次重启是异常重启,不是维护重启,重启的原因就不赘述,主要看启动后remote_listener导致的问题,这个参数重启后置空导致应用访问异常。
原因:为什么会置空?
查看之前有人手动修改过这个参数,参数没有固化到spfile中,只修改到了memory中,而出现这种操作的原因是实例使用了pfile启动,并未使用spfile,所以一连串的坑导致了重启后参数丢失。
总结:
后续会更新到链接异常的排查思路中,另外这两个配置也要放到数据库常规检测项中,避免重复踩坑。