OracleRAC集群SCAN说明

来源:互联网 发布:淘宝双11是什么意思啊 编辑:程序博客网 时间:2024/05/22 13:08

1 SCAN 概述

之前有网友在我Blog 留言说我的RAC 搭建中没有写SCAN 配置,这个之前应该是有写过,但刚搜了一下,没找到,正好重新整理一下,并做下实验,实验就用Oracle 12c 进行测试。

 

在Oracle 11g 之前,我们去连接RAC 集群,都是配置如下的内容:

dave_rac=

(DESCRIPTION =

(ADDRESS_LIST =

(LOAD_BALANCE = yes)

(FAILOVER=ON)

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.68)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.69)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = dave)

(failover_mode=(type=select)(method=basic))

)

)

 

这里的68和69 是VIP 的地址,是PUBLIC 网卡上的虚拟IP。 那我们这里只有2个节点,如果我们增加了RAC的集群数,那么就需要修改所有的客户端的配置,这个就很麻烦。

 

所以在Oracle 11gR2 中,引入了SCAN(Single ClientAccess Name)的特性。SCAN是一个域名,可以解析至少1个IP,最多解析3个SCAN IP,客户端可以通过这个SCAN 名字来访问数据库,另外SCAN ip必须与public ip和VIP在一个子网。

 

启用SCAN 之后,会在数据库与客户端之间,添加了一层虚拟的服务层,就是SCAN IP和SCAN IP Listener,在客户端仅需要配置SCAN IP的tns信息,通过SCANIP Listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对客户端产生影响,也就不需要修改配置。

 

配置SCAN有3种方法:

 

1. 使用/etc/hosts文件

这个是我们目前用的最多的方式,但是缺点只能对应一个SCAN IP,该方法Oracle 不推荐,但是简单,不需要单独的DNS 服务器,使用该方法,客户端还是需要VIP来链接。 Oracle 推荐使用其他的2种方法来实现SCAN 功能。

 

2. 在DNS中定义域名,只需要在DNS中配置即可实现SCAN 功能。

\

 

 

3. 通过Grid Naming Server(GNS),需要配置DNS 和DHCP才能实现SCAN 功能。

 

\

 

配置好之后,直接在客户端的tnsnames里写SCAN NAME就可以了,如下:

RACSCAN =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan.gns.cndba.com)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = dave)

)

)

 

以后RAC 增加删除节点,客户端都不需要修改。

 

 

2 SCAN 工作流程

在启用SCAN 特性之后,除了多几个SCAN IP 之外,还会多几个SCAN IP Listener,每个SCAN IP对应一个SCAN IP Listener,为了性能考虑,每个SCAN IP以及其对应的SCAN IP Listener将被独立的分配到各个节点上。

 

如果Cluster中其中某个运行SCAN IP的节点出现异常,则其余正常的SCAN IP节点将自动接管。

 

如果客户端是11g R2的版本,则客户端只需在tns中配置域名解析,即可实现failover,如果客户端版本低于11g R2,则无法通过域名解析出多个SCAN IP地址,因此如果要实现failover,必须在客户端的tns中配置3个SCAN IP的地址进行解析,这也是为何Oracle强烈建议在使用11g R2数据库时,客户端也最好使用11g R2的原因。

 

\

 

 

 

 

上图是SCAN 的工作流程图,图的右边是一个4个节点的RAC 集群,所以有4个Local Listener。 配置了3个SCAN IP和3个 SCAN Listeners。这3个SCAN IP 是随机的落在RAC节点上。

 

客户端链接的时候,会随机的连接到某一个某一个SCAN IP及起对应的SCAN IP Listner上, SCAN IP Listener接收到连接请求时,会根据 LBA 算法(least loaded instance),将该客户端的连接请求,转发给对应的Instance上的VIP Listener,从而完成了整个客户端与服务器的连接过程。

 

简单点就是:

client -> scan listener -> locallistener -> local instance

 

3 SCAN 相关的几个名词说明

 

 

3.1 SCAN VIP

 

SCAN VIP,即SCAN IP,是由DNS或者GNS、hosts解析出来的IP地址。目前SCANVIP最多能有三个,它们循环地被客户端所请求到。

 

SCAN VIP数量和节点数没有关系,正如上图所示,4个节点,3个SCAN VIP,SCAN VIP是随机的落在哪个节点上的,这个过程也是动态变化的。

 

3.2 GNS VIP

GNS VIP同SCAN VIP, GNS VIP是提供GNS服务的IP地址,它绑定到某个节点的PUBLIC IP所在网卡上,当节点出现故障,GNS资源会自动切换到其他正常的节点继续提供GNS解析服务。如果我们不使用GNS解析方法,那么也不会存在GNS VIP。

 

3.3 SCAN LISTENER

SCAN监听器,实现SCAN的负载均衡功能。如果RAC上有三个SCAN VIP,那么SCAN监听器也有三个,它们各自监听SCAN VIP的连接请求。

 

SCAN监听器的注册是由REMOTE_LISTENER参数控制的,任何实例都会向所有的SCAN监听器注册,所以SCAN LISTENER 会包含所有实例的名称。

 

这样SCAN监听器可以实时了解所有实例的运行情况的,因此能够准确地将连接重定向到空闲服务器的本地监听器上。

 

SCAN监听器是跟着SCAN VIP随机分配到节点服务器上,如果某个节点发生故障,运行在此节点上的SCANVIP会进行漂移,这时候SCAN监听器也跟着漂移到正常的节点上,继续为SCAN VIP监听连接请求,当PMON进程下次动态更新实例信息到该SCAN监听器之后,它又重新接受客户端的连接。

 

3.4 REMOTE_LISTENER

Oracle 参数,设置该参数之后,任何实例都会向SCAN监听器注册,所以SCAN监听器能够负载均衡地分发连接请求到节点本地监听器上。

 

因为SCAN IP有多个,他们对应的是同一个域名,因此在数据库中,需要使用easyconnect naming method方式,需要修改sqlnet.ora的配置文件添加ezconnect,如:

NAMES.DIRECTORY_PATH=(tnsnames,ezconnect)。

 

 

设置格式:REMOTE_LISTENER=SCAN:PORT,如REMOTE_LISTENER=rac-scan.cndba.cn:1521。

 

配置之后,RAC数据库的每个节点的PMON进程,会用广播的方式向每个SCAN Listener进行注册,同时CRS的后台进程ONS,会采集各个节点的负载状况,通知SCAN Listener,以便SCAN Listener根据负载情况,将新连接分配到当前负载最低的节点上。

 

 

管理理论部分,就这么多,接下来,会整理2篇Oracle 12c 环境下使用DNS和GNS 实现SCAN 的Blog,具体的了解下如何实现这种功能。

原创粉丝点击