正确理解oracle rac下的IP

来源:互联网 发布:sql数据仓库培训 编辑:程序博客网 时间:2024/06/16 09:35

Oracle RAC环境下,每个节点都会有多个IP地址,分别为Public/Private/Vip,这三个IP到底有啥区别呢?分别用在那些场合呢?

1. private IP address is used only for internal clustering processing (Cache Fusion)

私有IP用于心跳同步,这个对于用户层面,可以直接忽略,简单理解,这个Ip用来保证两台服务器同步数据用的私网IP

 

2. virtual IP is used by database applications to enable fail over when one cluster node fails

虚拟IP用于客户端应用,以支持失效转移,通俗说就是一台挂了,另一台自动接管,客户端没有任何感觉。这也是为什么要使用RAC的原因之一,另一个原因,我认为是负载均衡。

 

3. public IP adress is the normal IP address typically used by DBA and SA to manage storage, system and database.

公有IP一般用于管理员,用来确保可以操作到正确的机器,我更愿意叫他真实IP

 

通过上述解释,不难理解作为一个DBA,在配置tnsnames.ora时,有些场合是要使用的vip,而有些场合又必须使用public IP

例如,当你在定位一个数据库的死锁时,使用public ip,可以确保连到你想处理的机器,相反此时使用虚拟ip时,会出现不确定性,因为服务器默认是开启负载均衡的,也就是有可能你想连A机,系统却给你分配了B机。

例如:

下面的例子就是使用的VIP

infodb8 =

  (DESCRIPTION=

    (ADDRESS=(PROTOCOL= TCP)(HOST=138.*.1.81)(PORT= 1521))

    (ADDRESS=(PROTOCOL= TCP)(HOST=138.*.1.82)(PORT= 1521))

    (LOAD_BALANCE= yes)

    (FAILOVER= ON)

    (CONNECT_DATA=

      (SERVER= DEDICATED)

      (SERVICE_NAME= infodb)

      (FAILOVER_MODE=

        (TYPE=SELECT)

        (METHOD= BASIC)

        (RETRIES= 30)

        (DELAY= 5)

      )

      ))

下面的例子就是使用的Public IP,指定连接1机,注意红色字体infodb1进一步限制连接的实例。

INFODB83 =

  (DESCRIPTION=

    (ADDRESS_LIST=

      (ADDRESS=(PROTOCOL= TCP)(HOST=138.*.1.83)(PORT= 1521))

    )

    (CONNECT_DATA=

      (SERVICE_NAME= infodb)

      (INSTANCE_NAME= infodb1)

    )

    (HS = OK)

  )

 

Oracle RAC中每个节点都有一个虚拟IP,简称VIP,与公网IP在同一个网段。

没有VIP时,Oracle客户端是靠“TCP/IP协议栈超时”来判断服务器故障。而TCP/IP协议栈是作为OS Kernel的一部分来实现,不同的OS有不同的阀值,用户获悉数据库异常的时间完全取决于OS Kernel的实现,虽然有些OS允许修改这个阀值,但是会对其它程序产生未知影响。因此,oracle RAC引入了VIP,从而避开对TCP协议栈超时的依赖。

 

VIPIP最主要的不同之处在于:VIP是浮动的,而IP是固定的。

在所有节点都正常运行时,每个节点的VIP会被分配到public NIC上;在linuxifconfig查看,public网卡上是2IP地址;如果一个节点宕机,这个节点的VIP会被转移到还在运行的节点上。也就是幸存的节点的public NIC这个网卡上,会有3IP地址。

当一个节点宕机,这个节点真实IP就连接不上了,但是这个节点的虚拟IP是可以连接的,他会自动把客户端的连接请求转接给存活的节点。

tnsname.ora文件里,指定Address列表,客户端会随机选择一个节点来连接数据库,而不是顺序选择的。

    

VIP特点:

1 VIP是在clusterware安装最后阶段,通过脚本VIPCA创建的;

2 VIP作为一个Nodeapps类型的CRS Resource注册到OCR中,并由CRS维护状态;

3 VIP会绑定到节点的public 网卡上;那么public网卡就有两个地址了;

当某个节点发生故障时,CRS会把故障节点的VIP转移到其他节点上;

每个节点的Listener会同时在public网卡的public IPVIP两个地址上监听;

客户端的tnsname.ora一般会配置指向节点的VIP

 

Oracle11gR2SCAN

从上面第6条可以引出一个问题。如果增加一个节点,那么客户端的tnsname.ora需要加入新增节点的VIP。那么想象一下:多个客户端,增加多个节点,那么维护起来特别麻烦。因此到了Oracle11gR2,引入了一个scan的概念。

 scan,single client access name。简单客户端连接名,这是一个唯一的名称,在整个公司网络内部唯一,并且在DNS中可以解析为三个ip地址,客户端连接的时候只需要知道这个名称,并连接即可, 每个SCAN VIP对应一个scan listenercluster内部的service在每个scan listener上都有注册,scan listener接受客户端的请求,并foward到不同的Local listener中去,还是由local listener提供服务给客户端。  

注意:scan不一定要resolve到三个ip,一个也够了。只不过为了防止scan单点故障而推荐3个。

 

VIP 原理

Oracle TAF 就是建立在VIP 技术之上的。

IP VIP 区别在于:

IP 是利用TCP层超时, VIP 利用的是应用层的立即响应。VIP 它是浮动的IP。 当一个节点出现问题时会自动的转到另一个节点上。

假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。 VIP1 VIP2. 

当节点2发生故障,比如异常关系。RAC 会做如下操作:

1). CRS 在检测到rac2节点异常后,会触发Clusterware 重构,最后把rac2节点剔除集群,由节点1组成新的集群。

2). RACFailover 机制会把节点2VIP转移到节点1上,这时节点1PUBLIC 网卡上就有3IP 地址: VIP1,VIP2, PUBLIC IP1.

3). 用户对VIP2的连接请求会被IP层路由转到节点1

4). 因为在节点1上有VIP2的地址,所有数据包会顺利通过路由层,网络层,传输层。

5). 但是,节点1上只监听VIP1public IP1的两个IP地址。并没有监听VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。

6). 客户端能够立即接收到这个错误,然后客户端会重新发起向VIP1的连接请求。

 

转自:http://blog.csdn.net/cneaglelee/article/details/9295773


1 0
原创粉丝点击