深入Oracle-理解ScanIP

scan全程为simple client access name的缩写,这个功能是在Oracle 11gR2版本才有的。

scan的作用

这个功能的作用是:在服务器端和客户端之间增加了一层虚拟接口,原本客户端的tnsnames中为了实现负载均衡,需要同时注册多个节点服务器的侦听信息,这样,当服务器端增加或删除节点的时候,相应的服务器端的tnsnames文件就要做相应的维护,比如服务器端增加节点,要在客户端的tnsnames中增加该节点的侦听信息,删除节点则要在客户端的tnsnames中删除该节点的侦听信息。这是在11gR2之前的负载均衡实现方式。

scan与vip的区别

这种方式看起来挺好,但是,如果对于大型局域网,客户端有成百上千个,而且分布在各个地方,原本简单的事就不简单了。scan ip就是针对这一问题出现的,它是在服务器端和客户端之间建立一层虚拟访问层,客户端的tnsnames中只有scan ip的侦听信息,即客户端直接访问scan ip而不直接访问真实的服务器ip。而scan ip是浮动的,它和节点本身的vip的区别就在于,vip的监听程序是跟instance绑定的,设置vip的作用是,当节点宕机之后,vip会自动的跳到正常节点上,但是vip对应的监听程序并不会跳转,本来,如果不适用vip的话,原本连接到宕机节点上的程序就会得不到服务器回应,然后等待连接超时的时候走完,客户端再重试,重试一定次数仍然失败才会转到其他节点上,这个过程就相当耗时了。若果使用vip的话,节点宕机之后vip跳到正常节点上,原本访问宕机节点的程序请求就发送到了vip跳转的节点,该正常节点收到连接请求后直接给该端点返回错误信息,告知它原本访问的节点已经坏掉了,这是客户端就会使用tns中的其他地址。这个时间相对于不适用vip的时间要小很多。
而scan ip机制是ip跟对应的监听程序一起浮动,如果a节点宕机,则原本停留在该节点的scan ip和监听程序会一起跳转到其他可用节点上。因此对于客户端而言,就不需要更改原本的配置信息,只需要一直访问scan ip就可以正常使用数据库,至于scan ip跟真实的节点的对应关系,则是scan ip这层要关心和实现的

scan的实现方式

scan ip有两种实现方式,一种是DNS,一种是oracle自身提供的GNS(grid Naming Service)。其中GNS是针对DHCP方式的,即服务器端的vip和scan ip是动态分派的,具体什么的都没有研究,我只是看了DNS的实现方式。
因为host文件的域名解析方式不能实现一个域名和多个ip的对应,如果在host文件中有一个域名对应多个不同ip的解析行,则在域名解析的时候会只有第一行起作用。而DNS服务器却可以实现一个域名与多个ip的对应。并且DNS服务器使用 round-robin(轮叫调度)的算法进行多个ip之间的调度。
比如域名与ip的对应为
scan.scan.com     192.168.1.221
                          192.168.1.222   
                           19 2.168.1.223
则cmd下使用nslookup  scan.scan.com时,则连续多次解析出的结果的第一个ip会依次为221,222,223。从这个层面上看,也是实现了一定程度的负载均衡。
此外,oracle规定scan ip最多有3个,最少有1个。

DNS服务器的设置

首先说一下dns服务器的位置,dns服务器常理上位于独立于节点服务器的一台单独服务器上。它跟oracle服务器几乎没有联系,主要对所有的客户端提供域名解析服务。因此,所有客户端的DNS服务器地址需要是这台服务器的ip。但是,如果没有单独的服务器,也可以把DNS服务安装在节点上,不过,因为如果恰好DNS服务所在节点坏掉的话,会直接影响数据库的访问,所以,最好在所有的节点上都安装上DNS服务。
我是在window server  2003R2上做的dns,建好DNS服务器后,新建一个域名(这个域可以实际不存在),在这个域下新建主机,例如建立主机名scan,然后输入ip地址,依次建立三个同样主机名不同ip的对应DNS条目即可。
建好之后可以使用nslookup测试一下。


标签: 暂无标签
lee

写了 77 篇文章,拥有财富 450,被 12 人关注

转播转播 分享分享 分享聚知识
回复

使用道具

成为第一个吐槽的人

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈