有关链接:
http://www.itpub.net/showthread.php?threadid=744882&goto=newpost
If a node fails, then the node’s VIP fails over to another node on which the VIP cannot accept connections.
这句话什么意思啊?按字面翻译是“如果节点失败,那么该节点的VIP将会切换到另一个 VIP不能接受连接的节点上”,我的疑问是这样切换的意义是什么呢?以下的回复是有道理的:
提升用户体验。
如果不用VIP,用户要忍受长时间的tcp timeout。
用了VIP之后,用户连接到crash的instance就会报ora错误
www.ixdba.net
客户端TAF的配置就会尝试下一个node。
这也与文档说的一致。那么我理解这里有三个层次,首先服务器实现 VIP 的切换,同时立即给客户端返回一个连接错误;其次客户端虽然接受到错误,但通过 TAF 的配置就会尝试下一个node;最后对于应用来说,因为是通过客户端注册的服务连接服务器,所以真正做到“透明应用失败切换(TAF)”。
其实在节点一实效之后,vip1可以切换到node2上面去,但是node2上的listener不能使用新漂移过来的vip1进行连接服务,因为oracle10G还没有提供漂移过来的ip自动注册到listener的功能,因此,vip1切换到其他节点后,这个ip就不能提供连接服务,只是执行了切换过来这个动作。
那么为何还要让vip1切换到node2呢,切换过来又没有什么用处?
原因是:
使用vip之后,客户端可以快速判断vip1没有listener服务,可以直接尝试换另外的ip了。减少了尝试的次数和时间。
简述过程如下:
vip1切换到node2后,由于不能提供服务了,因此马上给客户端返回一个连接错误,这个动作会使已连接的客户端向现在已经停机的节点发出 SQL 时,接收到一个 TCP 重置信息。连接将使用 tnsname 中的下一个地址,不过这可不是透明的,会产生一个错误ORA-3113 。
如果你希望透明应用程序故障切换,必须要配置 TAF 应用策略。如果配置了TAF策略,客户端虽然接受到错误,但通过 TAF 的配置就会马上尝试下一个node的连接,这样对于应用来说,实现了真正的透明故障切换,同时也减少了客户端用户等待时间。
如果不使用vip连接,当一个节点实效后,vip1也会自动切换到node2,但是这一切已经连接上的客户端并不能马上知道节点一已经实效,因此已经连接到实效节点的客户端会不断的尝试连接,直到连接超时等才会尝试连接tnsname 中的下一个地址,所以这个切换会花费很长时间,客户端才能切换到node2.