每一个node都有一个VIP,VIP就是我们访问的IP,如果一个node down了,他的VIP地址会根据算法浮动到其他的某个node上,
这样在用户访问看来,还是正常访问的
我认为vip最大作用是用于故障切换
当a节点失败后,vip会飘移到b节点,但是b节点并没有对这个vip地址进行监听,这样客户端就能迅速知道a节点宕了,而切换到b节点
如果采用传统的TCP超时那会等很久
如果要实现failover,那在tnsnames.ora里面要有相应的配置
从逻辑上看TCP/IP的协议栈是同层之间进行通信
传输层的TCP协议,提供数据传送的完整性服务。也就是,接收端的传输层收到数据包后,必须给发送端的传输层返回一个确认消息。
如果指定的时间内,发送端没有收到这个确认消息,发送端会认为这个包丢失,就会重发;如果几次重发都不能得到响应,
发送端的传输层就知道网络出现了问题,终止了发送尝试,并通知应用层。
比如,user_A用sqlplus连接oracle server,则sqlplus就会抛出连接错误
客户端的连接请求必须等到传输层的超时,才能获知数据库服务器或者监听出现了问题
假设有一个2节点的RAC环境,VIP1 VIP2,现node 2发生故障:
① CRS在检测到node 2异常后,触发clusterware重构,踢出node 2
② VIP2漂移到node 1
③ 用户对VIP2的连接请求会被网络层路由到node 1
④ 因为node 1拥有VIP2,所以数据包会顺利的通过网络接入层、网络层、传输层
⑤ 但是node 1上的监听器只监听VIP1和public IP,没有监听VIP2,也就是,应用层没有对应的程序接收这个包
⑥ 客户端能够立刻收到这个错误,然后客服端就会重新发起向VIP1的连接
VIP只有在系统故障时才漂移
VIP漂移出去不回来
可以使用crs_relocate把vip"拉"回来
这是一个feature,VIP不自动failover回来是为了防止二次brown out
但是10.2.0.3是一个例外,这个参数被默认打开了,其他的版本默认都是关闭的。
ora_racg_vip_failback=0
我们可以通过v$session.failed_over 是YES表示漂移过、或者crsd.log会有输出
vip 漂移后 listener 并不会自动注册
只是降低连接时 failover 的时间长度而已
漂移后的目的是在进行连接时更快的返回错误, 而不是tns 超时.
hosts文件中vip的名称
建议采取以下命名hostname-vip,hostname-priv
名字最好不要用下划线。中划线没事
Oracle的TAF实际是建立在VIP技术上的
如果你希望透明应用程序故障切换,必须要配置 TAF 应用策略。
如果配置了TAF策略,客户端虽然接受到错误,但通过 TAF 的配置就会马上尝试下一个node的连接,
这样对于应用来说,实现了真正的透明故障切换,同时也减少了客户端用户等待时间。
如果不使用vip连接,当一个节点实效后,vip1也会自动切换到node2,
但是这一切已经连接上的客户端并不能马上知道节点一已经实效,
因此已经连接到实效节点的客户端会不断的尝试连接,直到连接超时等才会尝试连接tnsname 中的下一个地址,
所以这个切换会花费很长时间,客户端才能切换到node2.
① VIP是浮动的,而IP是固定的
② IP利用传输层超时,而VIP利用应用层立即响应
③ IP让未连上的连上,而VIP让已连上的继续连
这样在用户访问看来,还是正常访问的
我认为vip最大作用是用于故障切换
当a节点失败后,vip会飘移到b节点,但是b节点并没有对这个vip地址进行监听,这样客户端就能迅速知道a节点宕了,而切换到b节点
如果采用传统的TCP超时那会等很久
如果要实现failover,那在tnsnames.ora里面要有相应的配置
㈠ TCP/IP协议栈超时
从逻辑上看TCP/IP的协议栈是同层之间进行通信
传输层的TCP协议,提供数据传送的完整性服务。也就是,接收端的传输层收到数据包后,必须给发送端的传输层返回一个确认消息。
如果指定的时间内,发送端没有收到这个确认消息,发送端会认为这个包丢失,就会重发;如果几次重发都不能得到响应,
发送端的传输层就知道网络出现了问题,终止了发送尝试,并通知应用层。
比如,user_A用sqlplus连接oracle server,则sqlplus就会抛出连接错误
客户端的连接请求必须等到传输层的超时,才能获知数据库服务器或者监听出现了问题
假设有一个2节点的RAC环境,VIP1 VIP2,现node 2发生故障:
① CRS在检测到node 2异常后,触发clusterware重构,踢出node 2
② VIP2漂移到node 1
③ 用户对VIP2的连接请求会被网络层路由到node 1
④ 因为node 1拥有VIP2,所以数据包会顺利的通过网络接入层、网络层、传输层
⑤ 但是node 1上的监听器只监听VIP1和public IP,没有监听VIP2,也就是,应用层没有对应的程序接收这个包
⑥ 客户端能够立刻收到这个错误,然后客服端就会重新发起向VIP1的连接
㈡ VIP漂移问题
VIP只有在系统故障时才漂移
VIP漂移出去不回来
可以使用crs_relocate把vip"拉"回来
这是一个feature,VIP不自动failover回来是为了防止二次brown out
但是10.2.0.3是一个例外,这个参数被默认打开了,其他的版本默认都是关闭的。
ora_racg_vip_failback=0
我们可以通过v$session.failed_over 是YES表示漂移过、或者crsd.log会有输出
vip 漂移后 listener 并不会自动注册
只是降低连接时 failover 的时间长度而已
漂移后的目的是在进行连接时更快的返回错误, 而不是tns 超时.
㈢ VIP配置
hosts文件中vip的名称
建议采取以下命名hostname-vip,hostname-priv
名字最好不要用下划线。中划线没事
㈣ TAF(Transparent Application Failover)
Oracle的TAF实际是建立在VIP技术上的
如果你希望透明应用程序故障切换,必须要配置 TAF 应用策略。
如果配置了TAF策略,客户端虽然接受到错误,但通过 TAF 的配置就会马上尝试下一个node的连接,
这样对于应用来说,实现了真正的透明故障切换,同时也减少了客户端用户等待时间。
如果不使用vip连接,当一个节点实效后,vip1也会自动切换到node2,
但是这一切已经连接上的客户端并不能马上知道节点一已经实效,
因此已经连接到实效节点的客户端会不断的尝试连接,直到连接超时等才会尝试连接tnsname 中的下一个地址,
所以这个切换会花费很长时间,客户端才能切换到node2.
㈤ IP和VIP区别
① VIP是浮动的,而IP是固定的
② IP利用传输层超时,而VIP利用应用层立即响应
③ IP让未连上的连上,而VIP让已连上的继续连