首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YH12:一篇文章读懂SCAN

YH12:一篇文章读懂SCAN

作者头像
数据和云
发布2018-03-07 15:22:10
1.8K0
发布2018-03-07 15:22:10
举报
文章被收录于专栏:数据和云数据和云

单客户端访问名称(SCAN)是Oracle RAC环境中使用的功能,为客户端提供访问集群中运行的任何Oracle数据库的单一名称。 用户可以将SCAN视为RAC数据库的集群别名。 使用SCAN的好处是,如果在集群中添加或删除节点或数据库,则客户端的连接信息不需要更改。

SCAN首次引入了Oracle RAC 11g第2版,并在Oracle RAC 12c中提供了其他功能。 使用单一名称访问集群以连接到此集群中的数据库,客户端可以使用EZConnect和简单的JDBC瘦URL来访问集群中运行的任何数据库,而与集群中运行的数据库或服务器数量无关,集群中所请求的数据库实际上是处于活动状态的服务器。

使用SCAN的网络需求

在安装与Oracle Database 11. 2或更高版本一起分发的Oracle Grid Infrastructure的过程中定义了默认的SCAN配置。 Oracle Grid Infrastructure是一个包含Oracle Clusterware和Oracle Automatic Storage Management的Oracle Home。

必须首先安装Oracle Grid Infrastructure才能使用Oracle RAC 11.2或更高版本。 在Oracle Grid Infrastructure安装的面试阶段,系统将提示需要提供SCAN名称。 有两个选项用于定义扫描:

1.使用公司DNS(域名服务)定义SCAN

2.使用Oracle网格命名服务(GNS)定义SCAN

使用公司DNS定义SCAN

对于使用公司的DNS定义SCAN,必须要求网络管理员使用循环算法创建至少一个单一名称,用于解析为三个IP地址。 考虑到负载均衡和高可用性要求,建议使用三个IP地址,无论集群中的服务器数量如何。

IP地址必须与集群中的默认公网位于同一子网。 该名称的长度必须不超过15个字符,不包括域名,并且必须在没有域后缀的情况下解析(例如:“sales1-scan”必须是可解析的而不是“scan1-can.example.com”) 。 不能将IP分配给网络接口。

可以使用“nslookup”检查DNS中的SCAN配置。 如果DNS设置为向SCAN条目解析的IP提供循环访问,则至少运行“nslookup”命令两次以查看循环算法的工作。 结果应该是,每次“nslookup”将以不同的顺序返回一组三个IP。

注意:如果DNS服务器没有返回一组三个IP,如上图所示或不循环,请咨询网络管理员启用此类设置。 DNS级别的循环允许跨集群中的SCAN侦听器之间的连接请求负载平衡。 SCAN作为一个整体不需要,并且没有这样的设置将不会阻止连接请求到另一个SCAN侦听器的故障切换,以防列表中的第一个SCAN侦听器关闭。

Oracle客户端通常处理集群中SCAN侦听器之间的连接请求的故障转移。 Oracle数据库11.2或更高版本的Oracle客户端不需要任何特殊配置来提供此类故障转移。较老的客户需要考虑额外的配置。因此,建议使用SCAN连接到数据库的客户端的最小版本是Oracle Database 11.2或更高版本。

使用客户端DNS缓存可能会产生DNS覆盖不会从DNS服务器发生的错误印象。 (DNS不返回一组三个IP,如上图所示)。客户端DNS缓存通常用于最小化对外部DNS服务器的DNS请求以及最小化DNS解析时间。这是一个带有本地项目的简单递归DNS服务器。

如果客户端DNS无法设置为在本地提供循环或无法禁用,则使用JDBC:thin connect的Oracle客户端通常将尝试连接到列表中首先返回的SCAN-IP和SCAN侦听器。这基本上禁用了来自这些客户端的集群中的SCAN侦听器之间的连接请求负载平衡,但不影响整个SCAN功能。基于Oracle调用接口(OCI)的数据库访问驱动程序将应用内部循环算法,在这种情况下不需要考虑。

使用Oracle GNS 定义SCAN

使用Oracle GNS定义SCAN,只需要在访问期间输入SCAN名称。 在集群配置的某个阶段,当使用基于IPv6的IP地址与Oracle RAC 12c时,将从DHCP服务或使用“无状态地址自动配置”(SLAAC)获取三个IP地址(使用GNS,但假设使用某些在公共网络上进行动态IP分配的形式)来创建扫描。 然后由GNS2提供SCAN名称解析。

在安装时没有DNS服务器可用的解决方法

Oracle通用安装程序(OUI)在Oracle Grid Infrastructure安装期间强制提供默认的SCAN解决方案,因为在集群中创建Oracle RAC 11.2版或更高版本的数据库时,SCAN概念是必不可少的。用于创建数据库的所有Oracle Database 11.2版或更高版本的工具(例如数据库配置助手(DBCA)或网络配置助手(NetCA))将承担其存在。因此,在提供合适的SCAN分辨率之前,OUI不会允许继续进行安装。

但是,为了克服安装要求而不设置基于DNS的SCAN解决方案,可以使用基于hosts-file的解决方法。在这种情况下,将使用典型的主机文件条目将SCAN解析为只有1个IP地址和一个IP地址。不可能模拟DNS服务器使用本地主机文件的循环分辨率。操作系统执行的主机文件查找将仅返回与该名称匹配的第一个IP地址。也不能在一个条目(主机文件中的一行)中执行此操作。因此将仅为集群创建1个SCAN。 这种情况下,必须更改集群中所有节点上的hosts文件。

强烈建议在升级或初始安装后不久,启用上述任一种SCAN配置。为了使集群知道修改的SCAN配置,请删除hosts文件中的条目,然后在集群中的一个节点上以root用户执行:srvctl modify scan -n <scan_name>。

使用Oracle Grid Infrastructure 12.1进行SCAN配置

在11.2的版本中,SCAN的使用仍有一些不足之处,根据客户要求和反馈,Oracle Grid Infrastructure 12c的SCAN上做了增强,包括以下内容:

1. SCAN和Oracle Clusterware管理的VIP现在支持基于IPv6的IP地址

2. SCAN默认情况下仅限于从集群中的节点接受服务注册

3. SCAN支持集群中的多个子网(每个子网一个SCAN)

只有默认的SCAN(在默认网络,通常为网络号1)可以在基于OUI的Oracle Grid Infrastructure安装过程中进行安装和配置。 作为安装后任务,需要启用集群中的多个子网支持。

这些增强功能需要更改SCAN和SCAN_LISTENER的配置:

从上图输出可以看出,支持基于IPv6的IP 是Oracle Grid Infrastructure 12c SCAN中的一个基本概念。 上图未使用基于IPv6的IP地址,并且在分配给网络接口卡(NIC)eth0的第一个网络上的集群中仅部署了一个SCAN,还显示了SCAN中新安全功能的跟踪 默认情况下,Oracle Grid Infrastructure 12c中的SCAN将仅接受作为SCAN侦听器分配到的集群一部分的数据库实例的注册。

注意:为了仅允许数据库实例注册集群中托管的数据库,使用其分配的SCAN的数据库实例的默认注册将使用专用互连。

如果由于某种原因 - 无法访问或不使用为集群定义的专用互连的数据库需要向相应的SCAN侦听器注册,则可以修改SCAN侦听器以允许在每个(命名的)节点上进行其他注册或子网基础,如下图所示。

启用多子网扫描支持

为了在集群中的多个子网上使用SCAN,必须首先启用集群中多个子网的使用,这通常是安装后任务,包括以下步骤:

1、在(公共)网络上创建附加子网

2、将节点VIP分配给新创建的子网

3、为新创建的子网创建一个节点侦听器

4、使用一个或两个选项创建扫描

步骤1假设要么有多个网络接口卡(NIC),打算用于Oracle RAC集群中的公共网络通信,或者有一个要与来自多个网络的IP一起使用的接口地址。 两者都可以各种方式建立,而在任一情况下,Oracle Clusterware层应该能够看到由oifcfg命令确定的多个接口,如下图所示。

步骤2到4使用Oracle Clusterware标准命令,如下图所示。

还要注意,将SCAN添加到网络号2,不会在此网络上自动创建SCAN侦听器。 为了充分利用网络号2上的SCAN,需要在此网络上创建并启动SCAN侦听器。

现在已经创建了另一个SCAN设置,使用不同的子网进行公共通信,并创建了相应的节点VIP,节点侦听器和SCAN侦听器,将需要使用这些SCAN通知数据库如何注册。 数据库实例注册侦听器,特别是SCAN侦听器的原则与Oracle Database 12c相比,与Oracle Database 11.2版相比并没有改变.

使用SCAN配置Oracle数据库

自Oracle Database 11.2以来,SCAN是Oracle RAC数据库配置的重要组成部分,因此,假设使用标准Oracle工具(例如DBCA)创建数据库,则REMOTE_LISTENER参数将默认设置为SCAN。这允许实例向SCAN Listeners注册为远程监听器,以提供有关实例提供哪些服务的信息,当前负载以及关于应将多少个传入连接引导到实例的建议。

在这种情况下,必须考虑LOCAL_LISTENER参数。 LOCAL_LISTENER参数应设置为node-VIP。如果需要完全合格的域名,请确保将LOCAL_LISTENER设置为完全限定的域名(例如node-VIP.example.com)。默认情况下,在集群配置期间,将在集群中的每个节点上创建节点侦听器。如果要在集群中使用多个子网,则应在初始安装后配置其他节点VIP,如本文“启用多子网络支持扫描”一节中所述。

从Oracle Grid Infrastructure 11g Release 2开始,节点侦听器用完了Oracle Grid Infrastructure主站,并使用指定的端口监听节点VIP(默认端口为1521)。

与以前的数据库版本不同,不建议将REMOTE_LISTENER参数设置为服务器端TNSNAMES别名,将主机解析为地址列表条目中的SCAN(例如:HOST = sales1- scan),但使用简化的“SCAN:端口“语法,如下图所示。

注意:如果使用简单的连接命名方法,则可能需要修改SQLNET.ORA,以确保在指定用于客户端名称解析查找的命名方法的顺序时,EZCONNECT在列表中(NAMES.DIRECTORY_PATH =(tnsnames ,ldap,ezconnect))。

SCAN实现客户端负载均衡

对于使用Oracle SQL * Net 11g第2版连接的客户端,客户端将通过DNS解析SCAN名称来接收三个IP地址。 然后,客户端将通过从DNS接收的列表,并尝试通过接收到的IP之一进行连接。 如果客户端收到错误,它会在向用户或应用程序返回错误之前尝试其他地址。 这类似于当客户端连接字符串中提供地址列表时,客户端连接故障转移在以前版本中的工作原理。

当SCAN侦听器接收到连接请求时,SCAN侦听器将检查提供所请求服务的最少加载的实例。 然后,它会将连接请求重新定向到运行最少加载实例的节点上的本地侦听器。 随后,客户端将被给予本地侦听器的地址。 本地侦听器将最终创建与数据库实例的连接。

本文来自Oracle官方白皮书翻译。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据和云 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档