Oracle RAC中每个节点都有一个虚拟IP,简称VIP,与公网IP在同一个网段。VIP和IP最主要的不同之处在于:VIP是浮动的,而IP是固定的。在所有节点都正常运行时,每个节点的VIP会被分配到public NIC上;在linux下ifconfig查看,public网卡上是2个IP地址;如果一个节点宕机,这个节点的VIP会被转移到还在运行的节点上。也就是幸存的节点的public NIC这个网卡上,会有3个IP地址。当一个节点宕机,这个节点真实IP就连接不上了,但是这个节点的虚拟IP是可以连接的,他会自动把客户端的连接请求转接给存活的节点。
在tnsname.ora文件里,指定Address列表,客户端会随机选择一个节点来连接数据库,而不是顺序选择的。
VIP特点:
(1)VIP是在clusterware安装最后阶段,通过脚本VIPCA创建的;
(2)VIP作为一个Nodeapps类型的CRS Resource注册到OCR中,并由CRS维护状态;
(3)VIP会绑定到节点的public 网卡上;那么public网卡就有两个地址了;
(4)当某个节点发生故障时,CRS会把故障节点的VIP转移到其他节点上;
(5)每个节点的Listener会同时在public网卡的public IP和VIP两个地址上监听;
(6)客户端的tnsname.ora一般会配置指向节点的VIP;
从上面可以看出,如果增加一个节点,那么客户端的tnsname.ora需要加入新增节点的VIP。多个客户端,增加多个节点,那么维护起来特别麻烦。因此到了Oracle11gR2,引入了一个SCAN(SingleClient Access Name)的概念。
客户端可以通过SCAN特性负载均衡地连接到RAC数据库。SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个)SCAN IP,我们可以通过DNS或者GNS来解析实现。GNS(GridNaming Service)是Oracle 11g R2的新功能,可以通过DHCP服务为节点和SCAN分配VIP和SCAN IP。另外还有个优点是,对于新加入集群的节点,它会自动分配VIP地址,更新集群资源,客户端依然通过SCAN特性负载均衡地连接到新增集群节点上。
SCAN IP是作为一个新增IP出现的, scan ip其实是oracle在客户端与数据库之间,新加的一个连接层,当有客户端访问时,连接到 SCAN IP LISTENER,而SCAN IP LISTENER接收到连接请求时,会根据 LBA 算法将该客户端的连接请求,转发给对应的instance上的VIP LISTENER,从而完成了整个客户端与服务器的连接过程
每个SCANVIP对应一个scan listener,cluster内部的service在每个scan listener上都有注册,scanlistener接受客户端的请求,并foward到不同的Local listener中去,还是由local的listener提供服务给客户端。
注:SCAN也可以使用hosts文件来解析,SCAN不一定要resolve到三个IP,一个也可以,但这种方法Oracle不推荐使用的。但尽管如此,很多生产上依然这样使用,也就是废弃了11g的新特性SCAN,而是依然采用VIP连接方式。
评论



