SCAN VIP 就是在集群中选取三个node,在pubilc ip上面起了三个VIP,这三个VIP在DNS中对应同一个名字。
scan VIP listener就是在这三个VIP上分别起了一个监听。RAC中所有的SID注册到这些监听中。这样任一个监听有问题不影响连接,这个监听可以实现负载均衡将连接导向不忙的SID。
SCAN VIP listener 和local listener同时存在,客户端配置后都可以连接。在数据库中对应local 和remote listener参数,这样这个SID可以向这两个listener注册。
---介绍1
11gR2 集群(CRS/GRID)新功能—— SCAN(Single Client Access Name)
本文简单的介绍一下11gR2集群(CRS/GRID)新功能SCAN(Single Client Access Name),希望对于刚刚接触11gR2的朋友有一些帮助。
在介绍SCAN之前,先简单的回顾一下oracle关于IP地址的使用,在9i RAC时,oracle没有自己的clusterware,主要依靠第三方的集群软件(如IBM HACMP等等),客户端主要是通过public IP来访问数据库(如果第三方集群软件提供服动IP的话,也可以通过这个服动IP来访问数据库),当某一个节点已经出现故障无法对外提供服务时,如果客户端继续请求连接这个节点的public IP,那么连接请求会长时间没有返回,最后要等到TCP-IP timeout (TCP-IP(主要是IP协议超时太长,是物理超时)超时时间一般为10分钟,不同OS这个值不同)才会返回一个超时信息,这对于实时性要求较高的应用来说是致命的问题,很多DBA都经历过这样的问题,从技术层面上来说,这是一个网络层的问题,任何应用都要等待网络层返回超时信息。为了解决这个问题,从oracle 10g
RAC开始,引入了一个新的功能叫VIP,这个功能类似于第三方集群软件的浮动IP,简单的说就是当public 网卡或者节点出现问题,VIP可以快速的failover到另外的节点,如果客户端的连接请求被分配到这个VIP时,客户端连接请求马上就会遇到错误,因此会快速的跳过这个‘有问题的’VIP,而重新分配另一个VIP(这个功能是客户端连接时的failover),最终连接到数据库,这些对于应用来说是透明的,基本感觉不到连接的延时。
SCAN简介
-------------------
从11gR2 Grid Infrastructure (CRS/clusterware)开始,引入了一个新功能叫SCAN (Single Client Access Name),SCAN是一个域名,可以解析至少1个IP,最多解析3个SCAN IP,客户端可以通过这个SCAN 名字来访问数据库,SCAN的好处就是当集群中新增加了节点或者删除了节点,不需要额外维护客户端。在11gR2上,客户端仍然可以继续使用原有的 VIP,但是oracle推荐使用SCAN。
SCAN ip必须与public ip和VIP在一个子网,同时oracle推荐使用DNS或者GNS(11gR2
新功能)来解析SCAN,如果没有使用DNS或者GNS的话,可以使用hosts文件,但是这个办法不是oracle推荐的,因为这个方法只能定义一个 SCAN IP。
GRID集群中有2类资源是与SCAN有关的,一类是SCAN IP,另一类是SCAN Listener,SCAN IP和SCAN Listener是成对出现的,也就是说如果有3个SCAN IP,就会同时有3个SCAN Listene。SCAN IP就是DNS解析的IP地址,SCAN Listener的作用是接受客户端的连接请求。查看SCAN IP信息和SCAN Listener信息的方法在下文介绍。
数据库的初始化参数remote_listener默认被设置为SCAN Listener,目的是为了让SCAN Listener可以监听所有的实例,记录所有实例的压力,以便于按照负载均衡的方式来转发客户端的请求。
客户端如何通过SCAN访问数据库
------------------------------------------------------
客户端发出连接数据库的请求,DNS将SCAN解析出对应的3个SCAN IP并返回给客户端,
客户端随机的选择其中一个SCAN IP地址,然后客户端通过这个SCAN IP访问对应的节点,当对应节点的SCAN Listener接受到请求后,SCAN Listener会选择压力最小的数据库实例,然后压力最小的数据库实例对应的local listener的地址将会返回给客户端,最终这个local listener为客户端请求建立与数据库的连接。
客户端tnsnames.ora的配置
-------------------------------------------
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-cluster-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
) )
客户端的连接方式:
$ sqlplsu <username>/<password>@RAC
EZconnet的连接仍然适用于SCAN
$ sqlplus <username>/<password>@rac-cluster-scan:1521/rac
常用命令
-----------------------
1. 查看SCAN配置信息
$ srvctl config scan
SCAN name: rac-cluster-scan, Network: 1/192.168.1.0/255.255.255.0/
SCAN VIP name: scan1, IP: /rac-cluster-scan/192.168.1.12
SCAN VIP name: scan2, IP: /rac-cluster-scan/192.168.1.13
SCAN VIP name: scan3, IP: /rac-cluster-scan/192.168.1.14
2. 查看SCAN Listener配置信息
$ 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
3. 查看SCAN的状态
$ srvctl status scan
4. 查看SCAN listener的状态
$ srvctl status scan_listener
2 修改端口
修改SCAN监听的端口
将SCAN监听的端口修改为3521,本地监听的端口不变,依然为1521:
[root@web1 ~]# srvctl modify scan_listener -p 3521
修改后查看监听状态:
[grid@web2 ~]$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 06-5月 -2016 01:32:52
Copyright (c) 1991, 2011, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.15)(PORT=1521)))
服务摘要..
服务 "prod" 包含 2 个实例。
[grid@web2 ~]$
发现SCAN监听端口号还是1521,是因为没有重启监听原因,接下来重启监听:
[root@web1 ~]# srvctl stop scan_listener
[root@web1 ~]# srvctl start scan_listener
更改确认:
[root@web1 ~]# srvctl config scan_listener
SCAN 监听程序 LISTENER_SCAN1 已存在。端口: TCP:3521
[root@web1 ~]#
重启SCAN监听后再次查看状态:
[grid@web2 ~]$ lsnrctl status LISTENER_SCAN1
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.15)(PORT=3521)))
监听程序不支持服务
命令执行成功
[grid@web2 ~]$
发现端口已经修改为3521,只是监听器上没有实例被注册进去,此时也无法通过192.168.1.15:3521/prod这种远程方式访问数据库,下面通过修改实例的remote_listener参数让实例向SCAN监听器进行注册:
[root@web1 ~]# su - oracle
[oracle@web1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期五 5月 6 01:20:17 2016
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> show parameter remote_listener
NAME TYPE VALUE
------------------------------------ --------------------------------- ------------------------------
remote_listener string web-cluster-scan:1521
SQL>
SQL> alter system set remote_listener='web-cluster-scan:3521';
系统已更改。
SQL>
执行完成后,查看SCAN监听器,实例已经注册进去:
[grid@web2 ~]$ lsnrctl status LISTENER_SCAN1
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 06-5月 -2016 01:45:37
Copyright (c) 1991, 2011, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
LISTENER 的 STATUS
------------------------
别名 LISTENER_SCAN1
版本 TNSLSNR for Linux: Version 11.2.0.3.0 - Production
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.15)(PORT=3521)))
服务摘要..
服务 "prod" 包含 2 个实例。
实例 "prod1", 状态 READY, 包含此服务的 1 个处理程序...
下面通过远程访问,可以访问成功:
C:\Users\Bill>sqlplus sys/oracle@192.168.1.15:3521/prod as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期五 5月 6 01:47:27 2016
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL>
下面4个ip地址为public ip或vip,他们均无法访问,因为它们都由本地监听器进行监听,且端口仍为1521,还未改为3521:
C:\Users\Bill>sqlplus sys/oracle@192.168.1.11:3521/prod as sysdba
C:\Users\Bill>sqlplus sys/oracle@192.168.1.12:3521/prod as sysdba
上面均报如下错误:
ORA-12541: TNS: 无监听程序
修改本地监听的端口
获取当前监听器的配置信息:
[root@web1 ~]# srvctl config listener
端点: TCP:1521
[root@web1 ~]#
下面修改1节点的本地监听端口为3521:
[root@web1 ~]# srvctl modify listener -l LISTENER -p "TCP:3521"
修改后查看状态:
[grid@web1 ~]$ lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s). 这里本地的监听中只是一个sid
[grid@web1 ~]$
还没有修改过来,需要重启监听:
[root@web1 ~]# srvctl stop listener
[root@web1 ~]# srvctl start listener
[root@web1 ~]#
重启后再查看状态:
[grid@web1 ~]$ lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=3521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=3521)))
[grid@web1 ~]$
端口已经修改为3521,但实例没有被注册进去,下面修改参数local_listener让实例的PMON进程将实例注册到监听器:
[oracle@web1 ~]$ sqlplus / as sysdba
SQL> alter system set local_listener='(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.13)(PORT=3521))))' sid='prod1';
系统已更改。
SQL>
修改完成后马上查看监听的状态:
[grid@web1 ~]$ lsnrctl status
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.11)(PORT=3521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.13)(PORT=3521)))
Services Summary...
Service "prod" has 1 instance(s).
I
总结
1.如果只修改SCAN监听器的端口而没修改本地监听器的端口,则SCAN IP可以使用修改后的端口访问数据库,而PUBLIC IP和VIP是无法使用新端口访问数据库的。
2.如果SCAN监听器和本地监听器的端口都修改了,则所有IP地址都可以使用新端口进行访问数据库。
Reference
How to Modify SCAN Setting or SCAN Listener Port after Installation (文档 ID 972500.1)
-----------------------------------------19c
19C rac修改监听端口号
1.查看当前的监听配置
在其中一个节点上执行,我这里是在节点1上执行
[grid@rac01 ~]$ srvctl config listener -l listener
Name: LISTENER
Type: Database Listener
Network: 1, Owner: grid
Home: <CRS home>
End points: TCP:1521
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
2.修改端口
仅在其中一个节点上执行,我这里是在节点1上执行
[grid@rac01 admin]$ srvctl modify listener -l LISTENER -p "TCP:1522"
3.修改scan
仅在其中一个节点上执行,我这里是在节点1上执行
[grid@rac01 admin]$ srvctl modify scan_listener -p 1522
4.重启动监听,(不需要重启,数据库自动会应用新的端口)
仅在节点1上执行
[grid@rac01 admin]$ srvctl stop listener -l listener
[grid@rac01 admin]$ srvctl stop scan_listener
[grid@rac01 admin]$ srvctl start listener -l listener
[grid@rac01 admin]$ srvctl start scan_listener
5.检查状态
在scan所在的节点执行
[grid@rac02 ~]$ lsnrctl status LISTENER_SCAN1
节点1和节点2都执行
[grid@rac02 ~]$ lsnrctl status listener
6.修改asm配置文件 上文没有修改啊。11g 可能不是asm--自动修改 去看看而已
系统自动检查,自动修改的
节点1:
SQL> connect / as sysasm
Connected.
SQL> set linesize 1000;
SQL> show parameters local_listener
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.201)(PORT=1522))
节点2:
SQL> show parameters local_listener;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.202)(PORT=1522))
7.安装了数据库的需要修改数据库参数,(不需要修改,数据库自动会应用新的端口)
登录数据库实例,仅在其中一个实例执行
alter system set remote_listener='rac-scan:1522' scope=both;
修改LOCAL_LISTENER仅仅在一个 各自主机上执行
alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.201)(PORT = 1522))' scope=both sid='slnngk1';
alter system set local_listener = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.202)(PORT = 1522))' scope=both sid='slnngk2';
--------------------------------------------------修改asm网络端口-----sam单独修改?、 ------------
1.查看
在其中一个节点上执行,我这里是在节点1上执行
[grid@rac01 admin]$ srvctl config listener -listener ASMNET1LSNR_ASM
Name: ASMNET1LSNR_ASM
Type: ASM Listener
Owner: grid
Subnet: 10.10.10.0
Home: <CRS home>
End points: TCP:1525
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
2.修改端口
grid用户在其中一个节点上执行,我这里是在节点1上执行
srvctl modify listener -l ASMNET1LSNR_ASM -endpoints "TCP:1526"
修改完成后系统自动修改端口号,不需要下面的重启步骤
[grid@rac01 admin]$ ss -nlp|grep 1526
tcp LISTEN 0 128 10.10.10.1:1526 *:* users:(("tnslsnr",pid=32245,fd=15))
[grid@rac02 ~]$ ss -nlp|grep 1526
tcp LISTEN 0 128 10.10.10.2:1526 *:* users:(("tnslsnr",pid=8106,fd=15))
3.重启动(不需要)
srvctl stop listener -l ASMNET1LSNR_ASM -force (只能停掉一个节点)
srvctl start listener -l ASMNET1LSNR_ASM
3.
一、重建scan监听
(1)查看集群各资源状态
crsctl stat res -t
(2)停止现有scan监听
srvctl stop scan_listener
(3)移除集群中scan监听
srvctl remove scan_listener
(4)添加新的scan监听
srvctl add scan_listener -l LISTENER
(5)查看集群监听是否添加成功
crsctl stat res –t
(6)开启scan监听
srvctl start scan_listener
(7)数据库实例注册到scan监听
alter system set remote_listener=ht-scan:1521;
(8) 查看scan监听及状态
[+ASM1]@ht01[/home/grid]$srvctl status scan_listener
SCAN 监听程序 LISTENER_SCAN1 已启用
SCAN 监听程序 LISTENER_SCAN1 正在节点 ht01 上运行
lsnrctl status LISTENER_SCAN1
二、修改scan名称
查看scan
[+ASM1]@ht01[/home/grid]$srvctl config scan
SCAN 名称: ht-scan, 网络: 1
子网 IPv4: 192.168.20.0/255.255.255.0/enp0s8, static
子网 IPv6:
SCAN 1 IPv4 VIP: 192.168.20.234
SCAN VIP 已启用。
关闭节点2集群
/u01/app/grid/bin/crsctl stop crs -f
root 在节点1上执行
/u01/app/grid/bin/srvctl modify scan -scanname ht01-scan
重启节点1上集群
[+ASM1]@ht01[/home/grid]$srvctl config scan
SCAN 名称: ht01-scan, 网络: 1
子网 IPv4: 192.168.20.0/255.255.255.0/enp0s8, static
子网 IPv6:
SCAN 1 IPv4 VIP: 192.168.20.234
SCAN VIP 已启用。
添加scan监听
添加scan root用户执行修改/etc/hosts
192.168.20.234 ht01-scan
192.168.20.235 ht01-scan
192.168.20.236 ht01-scan
grid用户执行
srvctl stop scan_listener
srvctl stop scan
srvctl status scan_listener
root用户执行
/u01/app/grid/bin/srvctl modify scan -n ht01-scan
/u01/app/grid/bin/srvctl modify scan_listener -u remote中不用改了嘛
grid用户执行
srvctl start scan
srvctl start scan_listener
srvctl status scan_listener
4.----------------------
oracle rac 添加SCAN IP
因现场应用需要,需要对新配置的oracle RAC环境增配2个scanIP地址,10.138.129.106以及10.138.129.107。
配置前情况:
[grid@db1 ~]$ srvctl config scan ----查看scan的配置信息
SCAN name: scan-ip, Network: 1/10.138.129.0/255.255.255.0/eth2
SCAN VIP name: scan1, IP: /scan-ip/10.138.129.105
[grid@db1 ~]$ srvctl status scan ----查看scan的状态以及scan ip所处节点
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node db1
[grid@db1 ~]$ srvctl config scan_listener ----查看scan listener
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
默认情况下配置RAC 只有1个scan IP,1个 scan listener。
进入主题,开始增配scan ip
1、修改rac所有节点的/etc/hosts信息
[grid@db1 ~]$ cat /etc/hosts
127.0.0.1 localhost
10.138.129.101 db1
10.138.129.102 db2
10.138.129.103 db1-vip
10.138.129.104 db2-vip
10.138.129.105 scan-ip
10.138.129.106 scan-ip ---------新增的scanIP
10.138.129.107 scan-ip ---------新增的scanIP
192.168.20.1 db1-priv
192.168.20.2 db2-priv
2、停止scan 监听,注意先听监听才能停scan
[grid@db1 ~]$ srvctl stop scan_listener
[grid@db1 ~]$ srvctl stop scan
[grid@db1 ~]$srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is not running
3、配置scan,注意需要用root权限执行
[root@db1 bin]# pwd
/u01/app/11.2.0/grid/bin
[root@db1 bin]# ./srvctl modify scan -n scan-ip 这时hostname中的 -----修改scan信息,-n 后面接 hosts中的san ip 网络名
[root@db1 bin]# ./srvctl modify scan_listener -u ------添加scanIP的监听,若不执行该命令,将只有一个listener_scan1监听,执行后将根据scan ip数自动增加listener_scan2,listener_scan3.
4、启动scan
[grid@db1 ~]$ srvctl start scan
[grid@db1 ~]$ srvctl start scan_listener
[grid@db1 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node db1
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node db2
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node db1
[grid@db1 ~]$ srvctl config scan
SCAN name: scan-ip, Network: 1/10.138.129.0/255.255.255.0/eth2
SCAN VIP name: scan1, IP: /scan-ip/10.138.129.105
SCAN VIP name: scan2, IP: /scan-ip/10.138.129.106
SCAN VIP name: scan3, IP: /scan-ip/10.138.129.107
[grid@db1 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node db1
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node db2
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node db1
5.--------
一、SCAN 概念
SCAN(Single Client Access Name)是 Oracle从11g R2开始推出的,客户端可以通过 SCAN 特性负载均衡地连接到 RAC数据库
SCAN 最明显的优点就是,当集群中新增加了节点或者删除了节点,不需要额外维护客户端
查看 SCAN 的配置信息的方式如下:
-
[grid@rac2 ~]$ srvctl config scan
-
SCAN name: rac-scan, Network: 1/192.168.56.0/255.255.255.0/bond0
-
SCAN VIP name: scan1, IP: /rac-scan/192.168.56.90
查看 SCAN VIP 的状态:可以发现 SCAN VIP 运行在节点 rac2
-
[grid@rac2 ~]$ srvctl status scan
-
SCAN VIP scan1 is enabled
-
SCAN VIP scan1 is running on node rac2
二、IP 概念
RAC 中有很多种 IP,每种 IP 的作用分别是什么呢?
Public IP:
- 这是网卡上配置的真实IP地址,我们称为公共IP,这个IP的存在关系到 VIP 能不能正确漂在其所在网卡上
- 注意,PUBLIC IP是不提供给客户端去连接配置的,这并不是说通过 PUBLIC IP 无法连接实例,而是当节点服务器宕机时,所有向它请求连接的客户端都会有等待现象并且最后得到超时信息
Private IP:
- 称为私网 IP(私有IP),它是用于心跳同步的,也就是保证两台服务器数据同步
- Oracle另一个高可用性连接特性(HAIP)
- 其实 Cache Fusion 会消耗节点服务器很大的私网资源,另外,私网间无法通信还会引起 brain split(脑裂),以前为解决这种问题,我们可以采用网卡 bonding 技术,而 Oracle 在 11g R2 的时候通过 HAIP 技术来实现
- HAIP(Highly Available Virtual IP)用于节点间的私网通信,支持同时使用多个网络连接来满足网卡间的负载均衡,并且还提高了Cache Fusion 资源通信能力
Virtual IP:
- RAC 的每个节点都需要有一个虚拟IP,这就是VIP
- VIP 会绑定到节点的 public 网卡上,需要和 PUBLIC IP同一个子网,它们是由 GI 的 Clusterware 来管理的
- VIP 在其节点服务器发生故障的时候会自动漂移到另外正常的节点服务器上,如果 RAC 是多节点运行的,那具体漂移到哪个活动的节点将由Clusterware 决定
- 等故障节点恢复正常,漂移的 VIP 也回到此节点上,继续提供服务
三、监听概念
下面再解释一下 RAC 中监听的概念
LOCAL LISTENER:
- 本地监听,RAC 的每个节点上都会有独立的本地监听,它会监听该节点的 PUBLIC IP和VIP
- 每个节点的实例在启动的时候向本地监听进行注册,当 VIP 或者PUBLIC IP (这种情况比较少见)有连接请求的时候,本地监听就接受处理并和本地实例建立连接。如果某个节点故障,其上面的VIP会进行漂移,但本地监听并不会产生漂移
SCAN LISTENER:
- SCAN 监听,它是实现 SCAN 负载均衡的原理所在
- SCAN 监听跟着 SCAN VIP 随机分配到节点服务器上,如果某个节点发生故障,运行在此节点上的 SCAN VIP 会进行漂移,这时候 SCAN 监听也跟着漂移到正常的节点上,继续为 SCAN VIP 监听连接请求,当 PMON 进程下次动态更新实例信息到该 SCAN 监听后,它又重新接受客户端的连接
查看 SCAN 监听的配置和状态:
-
[grid@rac2 ~]$ srvctl config scan_listener
-
SCAN Listener LISTENER_SCAN1 exists. Port: TCP:1521
-
[grid@rac2 ~]$ srvctl status scan_listener
-
SCAN Listener LISTENER_SCAN1 is enabled
-
SCAN listener LISTENER_SCAN1 is running on node rac2
1、local_listener 参数
该参数控制着本地监听的注册,通过本地监听的数据库连接请求只会连接到本地节点的实例上
数据库中,该参数设置为向本地 VIP 地址进行注册:
-
SQL> show parameter local
-
NAME TYPE VALUE
-
------------------------------------ ----------- ------------------------------
-
local_listener string (ADDRESS=(PROTOCOL=TCP)(HOST=
-
192.168.56.80)(PORT=1521))
查看本地监听的状态,可以发现本地监听在 Public IP 和 VIP 上监听,只监听本地实例:
-
[grid@rac2 ~]$ lsnrctl status listener
-
Listening Endpoints Summary...
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.20)(PORT=1521)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.80)(PORT=1521)))
-
Services Summary...
-
Service "+ASM" has 1 instance(s).
-
Instance "+ASM2", status READY, has 1 handler(s) for this service...
-
Service "rac" has 1 instance(s).
-
Instance "rac2", status READY, has 1 handler(s) for this service...
-
Service "racXDB" has 1 instance(s).
-
Instance "rac2", status READY, has 1 handler(s) for this service...
2、remote_listener 参数
该参数控制 SCAN 监听的注册,每个节点上都设置,这样的话,每个节点的 PMON 都会向 SCAN 监听注册实例信息,所以 SCAN监听能够负载均衡地分发连接请求到节点本地监听上,也就是连接到其本地节点实例上
示例:
-
SQL> show parameter remote_listener
-
NAME TYPE VALUE
-
------------------------------------ ----------- ------------------------------
-
remote_listener string rac-scan:1521
查看 SCAN 监听的状态,可以发现它监听了所有实例:
-
[grid@rac2 ~]$ lsnrctl status listener_scan1
-
Listening Endpoints Summary...
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.90)(PORT=1521)))
-
Services Summary...
-
Service "rac" has 2 instance(s).
-
Instance "rac1", status READY, has 1 handler(s) for this service...
-
Instance "rac2", status READY, has 1 handler(s) for this service...
-
Service "racXDB" has 2 instance(s).
-
Instance "rac1", status READY, has 1 handler(s) for this service...
-
Instance "rac2", status READY, has 1 handler(s) for this service...
3、修改 remote_listener 参数
通过 remote_listener
的修改,让 SCAN 以及所有节点的本地监听都可以监听到所有数据库实例
第一步,在节点 rac1 的 tnsnames.ora
文件中配置 tnsnames,使该节点可以被 rac2 的 listener 监听到:、
----正常情况本地的不用注册远程的sid,改了这里才有的,不一定有必要?
-
[oracle@rac1 admin]$ pwd
-
/u01/app/oracle/product/11.2.0/db_1/network/admin
-
[oracle@rac1 admin]$ vim tnsnames.ora
-
RAC =
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
-
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
-
(LOAD_BALANCE = yes)
-
(CONNECT_DATA =
-
(SERVER = DEDICATED)
-
(SERVICE_NAME = rac)
-
)
-
)
在节点 rac2 的 tnsnames.ora
文件中配置 tnsnames,使该节点可以被 rac1 的 listener 监听到:
-
RAC =
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
-
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
-
(LOAD_BALANCE = yes)
-
(CONNECT_DATA =
-
(SERVER = DEDICATED)
-
(SERVICE_NAME = rac)
-
)
-
)
第二步,修改 remote_listener
参数(在其中一个节点操作即可):
-
SQL> alter system set remote_listener=rac;
-
System altered.
第三步,查看 LISTENER 监听状态,可以监控到所有的数据库实例
-
[grid@rac1 admin]$ lsnrctl status ---本地的
-
Listening Endpoints Summary...
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.10)(PORT=1521)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.60)(PORT=1521)))
-
Services Summary...
-
Service "+ASM" has 1 instance(s).
-
Instance "+ASM1", status READY, has 1 handler(s) for this service...
-
Service "rac" has 2 instance(s).
-
Instance "rac1", status READY, has 1 handler(s) for this service...
-
Instance "rac2", status READY, has 1 handler(s) for this service...
-
Service "racXDB" has 2 instance(s).
-
Instance "rac1", status READY, has 1 handler(s) for this service...
-
Instance "rac2", status READY, has 1 handler(s) for this service...
第四步,查看 SCAN 监听状态,可以监控到所有的数据库实例(需要先查看 SCAN 监听在哪个节点)
-
[grid@rac1 ~]$ lsnrctl status listener_scan1 scan 的
-
Listening Endpoints Summary...
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
-
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.56.90)(PORT=1521)))
-
Services Summary...
-
Service "rac" has 2 instance(s).
7.。。。。。。。。。。。。。。。。。。
RAC重建scan监听
原创 Oracle 作者:dbLjy2015 时间:2016-10-24 10:50:42 1810 0
重建scan监听命令
(1)查看集群各资源状态
crsctl stat res -t
(2)停止现有scan监听
srvctl stop scan_listener
(3)移除集群中scan监听
srvctl remove scan_listener
(4)添加新的scan监听
srvctl add scan_listener -l LISTENER
(5)查看集群监听是否添加成功
crsctl stat res –t
(6)开启scan监听
srvctl start scan_listener
1、查看集群中监听的状态
[root@vast1 ~]# su - grid
[grid@vast1 ~]$ crsctl stat res -t
------------------------------------------- -------------------------
2、停掉现有scan监听
[grid@vast1 ~]$ srvctl stop scan_listener
[grid@vast1 ~]$ crsctl stat res -t
-------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
3、分别查看三个scan_listener状态,均为关闭
[grid@vast1 ~]$ lsnrctl status listener_scan1
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 24-OCT-2016 08:18:06
C
4、移除集群中scan监听 查看集群状态中scan监听已经消失。
[grid@vast1 ~]$ srvctl remove scan_listener
Remove scan listener? (y/[n]) y
[grid@vast1 ~]$ crsctl stat res -t
-------------------------------------------------------------------------------
5.添加scan监听,集群会根据/etc/hosts文件中的scanIP来创建scan监听
[grid@vast1 ~]$ srvctl add scan_listener -l LISTENER
------根据上文 是不是少了两个命令,自动生成三个?
[grid@vast1 ~]$ crsctl stat res -t
6、开启scan监听
[grid@vast1 ~]$ srvctl start scan_listener
[grid@vast1 ~]$ crsctl stat res -t
-------------------------------------------------------------------------------
7分别查看scan监听状态
[grid@vast1 ~]$ lsnrctl status listener_scan1
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 24-OCT-2016 08:19:11
[grid@vast1 ~]$ lsnrctl status listener_scan3
The listener supports no services
The command completed successfully
这是发现scan_listener中还是没有数据库的信息,不必担心,等一会儿到周期,数据库就会将信息动态推送给scan_listener(大概1分钟左右)。
如果时间太久,还是没有信息则尝试手动推送一下。命令如下
[root@vast1 ~]# su - oracle
[oracle@vast1 ~]$ sqlplus / as sysdba;
SYS@rac1> alter system register;
System altered.
7--------------------------oracle 11g Rac 修改 “VIP”
总体思路
1、停止两节点的监听及vip资源
2、修改host对应的vip
3、修改ocr注册信息
4、启动两节点的监听及vip资源
5、修改两节点LOCAL_LISTENER参数,手工注册监听
查看vip详细信息及资源状态
srvctl status vip -n tbrac1
srvctl status vip -n tbrac2
srvctl config vip -n tbrac1
srvctl config vip -n tbrac2
**现将vip131/132修改为 134/135**
停止两节点的监听及vip资源
srvctl stop listener -n tbrac1
srvctl stop listener -n tbrac2
srvctl stop vip -n tbrac1
srvctl stop vip -n tbrac2
1
2
3
4
修改host对应的vip为134/135
修改ocr注册信息,此时查看config配置已经修改完成
srvctl modify nodeapps -n tbrac1 -A 192.168.230.134/255.255.255.0/eth0
srvctl modify nodeapps -n tbrac2 -A 192.168.230.135/255.255.255.0/eth0
1
2
启动两节点的监听及vip资源
srvctl start vip -n tbrac1
srvctl start vip -n tbrac2
srvctl start listener -n tbrac1
srvctl start listneer -n tbrac2
1
2
3
4
检查修改后vip的详细情况
检查vip配置是否正确
srvctl status vip -n tbrac1
srvctl status vip -n tbrac2
srvctl config vip -n tbrac1
srvctl config vip -n tbrac2
1
2
3
4
检查vip是否可以ping通及连接
修改参数LOCAL_LISTENER后,手工注册监听,成功,无需重启任务服务
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.230.134)(PORT=1521))' sid = 'rtbrac1';
alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.230.135)(PORT=1521))' sid = 'rtbrac2';
1
2
--------Oracle 11g Rac 修改 “SCAN-IP”
- 总体思路
1、停止scan_listener、停止scan
2、修改host对应的scan_ip
3、修改ocr注册信息
4、启动scan_listener、scan
5、分节点重启has服务
6、测试连接信息
停止scan_listener、停止scan
--停止scan资源
srvctl stop scan_listener
srvctl stop scan
--验证
srvctl status scan
srvctl config scan
-
修改host对应的scan_ip, 注意双节点均要修改
vim /etc/hosts
1
修改ocr注册信息
--修改ocr中的注册信息
srvctl modify scan -n tbrac-scan 这个命令好像没有用啊 什么参数没有,前面都是改了的。IP没写啊
--更改之后查看改后scan-ip信息
srvctl config scan
-
启动scan_listener、scan
srvctl start scan
srvctl start scan_listener
--查看scan状态
srvctl status scan
1
2
3
4
验证scan监听服务,查看scan监听名 可以在运行的节点查看scan监听的状态,及实例状态
srvctl status scan_listener
1
分节点重启has服务,因为scan监听并没有注册服务,所以需要重启has服务
node:1 srvctl stop has
node:2 srvctl stop has
轮流重启has服务,等一个节点的has服务重启后,启动另一个has服务 等就是了 不用重启吧
验证使用scan登录
————————————————
版权声明:本文为CSDN博主「八戒涨价了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41840720/article/details/90765482
8。。。。常见问题
问题 1:SCAN VIP 显示状态“UNKNOWN - CHECK TIMED OUT”
问题 2:在安装 GRID 之前需要对 SCAN VIPS 检查什么?在安装之后需要检查什么
问题 3:在 SCAN listener 发生故障切换(failover)后,服务未注册到 SCAN listener
问题 4:公网关闭时,SCAN VIPS 不执行故障切换(failover)
问题 5:SCAN Listener 故障
参考
--------------------------------------------------------------------------------
适用于:
Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 11.2.0.3 [发行版 11.2]
本文档所含信息适用于所有平台
用途
本说明简要总结了导致 SCAN VIP 和 SCAN LISTENERS 故障的最常见问题
适用范围
所有遇到 SCAN 问题的用户
详细信息
问题 1:SCAN VIP 显示状态“UNKNOWN - CHECK TIMED OUT”
在其中一个节点上,SCAN VIP 显示状态“UNKNOWN”和“CHECK TIMED OUT”
另两个 SCAN VIP 在其他节点上启动,显示状态“ONLINE”
crsctl stat res -t
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.scan1.vip 1 ONLINE UNKNOWN rac2 CHECK TIMED OUT
ora.scan2.vip 1 ONLINE ONLINE rac1
ora.scan3.vip 1 ONLINE ONLINE rac1
原因:
/etc/resolv.conf 在所有节点上不一致
该问题是由于所有指定的 DNS 都不可用而导致的。
解决方案:
1) 让所有节点上的 /etc/resolv.conf 保持一致
2) 减少查找超时的值,使总查找时间小于 VIP 资源的检查超时
- 示例:添加到 /etc/resolv.conf: 选项 timeout:1
问题 2:在安装 GRID 之前需要对 SCAN VIPS 检查什么?在安装之后需要检查什么
SCAN VIP 是 11.2 版本集群件的新功能。
原因:
安装集群件之前,请按以下所示检查网络定义
解决方案:
在安装前
1) /etc/resolv.conf 必须在所有节点上保持一致
2) SCAN 应在 DNS 上配置为指向 3 个有效地址
示例:“ping scan-name”应在 3 次ping之后返回 3 个有效地址
3) SCAN 不应在 /etc/hosts 中定义:如果这样定义,只有一个 SCAN 能够运行
4) SCAN 应使用和集群公网相同的网络掩码。
5) “nslookup scan-name”应返回名DNS和 3 个 IP 地址
6) 如果 GI Home 的 sqlnet.ora 文件中的 参数 tcp.validnode_checking = yes,则 TCP.INVITED_NODES 需要将 SCAN VIP 和 节点 Vip 添加到
Grid Infrastructure(集群件)的 SQLNET.ORA 文件。
7) 如果使用 11gR2 之前的客户端,您将无法完全享受到 SCAN 带来的优势。
详细信息:
http://www.oracle.com/technetwork/database/clustering/overview/scan-129069.pdf
8) “hosts”文件不应包含任何已在 DNS 中定义的 IP。
安装之后,验证 SCAN 配置和状态:
- crsctl status resource -w 'TYPE = ora.scan_vip.type' -t
必须显示3 个SCAN 地址 ONLINE
ora.scan1.vip 1 ONLINE ONLINE rac2
ora.scan2.vip 1 ONLINE ONLINE rac1
ora.scan3.vip 1 ONLINE ONLINE rac1
- crsctl status resource -w 'TYPE = ora.scan_vip.type' -t
应显示 LISTENER_SCAN ONLINE
- srvctl config scan /srvctl config scan_listener
显示 SCAN 和 SCAN listener(监听程序)配置:scan 名称、网络和所有 SCAN VIP(名称和 IP)、端口
- cluvfy comp scan
问题 3:在 SCAN listener 发生故障切换(failover)后,服务未注册到 SCAN listener
在执行 SCAN VIP 和 SCAN listener故障切换后,实例未注册到 SCAN listener。这种情况只会发生在其中1 个 scan listener上。客户机连接间歇性出现“ORA-12514 TNS:listener does not currently know of service requested in connect descriptor”。
原因:
1. 未发布的 Bug 12659561:在执行 scan listener故障切换后,数据库实例可能未注册到 scan listener(请参阅 Note 12659561.8),这一问题已在 11.2.0.3.2 中修复,针对 11.2.0.2 的 Merge patch13354057 适用于特定平台。
2. 未发布的 Bug 13066936:在执行 scan 故障切换时,实例未注册服务(请参阅 Note 13066936.8)。
解决方案:
1) 对于以上两个 Bug,解决方法是执行以下步骤,在未注册到 SCAN listener的数据库实例上注销并重新注册remote_listener。
show parameter remote_listener
alter system set remote_listener='';
alter system register;
alter system set remote_listener=':';
alter system register;
2) 服务未注册到 SCAN listener(监听程序)时要检查的其他要点:
a. 正确定义了 remote_listener 和 local_listener
b. sqlnet.ora 中定义了 EZCONNECT,示例:NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
c. /etc/hosts 或 DNS 中定义了 SCAN,并且如果在两处都定义,则检查是否存在任何不匹配情况
d. nslookup 应以 round-robin (循环)方式显示 SCAN VIP
e. 如果未配置 Secure transports (COST) 的类,则不要在 listener.ora 中设置 SECURE_REGITER_。
问题 4:公网关闭时,SCAN VIPS 不执行故障切换(failover)
公网关闭时,Scan Vip 应切换到下一个节点。在 11.2.0.1 的一些环境中,Scan Vip 可能会停留在错误的节点上。
原因:Bug 9488744: OCE: MULTIPLE PUBLIC NETWORK, PULL PRIMARY PUBLIC CABLE, VIP DOES NOT FAILOVER
解决方案:
安装最新的 11.2.0.1 PSU 或 升级到11.2.0.2/11.2.0.3
问题 5:SCAN Listener 故障
原因:
1) listener.ora 存在于 /etc 或 /var/opt/oracle 中
2) 未使用默认端口 1521
解决方案:
1) 将 listener.ora 移动到其他位置。
已在 11.2.0.3 和最新的 11.2.0.2 PSU 中修复
2) 从较低发行版升级到 11.2.0.3 GI 之后,SCAN listener端口已更改为默认值 1521