Oracle 12.1.0.2 RAC SCAN 详解
1 介绍
Oracle单客户端访问名称(Single Client Access Name SCAN)是 Oracle Real Application Clusters环境中使用的一种功能,它为客户端提供单一名称,以访问群集中运行的任何Oracle数据库。您可以将SCAN视为群集中数据库的群集别名。好处是,如果在群集中添加或删除节点或数据库,则无需更改客户端的连接信息。
SCAN首次在Oracle Real Application Clusters(RAC)11g第2版引入,并在Oracle RAC 12 c中提供了其他功能。只需一个名称即可访问群集以连接到此群集中的数据库,客户端可以使用EZConnect和简单的JDBC 和URL访问群集中运行的任何数据库,而与群集中运行的数据库或服务器数量无关在群集中的哪个服务器上,请求的数据库实际上是激活的。
EZconnet sqlplus system/manager@sales1-scan:1521/oltp
JDBC connect jdbc:oracle:thin:@sales1-scan:1521/oltp
示例1:示例EZConnect和JDBC连接字符串
2 使用SCAN的网络要求
默认SCAN配置是在安装随Oracle Database 11g第2版或更高版本一起分发的Oracle Grid Infrastructure期间定义的。Oracle Grid Infrastructure是一个包含Oracle Clusterware和Oracle自动存储管理的单一Oracle主目录。
您必须首先安装Oracle Grid Infrastructure才能使用Oracle RAC 11g第2版或更高版本。在Oracle Grid Infrastructure安装的访谈阶段,系统将提示您提供SCAN名称。定义SCAN有两个选项:
1. 使用公司DNS(域名服务)定义SCAN
2. 使用Oracle网格命名服务(GNS)定义SCAN
选项1 - 使用公司DNS
如果选择选项1,则必须要求网络管理员使用循环算法创建至少一个可解析为三个IP地址的单一名称。无论集群中的服务器数量多少,都建议考虑负载平衡和高可用性要求,建议使用三个IP地址。
IP地址必须与群集中的默认公共网络位于同一子网中。名称长度不得超过15个字符,不包括域名,并且必须可以在没有域名后缀的情况下解析(例如:“sales1-scan”必须是可解析的,而不是“scan1-can.example.com”) 。不得将IP分配给网络接口,因为Oracle Clusterware将负责处理它。
sales1-scan.example.com IN A 133.22.67.194
IN A 133.22.67.193
IN A 133.22.67.192
示例2:SCAN的示例DNS条目
您可以使用“nslookup”检查DNS中的SCAN配置。如果您的DNS设置为提供对SCAN条目解析的IP的循环访问,则运行“nslookup”命令至少两次以查看循环算法的工作情况。结果应该是每次“nslookup”将以不同的顺序返回一组三个IP。
First nslookup |
Second nslookup |
[oracle@mynode] nslookup sales1-scan Server: 131.32.249.41 Address: 131.32.249.41#53 Non-authoritative answer: Name: sales1-scan.example.com Address: 133.22.67.192 Name: sales1-scan.example.com Address: 133.22.67.193 Name: sales1-scan.example.com Address: 133.22.67.194 |
[oracle@mynode] nslookup sales1-scan Server: 131.32.249.41 Address: 131.32.249.41#53 Non-authoritative answer: Name: sales1-scan.example.com Address: 133.22.67.193 Name: sales1-scan.example.com Address: 133.22.67.194 Name: sales1-scan.example.com Address: 133.22.67.192 |
示例3:使用“nslookup”在DNS中查找SCAN配置
注意:如果您的DNS服务器没有返回一组三个IP,如图3所示,或者没有Round-robin,请让网络管理员启用此类设置。DNS级别的循环允许在群集中浮动的SCAN监听LISTENER之间进行连接请求负载平衡。SCAN不需要作为一个整体运行,如果列表中的第一个SCAN监听器关闭,则缺少这样的设置不会阻止连接请求故障转移到另一个SCAN监听器。
Oracle客户端通常处理群集中SCAN监听LISTENER的连接请求的故障转移。Oracle Database 11g第2版或更高版本的Oracle客户端不需要任何特殊配置即可提供此类故障转移。老客户需要考虑其他配置[1]。因此,建议使用SCAN连接到数据库的客户端的最低版本是Oracle Database 11g第2版或更高版本。
使用客户端DNS缓存可能会产生错觉,即DNS服务器没有发生DNS循环调度发送IP地址(DNS不返回一组三个IP,如图3所示)。客户端DNS缓存通常用于降低对外部DNS服务器的DNS请求以及降低DNS解析时间。这是一个部署在本地的功能简单的递归DNS服务器。
如果无法将客户端DNS设置为在本地提供循环或无法禁用,则使用JDBC:thin connect 通常会尝试连接到列表中第一个返回的SCAN-IP和SCAN listener。这基本上禁用了来自这些客户端的群集中SCAN监听LISTENER之间的连接请求负载平衡,但不会影响整个SCAN功能。基于Oracle Call Interface(OCI)的数据库访问驱动程序将应用内部循环算法,在这种情况下不需要考虑。
选项2 - 使用Oracle网格命名服务(GNS)
如果选择选项2,则只需在安装期间对话框中输入SCAN名称。在群集配置的某个阶段,当使用基于IPv6的IP地址与Oracle RAC 12 c时,将从DHCP服务或使用“无状态地址自动配置”(SLAAC)获取三个IP地址(但是,假设您使用在您的公共网络上进行某种形式的动态IP分配)来创建SCAN。然后由GNS [2]提供SCAN名称解析。
3 如果在安装时没有DNS服务器可用,则解决方法如下
Oracle Universal Installer(OUI)强制在Oracle Grid期间提供默认的SCAN解析
基础架构安装,因为SCAN概念是在群集中创建Oracle RAC 11g第2版或更高版本数据库时必不可少的部分。用于创建数据库的所有Oracle Database 11g第2版或更高版本工具(例如,数据库配置助手(DBCA)或网络配置助手(NetCA))都将采用其存在。因此,在您提供合适的SCAN解析之前,OUI不会让您继续安装。
但是,为了在不设置基于DNS的SCAN解析的情况下仍然要实现安装要求,您可以使用基于主机文件(/etc/hosts)的解决方法。在这种情况下,您将使用典型的hosts-file条目将SCAN解析为1个IP地址,且只可以实现一个IP地址。无法模拟DNS服务器使用本地主机文件执行的循环解析。操作系统执行的主机文件查找仅返回与名称匹配的第一个IP地址。您也不能在一个条目中执行此操作(hosts文件中的一行)。因此,您将仅为群集创建1个SCAN。(请注意,必须更改群集中所有节点上的hosts文件。)
从以前的(Oracle Database 11g之前版本或更高版本)版本执行升级时,也可能会使用此解决方法。但是,强烈建议在升级或初始安装后不久,按照本文中“选项1”或“选项2”中的说明启用SCAN配置。要使群集知道已修改的SCAN配置,请删除hosts-file中的条目,然后在群集中的一个节点上以root用户身份发出:“ srvctl modify scan -n <scan_name> ”。
提供的scan_name可以是现有的完全限定名称(或新名称),但应通过DNS解析,其中包含3个与之关联的IP,如上所述。然后系统会自动执行剩下的重新配置工作。
4 使用Oracle Grid Infrastructure 11g第2版进行SCAN配置
在群集配置期间,将在群集中为SCAN创建多个资源。对于3个IP中的每一个SCAN IP创建SCAN VIP资源并创建SCAN监听LISTENER。SCAN的监听LISTENER依赖于SCAN VIP,3个SCAN VIP(及其关联的监听LISTENER)将分散在群集中。
这意味着,假设群集由三个或更多节点组成,则每对资源(SCAN VIP和监听LISTENER)将在群集中的其他服务器上启动。
在使用2节点集群的情况下(出于简化原因,仍然建议使用3个IP),集群中的一个服务器将在正常操作下托管两组SCAN资源。如果正在运行SCAN VIP的节点出现故障,SCAN VIP及其关联的监听LISTENER将故障转移到群集中的另一个节点。如果通过这种故障,集群中可用服务器的数量变得少于三个,则一个服务器将再次承载两组SCAN资源。如果节点再次在群集中可用,则前面提到的分散将生效并相应地重新定位一个集合。
[grid @ mynode] srvctl config scan_listener
SCAN监听LISTENERLISTENER_SCAN1存在。端口:TCP:1521
SCAN监听LISTENERLISTENER_SCAN2存在。端口:TCP:1521 SCAN监听LISTENERLISTENER_SCAN3存在。端口:TCP:1521
[grid@mynode] 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
[grid@mynode] srvctl config scan
SCAN name: sales1-scan, Network: 1/133.22.67.0/255.255.252.0/
SCAN VIP name: scan1, IP: /sales1-scan.example.com/133.22.67.192
SCAN VIP name: scan2, IP: /sales1-scan.example.com/133.22.67.193
SCAN VIP name: scan3, IP: /sales1-scan.example.com/133.22.67.194
示例4:Oracle Grid Infrastructure 11g第2版中的SCAN配置示例
5 使用Oracle Grid Infrastructure 12 c第1版进行SCAN配置
针对Oracle Grid Infrastructure 11g第2版概述的大多数SCAN设计原则
留在Oracle Grid Infrastructure 12 c 。但是,根据客户要求和反馈,SCAN概念已通过Oracle Grid Infrastructure 12 c进行了增强,如下所示:
1. SCAN和Oracle Clusterware管理的VIP现在支持基于IPv6的IP地址
2. 默认情况下,SCAN仅限于从群集中的节点接受服务注册
3. SCAN支持群集中的多个子网(每个子网一个SCAN)
在基于OUI的Oracle Grid Infrastructure安装期间,只能安装和配置默认SCAN(在默认网络上,通常为网络号=1)。需要启用集群中的多个子网支持作为安装后任务。
这些增强功能需要更改SCAN和SCAN_LISTENER的配置:
[grid@mynode]$ srvctl config scan
SCAN name: sales1-scan.example.com, Network: 1
Subnet IPv4: 133.22.67.0/255.255.252.0/eth0
Subnet IPv6:
SCAN 0 IPv4 VIP: 133.22.67.194
SCAN name: sales1-scan.example.com, Network: 1
Subnet IPv4: 133.22.67.0/255.255.252.0/eth0
Subnet IPv6:
SCAN 1 IPv4 VIP: 133.22.67.193
SCAN name: sales1-scan.example.com, Network: 1
Subnet IPv4: 133.22.67.0/255.255.252.0/eth0
Subnet IPv6:
SCAN 2 IPv4 VIP: 133.22.67.192
[grid@mynode]$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
Registration invited nodes:
Registration invited subnets:
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
Registration invited nodes:
Registration invited subnets:
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
Registration invited nodes:
Registration invited subnets:
示例5:SRVCTL输出示例
从示例5中显示的示例输出中可以看出,支持基于IPv6的SCAN(以及节点VIP)的IP是Oracle Grid Infrastructure 12 c SCAN中的基本概念。在示例5中,不使用基于IPv6的IP地址,并且仅在网络号1上的集群中部署了一个SCAN,其被分配给网络接口卡(NIC)eth0。
示例5中的示例输出还显示了SCAN中新安全功能的跟踪。默认情况下,扫描Oracle网格基础设施12 Ç将只接受数据库实例的注册(与LISTENER的动态数据库实例注册的一部分),其是一个SCAN监听LISTENER分配给该集群的一部分。
注意:为了仅允许对群集中托管的数据库进行数据库实例注册,数据库实例及其分配的SCAN的默认注册使用私有网络互连。如果 - 由于某种原因 - 无法访问或不使用为群集定义的专用互连的数据库需要向相应的SCAN监听LISTENER注册,则可以修改SCAN监听LISTENER以允许在每个(命名)节点上进行其他注册或子网基础,如下面的例6所示。请注意,在将列表添加到列表中时,不需要在集群中存在受邀节点,以便预先批准将来可能加入的节点。
[grid@mynode]$ srvctl modify scan_listener -invitednodes test –update
[grid@mynode]$ srvctl config scan_listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
Registration invited nodes: test
Registration invited subnets:
SCAN Listener LISTENER_SCAN2 exists. Port: TCP:1521
Registration invited nodes: test
Registration invited subnets:
SCAN Listener LISTENER_SCAN3 exists. Port: TCP:1521
Registration invited nodes: test
Registration invited subnets:
示例6:修改SCAN监听LISTENER以允许从其他节点进行注册
6 为SCAN启用多子网支持
要在群集中的多个子网上使用SCAN,必须首先在群集中启用多个子网,这通常是一个安装后任务,包括以下步骤:
1. 在(公共)网络上创建其他子网
2. 将节点VIP分配给新创建的子网
3. 为新创建的子网创建节点监听LISTENER
4. 使用选项一或选项二创建1个SCAN或多个SCAN
步骤1 假定您有多个计划用于Oracle RAC集群中的公共网络通信的网络接口卡(NIC),或者您有一个(设置)要与多个IP一起使用的接口各种网络的地址。两者都可以通过各种方式建立,而在任何一种情况下,Oracle Clusterware层都应该能够看到由oifcfg命令确定的多个接口,如例7所示。
[grid@mynode]$ oifcfg iflist
eth0 133.22.67.0
eth1 192.168.122.0
eth1 169.254.0.0
eth2 10.1.1.0
[grid@mynode]$ oifcfg setif -global eth2/10.1.1.0:public
[grid@mynode]$ oifcfg getif
eth0 133.22.67.0 global public
eth1 192.168.122.0 global cluster_interconnect,asm
eth2 10.1.1.0 global public
[root@mynode]# srvctl add network -netnum 2 -subnet 10.1.1.0/255.255.252.0/eth2
[root@mynode]# srvctl config network -netnum 2
Network 2 exists
Subnet IPv4: 10.1.1.0/255.255.252.0/eth0, static
Subnet IPv6:
示例7:在公共网络上创建其他子网
上面的步骤2到4使用Oracle Clusterware标准命令,如例8所示。
#ADD node VIPs
[root@mynode]# srvctl add vip -node SalesSrv145 -netnum 2 -address SalesSrv 145v2/255.255.252.0
[root@mynode]# srvctl add vip -node SalesSrv146 -netnum 2 -address SalesSrv 146v2/255.255.252.0
[root@mynode]# srvctl add vip -node SalesSrv147 -netnum 2 -address SalesSrv 147v2/255.255.252.0
[root@mynode]# srvctl add vip -node SalesSrv148 -netnum 2 -address SalesSrv 148v2/255.255.252.0
#ADD node listener on network number 2
[grid@mynode]$ srvctl add listener -listener ListNet2 -netnum 2 -endpoints "TCP:1528"
#ADD SCAN on network number 2
[root@mynode]# srvctl add scan -scanname scantest -netnum 2
#START node VIPs
[root@mynode]# srvctl start vip -vip SalesSrv145v2
[root@mynode]# srvctl start vip -vip SalesSrv146v2
[root@mynode]# srvctl start vip -vip SalesSrv147v2
[root@mynode]# srvctl start vip -vip SalesSrv148v2
#START ListNet2 node listener on network number 2
[grid@mynode]$ srvctl start listener -listener ListNet2
[grid@mynode]$ srvctl status listener -listener ListNet2
Listener LISTNET2 is enabled
Listener LISTNET2 is running on node(s): SalesSrv145, SalesSrv146, SalesSrv147 …
#START SCAN on network number 2
[root@mynode]# srvctl start scan -netnum 2
#Check configuration and status for SCAN
[root@mynode]# srvctl config scan -netnum 2
SCAN name: scantest, Network: 2
Subnet IPv4: 10.1.1.0/255.255.252.0/eth2
Subnet IPv6:
SCAN 0 IPv4 VIP: 10.1.1.250
[root@mynode]# srvctl status scan -netnum 2
SCAN VIP scan1_net2 is enabled
SCAN VIP scan1_net2 is running on node SalesSrv146
示例8:在新创建的子网上分配节点VIP和创建SCAN
例7和8的注释:
1. 使用“[root@mynode]” 引入的操作需要作为管理员用户执行
2.假设“-address”中的名称作为“srvctl add vip”命令的一部分,通过DNS或/ etc / hosts解析为有效的IP地址。例: SalesSrv145v2需要解析为10.1.1.0子网中的有效和未使用的IP地址
3. SCAN“ scantest.example.com ”未使用选项1或选项2创建,使用“在安装时没有DNS服务器可用的解决方法”
另请注意,将SCAN添加到网络号2不会自动在此网络上创建SCAN监听LISTENER。为了在网络号2上充分利用SCAN,您需要在此网络上创建并启动SCAN监听LISTENER。
#ADD SCAN_LISTENER to network number 2
[grid@mynode]$ srvctl add scan_listener -netnum 2 -listener testscan -endpoints TCP:1528
[grid@mynode]$ srvctl config scan_listener -netnum 2
SCAN Listener TESTSCAN_SCAN1_NET2 exists. Port: TCP:1528
Registration invited nodes:
Registration invited subnets:
[grid@mynode]$ srvctl start scan_listener -netnum 2
[grid@mynode]$ srvctl status scan_listener -netnum 2
SCAN Listener TESTSCAN_SCAN1_NET2 is enabled
SCAN listener TESTSCAN_SCAN1_NET2 is running on node SalesSrv146
示例9:将SCAN监听LISTENER添加到netnum 2上新添加的SCAN配置
现在您已使用不同的子网创建了另一个SCAN设置以进行公共通信并创建了相应的节点VIP,节点监听LISTENER和SCAN监听LISTENER,您需要使用这些SCAN通知数据库如何向其注册。与Oracle Database 11g第2版相比,使用Oracle Database 12 c对监听器,特别是SCAN监听器进行注册的数据库实例的原则没有改变,因此将在本文的通用部分“多子网支持和LISTENER_NETWORKS”。
7 使用SCAN进行Oracle数据库配置
自Oracle Database 11g第2版以来,SCAN是Oracle RAC数据库配置的重要组成部分,因此假设数据库是使用标准Oracle工具(例如前面提到的DBCA)创建的,因此REMOTE_LISTENER参数默认设置为SCAN。这允许实例作为远程监听LISTENER向SCAN监听LISTENER注册,以提供有关实例提供的服务的信息,当前负载以及有关应将多少传入连接定向到实例的建议。
在此上下文中,必须考虑LOCAL_LISTENER参数。LOCAL_LISTENER参数应设置为node-VIP。如果您需要完全限定的域名,请确保将LOCAL_LISTENER设置为完全限定的域名(例如node-VIP.example.com)。默认情况下,在群集配置期间,会在群集中的每个节点上创建节点监听LISTENER。如果要在群集中使用多个子网,则应在初始安装后配置其他节点VIP,如本文“为SCAN启用多子网支持”一节中所述。
从Oracle Grid Infrastructure 11g第2版开始,节点监听LISTENER运行在Oracle Grid Infrastructure主目录之外,并使用指定端口侦听node-VIP(默认端口为1521)。
与以前的数据库版本不同,建议不要将REMOTE_LISTENER参数设置为服务器端TNSNAMES别名,该别名将主机解析为SCAN(例如:HOST = sales1scan),但使用简化的“SCAN:port”语法如例10所示。
NAME TYPE VALUE
-------------------------- ----------- ------------------------------
local_listener string (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=133. 22.67.111)(PORT=1521))))
remote_listener string sales1-scan.example.com:1521
示例10:LOCAL和REMOTE_LISTENER默认配置
注意:如果使用简单连接命名方法,则可能需要修改SQLNET.ORA以确保在指定用于客户端名称解析查找的命名方法的顺序时EZCONNECT位于列表中(NAMES.DIRECTORY_PATH =(tnsnames,ldap,ezconnect))。
8 使用SCAN进行客户端负载平衡
对于使用Oracle SQL * Net 11g第2版进行连接的客户端,客户端将通过DNS解析SCAN名称来接收三个IP地址。然后,客户端将浏览从DNS接收的列表,并尝试通过其中一个IP连接。如果客户端收到错误,它将在向用户或应用程序返回错误之前尝试其他地址。这类似于在客户端连接字符串中提供地址列表时,客户端连接故障转移在先前版本中的工作方式。
当SCAN监听LISTENER收到连接请求时,SCAN监听LISTENER将检查提供所请求服务的最小负载实例。然后,它会将连接请求重定向到运行负载最少的实例的节点上的本地监听LISTENER。随后,客户端将获得本地监听器的地址。本地监听LISTENER最终将创建与数据库实例的连接。
图1:使用SCAN进行连接负载平衡 - 图示
多子网支持和LISTENER_NETWORKS
LISTENER_NETWORKS参数的Oracle 11g第2版文档3说:“ 一个网络可能包含多个本地和远程监听LISTENER。默认情况下,所有监听LISTENER都相互交叉注册。通过在LISTENER_NETWORKS初始化参数中指定一组监听LISTENER,您可以使用远程监听LISTENER的子集指定本地监听LISTENER的子集。LISTENER_NETWORKS参数指定的监听器不应由LOCAL_LISTENER和REMOTE_LISTENER参数指定。”
在多个子网上使用SCAN时,必须为所有要通过Oracle Grid Infrastructure 11g第2版通过不同子网访问的数据库设置LISTENER_NETWORKS参数。对于Oracle Grid Infrastructure 12 c,Oracle Database Agent根据需要管理LISTENER_NETWORKS参数默认。
有关LISTENER_NETWORKS参数的详细信息,请参阅Oracle文档。
9 版本和向后兼容性
成功使用SCAN连接到群集中的Oracle RAC数据库取决于客户端理解和使用SCAN的能力以及所讨论的数据库中REMOTE_LISTENER参数设置的正确配置。如果是Oracle的版本连接到数据库的客户端以及使用的Oracle数据库版本都是Oracle Database 11g第2版或更高版本,并且使用了本文所述的默认配置,通常不需要对系统进行任何更改。
如果使用11g之前的第2版客户端(Oracle数据库11g版本或Oracle数据库10g版本2或更早版本),您将无法充分受益于SCAN的优势。
原因:Oracle客户端将无法处理DNS为SCAN返回的三个IP集合。因此,它将尝试仅连接到列表中返回的第一个地址,并且或多或少会忽略其他地址。如果侦听此特定IP的SCAN监听LISTENER不可用或IP本身不可用,则连接将失败。为了确保使用11g之前的第2版客户端进行负载平衡和连接故障转移,您需要更改客户端的TNSNAMES.ora,以便它使用3条地址线,其中每条地址线都解析为其中一个SCAN VIP。
sales.example.com =(DESCRIPTION =
(ADDRESS_LIST =(LOAD_BALANCE = on)(FAILOVER = ON)
(ADDRESS =(PROTOCOL = TCP)(HOST = 133.22.67.192)(PORT = 1521))
(ADDRESS =(PROTOCOL = TCP)(HOST = 133.22.67.193)(PORT = 1521))
(ADDRESS =(PROTOCOL = TCP)(HOST = 133.22.67.194)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = salesservice.example.com)))
示例11:适用于Oracle数据库11g第2版客户端的TNSNAMES.ora
10 其他与SCAN相关的配置
SCAN可用于多种配置。本文介绍了推荐的设置,但不排除其他配置,只要您了解其含义即可。以下部分讨论了一些不太常见的配置,并将根据需要随时更新。
在同一子网上使用SCAN和多个端口
为了允许应用程序使用一个SCAN作为主机在主机/端口级别维护可区分的连接字符串或启用基于端口的防火墙配置,可以将SCAN设置为支持同一子网的多个端口。
需要注意的是,不同的端口仅用于初始连接。一旦在任何SCAN端口上建立了使用SCAN的连接,就不会维护端口分配,并且使用向一个或多个本地监听LISTENER注册的数据库服务来执行Oracle RAC集群内的连接路由。
这意味着所有SCAN端口都被视为相同,因此任何SCAN端口上的连接都可以定向到同一子网内任何端口上的任何已注册本地监听LISTENER。
另请注意,多端口分配因版本而异。Oracle Grid Infrastructure 11.2.0.3不允许您在一个SCAN上设置多个端口,而Oracle Grid Infrastructure 11.2.0.2可以让您使用此配置。Oracle Grid Infrastructure 11.2.0.3.6及更高版本以及Oracle Grid Infrastructure 12 c将恢复对此配置的支持。
在不使用GDS的MAA环境中使用SCAN
如果您已经实现不用全球数据服务(Global Data Services GDS)的可与Oracle数据库12新能力的最高可用性体系结构(Maximum Availability Architecture MAA)环境扩展智能负载均衡和客户端故障转移的概念在全球范围内的分布式环境中,您使用的Oracle RAC的使用Oracle Data Guard同步主数据库和备用数据库(在主站点和备用站点两者中),使用SCAN提供简化的TNSNAMES配置,客户端可以使用它来连接数据库,无论主数据库还是备用数据库是当前活动(主)数据库。
为了使用这种简化的配置,Oracle Database 11g第2版引入了两个新的SQL * Net参数,可用于各个客户端的连接字符串。第一个参数是CONNECT_TIMEOUT。它指定客户端建立与Oracle数据库的Oracle Net连接的超时持续时间(以秒为单位)。此参数将覆盖
SQLNET.ORA 中的 SQLNET.OUTBOUT_CONNECT_TIMEOUT。 第二个参数是RETRY_COUNT ,它指定在终止连接尝试之前遍历ADDRESS_LIST的次数。
使用这两个参数,主站点上的SCAN和备用站点都可以在客户端连接字符串中使用。即使如果随机选择的地址指向当前未激活的站点,超时也将允许连接请求在客户端等待时间过长之前进行故障转移(默认超时取决于操作系统可能长达10分钟) 。
sales.example.com =(DESCRIPTION = (CONNECT_TIMEOUT = 10)(RETRY_COUNT = 3)
(ADDRESS_LIST =(LOAD_BALANCE = on)(FAILOVER = ON)
(ADDRESS =(PROTOCOL = TCP)(HOST =sales1-scan)(PORT = 1521))
(ADDRESS =(PROTOCOL = TCP)(HOST = sales2-scan)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = salesservice.example.com)))
例12:MAA环境的TNSNAMES.ORA条目
使用GDS在MAA环境中使用SCAN
全球数据服务(GDS)是Oracle数据库12提供的新功能Ç延伸到全球范围,其中有可能被用来维持可用性两个或两个以上的故障切换目标分布式环境中的智能负载均衡和故障转移客户端的概念。对于使用GDS的MAA配置,避免使用SCAN监听LISTENER。有关GDS和SCAN配置的更多信息,请参阅相应的Oracle文档。
将SCAN与Oracle Connection Manager一起使用
如果您将Oracle Connection Manager(CMAN)与Oracle RAC数据库一起使用,那么
Oracle RAC实例的REMOTE_LISTENER参数应包括CMAN服务器,以便CMAN服务器将接收与负载平衡相关的信息,因此可以跨可用实例负载平衡连接。
实现这一目标的最简单方法是将CMAN服务器作为条目添加到
客户端希望通过CMAN连接到的数据库的REMOTE_LISTENER,如图10所示。另请注意,您必须从客户端的TNSNAMES连接描述符中删除SCAN,CMAN服务器还需要进一步配置。有关更多详细信息,请参阅CMAN文档。
SQL> show parameters listener
NAME TYPE VALUE
-------------------------- ----------- ------------------------------
listener_networks string
local_listener string (DESCRIPTION=(ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP) (HOST=148.87.58.109)(PORT=1521))))
remote_listener string stscan3.oracle.com:1521,(DESCRIPTION= (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=CMANserver)(PORT=1521))))
示例13:使用CMAN时的服务器端TNSNAMES.ora示例条目
总结和结论
单客户端访问名称(SCAN)是Oracle Real Application Clusters环境中使用的一种功能,它为客户端提供单一名称,以访问群集中运行的任何Oracle数据库。SCAN首次引入Oracle Real Application Clusters(RAC)11g第2版,作为Oracle Grid Infrastructure产品套件的一部分,并通过Oracle RAC 12 c进一步增强。
在任何版本中,使用单个名称访问群集以连接到此群集中的数据库,允许客户端使用EZConnect和简单的JDBC瘦URL访问群集中运行的任何数据库,而不管运行的数据库或服务器的数量群集,无论群集中的哪个服务器,请求的数据库实际上都是激活的。
除了通过在群集中浮动的SCAN监听LISTENER注册数据库实例的更安全方式之外,还支持群集中的多个子网以及IPv6支持,这使得最新版本的SCAN更加灵活有效,以支持DBaaS或私有数据库云部署。