共计 4253 个字符,预计需要花费 11 分钟才能阅读完成。
从 Oracle 11g 开始,设置了 SCAN ip,除此之外还有 public ip,virtual ip,private ip,容易让人理不清。
下面逐一解释:
public ip:
类似与单实例的 oracle 数据库 ip,主要用于管理 \ 访问。
virtual ip(vip):
oracle 在 rac 架构中专用,这个 vip 用于实现故障转移,当一个节点发生故障时,其 vip 会“浮动”到另外一个正常的节点,也即该正常节点对应着两个 vip 了。
SCAN:
Single Client Access Name,单一客户访问名称,意思是客户端(如 jdbc,pl/sql 等)访问数据库时的公共域名,由于 rac 是多节点的,客户端要访问数据库,通过 scan 机制,只需要提供一个访问名称,oracle rac 会自动为客户端分配一个节点,这对客户端来说是透明的。
private ip:私有 ip,oracle 内部用于节点间通讯的 ip,不对外开放。
public ip:
必须是专用 ip,必须在安装 oracle rac 前配置好,能与网络连通。public ip,vip,scan ip 必须在同一个网络网段内。
vip:
必须是专用 ip,必须安装 oracle rac 前配置好,能与网络连通,public ip,vip,scan ip 必须在同一个网络网段内。该 ip 及域名虽然配置,但必须保持不能使用(不能被访问,如 ping)。
scan:
建议通过 dns 配置三个专用 ip,在安装前必须配置好,当有请求者时,由 dns 随机分配。暂不使用。scan ip 需要给出唯一的名字,也即三个 ip 对应一个域名。名字只能是字符和 ’-‘。oracle 不推荐通过 hosts 文件来配置,那样只能得到一个 scan ip。
scan 也是一个虚拟 ip 名,类似与虚拟 ip 名,但不同的是,虚拟 ip 是一个节点一个 ip 地址一个域名,scan 是针对整个 cluster 的,一个域名对应着多个节点,多个 ip 地址。
private ip:
必须是专用 ip,必须在安装前配置好,必须在一个专用私有网络中,只能被另外的 rac 节点解析,不能被其它网络解析。从 11.2.0.2 开始,oracle 可以自动使用至多 4 块私有网卡,以实现内部节点的负载均衡及冗余。
GNS:Grid Naming Service。
以下是网上的资料
在 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 协议栈超时的依赖。
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;
从上面第 6 条可以引出一个问题。如果增加一个节点,那么客户端的 tnsname.ora 需要加入新增节点的 VIP。那么想象一下:多个客户端,增加多个节点,那么维护起来特别麻烦。因此到了 Oracle11gR2,引入了一个 scan 的概念。
scan,single client access name。简单客户端连接名,这是一个唯一的名称,在整个公司网络内部唯一,并且在 DNS 中可以解析为三个 ip 地址,客户端连接的时候只需要知道这个名称,并连接即可,每个 SCAN VIP 对应一个 scan listener,cluster 内部的 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). RAC 的 Failover 机制会把节点 2 的 VIP 转移到节点 1 上,这时节点 1 的 PUBLIC 网卡上就有 3 个 IP 地址:VIP1,VIP2, PUBLIC IP1.
3). 用户对 VIP2 的连接请求会被 IP 层路由转到节点 1
4). 因为在节点 1 上有 VIP2 的地址,所有数据包会顺利通过路由层,网络层,传输层。
5). 但是,节点 1 上只监听 VIP1 和 public IP1 的两个 IP 地址。并没有监听 VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。
6). 客户段能够立即接收到这个错误,然后客户段会重新发起向 VIP1 的连接请求。
VIP 特点:
1). VIP 是通过 VIPCA 脚本创建的
2). VIP 作为 Nodeapps 类型的 CRS Resource 注册到 OCR 中,并由 CRS 维护状态。
3). VIP 会绑定到节点的 public 网卡上,故 public 网卡有 2 个地址。
4). 当某个节点发生故障时,CRS 会把故障节点的 VIP 转移到其他节点上。
5). 每个节点的 Listener 会同时监听 public 网卡上的 public ip 和 VIP
6). 客户端的 tnsnames.Ora 一般会配置指向节点的 VIP.
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-03/142125tm