♣
题目部分
在Oracle中,RAC中的Public IP、Private IP、Virtual IP、SCAN IP、GNS VIP及HAIP的作用分别是什么?
♣
答案部分
从Oracle 11g开始,安装RAC至少需要7个IP地址,两块网卡(一块公网网卡,一块私网网卡),其中public、vip和scan都在同一个网段,使用的是公网网卡,private在另一个网段,使用的是私网网卡。主机名不能包含下横线,如:RAC_01是不允许的。通过执行ifconfig -a检查两个节点的网络设备名称是否一致。另外,在配置了/etc/hosts文件后,在安装RAC之前,公网、私网共4个IP可以ping通,其它3个IP不能ping通才是正常的。在安装RAC时,其IP地址的规划类似于下表所示:
节点/主机名 | 接口名 | 地址类型 | IP地址 | 注册位置 |
raclhr-12cR1-N1 | raclhr-12cR1-N1 | Public | 192.168.59.160 | /etc/hosts |
raclhr-12cR1-N1-vip | Virtual | 192.168.59.162 | /etc/hosts | |
raclhr-12cR1-N1-priv | Private | 192.168.2.100 | /etc/hosts | |
raclhr-12cR1-N2 | raclhr-12cR1-N2 | Public | 192.168.59.161 | /etc/hosts |
raclhr-12cR1-N2-vip | Virtual | 192.168.59.163 | /etc/hosts | |
raclhr-12cR1-N2-priv | Private | 192.168.2.101 | /etc/hosts | |
raclhr-12cR1-scan | SCAN | 192.168.59.164 | /etc/hosts |
其在/etc/hosts文件中的配置如下所示:
1[root@raclhr-12cR1-N2 ~]# more /etc/hosts 2127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 3::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 4#Public IP 5192.168.59.160 raclhr-12cR1-N1 6192.168.59.161 raclhr-12cR1-N2 7#Private IP 8192.168.2.100 raclhr-12cR1-N1-priv 9192.168.2.101 raclhr-12cR1-N2-priv 10#Virtual IP 11192.168.59.162 raclhr-12cR1-N1-vip 12192.168.59.163 raclhr-12cR1-N2-vip 13#Scan IP 14192.168.59.164 raclhr-12cR1-scan
下面分别介绍一下RAC环境中的几种IP及其作用。
(一)Public IP
Public IP称为公网IP,它是网卡上的真实IP。每个节点在安装Oracle软件之前都需要事先配置Public IP。Oracle通过Public IP对外提供网络服务。如果RAC中Public IP所在的网卡设备故障,那么该节点将无法继续对外提供服务,所以,建议通过开启操作系统层面的多网卡绑定技术来实现IP Failover。如果是双节点RAC环境,那么需要在tnsnames.ora文件中写入对应两个节点的Public IP、端口号以及通信协议。如果没有开启负载均衡功能(软/硬件),那么当tnsnames.ora文件中第一个ADDRESS对应的主机故障或关机,那么在客户端连接时,Oracle会等待一个网络超时,然后继续连接第二个ADDRSS对应的数据库实例。即使RAC一个节点依然可以对外提供服务,用户每次连接都需要等待几秒钟。网络超时会让用户体验相当不好。所以,在Oracle 10g RAC中VIP(Virtual IP)的出现完美地解决了这个问题。
(二)Private IP
对于Oracle集群,私网通信是非常重要的,因为节点和节点之间的通信绝大部分都是要通过私网来实现的。私网通信基本上可以分为两种:第一种是集群层面之间的通信;第二种是数据库实例之间的通信。第一种通信(例如:节点间的网络心跳)的主要特点是持续存在、实时性要求高,但是数据量比较小,所以通过TCP/IP协议传递就可以了。第二种通信是缓存融合(Cache Fusion)造成的实例之间的数据传输,其特点是数据量很大,而且速度要求非常高,TCP/IP协议此时已经不能满足要求了,所以需要使用UDP或者RDS,同时Oracle也一直建议用户对集群的私网进行高可用性和负载均衡的配置。
与Public IP一样,Private IP称为私网IP或心跳IP,它也是网卡上的真实IP,每个节点在安装Oracle集群软件之前都需要事先配置Private IP。Private IP用于集群间多节点心跳同步和Cache Fusion等任务,在Oracle 12c中还需要担任Flex ASM的任务。当然,如果不设置Private IP而是由Public IP也可以去完成这些任务。但是,这样做只会使Public IP所在网卡负载过大,一旦网卡设备发生故障,集群将会分裂踢出掉一部分节点保证一致性,使RAC性能不稳定。对于Oracle 10g和11gR1版本的集群,Oracle并不提供私网的高可用性和负载均衡特性,而是建议用户在操作系统层面配置(例如Linux bonding、AIX etherchannel等),从而开启操作系统层面的多网卡绑定技术实现IP Failover。从Oracle 11.2.0.2版本开始推出的HAIP技术提供了私网的高可用性和负载均衡特性,从而替代了操作系统层面的网卡绑定技术,功能更强大更兼容。
(三)Virtual IP(VIP)
VIP是Oracle 10g RAC的新特性,称为虚拟IP。VIP是在Public IP所在的网卡上由Oracle集群软件虚拟出来的一个IP,需要和Public IP设置在同一个子网网段中。Oracle集群软件安装之前只需定义好(/etc/hosts文件)即可,而无需事先配置。在正常情况下,VIP和Public IP的功能是一模一样的。后台进程PMON对每个节点的VIP所在的监听器注册实例信息,本地监听器中会看到两个地址host,一个是Public IP,一个是VIP。当节点故障时,Oracle集群软件会把VIP自动飘逸到其它节点上,但是本地监听器却没有飘逸到其它节点上。客户端tnsnames.ora文件中host选项不再需要配置Public IP而选择配置VIP,这样做的好处是在双节点RAC架构中当第一个节点故障时,第二个节点会有两个VIP,客户端连接第一个VIP失败后会立即连接第二个VIP对应的实例,整个切换过程是非常短暂的,用户完全感受不到RAC架构中有节点故障。整个连接过程可以说对用户是透明了。但是并非真正意义上的透明,用户还是可以知道整个RAC架构是由多少个节点组成,所以,Oracle 11g RAC中推出了SCAN IP的新概念,可以实现对用户连接的透明性,用户不再需要知道整个RAC架构中是由多少个节点组成的。
VIP的特点:
(1)VIP是通过VIPCA脚本创建的。
(2)VIP作为Nodeapps类型的CRS Resource注册到OCR中,并由CRS维护状态。
(3)VIP会绑定到节点的Public网卡上,故Public网卡有两个地址。
(4)当某个节点发生故障时,CRS会把故障节点的VIP转移到其它节点上。
(5)每个节点的LISTENER会同时监听Public网卡上的Public IP和VIP。
(6)客户端的tnsnames.ora一般会配置指向节点的VIP。
可以使用如下命令让节点1的VIP强制漂移到节点2上去:
1crsctl relocate resource ora.raclhr-11gr2-n1.vip -n raclhr-11gR2-N2 -f
以下命令针对Oracle 11g版本之前:
1crs_relocate ora.lhr-11gr2-rac1.vip -c lhr-11gR2-rac2 -f
(四)SCAN IP
从Oracle 11gR2 RAC开始引入SCAN(Single Client Access Name,集群的单客户端访问名称)IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP LISTENER。在客户端的tnsnames.ora配置文件中,只需要配置SCAN IP,然后用户即可访问数据库。客户端通过SCAN IP、SCAN IP LISTENER来负载均衡地连接到RAC数据库。同之前各版本的RAC相比,使用SCAN IP的好处就是,当后台RAC数据库添加、删除节点时,客户端配置信息无需修改。SCAN提供一个域名来访问RAC,域名可以解析1个到3个(注意,最多3个)SCAN IP,可以通过DNS、GNS或/etc/hosts文件来解析实现。需要注意的是,SCAN IP、VIP和Public IP必须属于同一子网。
(五)GNS VIP
GNS VIP是Oracle 11g RAC新特性。在传统RAC架构中,Public IP、Private IP、Virtual IP、SCAN IP都是预先配好的。如果开启了GNS服务只需要预先配置Public IP、Private IP即可,Virtual IP、SCAN IP都是由GNS服务从DHCP服务器动态获取的。配置GNS服务需要事先配置DNS和DHCP服务,GNS VIP可以绑定在任意一个节点的Public网卡上来实现GNS服务,如果没有配置GNS服务就不需要配置GNS VIP。配置起来相对传统架构来说复杂一些,所以,在Oracle 11g RAC架构中很少会看到GNS VIP。12c Flex Cluster架构必须配置GNS VIP。
(六)HAIP(Highly Available IP)
在Oracle 11.2.0.2之前,私网的冗余一般是通过在OS上做网卡绑定(如Bond等)来实现的,从Oracle 11.2.0.2版本开始推出HAIP(Highly Available IP)技术替代了操作系统层面的网卡绑定技术,功能更强大、更兼容。HAIP通过其提供的独特的169.254.*网段的IP地址实现集群内部链接的高可用及负载均衡。所以,在11.2.0.2或更高版本安装RAC的时候需要注意169.254.*的IP地址不能被占用。有了HAIP技术则可以不再需要借助任何第三方的冗余技术来实现私网网卡的冗余。
资源ora.cluster_interconnect.haip将会启动一个到四个本地HAIP地址附在Private网络适配器上(私网网卡)。通过HAIP完成Oracle RAC和ASM等内部通讯。如果某一个私有网卡物理损坏,那么该网卡上的HAIP地址会漂移到其它的可用的私有网络上。多个私网网卡可以在安装阶段定义,也可以在GRID配置完成之后,通过调用$GRID_HOME/bin/oifcfg setif工具(命令为:oifcfg setif -global eth2/192.168.1.0:cluster_interconnect)来配置HAIP。
HAIP的个数取决于GRID激活的私网网卡的个数。如果只有1块私网网卡,那么GRID将会创建1个HAIP。如果有两块私网网卡,那么GRID将会创建两个HAIP。若超过两块私网网卡则GRID创建4个HAIP。GRID最多支持4块私网网卡,而集群实际上使用的HAIP地址数则取决于集群中最先启动的节点中激活的私网网卡数目。如果选中更多的私网网卡作为Oracle的私有网络,那么多余4个的不能被激活。
管理ora.cluster_interconnect.haip这个资源的是ohasd.bin进程。其对应的log位于$GRID_HOME/log/<nodename>/ohasd/ohasd.log以及$GRID_HOME/log/<nodename>/agent/ohasd/orarootagent_root/orarootagent_root.log这两个位置。在HAIP资源online以后,通过操作系统命令ifconfig -a就能查看到多了类似于eth1:1的虚拟网卡,HAIP地址为169.254.X.X。当然也可以在数据库级别通过GV$CLUSTER_INTERCONNECTS视图查看HAIP的地址。HAIP对应的地址由系统自动分配,无法由用户手工进行指定。
Oracle数据库和ASM实例可以通过HAIP来实现私网通讯的高可用性和负载均衡。私网的流量会在这些私网网卡上实现负载均衡,如果某个网卡出现了故障,它上面的HAIP会自动切换到别的可用的私网网卡上,从而不影响私网的通讯。Windows平台目前不支持HAIP技术。
在有些客户环境下,私网是通过VLAN划出来的,而出于网络管理要求,VLAN的IP地址与网卡必须是绑定的,私网IP也必须是固定的IP地址(虽然按Oracle RAC的安装要求,私网应该是独立隔离的网络),这时HAIP会无法分配,导致依赖它的ASM资源无法启动。HAIP存在不少Bug,若不幸碰到,则可以将HAIP功能禁用掉。如果用户使用的是操作系统级别的绑定或者没有使用私网的绑定,那么可以通过在RDBMS和ASM的参数文件中设置CLUSTER_INTECONNECTS指定私网地址将HAIP覆盖(如果有多个私网地址,请用英文冒号分隔)。虽然说HAIP本身依然存在,但是ASM实例和RDBMS实例以后就不会使用HAIP。
& 说明:
有关RAC中IP的更多内容可以参考:http://blog.itpub.net/26736162/viewspace-2141223/、http://blog.itpub.net/26736162/viewspace-2132596/、http://blog.itpub.net/26736162/viewspace-2157362/、http://blog.itpub.net/26736162/viewspace-2157364/、http://blog.itpub.net/26736162/viewspace-2157372/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
详细内容可以添加麦老师微信或QQ私聊。
About Me:小麦苗
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
DBA宝典
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。