Oracle RAC SCAN ip的原理、配置及优缺点

在oracle 11g中,SCAN IP还用的很少。到oracle 12.2或者19c,用户已经基本上清一色的切换到了SCAN IP。所以很有必要理解oracle的SCAN IP运行机制和配置。

先回顾下VIP

  RAC的每个节点都需要有一个虚拟IP,这就是VIP。VIP需要和PUBLIC IP同一个子网,它们是由GI的Clusterware来管理的。VIP在其节点服务器发生故障的时候会自动漂移到另外正常的节点服务器上,如果RAC是多个节点运行的,那具体漂移到哪个活动的节点将由Clusterware决定。VIP发生漂移现象之后,其当前的节点服务器LOCAL LISTENER是不会监听它的请求的,所以有客户端向这个VIP发送请求时,Clusterware的FAN会通知客户端向别的VIP发送请求,客户端收到通知后通过Failover机制把请求重新发送到ADDRESS列表中的其他VIP上,如下所示:

Oracle Clusterware manages VIPs as a node application. When Oracle Clusterware discovers that a node has failed, it will relocate the VIP to one of the remaining nodes. A promiscuous ARP packet is broadcast to inform clients that the MAC address for the VIP has changed.
The relocated VIP does not forward incoming connections to the listener; instead it immediately sends back a failure message to the client. The client can then immediately failover to an alternate address. In the above slide, node 1 has crashed. Oracle Clusterware relocates VIP1 to node2. When the client attempts to connect using VIP1 it receives an error message; when it attempts to connect using VIP2 the connection is forwarded to the listener

Applications that connect to Oracle database in Oracle Clusterware  should connect using the VIP address and not the public IP address
The VIP address maps to the MAC address of the adapter. It is possible to use Oracle VIPs with bonded/teamed NICs.

虽然有这种较复杂的过程,但始终对客户端是透明进行的,而且这个过程完成时间非常短暂,客户端也就几乎感受不到有节点宕机。等故障节点恢复正常,漂移的VIP也回到此节点上,继续提供服务。

VIP的优点在于相比TCP,客户端感知失败的时间更短、不需要等待TCP超时。

 

 TAF是OCI的特性,虽然可以做到透明(指的是不需要应用端做reconnect)的failover(针对查询,DML事务还是回滚),因为大部分都不使用oci模式(尤其是jdbc,虽然支持oic),而是应用去做连接池自动重连,所以不展开,配置可参考https://www.modb.pro/db/47795。 

SCAN IP

  有了scan ip后,客户端连接scan listener,scan listner根据负载均衡算法找到负载最低的实例监听,然后将请求转发给实例的本地监听,后面就和VIP一样了。scan ip和scan listener总是配对、且由clusterware随机分派到各个节点,SCAN IP最多有3个(1或2个也是可以的)。所以相比VIP而言,客户端failover的时候,只要实例通过PMON将监听信息注册到新的SCAN lisenter后,就不用和VIP一样,原实例未恢复、就不得不一个个重试(VIP的时候不配置failover就没有高可用了,SCAN IP下就不用非得配置,而且走DNS后更是只要配置1个即可,当然配置多个SCAN IP也是可以的),可以认为降低了failover恢复的时间。

总结起来(推荐):

  • 配置SCAN域名(负载均衡不需要,没意义)
  • 配置多个SCAN IP(负载均衡最好配置,不推荐使用SCAN IP)

oracle初始化参数LOCAL_LISTENER

该参数指定了数据库PMON进程需要将数据库实例注册到哪个端口,如果没有设置这个参数,PMON进程默认将数据库的服务注册到本地节点的1521端口。

SQL> show parameter local_listener;
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
local_listener                 string      (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.199.157)(PORT=1521))

oracle初始化参数REMOTE_LISTENER

该参数指定了除了本地监听程序以外,PMON需要把本地实例的服务注册到何位置
例如:在RAC系统中这个参数,意为将本地实例的数据库服务注册到集群其他节点的监听程序或SCAN监听程序上。

SQL> show parameter remote_listener;
NAME                     TYPE          VALUE
------------------------------------ ----------- ------------------------------
remote_listener              string          rac-scan:1521
根据以上的设置,PMON会将本地实例的服务注册到SCAN-rac的1521端口。
其中SCAN-rac是一个可以通过DNS或/etc/hosts文件解析的名称。

 

修改单SCAN IP为双SCAN IP

单SCAN IP修改为三SCAN IP

oracle各种IP https://www.modb.pro/db/13380

https://www.oracle.com/docs/tech/database/scan.pdf
https://www.oracle.com/webfolder/technetwork/tutorials/architecture-diagrams/19/rac/pdf/rac-19c-architecture.pdf

https://www.cnblogs.com/wlzjdm/p/6700678.html

https://blog.csdn.net/jim_cainiaoxiaolang/article/details/77153296

Client Failover Best Practices for Highly Available Oracle Databases Oracle Database 12c

oracle rac启动顺序介绍

posted @ 2024-01-27 23:45  zhjh256  阅读(237)  评论(0编辑  收藏  举报