About Oracle 11gR2 Grid Infrastructure Single Client Access Name (SCAN)
Oracle11gR2Grid Infrastructure (CRS)中引入了Single Client Access Name (SCAN)来简化客户端对数据库服务的访问,本文将详细说明 SCAN的含义及其工作原理。
SCAN概念
- Single client access name (SCAN)是提供给所有客户端用于连接集群的虚拟主机名称(与10g和 11g R1中的 vip主机名称相对应)。
- SCAN是 DNS或 Grid Naming Service (GNS)中注册到 1-3个 IP地址的一个域名。
- 默认情况下,SCAN名称与集群的名称相同,且该名称在同一企业内必须唯一。SCAN的默认值基于本地节点的名称。SCAN名称的长度最少1个字符,最多15个字符,必须包含字母和数字,不得以数字开头,可以包含连字符(-)。如果要使用长度超过15字符的 SCAN,请在安装 Grid Infrastructure时选择“ Advanced installation”选项。
- 要想成功安装 Grid Infrasture,SCAN必须至少解析成一个 IP地址。
- SCAN VIP地址必须与virtual IP地址和 public IP地址位于同一子网。
- Oracle强烈建议不要再 hosts文件中配置 SCAN VIP地址。如果使用 hosts文件来解析 SCAN主机名,则该 SCAN hostname只能解析成一个SCAN IP地址。
- 如果使用 hosts文件来解析SCAN主机名,则在 Grid Infrastructure安装结束时会遇到类似如下Cluster Verification Utility故障。
Installation log -$ORACLE_BASE/oraInventory/logs/installActions{$TIMESTAMP}.log
INFO: PRVG-1101 : SCANname "cluscan.us.oracle.com" failed to resolve
INFO: ERROR:
INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "cluscan.us.oracle.com"
INFO: ERROR:
INFO: PRVF-4657 : Name resolution setup check for"scanclunm" (IP address: 10.4.0.202) failed
OR
PRCS-1016 : Failed to resolve Single Client Access Namecluscan.us.oracle.com
- 出于高可用性和可扩展性的考虑, Oracle推荐配置使用 DNS循环解析将 SCAN解析成三个地址。
- 因为 SCAN是与整个集群而不是特定的节点关联,使用 SCAN可以再无需重新配置客户端的情况下方便地从集群添加或删除节点。SCAN还增强了数据库的位置无关性,使得客户端配置部再依赖于运行特定数据库的节点。
- 客户端仍然可以继续使用之前版本的方法来访问集群,不过 Oracle推荐客户端使用 SCAN来访问集群。使用SCAN的客户端也可以使用 EZCONNECT方式来访问集群。
- Grid Infrastructure除了启动所有节点上的本地监听程序 LISTENER来监听本地的VIP外,还会启动SCAN listener LISTENER_SCAN1(一个集群中最多3个)来监听SCAN VIP;Oracle Database11gR2默认情况下会将local_listener设置成 local LISTENER,将remote_listener设置为 SCAN listener。
- SCAN listener will be running off GRID_HOME, and by default, in 11gR2 local listener will be running off GRID_HOME as well.
SCAN相关的常见问题
如何配置 SCAN和SCAN listener?
在“Typical installation”过程中,程序会提示您确认默认的Single Client Access Name (SCAN)。如果您更改默认的SCAN,则您要使用的 SCAN名称必须保持唯一性。
如果 SCAN名称解析成一个IP地址,则root脚本(root.sh or rootupgrade.sh)将根据 SCAN名称解析的 IP地址数量来创建 SCAN VIP资源(ora.scan1.vip)以及相应SCAN listener资源(ora.LISTENER_SCAN1.lsnr)的数量。例如,如果SCAN名称可以解析为 2个 IP地址,则将 root脚本就会创建两个 SCAN VIP资源和两个相应的SCAN listener资源。
SCAN VIP及相应的 SCAN listener成对工作,当SCAN VIP failover到其他节点,则相应的SCAN监听程序也会 failover到同一节点。
当SCAN VIPfailover发生时,始终会选择运行SCAN VIP最少的节点,例如,在一个 4节点的集群中,如果 SCAN VIP运行在节点、节点2和节点3上,则当节点 3 down 掉时,节点3上的SCAN VIP 及相应的SCAN listener就会 failover到节点4上,因为其他两个节点的每个节点上已经运行了一个SCAN VIP。
我们还可以使用“srvctl”来添加/修改SCAN vip和 listener。
是否仍然需要在每个节点上配置 locallistener?
回答是“是”,我们仍然需要在每个节点配置独立的 local listener。SCAN listener 并没有取代每个节点上的 local listener。
在 11g R2的 GI中,集群中的所有节点上会运行3个新的 scan listener,如果集群节点超过3个,则只会在其中3个节点上运行 SCAN listener,无论集群有多少节点,最多也只会有3个 scan listener。数据库通过 remote_listener 初始化参数注册到 SCAN listener中。如果集群中任意一个 scan listener挂掉,都会在一个新的节点上自动重启。
SCAN的工作原理
在客户端提交请求时,在SCAN VIP地址及端口上进行监听的SCANlistener就会代表客户端建立连接。因为集群上的所有服务都已注册到 SCAN listener中, SCAN listener就会将负载最少的节点(每个scan listener会实时更新集群的负载统计信息)上的 local listener的地址返回给客户端。最后,客户端就与通过返回的提供服务的节点上的 local listener与服务建立连接。所有这些操作对于客户端来说都会透明的,客户端无需进行任何明确的配置。
$ SRVCTL STATUSSCAN_LISTENER
SCAN ListenerLISTENER_SCAN1 is enabled
SCAN listenerLISTENER_SCAN1 is running on node TEST1
SCAN ListenerLISTENER_SCAN2 is enabled
SCAN listenerLISTENER_SCAN2 is running on node TEST2
SCAN ListenerLISTENER_SCAN3 is enabled
SCAN listenerLISTENER_SCAN3 is running on node TEST3
可否用 '/etc/hosts'来解析 SCAN而不用 DNS或 GNS?
Oracle强烈建议不要在 hosts文件中配置SCAN VIP 地址。但是可以使用hosts文件来解析SCAN名称,只不过只能解析成一个SCAN IP地址。
如果使用 hosts文件来解析 SCAN名称,则在安装结束时会遇到ClusterVerification Utility失败错误,详细信息请见metalink文章 NOTE 887471.1 。
可否使用之前的连接方式(VIP)来进行客户端连接?
客户端仍旧可以使用之前版本的连接方式(VIP)来访问集群。
Oracle强烈建议客户端使用 SCAN来访问集群。使用 SCAN的客户端也可以 EZCONNECT方式来访问集群。
是否必须要使用 SCAN?
强烈建议而已,并非必须。
是否支持删除 SCAN?
SCAN Oracle 11gR2 Grid Infrastructure的一个组件,不支持删除SCAN。
Sample TNS entry for SCAN
TEST.ORACLE.COM =
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=SCAN-TEST.ORACLE.COM)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=11GR2TEST.ORACLE.COM))
)
Sample TNS Entry without SCAN
TEST.ORACLE.COM =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=TEST1-vip.ORACLE.COM)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=TEST2-vip.ORACLE.COM)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=11GR2TEST.ORACLE.COM))
)
目录 返回
首页