Oracle_11gR2_SCAN_IP scan ip配置详解
在Oracle 11gR2以前,如果数据库采用了RAC架构,在客户端的tnsnames中,需要配置多个节点的连接信息,从而实现诸如负载均衡,failover等等RAC的特性。因此,当数据库RAC集需要添加或删除节点时,需要及时对客户端机器的tns进行更新,以免出现安全隐患。
在11gR2中,为了简化该项配置工作,引入了SCAN(Single Client Access Name)的特性,该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅需要配置scan ip的tns信息,通过scan ip listener,连接后台集数据库。这样,不论集数据库是否有添加或者删除节点的操作,均不会对client产生影响。
下面,具体介绍下SCAN(Single Client Access Name)的架构以及配置。
首先,简要的看下在11gR2中,安装RAC发生的巨大变化,在10g以及11gR1的时代,安装RAC的步骤是先安装CRS,再安装DB,而到了11gR2的时代,crs与asm被集成在一起,合称为GRID,必须先安装GRID后,才能继续安装DB,否则,你就跟11gR2的RAC无缘咯
。
而被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配置进去,类似于10g中的vip,在grid安装前,此IP是无法ping通的。
范例:
scan-ip.dbaleading 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节点将自动接管。
注意,此处有个注意点,如果客户端是oracle10g客户端安装步骤11gR2的版本,则客户端只需在tns中配置域名解析,即可实现failover,如果客户端版本低于11gR2,则无法通过域名解析出3个SCAN IP地址,因此如果要实现failover,必须在客户端的tns中配置3个SCAN IP的地址进行解析,这也是为何oracle强烈建议在使用11gR2数据库时,客户端也最好使用11gR2的原因。
范例:
$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/192.168.1.111
SCAN VIP name: scan2, IP: /scan-ip.dbaleading/192.168.1.112
SCAN VIP name: scan3, IP: /scan-ip.dbaleading/192.168.1.113
SCAN IP在数据库中的配置方法,以及如何用SCAN IP,配置oracle所谓的自动负载平衡。
既然SCAN IP是跟数据库instance无关的,例如一个12节点的RAC或者24节点的RAC,都只有3个SCAN IP,并且SCAN IP是随机分布在各个instance的,那么,SCAN IP LISTEN
ER如何监听各个节点的数据库呢,同时,该怎么配置哪个instance去哪个SCAN IP LISTENER注册呢。下面将一一解答。
首先,补充一个概念,在11gR2中,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方式,就是在a的配置文件中,必须有NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)存在。
另外,配置remote_listener的方式也有讲究,以前的版本中,我们通常是在a中写好remote_listener的地址以及端口,但是对于scan listener,不能这么做,必须按照标准格式,设置成REMOTE_LISTENER=SCAN:PORT的形式,以我的测试系统为例,就是 REMOTE_LISTENER=scan-ip.dbaleading:1521,而不需要在a中进行额外设置。
经过以上设置后,RAC数据库的每个节点的PMON进程,会用广播的方式向每个SCAN LISTENER进行注册,同时CRS的后台进程ONS,会采集各个节点的负载状况,通知scan listener,以便scan listener根据负载情况,将新连接分配到当前负载最低的节点上。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论