`

Oracle 11g R2 RAC高可用连接特性 – SCAN详解

 
阅读更多

昨天帮朋友解决11g RAC SCAN问题,当时为这朋友简单解答了一些SCAN特性相关的问题,但我知道这仅仅是一小部分。
Oracle从11g开始推出SCAN特性可不是我解答那样简单的,SCAN特性在Oracle RAC高可用连接里占据着非常重要的地位,也是以后的重点推进方向。
昨天处理完问题比较晚自己又比较累,所以没有整理出SCAN特性相关资料,今天就抽出点时间把SCAN高可用连接特性介绍出去。

说在前头:文章中核心内容来自官方,当然我也参考了部分前辈们整理的资料,再加以自己的理解和测试整理出的文章。

SCAN概念
先介绍一下什么叫SCAN,SCAN(Single Client Access Name)是Oracle从11g R2开始推出的,客户端可以通过SCAN特性负载均衡地连接到RAC数据库。SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个)SCAN IP,我们可以通过DNS或者GNS来解析实现。其中DNS大家都很熟悉,这里不多说。GNS(Grid Naming Service)则是Oracle 11g R2的新功能,可以通过DHCP服务为节点和SCAN分配VIP和SCAN IP。另外还有个优点是,对于新加入集群的节点,它会自动分配VIP地址,更新集群资源,客户端依然通过SCAN特性负载均衡地连接到新增集群节点上。DNS和GNS配置与解析相关内容在下面还有说明。
除了DNS和GNS解析方法外,SCAN也可以使用hosts文件来解析,但用过的人都知道,此方法不仅在安装RAC的时候产生问题,后期使用也是存在问题的,比如SCAN域名只能定义一个SCAN IP。所以这种方法也是Oracle不推荐使用的。但尽管如此,我见过很多生产上依然这样使用,也就是废弃了11g的新特性SCAN,而是依然采用VIP连接方式。

备注:有人可能会注意到《此方法不仅在安装RAC的时候产生问题》这句,RAC安装的时候的确会报错,但这并不影响后期Oracle的使用。

SCAN最明显的优点就是,当集群中新增加了节点或者删除了节点,不需要额外维护客户端。

PUBLIC IP, PRIVATE IP, VIP, SCAN VIP, GNS VIP, LOCAL_LISTENER, REMOTE_LISTENER , LOCAL LISTENER, SCAN LISTENER
在RAC部署的时候,我们都会接触到PUBLIC IP、PRIVATE I、VIP等等,那下面就针对它们进行介绍。
PUBLIC IP : 这是我们网卡上配置的真实IP地址,我们称为公共IP,这个IP的存在关系到下面介绍的VIP能不能正确漂在其所在网卡上。注意,PUBLIC IP是不提供给客户端去连接配置的,这并不是说通过PUBLIC IP无法连接实例,而是它会存在节点服务器宕机的时候所有向它请求的客户端都会有等待现象并且最后得到超时信息的缺点。

PRIVATE IP : 称为私网IP(私有IP),它是用于心跳同步的,也就是保证两台服务器数据同步。说道私网IP,我简单说下Oracle另一个高可用性连接特性 – HAIP。其实Cache Fusion会消耗节点服务器很大的私网资源,另外,私网间无法通信还会引起brain split(脑裂),以前为解决这种问题,我们可以采用网卡bonding技术,而Oracle在11g R2的时候HAIP技术来实现,HAIP(Highly Available Virtual IP)用于节点间的私网通信,支持同时使用多个网络连接来满足网卡间的负载均衡,并且还提高了Cache Fusion资源通信能力。HAIP技术并不是主要内容,所以在这里点到为止。

VIP : RAC的每个节点都需要有一个虚拟IP,这就是VIP。VIP需要和PUBLIC IP同一个子网,它们是由GI的Clusterware来管理的。VIP在其节点服务器发生故障的时候会自动漂移到另外正常的节点服务器上,如果RAC是多个节点运行的,那具体漂移到哪个活动的节点将由Clusterware决定。VIP发生漂移现象之后,其当前的节点服务器LOCAL LISTENER是不会监听它的请求的,所以有客户端向这个VIP发送请求时,Clusterware的FAN会通知客户端向别的VIP发送请求,客户端收到通知后通过Failover机制把请求重新发送到ADDRESS列表中的其他VIP上。虽然有这种较复杂的过程,但始终对客户端是透明进行的,而且这个过程完成时间非常短暂,客户端也就几乎感受不到有节点宕机。等故障节点恢复正常,漂移的VIP也回到此节点上,继续提供服务。

SCAN VIP : SCAN VIP就是我在刚开始常说的SCAN IP,也就是由DNS或者GNS、hosts解析出来的IP地址。上面也说过,SCAN VIP最多能有三个,它们循环地被客户端所请求到。这里大家可能会存在这样的问题,SCAN VIP只有三个,那RAC是四节点或更多的节点情况怎么办?存在这种问题的原因归咎于对SCAN VIP的了解不足。其实,SCAN VIP数量和节点数是没有任何关系的,SCAN VIP会落到哪个节点上都是随机的。

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

LOCAL LISTENER : 本地监听器,RAC的每个节点上都会有独立的本地监听器,它会监听该节点的PUBLIC IP和VIP,而每个节点的实例在启动的时候也向本地监听器进行注册,当然它也会向SCAN监听器注册,当VIP或者PUBLIC IP(这种情况比较少见)有连接请求的时候,本地监听器就接受处理并和本地实例建立连接。如果某个节点故障,其上面的VIP会进行漂移,但本地监听器并不会产生漂移。

SCAN LISTENER : SCAN监听器,它是实现SCAN负载均衡的原理所在。如果RAC上有三个SCAN VIP,那么SCAN监听器也有三个,它们各自监听SCAN VIP的连接请求。SCAN监听器跟着SCAN VIP随机分配到节点服务器上,如果某个节点发生故障,运行在此节点上的SCAN VIP会进行漂移,这时候SCAN监听器也跟着漂移到正常的节点上,继续为SCAN VIP监听连接请求,当PMON进程下次动态更新实例信息到该SCAN监听器之后,它又重新接受客户端的连接。这和VIP产生漂移的时候是有所区别的。

LOCAL_LISTENER : 这是Oracle的参数,这个参数控制着本地监听器的注册,因为本地监听器的工作机制关系,通过本地监听器的数据库连接请求只会连接到本地节点的实例上。

REMOTE_LISTENER :  同LOCAL_LISTENER是Oracle的参数,通过这个设置,任何实例都会向SCAN监听器注册,所以SCAN监听器能够负载均衡地分发连接请求到节点本地监听器上,也就是连接到其本地节点上实例上。

关于LOCAL_LISTENER与REMOTE_LISTENER的配置,在下面讲动态注册的时候再看一下。

SCAN解析与配置
SCAN是在安装GI(Grid Infrastructure)时配置的,作为Clusterware资源被管理。
忽略hosts解析之后,有两种方式配置和解析SCAN: DNS和GNS(Grid Naming Service)。

这里重点说一下DNS解析SCAN方式
使用DNS解析SCAN的时候,DNS服务器会采用rr(round-robin)的方式循环解析为它准备的3个IP地址,与Oracle 11g R2的客户端配合使不同的客户端能够连接到不同的SCAN Listener上,这相当于是Oracle 10g中配置的客户端负载均衡(通过LOAD_BALANCE=yes配置)。

下面看一下客户端通过SCAN连接到数据库的过程,首先由DNS服务器解析SCAN名称,DNS服务器返回SCAN对应的3个IP地址的列表,客户端会选择使用其中一个SCAN VIP地址作为连接地址,将命名方法解析后的连接信息发送到SCAN VIP对应的SCAN Listener上,SCAN Listener通过负载均衡机制再把请求转发给比较空闲的服务器上的本地监听器,由本地监听器完成实例与客户端之间的连接。

使用SCAN连接数据库实例,整个过程实现了客户端的Failover(Oracle 10g R2是通过FAILOVER=on来配置),DNS服务器返回的是一个SCAN VIP列表,客户端会选择其中一个连接到RAC,如果这个IP地址不能正常访问,客户端会选择另一个IP地址继续连接,直到所有的地址都不能正常连接,才返回错误给客户端,整个过程对客户端程序来说依然是透明的。

需要注意的是,使用SCAN连接到数据库,不再需要客户端能解析节点的PUBLIC IP和VIP,只需要客户端能够通过DNS服务器正常解析SCAN就可以了。负载均衡工作交给服务器端的SCAN实现。

至于GNS解析SCAN,因为目前GNS服务存在不稳定的情况,也很少有企业将其投入到生产环境使用,而且其工作原理也较为复杂,所以在这里并不深入说明。

实例的动态注册
上面已经介绍了LOCAL_LISTENER和REMOTE_LISTENER两个和动态注册有关的参数,那我们看看它们在数据库中的表现形式:
本地监听器注册是由实例的LOCAL_LISTENER参数所控制的:
SQL> set line 150
SQL> show parameter local_listener

NAME                                 TYPE                   VALUE
———————————— ———————- ——————————
local_listener                       string                 (DESCRIPTION=(ADDRESS_LIST=(AD
                                                            DRESS=(PROTOCOL=TCP)(HOST=192.
                                                            168.0.194)(PORT=1521))))
– 这是我管理的一套RAC上的配置,当然我已经处理好IP地址了。

LOCAL_LISTENER设置为向本地VIP地址进行注册,由于本地监听器是在本地的PUBLIC IP和VIP上监听,所以向VIP监听注册就能保证成功向本地监听器注册。

查看本地监听器的状态:
[grid@pos2 ~]$ lsnrctl status listener

LSNRCTL for Linux: Version 11.2.0.3.0 – Production on 23-OCT-2012 12:01:21

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUS of the LISTENER
————————
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 – Production
Start Date                19-JUL-2012 15:31:45
Uptime                    95 days 20 hr. 29 min. 35 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/pos2/listener/alert/log.xml
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.192)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.194)(PORT=1521)))
Services Summary…
Service "+ASM" has 1 instance(s).
  Instance "+ASM2", status READY, has 1 handler(s) for this service…
Service "pos" has 1 instance(s).
  Instance "pos2", status READY, has 1 handler(s) for this service…
Service "posXDB" has 1 instance(s).
  Instance "pos2", status READY, has 1 handler(s) for this service…
The command completed successfully
– 这里注意:查看本地监听器信息的时候每个节点只能看到其上运行的实例。

SCAN监听器的注册是由REMOTE_LISTENER参数控制的,任何实例都会向所有的SCAN监听器注册:
SQL> show parameter remote_listener

NAME                                 TYPE                   VALUE
———————————— ———————- ——————————
remote_listener                      string                 pos-cluster-scan:1521

下面是LISTENER_SCAN1的一个状态信息,当然你也可以查看LISTENER_SCAN2和LISTENER_SCAN3的状态。
[grid@pos2 ~]$ lsnrctl status listener_scan1

LSNRCTL for Linux: Version 11.2.0.3.0 – Production on 23-OCT-2012 12:06:56

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
————————
Alias                     LISTENER_SCAN1
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 – Production
Start Date                19-JUL-2012 15:31:45
Uptime                    95 days 20 hr. 35 min. 10 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/11.2.0/grid/log/diag/tnslsnr/pos2/listener_scan1/alert/log.xml
Listening Endpoints Summary…
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.195)(PORT=1521)))
Services Summary…
Service "pos" has 2 instance(s).
  Instance "pos1", status READY, has 1 handler(s) for this service…
  Instance "pos2", status READY, has 1 handler(s) for this service…
Service "posXDB" has 2 instance(s).
  Instance "pos1", status READY, has 1 handler(s) for this service…
  Instance "pos2", status READY, has 1 handler(s) for this service…
The command completed successfully

由于任何实例启动都会向所有的SCAN监听器动态注册,从LISTENER_SCAN1的SCAN监听器运行状态来看,SERVICE pos包括了所有的实例名称。

就像我昨天回答那位朋友的时候简单说“是通过内部机制”一样,大家可能看到上面的内容并不知道SCAN监听器如何找到比较空闲的实例的。
其实SCAN监听器是实时了解所有实例的运行情况的,因此它能够准确地将连接重定向到空闲服务器的本地监听器上。

下面我们通过日志查看实例的动态注册与动态更新

1)本地监听器动态注册日志:[grid@pos2 ~]$ cd $ORACLE_BASE/diag/tnslsnr/pos2/listener/alert
[grid@pos2 alert]$ grep service_register log_1.xml | head -3<txt>18-JUN-201213:58:23* service_register *LsnrAgt*0<txt>18-JUN-201213:58:30* service_register *+ASM2 *0<txt>18-JUN-201215:54:15* service_register * pos2 *0--之所以选择log_1.xml历史文件是因为发现我的log.xml里基本都是更新日志,没有注册日志。2)本地监听器动态更新日志:[grid@pos2 alert]$ grep service_update log.xml | head -3<txt>16-OCT-201216:07:09* service_update * pos2 *0<txt>16-OCT-201216:07:33* service_update * pos2 *0<txt>16-OCT-201216:08:03* service_update * pos2 *03SCAN监听器动态注册日志:[grid@rac1 ~]$ cd $ORACLE_BASE/diag/tnslsnr/rac1/listener_scan2/alert/[grid@rac1 ~]$ grep service_register log.xml | head -3<txt>13-AUG-201205:25:00* service_register *LsnrAgt*0<txt>13-AUG-201220:29:07* service_register * luocs1 *0<txt>13-AUG-201220:58:05* service_register * luocs1 *0--这是我另一套测试RAC环境。4SCAN监听器动态更新日志:[grid@rac1 ~]$ grep service_update log.xml | head -3<txt>13-AUG-201220:29:19* service_update * luocs1 *0<txt>13-AUG-201220:30:19* service_update * luocs1 *0<txt>13-AUG-201220:30:46* service_update * luocs1 *0

注意,如果你的RAC是通过hosts解析了SCAN域名的,那么系统里就找不到上面的SCAN监听器日志的路径。

实例的动态注册和动态更新过程是由实例的PMON进程完成的,正是因为SCAN监听器能够实时了解实例的负载情况,所以SCAN监听器能够负载均衡地将连接请求转发给合适实例的本地监听器来处理。


这里谈到负载均衡,那么就说下负载均衡中的优先级
共享服务器配置中:

  •  低负载节点
  •  低负载实例
  •  实例相关的低负载调度器

 
专用服务器配置中:

  •  低负载节点
  •  低负载实例

SCAN兼容性配置
介绍SCAN差不多了,这里还有个兼容性问题不能不说。
要完美实现SCAN功能特性,其实对客户端的要求也是存在的。下面看下不同版本和SCAN之间的兼容性

编号

客户端软件版本

服务器端软件版本

SCAN特性的使用

1

11g R2

11g R2

能够充分使用SCAN的特性

2

早于11g R2版本

11g R2

不能充分感受到SCAN特性

3

11g R2

早于11g R2版本

在服务器端没有SCAN的概念

4

早于11g R2版本

早于11g R2版本

在服务器端没有SCAN的概念

 

这里稍微详细说一下第2种情况,如果客户端低于11g R2的版本,在DNS解析的3个VIP地址中,可能只能固定地使用第一个SCAN VIP连接数据库;如果该SCAN VIP对应的监听器出现故障,那么整个连接将会失败,客户端也会收到到错误信息。

那针对兼容性问题我们拿出各种客户端配置方法

1)客户端和服务器端软件版本都是11g R2的时候Tnsnames.ora
RACSCAN =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = luocs-cluster-scan.grid.luocs.com)(PORT =1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = luocs10g)))2)客户端是早于11g R2的版本,服务器端是11g R2的时候
RACSCAN =(DESCRIPTION =(ADDRESS_LIST =(LOAD_BALANCE=on)(FAILOVER=on)(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.0.193)(PORT =1521))(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.0.194)(PORT =1521))(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.0.195)(PORT =1521)))(CONNECT_DATA =(SERVICE_NAME = luocs10g)))为了确保在早于11g R版本的客户端负载均衡和失败切换,我们需要在tnsnames.ora中添加3SCAN VIP3)传统的RAC客户端配置方法先从客户端正常地解析服务器所有节点的主机名称和相应的VIP名称,最好和服务端/etc/hosts一致。当然,我们不解析名称的情况下还可以使用VIP地址,比如:
LUOCSRAC =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.0.193)(PORT =1521))(ADDRESS =(PROTOCOL = TCP)(HOST =192.168.0.194)(PORT =1521))(LOAD_BALANCE = yes)(FAILOVER = on))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = luocs)))本地客户端hosts解析之后,使用名称:
LUOCSRAC =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = rac1-vip.luocs.com)(PORT =1521))(ADDRESS =(PROTOCOL = TCP)(HOST = rac2-vip.luocs.com)(PORT =1521))(LOAD_BALANCE = yes)(FAILOVER = on))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = luocs)))注意:传统的客户端配置方法其实还有多种,这个在这里不细说。4JDBC字符串配置早期版本:
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = rac1-vip.luocs.com)(PORT =1521))(ADDRESS =(PROTOCOL = TCP)(HOST = rac2-vip.luocs.com)(PORT =1521))(LOAD_BALANCE = yes)(FAILOVER = on))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = luocs)))11g R2
jdbc:oracle:thin@luocs-cluster-scan:1521/luocs

注意:JDBC是不支持TAF的,所以通过JDBC连接无法实现Failover,那有没有解决方法,我们可以使用应用的连接池来实现,也就是当连接的时候发现某些连接有故障,那自动切换到正常实例的连接。

最后我贴一下SCAN配置信息的检查方法和DNS、GNS方式SCAN解析实例:
首先SCAN配置信息的检查。

1)查看SCAN解析的VIP地址:
[root@rac1 ~]# nslookup scan.luocs.com
Server:192.168.77.145Address:192.168.77.145#53
Name:	scan.luocs.com
Address:192.168.77.197Name:	scan.luocs.com
Address:192.168.77.195Name:	scan.luocs.com
Address:192.168.77.196
2)查看SCAN配置信息:
[root@rac1 ~]# cd /u01/app/11.2.0/grid/bin
[root@rac1 bin]# ./srvctl config scan
SCAN name: scan.luocs.com,Network:1/192.168.77.0/255.255.255.0/bond0
SCAN VIP name: scan1, IP:/scan.luocs.com/192.168.77.196
SCAN VIP name: scan2, IP:/scan.luocs.com/192.168.77.197
SCAN VIP name: scan3, IP:/scan.luocs.com/192.168.77.195
3)查看SCAN监听器配置信息:
[root@rac1 bin]# ./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
4)查看SCAN VIP的节点分配:[root@rac1 bin]# ./srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node rac1
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node rac2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node rac2
5)查看SCAN Listener的运行节点:
[root@rac1 bin]# ./srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node rac1
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node rac2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node rac2

DNS方式配置SCAN:

以下操作在DNS服务器上进行:
安装bind三个包
# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm
# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm
# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm 
配置主区域
# cd /var/named/chroot/etc
# cp -p named.caching-nameserver.conf named.conf
# vi named.conf 
 options {
         listen-on port 53{ any;};
         listen-on-v6 port 53{::1;};
         directory       "/var/named";dump-file       "/var/named/data/cache_dump.db";
         statistics-file "/var/named/data/named_stats.txt";
         memstatistics-file "/var/named/data/named_mem_stats.txt"; 

         allow-query     { any;};
         allow-query-cache { any;};
};
 logging {
         channel default_debug {
                 file "data/named.run";
                 severity dynamic;};
};
 view localhost_resolver {
         match-clients      { any;};
         match-destinations { any;};
          recursion yes;
         include "/etc/named.zones";};# cp -p named.rfc1912.zones named.zones# vi named.zones
 zone luocs.com" IN {
         type master;
         file “luocs.com.zone";
         allow-update { none;};}; 

 zone "77.168.192.in-addr.arpa" IN {
         type master;
         file "77.168.192.local";
         allow-update { none;};
};
# cd /var/named/chroot/var/named
# cp -p named.zero luocs.com.zone
# cp -p named.local 77.168.192.local 
# vi luocs.com.zone
 $TTL    86400@               IN SOA  dns.luocs.com.      root.luocs.com.(42; serial (d. adams)3H; refresh
                                         15M;retry1W; expiry
                                         1D); minimum
         IN      NS      dns.luocs.com.
 scan   IN      A       192.168.77.195
 scan   IN      A       192.168.77.196
 scan   IN      A       192.168.77.197
# vi 77.168.192.local
$TTL    86400
@       IN      SOA     dns.luocs.com. root.luocs.com.(
1997022700;Serial
28800;Refresh
14400;Retry
3600000;Expire
86400);Minimum

        IN      NS      dns.luocs.com.
195     IN      PTR     scan.luocs.com.
196     IN      PTR     scan.luocs.com.
197     IN      PTR     scan.luocs.com.
# service named restart
# chkconfig named on 
nslookupdig检查,通过检查我们也可以判断DNS提供rr方式:
[root@rac1 ~]# nslookup scan.luocs.com
Server:192.168.77.145
Address:192.168.77.145#53

Name:	scan.luocs.com
Address:192.168.77.197
Name:	scan.luocs.com
Address:192.168.77.195
Name:	scan.luocs.com
Address:192.168.77.196

[root@rac1 ~]# nslookup scan.luocs.com

Server:192.168.77.145
Address:192.168.77.145#53
Name:	scan.luocs.com
Address:192.168.77.196

Name:	scan.luocs.com
Address:192.168.77.197

Name:	scan.luocs.com
Address:192.168.77.195
[root@rac1 ~]# nslookup scan.luocs.com
Server:192.168.77.145
Address:192.168.77.145#53

Name:	scan.luocs.com
Address:192.168.77.195
Name:	scan.luocs.com
Address:192.168.77.196
Name:	scan.luocs.com
Address:192.168.77.197

然后我们在安装GI的时候使用scan.luocs.com即可,当然要不选择Configure GNS。
– 如果有不知道我在说什么的朋友请尝试一遍Oracle 11g R2 RAC的安装。

GNS方式配置SCAN:

DNS配置部分
[root@oel1 ~]# rpm -ivh bind-9.3.6-4.P1.el5_4.2.x86_64.rpm 
[root@oel1 ~]# rpm -ivh bind-chroot-9.3.6-4.P1.el5_4.2.x86_64.rpm 
[root@oel1 ~]# rpm -ivh caching-nameserver-9.3.6-4.P1.el5_4.2.x86_64.rpm 
[root@oel1 ~]# cd /var/named/chroot/etc
[root@oel1 etc]# cp -p named.caching-nameserver.conf named.conf
[root@oel1 etc]# vi named.conf 
options {
        listen-on port 53{ any;};
        listen-on-v6 port 53{::1;};
        directory       "/var/named";dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";// Those options should be used carefully because they disable port// randomization// query-source    port 53;// query-source-v6 port 53;

        allow-query     { any;};
        allow-query-cache { any;};};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;};};
view localhost_resolver {
        match-clients      { any;};
        match-destinations { any;};
        recursion yes;
        include "/etc/named.zones";};# cp -p named.rfc1912.zones named.zones[root@oel1 etc]# vi named.zones 

zone "rac.com" IN {
        type master;
        file "rac.com.zone";
        allow-update { none;};};

zone "77.168.192.in-addr.arpa" IN {
        type master;
        file "77.168.192.local";
        allow-update { none;};};

[root@oel1 etc]# cd /var/named/chroot/var/named

# cp -p named.zero rac.com.zone# cp -p named.local 77.168.192.local

# vi rac.com.zone
$TTL    86400
$ORIGIN rac.com.@               IN SOA  dns.rac.com.      root.rac.com.(
42; serial (d. adams)
3H; refresh
                                        15M;retry1W; expiry
                                        1D); minimum
        IN      NS      dns.rac.com.
dns     IN      A       192.168.100.145
gns     IN      A       192.168.100.200
grid    IN      NS      gns
$ORIGIN host.rac.com.
@       IN      NS      gns.rac.com.
[root@oel1 named]# vi 100.168.192.local 
$TTL    86400
@       IN      SOA     dns.rac.com. root.rac.com.(
1997022700;Serial
28800;Refresh
14400;Retry
3600000;Expire
86400);Minimum

        IN      NS      dns.rac.com.
145     IN      PTR     dns.rac.com.
200       IN      PTR     gns.rac.com.
~
# service named restart
# chkconfig named on
测试
[root@oel1 named]# nslookup gns-server.rac.com

Server:127.0.0.1
Address:127.0.0.1#53

Name:   gns-server.rac.com
Address:192.168.77.95
[root@oel1 named]# nslookup 192.168.77.95
Server:127.0.0.1Address:127.0.0.1#53
95.77.168.192.in-addr.arpa      name = gns-server.rac.com.

DHCP配置部分
[root@oel1 ~]# yum install dhcp
[root@oel1 ~]# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
cp: overwrite `/etc/dhcpd.conf'? y
[root@oel1 ~]# vi /etc/dhcpd.conf

ddns-update-style interim;
ignore client-updates;

subnet 192.168.77.0 netmask 255.255.255.0 {

# --- default gateway
        option routers                  192.168.77.250;
        option subnet-mask              255.255.255.0;

        option nis-domain               "rac.com";
        option domain-name              "rac.com";
        option domain-name-servers      192.168.77.145;

        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.77.193 192.168.77.199;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
        #host ns {
        #       next-server marvin.redhat.com;
        #       hardware ethernet 12:34:56:78:AB:CD;
        #       fixed-address 207.175.42.254;
        #}
}

[root@oel1 ~]# service dhcpd start
[root@oel1 ~]# chkconfig dhcpd on

然后我们在安装GI的时候使用SCAN Name填写:rac-cluster-scan.gns-server.rac.com,选择Configure GNS,GNS Sub Domain填写gns-server.rac.com,GNS VIP Address填写192.168.77.95。其中SCAN Name的填写有讲究的,就是再不包含域名的情况下前面的字符不能超过15个,另外192.168.77.95就是GNS VIP。
至于上面的操作具体细节我就不深入说明了。

 

参考至:http://www.luocs.com/archives/281.html

如有错误,欢迎指正

邮箱:czmcj@163.com

分享到:
评论
1 楼 di1984HIT 2018-02-21  
xuexilee!!!

相关推荐

    ibus-table-chinese-erbi-1.4.6-3.el7.x64-86.rpm.tar.gz

    1、文件内容:ibus-table-chinese-erbi-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-erbi-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    基于微信小程序的新乡学院自习室预约系统.zip

    选择Java后台技术和MySQL数据库,在前台界面为提升用户体验,使用Jquery、Ajax、CSS等技术进行布局。 系统包括两类用户:学生、管理员。 学生用户只要实现了前台信息的查看,打开首页,查看网站介绍、自习室信息、在线留言、轮播图信息公告等,通过点击首页的菜单跳转到对应的功能页面菜单,包括网站首页、自习室信息、注册登录、个人中心、后台登录。 学生用户通过账户账号登录,登录后具有所有的操作权限,如果没有登录,不能在线预约。学生用户退出系统将注销个人的登录信息。 管理员通过后台的登录页面,选择管理员权限后进行登录,管理员的权限包括轮播公告管理、老师学生信息管理和信息审核管理,管理员管理后点击退出,注销登录信息。 管理员用户具有在线交流的管理,自习室信息管理、自习室预约管理。 在线交流是对前台用户留言内容进行管理,删除留言信息,查看留言信息。

    面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 面向基层就业个性化大学生服务平台(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 面向基层就业个性化大学生服务平台中的管理员角色主要负责了如下功能操作。 (1)职业分类管理功能需求:对职业进行划分分类管理等。 (2)用户管理功能需求:对用户信息进行维护管理等。 (3)职业信息管理功能需求:对职业信息进行发布等。 (4)问卷信息管理功能需求:可以发布学生的问卷调查操作。 (5)个性化测试管理功能需求:可以发布个性化测试试题。 (6)试题管理功能需求:对测试试题进行增删改查操作。 (7)社区交流管理功能需求:对用户的交流论坛信息进行维护管理。 面向基层就业个性化大学生服务平台中的用户角色主要负责了如下功能操作。 (1)注册登录功能需求:没有账号的用户,可以输入账号,密码,昵称,邮箱等信息进行注册操作,注册后可以输入账号和密码进行登录。 (2)职业信息功能需求:用户可以对职业信息进行查看。 (3)问卷信息功能需求:可以在线进行问卷调查答卷操作。 (4)社区交流功能需求:可以在线进行社区交流。 (5)个性化测试功能需求:可以在线进行个性化测试。 (6)公告资讯功能需求:可以查看浏览系统发布的公告资讯信息。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    三菱Fx3u程序:自动检测包装机电机控制模板,PLC脉冲与伺服定位,手自动切换功能,三菱Fx3u程序:自动检测包装机电机控制模板-涵盖伺服定位与手自动切换功能,三菱Fx3u程序,自动检测包装机 该

    三菱Fx3u程序:自动检测包装机电机控制模板,PLC脉冲与伺服定位,手自动切换功能,三菱Fx3u程序:自动检测包装机电机控制模板——涵盖伺服定位与手自动切换功能,三菱Fx3u程序,自动检测包装机。 该程序六个电机,plc本体脉冲控制3个轴,3个1pg控制。 程序内包括伺服定位,手自动切,功能快的使用,可作为模板程序,很适合新手。 ,三菱Fx3u程序; 自动检测包装机; 六个电机; PLC脉冲控制; 伺服定位; 手自动切换; 功能快捷键; 模板程序。,三菱Fx3u PLC控制下的自动包装机程序:六电机伺服定位与手自动切换模板程序

    基于多尺度集成极限学习机回归 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    计及信息间隙决策与多能转换的综合能源系统优化调度模型:实现碳经济最大化与源荷不确定性考量,基于信息间隙决策与多能转换的综合能源系统优化调度模型:源荷不确定性下的高效碳经济调度策略,计及信息间隙决策及多

    计及信息间隙决策与多能转换的综合能源系统优化调度模型:实现碳经济最大化与源荷不确定性考量,基于信息间隙决策与多能转换的综合能源系统优化调度模型:源荷不确定性下的高效碳经济调度策略,计及信息间隙决策及多能转的综合能源系统优化调度 本代码构建了含风电、光伏、光热发电系统、燃气轮机、燃气锅炉、电锅炉、储气、储电、储碳、碳捕集装置的综合能源系统优化调度模型,并考虑P2G装置与碳捕集装置联合运行,从而实现碳经济的最大化,最重要的是本文引入了信息间隙决策理论考虑了源荷的不确定性(本代码的重点)与店铺的47代码形成鲜明的对比,注意擦亮眼睛,认准原创,该代码非常适合修改创新,,提供相关的模型资料 ,计及信息间隙决策; 综合能源系统; 优化调度; 多能转换; 碳经济最大化; 风电; 光伏; 燃气轮机; 储气; 储电; 储碳; 碳捕集装置; P2G装置联合运行; 模型资料,综合能源系统优化调度模型:基于信息间隙决策和多能转换的原创方案

    IPG QCW激光模块电源驱动电路设计与实现:包含安全回路、紧急放电回路及光纤互锁功能的多版本原理图解析,IPG QCW激光模块电源驱动电路设计与实现:含安全回路、紧急放电及光纤互锁等多重保护功能的原

    IPG QCW激光模块电源驱动电路设计与实现:包含安全回路、紧急放电回路及光纤互锁功能的多版本原理图解析,IPG QCW激光模块电源驱动电路设计与实现:含安全回路、紧急放电及光纤互锁等多重保护功能的原理图解析,IPG QCW激光模块电源驱动电路, 包含安全回路,紧急放电回路,光纤互锁回路等, 元件参数请根据实际设计适当调整,此电路仅供参考,不提供pcb文件 原理图提供PDF和KICAD两个版本。 ,IPG激光模块; QCW激光电源驱动; 安全回路; 紧急放电回路; 光纤互锁回路; 原理图PDF和KICAD版本。,IPG激光模块电源驱动电路图解:含安全与紧急放电回路

    基于LSSVM的短期电力负荷预测模型及其性能评估:结果揭露精确度与误差分析,LSSVM在短期电力负荷预测中的结果分析:基于均方根误差、平均绝对误差及平均相对百分误差的评估 ,LSSVM最小二乘支持向量

    基于LSSVM的短期电力负荷预测模型及其性能评估:结果揭露精确度与误差分析,LSSVM在短期电力负荷预测中的结果分析:基于均方根误差、平均绝对误差及平均相对百分误差的评估。,LSSVM最小二乘支持向量机做短期电力负荷预测。 结果分析 均方根误差(RMSE):0.79172 平均绝对误差(MAE):0.4871 平均相对百分误差(MAPE):13.079% ,LSSVM(最小二乘支持向量机);短期电力负荷预测;均方根误差(RMSE);平均绝对误差(MAE);平均相对百分误差(MAPE),LSSVM在电力负荷短期预测中的应用及性能分析

    libmtp-examples-1.1.14-1.el7.x64-86.rpm.tar.gz

    1、文件内容:libmtp-examples-1.1.14-1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/libmtp-examples-1.1.14-1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    《基于 Transformer 的光学字符识别模型》(毕业设计,源码,教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是均来自个人的课程设计、毕业设计或者具体项目,代码都测试ok,都是运行成功后才上传资源,答辩评审绝对信服的,拿来就能用。放心下载使用!源码、说明、论文、数据集一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 4、如有侵权请私信博主,感谢支持

    2023-04-06-项目笔记 - 第四百一十六阶段 - 4.4.2.414全局变量的作用域-414 -2025.02.21

    2023-04-06-项目笔记-第四百一十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.414局变量的作用域_414- 2025-02-21

    MINIST数据集和春风机器学习框架

    MINIST数据集和春风机器学习框架

    ibus-table-chinese-wu-1.4.6-3.el7.x64-86.rpm.tar.gz

    1、文件内容:ibus-table-chinese-wu-1.4.6-3.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/ibus-table-chinese-wu-1.4.6-3.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    宿舍管理系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计

    宿舍管理系统(源码+数据库+论文+ppt)java开发springboot框架javaweb,可做计算机毕业设计或课程设计 【功能需求】 系统拥有管理员和学生两个角色,主要具备系统首页、个人中心、学生管理、宿舍信息管理、宿舍分配管理、水电费管理、进入宿舍管理、出入宿舍管理、维修信息管理、卫生信息管理、考勤信息管理、留言板、交流论坛、系统管理等功能模块。 【环境需要】 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.数据库:MySql 5.7/8.0等版本均可; 【购买须知】 本源码项目经过严格的调试,项目已确保无误,可直接用于课程实训或毕业设计提交。里面都有配套的运行环境软件,讲解视频,部署视频教程,一应俱全,可以自己按照教程导入运行。附有论文参考,使学习者能够快速掌握系统设计和实现的核心技术。

    基于智能算法的无人机路径规划研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    人凤飞飞凤飞飞是粉色丰富

    人凤飞飞凤飞飞是粉色丰富

    2024蓝桥杯嵌入式学习资料

    2024蓝桥杯嵌入式学习资料

    image_download_1740129191509.jpg

    image_download_1740129191509.jpg

    基于Multisim仿真的带优先病房呼叫系统设计(仿真图)

    基于Multisim仿真的带优先病房呼叫系统设计(仿真图) 设计一个病房呼叫系统。 功能 (1)当有病人紧急呼叫时,产生声,光提示,并显示病人的编号; (2)根据病人的病情设计优先级别,当有多人呼叫时,病情严重者优先; (3)医护人员处理完当前最高级别的呼叫后,系统按优先级别显示其他呼叫病人的病号。

    基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能切换与全方位保护方案,基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能控制与全方位保护方案,逆变器光伏逆变器,3

    基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能切换与全方位保护方案,基于STM32F103的3.6kW全桥逆变器资料:并网充电放电、智能控制与全方位保护方案,逆变器光伏逆变器,3.6kw储能逆变器全套资料 STM32储能逆变器 BOOST 全桥 基于STM32F103设计,具有并网充电、放电;并网离网自动切;485通讯,在线升级;风扇智能控制,提供过流、过压、短路、过温等全方位保护。 基于arm的方案区别于dsp。 有PCB、原理图及代码ad文件。 ,逆变器; 储能逆变器; STM32F103; 3.6kw; 485通讯; 全方位保护; 智能控制; 方案区别; PCB文件; 原理图文件; ad文件。,基于STM32F103的3.6kw储能逆变器:全方位保护与智能控制

Global site tag (gtag.js) - Google Analytics