oracle11g开始,设置了SCAN ip,除此之外还有public ip,virtual ip,private ip,容易让人犯晕。
下面逐一解释:
public ip:
virtual ip(vip):
SCAN:
private ip:私有ip,oracle 内部用于节点间通讯的ip,不对外开放。
public ip:
vip:
scan :
private ip:
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和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不一定要resolve到三个ip,一个也够了。只不过为了防止scan单点故障而推荐3个。
VIP
Oracle
假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。
1).
2).
3).
4).
5).
6).
1).
2).
3).
4).
5).
6).