Oracle 11gR2 SCAN 详解

在Oracle 11g R2之前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡、Failover等RAC的特性。因此,当数据库RAC集群需要添加或删除节点时,需要及时对客户端机器的tns进行更新,以免出现安全隐患。

在Oracle 11g R2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性。该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及SCAN IP Listener,在客户端仅需要配置SCAN IP的tns信息,通过SCAN IP Listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对Client产生影响。

下面具体介绍下SCAN(Single Client Access Name)的架构以及配置。

在Oracle 11g R2中安装RAC发生的巨大变化,在 Oracle 10g以及 Oracle 11g R1的时代,安装RAC的步骤是先安装CRS再安装DB,而到了 Oracle 11g R2的时代,CRS与ASM被集成在一起合称为GRID,必须先安装GRID后才能继续安装DB,否则无法完成RAC架构安装。而被 Oracle 11gR2引入的SCAN,就是包含在安装GRID的过程中。SCAN的定义,有两种途径:

1、在DNS中定义域名。
2、通过Oracle提供的Grid Naming Server(GNS)实现DHCP自定义。

如果通过DNS来定义,则需要在网络中定义3个SCAN IP地址指向同一个域名,这3个IP地址必须处于同一个子网内,同时域名不能太长。另外,SCAN IP是由Oracle Clusterware管理的,因此在主机的集群软件(如:IBM HACMP,HP SERVICE GUARD)中不能将此IP配置进去,类似于 Oracle 10g中的VIP,在GRID安装前,此IP是无法ping通的。

范例:
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结合在一起的。那么他们是如何工作的呢,先来看下下面这个工作原理图:

Oracle 11gR2 SCAN 详解_第1张图片
 
从原理图可以看出,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根据负载情况,将新连接分配到当前负载最低的节点上。

以上,就是11gR2 RAC中,新增的SCAN IP以及 SCAN  Listener的全部内容了,在下面一章中,我们将针对该新特性,开展一些拓展性的思考以及讨论。

你可能感兴趣的:(Oracle 11gR2 SCAN 详解)