Oracle 11g R2 RAC高可用连接特性SCAN详解解读Word文件下载.docx
- 文档编号:6451686
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:23
- 大小:26.46KB
Oracle 11g R2 RAC高可用连接特性SCAN详解解读Word文件下载.docx
《Oracle 11g R2 RAC高可用连接特性SCAN详解解读Word文件下载.docx》由会员分享,可在线阅读,更多相关《Oracle 11g R2 RAC高可用连接特性SCAN详解解读Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
其实CacheFusion会消耗节点服务器很大的私网资源,另外,私网间无法通信还会引起brainsplit(脑裂),以前为解决这种问题,我们可以采用网卡bonding技术,而Oracle在11gR2的时候HAIP技术来实现,HAIP(HighlyAvailableVirtualIP)用于节点间的私网通信,支持同时使用多个网络连接来满足网卡间的负载均衡,并且还提高了CacheFusion资源通信能力。
HAIP技术并不是主要内容,所以在这里点到为止。
VIP:
RAC的每个节点都需要有一个虚拟IP,这就是VIP。
VIP需要和PUBLICIP同一个子网,它们是由GI的Clusterware来管理的。
VIP在其节点服务器发生故障的时候会自动漂移到另外正常的节点服务器上,如果RAC是多个节点运行的,那具体漂移到哪个活动的节点将由Clusterware决定。
VIP发生漂移现象之后,其当前的节点服务器LOCALLISTENER是不会监听它的请求的,所以有客户端向这个VIP发送请求时,Clusterware的FAN会通知客户端向别的VIP发送请求,客户端收到通知后通过Failover机制把请求重新发送到ADDRESS列表中的其他VIP上。
虽然有这种较复杂的过程,但始终对客户端是透明进行的,而且这个过程完成时间非常短暂,客户端也就几乎感受不到有节点宕机。
等故障节点恢复正常,漂移的VIP也回到此节点上,继续提供服务。
SCANVIP:
SCANVIP就是我在刚开始常说的SCANIP,也就是由DNS或者GNS、hosts解析出来的IP地址。
上面也说过,SCANVIP最多能有三个,它们循环地被客户端所请求到。
这里大家可能会存在这样的问题,SCANVIP只有三个,那RAC是四节点或更多的节点情况怎么办?
存在这种问题的原因归咎于对SCANVIP的了解不足。
其实,SCANVIP数量和节点数是没有任何关系的,SCANVIP会落到哪个节点上都是随机的。
GNSVIP:
GNSVIP同SCANVIP,也是Oracle从11gR2开始提供的。
GNSVIP是提供GNS服务的IP地址,它绑定到某个节点的PUBLICIP所在网卡上,当节点出现故障,GNS资源会自动切换到其他正常的节点继续提供GNS解析服务。
如果我们不使用GNS解析方法,那么也不会存在GNSVIP。
LOCALLISTENER:
本地监听器,RAC的每个节点上都会有独立的本地监听器,它会监听该节点的PUBLICIP和VIP,而每个节点的实例在启动的时候也向本地监听器进行注册,当然它也会向SCAN监听器注册,当VIP或者PUBLICIP(这种情况比较少见)有连接请求的时候,本地监听器就接受处理并和本地实例建立连接。
如果某个节点故障,其上面的VIP会进行漂移,但本地监听器并不会产生漂移。
SCANLISTENER:
SCAN监听器,它是实现SCAN负载均衡的原理所在。
如果RAC上有三个SCANVIP,那么SCAN监听器也有三个,它们各自监听SCANVIP的连接请求。
SCAN监听器跟着SCANVIP随机分配到节点服务器上,如果某个节点发生故障,运行在此节点上的SCANVIP会进行漂移,这时候SCAN监听器也跟着漂移到正常的节点上,继续为SCANVIP监听连接请求,当PMON进程下次动态更新实例信息到该SCAN监听器之后,它又重新接受客户端的连接。
这和VIP产生漂移的时候是有所区别的。
LOCAL_LISTENER:
这是Oracle的参数,这个参数控制着本地监听器的注册,因为本地监听器的工作机制关系,通过本地监听器的数据库连接请求只会连接到本地节点的实例上。
REMOTE_LISTENER:
同LOCAL_LISTENER是Oracle的参数,通过这个设置,任何实例都会向SCAN监听器注册,所以SCAN监听器能够负载均衡地分发连接请求到节点本地监听器上,也就是连接到其本地节点上实例上。
关于LOCAL_LISTENER与REMOTE_LISTENER的配置,在下面讲动态注册的时候再看一下。
SCAN解析与配置
SCAN是在安装GI(GridInfrastructure)时配置的,作为Clusterware资源被管理。
忽略hosts解析之后,有两种方式配置和解析SCAN:
DNS和GNS(GridNamingService)。
这里重点说一下DNS解析SCAN方式
使用DNS解析SCAN的时候,DNS服务器会采用rr(round-robin)的方式循环解析为它准备的3个IP地址,与Oracle11gR2的客户端配合使不同的客户端能够连接到不同的SCANListener上,这相当于是Oracle10g中配置的客户端负载均衡(通过LOAD_BALANCE=yes配置)。
下面看一下客户端通过SCAN连接到数据库的过程,首先由DNS服务器解析SCAN名称,DNS服务器返回SCAN对应的3个IP地址的列表,客户端会选择使用其中一个SCANVIP地址作为连接地址,将命名方法解析后的连接信息发送到SCANVIP对应的SCANListener上,SCANListener通过负载均衡机制再把请求转发给比较空闲的服务器上的本地监听器,由本地监听器完成实例与客户端之间的连接。
使用SCAN连接数据库实例,整个过程实现了客户端的Failover(Oracle10gR2是通过FAILOVER=on来配置),DNS服务器返回的是一个SCANVIP列表,客户端会选择其中一个连接到RAC,如果这个IP地址不能正常访问,客户端会选择另一个IP地址继续连接,直到所有的地址都不能正常连接,才返回错误给客户端,整个过程对客户端程序来说依然是透明的。
需要注意的是,使用SCAN连接到数据库,不再需要客户端能解析节点的PUBLICIP和VIP,只需要客户端能够通过DNS服务器正常解析SCAN就可以了。
负载均衡工作交给服务器端的SCAN实现。
至于GNS解析SCAN,因为目前GNS服务存在不稳定的情况,也很少有企业将其投入到生产环境使用,而且其工作原理也较为复杂,所以在这里并不深入说明。
实例的动态注册
上面已经介绍了LOCAL_LISTENER和REMOTE_LISTENER两个和动态注册有关的参数,那我们看看它们在数据库中的表现形式:
本地监听器注册是由实例的LOCAL_LISTENER参数所控制的:
SQL>
setline150
showparameterlocal_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地址进行注册,由于本地监听器是在本地的PUBLICIP和VIP上监听,所以向VIP监听注册就能保证成功向本地监听器注册。
查看本地监听器的状态:
[grid@pos2~]$lsnrctlstatuslistener
LSNRCTLforLinux:
Version11.2.0.3.0–Productionon23-OCT-201212:
01:
21
Copyright(c)1991,2011,Oracle.
Allrightsreserved.
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
STATUSoftheLISTENER
————————
Alias
LISTENER
Version
TNSLSNRforLinux:
Version11.2.0.3.0–Production
StartDate
19-JUL-201215:
31:
45
Uptime
95days20hr.29min.35sec
TraceLevel
off
Security
ON:
LocalOSAuthentication
SNMP
OFF
ListenerParameterFile
/u01/app/11.2.0/grid/network/admin/listener.ora
ListenerLogFile
/u01/app/grid/diag/tnslsnr/pos2/listener/alert/log.xml
ListeningEndpointsSummary…
(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)))
ServicesSummary…
Service"
+ASM"
has1instance(s).
Instance"
+ASM2"
statusREADY,has1handler(s)forthisservice…
pos"
pos2"
posXDB"
Thecommandcompletedsuccessfully
–这里注意:
查看本地监听器信息的时候每个节点只能看到其上运行的实例。
SCAN监听器的注册是由REMOTE_LISTENER参数控制的,任何实例都会向所有的SCAN监听器注册:
showparameterremote_listener
remote_listener
pos-cluster-scan:
1521
下面是LISTENER_SCAN1的一个状态信息,当然你也可以查看LISTENER_SCAN2和LISTENER_SCAN3的状态。
[grid@pos2~]$lsnrctlstatuslistener_scan1
06:
56
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
LISTENER_SCAN1
95days20hr.35min.10sec
/u01/app/11.2.0/grid/log/diag/tnslsnr/pos2/listener_scan1/alert/log.xml
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.195)(PORT=1521)))
has2instance(s).
pos1"
由于任何实例启动都会向所有的SCAN监听器动态注册,从LISTENER_SCAN1的SCAN监听器运行状态来看,SERVICEpos包括了所有的实例名称。
就像我昨天回答那位朋友的时候简单说“是通过内部机制”一样,大家可能看到上面的内容并不知道SCAN监听器如何找到比较空闲的实例的。
其实SCAN监听器是实时了解所有实例的运行情况的,因此它能够准确地将连接重定向到空闲服务器的本地监听器上。
下面我们通过日志查看实例的动态注册与动态更新
1)本地监听器动态注册日志:
[grid@pos2~]$cd$ORACLE_BASE/diag/tnslsnr/pos2/listener/alert
[grid@pos2alert]$grepservice_registerlog_1.xml|head-3
<
txt>
18-JUN-201213:
58:
23*service_register*LsnrAgt*0
30*service_register*+ASM2*0
18-JUN-201215:
54:
15*service_register*pos2*0
--之所以选择log_1.xml历史文件是因为发现我的log.xml里基本都是更新日志,没有注册日志。
2)本地监听器动态更新日志:
[grid@pos2alert]$grepservice_updatelog.xml|head-3
16-OCT-201216:
07:
09*service_update*pos2*0
33*service_update*pos2*0
08:
03*service_update*pos2*0
3)SCAN监听器动态注册日志:
[grid@rac1~]$cd$ORACLE_BASE/diag/tnslsnr/rac1/listener_scan2/alert/
[grid@rac1~]$grepservice_registerlog.xml|head-3
13-AUG-201205:
25:
00*service_register*LsnrAgt*0
13-AUG-201220:
29:
07*service_register*luocs1*0
05*service_register*luocs1*0
--这是我另一套测试RAC环境。
4)SCAN监听器动态更新日志:
[grid@rac1~]$grepservice_updatelog.xml|head-3
19*service_update*luocs1*0
30:
46*service_update*luocs1*0
注意,如果你的RAC是通过hosts解析了SCAN域名的,那么系统里就找不到上面的SCAN监听器日志的路径。
实例的动态注册和动态更新过程是由实例的PMON进程完成的,正是因为SCAN监听器能够实时了解实例的负载情况,所以SCAN监听器能够负载均衡地将连接请求转发给合适实例的本地监听器来处理。
这里谈到负载均衡,那么就说下负载均衡中的优先级
共享服务器配置中:
∙
低负载节点
低负载实例
实例相关的低负载调度器
专用服务器配置中:
SCAN兼容性配置
介绍SCAN差不多了,这里还有个兼容性问题不能不说。
要完美实现SCAN功能特性,其实对客户端的要求也是存在的。
下面看下不同版本和SCAN之间的兼容性
编号
客户端软件版本
服务器端软件版本
SCAN特性的使用
1
11g
R2
能够充分使用SCAN的特性
2
早于11g
R2版本
不能充分感受到SCAN特性
3
在服务器端没有SCAN的概念
4
这里稍微详细说一下第2种情况,如果客户端低于11gR2的版本,在DNS解析的3个VIP地址中,可能只能固定地使用第一个SCANVIP连接数据库;
如果该SCANVIP对应的监听器出现故障,那么整个连接将会失败,客户端也会收到到错误信息。
那针对兼容性问题我们拿出各种客户端配置方法
1)客户端和服务器端软件版本都是11gR2的时候
Tnsnames.ora
RACSCAN=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=luocs-cluster-)(PORT=1521))
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=luocs10g)
)
2)客户端是早于11gR2的版本,服务器端是11gR2的时候
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(FAILOVER=on)
(ADDRESS=(PROTOCOL=TCP)(HOS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 11g R2 RAC高可用连接特性 SCAN详解解读 11 RAC 可用 连接 特性 SCAN 详解 解读