SCAN 原理小节
Posted renfengjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SCAN 原理小节相关的知识,希望对你有一定的参考价值。
现象
经反应有一个集群数据库经常出现一会儿能连接成功,一会无法连接的问题。
第一时间判断为listener的问题。
可能是因为节点的vip 端口没有全部开放导致。
排查
(ip地址不便提供)
scan信息
db 信息
host表中vip信息
至此询问了一下端口开放信息,答复为已经开放了所有vip的1521访问权限。
集群中注册的vip信息
数据库listener注册信息
由local_listener中发现,注册了本地vip的两个listener,一个为1521端口,一个为1523端口。
询问开启端口的状况
开启了app server 访问所有vip的1521端口。
原因
判断为1523端口未开放导致,为此,开放了app server 访问三个vip的1523端口,至此问题得到解决。
为什么没有开启1523端口,会导致无法连接,连接超时的状况呢。
下面我们做一下原理分析。
scan 原理分析
SCAN 通常的工作环境如图所示
客户端通过scan listener发送request请求,scan listener接收请求后,根据负载情况重定向连接请求给local listener。
最后客户端得到local listener地址后,双方建立连接。
我们现有的环境如下图所示
不知为何原因,数据库服务器上创建了两个listener,分别监听vip上的1521以及1523端口,而数据库也相应的注册到了两个listener上面。
发生问题的情况是,我们开启了所有vip的1521端口。
所以当scan listener 重定向给vip的1521端口的listener的时候,我们可以正常的进行连接。
发生问题的情况如下所示:
而当scan listener 重定向给vip的1523端口的listener的时候,因为没有开启相应的端口访问权限,所以发生连接超时等无法连接的情况。
其他类似问题
另外一个比较常见的问题是 vip解析的问题。
有些rac数据库的local listener中使用的是别名来代替ip地址。
例如某数据库的配置:
local_listener 这个参数
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks string
local_listener string (DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=sol1-vip)(PORT=1521))))
remote_listener string sol-scan:1521
这样的配置就会出现客户端无法连接,或者连接超时的情况。根本原因是客户端无法解析sol1-vip。
有两种方法解决:
第一种方法:
Linux :vi /etc/hosts
windows : C:\\Windows\\System32\\drivers\\etc\\hosts
加入这个sol1-vip对应的ip条目即可
第二种方法:
修改local_listener为真实ip地址(注意两个节点分别修改)
以上是关于SCAN 原理小节的主要内容,如果未能解决你的问题,请参考以下文章
关于HBase MVCC的设计原理以及MVCC所引起的一个scan问题
Oracle 11G R2 RAC中的scan ip 的用途和基本原理
ASP.NET MVC 5 Azure App ZAP Scan 指示代理披露漏洞 - 我们如何防止这种情况发生?
SQL Server 索引查找Index Seek 索引扫描 Index Scan与索引存储原理详解