Oracle 11gR2 SCAN 详解

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.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节点将自动接管。注意,此处有个注意点,如果客户端是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.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
SCAN IP配置

   看了第一篇中的SCAN IP介绍,相信很多朋友都有这样一个疑问,既然SCAN IP是跟数据库instance无关的,例如一个12节点的RAC或者24节点的RAC,都只有3个SCAN IP,并且SCAN IP是随机分布在各个instance的,那么,SCAN IP LISTENER如何监听各个节点的数据库呢,同时,该怎么配置哪个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方式,就是在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根据负载情况,将新连接分配到当前负载最低的节点上。

SCAN IP修改

   和SCAN ip 相关的ip信息在SCAN 资源创建的时候就被初始化了。在不使用GNS的情况下:任何对DNS和/etc/hosts 中SCAN 中的变更都不会自动同步到Clusterware中而是要手工执行相关的更新操作。下面介绍一下修改scan ip的具体步骤:
   实验环境:
   版本
Clusterware :11.2.0.2
database    :11.2.0.1
   旧scan ip
10.250.7.210
   新scan ip
10.250.7.141
10.250.7.142
10.250.7.143
   1 查看scan ip的状态信息:
grid@rac1:/home/grid>srvctl config scan
SCAN 名称: scan, 网络: 1/10.250.7.0/255.255.255.0/eth0
SCAN VIP 名称: scan1, IP: /scan/10.250.7.210
grid@rac1:/home/grid>
   2 停止scan_listener ,scan 应用
grid@rac1:/home/grid>srvctl stop scan_listener
grid@rac1:/home/grid>srvctl stop scan
   3 确认 scan_listener,scan 的状态
grid@rac1:/home/grid>srvctl status scan_listener
SCAN 监听程序 LISTENER_SCAN1 已启用
SCAN 监听程序 LISTENER_SCAN1 未运行
grid@rac1:/home/grid>srvctl status scan
SCAN VIP scan1 已启用
SCAN VIP scan1 未运行
grid@rac1:/home/grid>crs_stat -t | grep  scan 
ora.scan1.vip  ora....ip.type OFFLINE   OFFLINE              
grid@rac1:/home/grid>
grid@rac1:/home/grid>
grid@rac1:/home/grid>crs_stat -t | grep  lsnr
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1       
ora....N1.lsnr ora....er.type OFFLINE   OFFLINE              
ora....C1.lsnr application    ONLINE    ONLINE    rac1       
ora....C2.lsnr application    ONLINE    ONLINE    rac2 
   4 在所有节点中 /etc/hosts 文件中修改 scan 对应的ip:
10.250.7.141        scan
10.250.7.142        scan
10.250.7.143        scan
grid@rac1:/home/grid>srvctl modify scan -h
   修改 SCAN 名称。
   用法: srvctl modify scan -n
    -n            域名限定的 SCAN 名
    -h                       输出用法
grid 用户无权更改scan ip,必须使用root权限
grid@rac1:/home/grid>srvctl modify scan -n scan 
PRCS-1034 : 无法修改单客户机访问名 scan
PRCR-1071 : 无法注册或更新 资源类型 ora.scan_vip.type
CRS-0245:  User does not have enough privilege to perform. the operation
[root@rac1 ~]# /opt/11202/11.2.0/grid/bin/srvctl modify scan -n scan
   5 变更后,进行确认:
[root@rac1 ~]# /opt/11202/11.2.0/grid/bin/srvctl config scan
SCAN 名称: scan, 网络: 1/10.250.7.0/255.255.255.0/eth0
SCAN VIP 名称: scan1, IP: /scan/10.250.7.141 
对于/etc/hosts文件解析scan ip,因为不能做轮训的负载均衡,所以这时候scan ip就只能有一个了。
   6 重新启动scan,scan_listener
grid@rac1:/home/grid>srvctl start scan
grid@rac1:/home/grid>srvctl start scan_listener
   7 确认scan 和scan_listener.ora的状态:
grid@rac1:/home/grid>crs_stat -t | grep  scan
ora.scan1.vip  ora....ip.type ONLINE    ONLINE    rac2       
grid@rac1:/home/grid>crs_stat -t | grep  lsnr
ora....ER.lsnr ora....er.type ONLINE    ONLINE    rac1       
ora....N1.lsnr ora....er.type ONLINE    ONLINE    rac2       
ora....C1.lsnr application    ONLINE    ONLINE    rac1       
ora....C2.lsnr application    ONLINE    ONLINE    rac2 
   8 进行ping测试
grid@rac1:/home/grid>ping 10.250.7.141
PING 10.250.7.141 (10.250.7.141) 56(84) bytes of data.
64 bytes from 10.250.7.141: icmp_seq=1 ttl=64 time=1.52 ms
64 bytes from 10.250.7.141: icmp_seq=2 ttl=64 time=0.226 ms
--- 10.250.7.141 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.226/0.873/1.520/0.647 ms
grid@rac1:/home/grid>ping 10.250.7.142
PING 10.250.7.142 (10.250.7.142) 56(84) bytes of data.
   与修改private ip ,vip 不一样,修改scan ip 无需停止数据库实例,asm 或者重启crs,相对比较简单!

SCAN IP修改

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值