SCAN 原理小节

来源:互联网 发布:json教程 编辑:程序博客网 时间:2024/06/05 01:14

现象

经反应有一个集群数据库经常出现一会儿能连接成功,一会无法连接的问题。


第一时间判断为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地址(注意两个节点分别修改)

 

原创粉丝点击