scan-ip.dbaleading.com IN A 192.168.1.111
IN A 192.168.1.112
IN A 192.168.1.113
如果使用GNS的方式,则必须有DHCP服务,在Cluster的配置过程中,将会自动向DHCP服务器申请3个IP地址作为SCAN IP使用。
除了SCAN IP,在Cluster的配置过程中,SCAN IP
Listener服务也会被建立,每个SCAN IP对应一个SCAN IP
Listener,并且,为了提升高可用性,3个SCAN IP以及其对应的SCAN IP
Listener将被独立的分配到各个节点上。如果Cluster中其中某个运行SCAN IP的节点出现异常,则其余两个正常的
SCAN IP节点将自动接管。注意,如果客户端是11g R2的版本,则客户端只需在tns中配置域名解析,即可实现failover,如果客户端版本低于11g R2,则无法通过域名解析出3个SCAN IP地址,因此如果要实现failover,必须在客户端的tns中配置3个SCAN IP的地址进行解析,这也是为何Oracle强烈建议在使用11g R2数据库时,客户端也最好使用11g R2的原因。
范例:
$srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
$srvctl config scan
SCAN name: scan-ip, Network: 1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP: /scan-ip.dbaleading.com/192.168.1.111
SCAN VIP name: scan2, IP: /scan-ip.dbaleading.com/192.168.1.112
SCAN VIP name: scan3, IP: /scan-ip.dbaleading.com/192.168.1.113
介绍了11g R2中 SCAN IP的配置,以及 SCAN IP
Listener的配置及其作用。本章,我们来详细了解SCAN IP在数据库中的配置方法,以及如何用SCAN IP,配置Oracle所谓的自动负载平衡(该功能的实际使用,我们将在后续的章节中详细讨论)。
相信很多朋友都有这样一个疑问,既然SCAN IP是跟数据库Instance无关的,例如一个12节点的RAC或者24节点的RAC,都只有3个SCAN IP,并且SCAN IP是随机分布在各个Instance的,那么SCAN IP
Listener如何监听各个节点的数据库呢?同时,该怎么配置哪个Instance去哪个SCAN IP
Listener注册呢?
首先,补充一个概念,在11g R2中,SCAN IP是作为一个新增IP出现的,原有的CRS中的VIP仍然存在,从这里,就能看出一点端倪,在11gR2的RAC架构中,SCAN IP并非独立存在的,而是和原有的VIP结合在一起的。那么他们是如何工作的呢,先来看下下面这个工作原理图:
从原理图可以看出,SCAN IP其实是Oracle在客户端与数据库之间,新加的一个连接层,当有客户端访问时连接到SCAN IP
Listener。而SCAN IP
Listener接收到连接请求时,会根据 LBA 算法(所谓LBA算法,就是least loaded instance),将该客户端的连接请求,转发给对应的Instance上的VIP
Listener,从而完成了整个客户端与服务器的连接过程。简化如下:
client -> scan listener -> local listener -> local instance
了解了这个过程以后,对SCAN IP的整体架构,就全部清楚了。剩下的,我们再来讲一些技术细节。
SCAN IP和SCAN
Listener是独立于RAC的各个节点的,而每个节点的VIP、VIP
Listener是跟Instance绑定的,每个节点的VIP
Listener,会监听自己所属节点的Instance。因此在数据库中,我们需要设置remote_listener参数。这个参数设置很有讲究,因为SCAN IP有3个,SCAN
Listener也有三个,但是他们对应的是同一个域名,因此在数据库中,我们需要使用easy connect naming method方式,就是在sqlnet.ora的配置文件中,必须有NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)存在。
另外,配置remote_listener的方式也有讲究,以前的版本中,我们通常是在tnsnames.ora中写好remote_listener的地址以及端口,但是对于
SCAN
Listener,不能这么做,必须按照标准格式,设置成REMOTE_LISTENER=SCAN:PORT的形式,以我的测试系统为例,就是 REMOTE_LISTENER=scan-ip.dbaleading.com:1521,而不需要在tnsnames.ora中进行额外设置。
经过以上设置后,RAC数据库的每个节点的PMON进程,会用广播的方式向每个
SCAN
Listener进行注册,同时CRS的后台进程ONS,会采集各个节点的负载状况,通知
SCAN
Listener,以便
SCAN
Listener根据负载情况,将新连接分配到当前负载最低的节点上。