现在市面上最多的Oracle RAC版本几乎都是11gR2,很多初学者Oracle RAC都是从这个版本开始学习的。那么说到RAC中的IP众所周知有Public IP、Private IP、Virtual IP、SCAN IP、GNS VIP,值得思考的是Oracle为什么要有这么多IP以及它们存在的意义到底是什么?
在Oracle7的时代就有了集群数据库的概念了OPS,本文重点讲解9i、10g、11g、12cRAC中IP的一个发展史。
9i时代RAC每个节点只需要2个IP即可,一个Public ip,一个Private ip。
Public IP:网卡上的真实IP,每个节点在安装Oracle软件之前都需要事先配置好的IP,Oracle通过此IP对外提供的网络服务。服务器端创建监听器时有2个必选条件HOST、PORT,HOST顾名思义监听器监听哪台机器上的OracleDB服务,PORT提供一个端口实现通信默认1521。这个端口号在监听器启动时是不能发生冲突的是由Oracle监听器启动的。如果你有2台机器同时安装了OracleDB,是否可以在第一台机器监听第二天机器上的数据库服务呢?当然是不可以的因为第一台机器是无法启动第二台机器上的1521端口的。如果RAC中Public IP所在的网卡设备故障,那么该节点将无法继续对外提供Oracle服务,建议开启操作系统层面的多网卡绑定技术实现IP Failover。
客户端通过网络连接到数据库服务器对数据库进行访问管理之前需要在客户端设置tnsnames.ora文件,如果是双节点RAC需要在tnsnames文件中的写入2个ADDRESS分别对应2个节点的Public IP、端口号以及通信协议。在没有开启负载均衡功能(软/硬件)当第一个ADDRESS对应的主机故障或关机,客户端连接时Oracle会等待一个网络超时后继续连接第二个ADDRSS对应的数据库实例(我的测试网络超时大概2、3秒钟左右具体时间根据各自环境而定)。报错信息 TNS-12543 destination host unreachable。即使RAC一个节点依然可以对外提供服务只是用户每次连接都需要等待几秒钟的网络超时感受相当不好。10gRAC中VIP的出现完美的解决了这个问题。
Private IP:网卡上的真实IP,每个节点在安装Oracle集群软件之前都需要事先配置好的IP,用于集群间多节点心跳同步和Cache fusion等任务,在12c中还需要担任Flex ASM的任务,俗称私网IP或心跳IP。如果不设置Private IP而是由Public IP完成这些任务可以吗?当然是可以的,但是这样做只会会使Public IP所在网卡负载过大,一旦网卡设备发生故障集群将会分裂踢出掉一部分节点保证一致性,使RAC性能不稳定。节点间通信传输量还是蛮大的,Cache Fusion最多只会关联3个节点,但是集群内每个节点依然侦测其他所有节点的心跳,避免发生Split Brain现象。所以12c之前很少会看到超过8个节点的RAC架构,即使你采用了业务分离也会严重影响了RAC性能。12c推出了Flex Cluster技术解决了这个问题,可以实现超过8个节点的RAC架构并且性能不会降低。既然这个IP这么重要,为了避免发生网卡设备故障,也可以开启操作系统层面的多网卡绑定技术实现IP Failover。Oracle11.2.0.2以上版本推出HAIP技术替代了操作系统层面的网卡绑定技术,功能更强大更兼容。这里你只需要设置多个私网IP即可Oracle自动帮你来完成网卡绑定功能,值得一说的是这里的多个IP可以在网段中,Oracle会在此网卡设备上虚拟出一个169.254网段的B类地址实现此功能,HAIP技术目前最多支持4个IP。
Virtual IP:10gRAC新特性,VIP是在Public IP所在的网卡上由Oracle集群软件虚拟出来的一个IP,需要和Public IP设置在同一个子网网段中。Oracle集群软件安装之前需定义好无需事先配置,如果在安装集群软件时如果发生VIP冲突是无法点击NEXT的需要更换未规划使用的IP,启动集群软件后VIP会自动启动,正常情况下VIP和PUBLIC功能是一模一样的。Pmon对每个节点VIP所在的监听器注册实例信息,本地监听器中会看到2个地址host一个是Public IP一个是VIP。当节点故障时Oracle集群软件会把VIP会自动飘逸到其他节点上,但是本地监听器却没有飘逸到其他节点上。客户端tnsnames.ora文件中host选项不在需要配置Public IP而选择配置VIP,这样做的好处是双节点RAC架构中当第一个节点故障时,第二个节点会有两个VIP,客户端连接第一个VIP失败后会立即连接第二个VIP所对应的实例,整个切换过程是非常短暂的,用户完全感受不到RAC架构中有节点故障。对应报错信息 TNS-12541 no listener。整个连接过程可以说对用户是透明了,体现了Grid的概念。但是并非真正意义上的透明,用户还是可以知道整个RAC架构是由多少个节点组成,11gRAC中推出了SCAN IP的新概念,可以实现对用户连接是完全透明的,用户不再需要知道整个RAC架构中是有多少个节点组成的,所以我们常说Oracle 11g的是真正意义上的网格时代。
SCAN IP(Single Client Access Name IP):11gRAC新特性,11gRAC不仅有SCAN IP还有SCAN LISTENER。目前Oracle集群架构中SCANIP可以有1到3个同样SCAN LISTENER也需要有1到3个,它们是一一对应的。每个实例的Pmon进程会把各自实例的信息注册给SCAN LISTENER上。命令srvctl status scan查看集群中SCAN IP的状态,命令srvctl status scan_listener查看当前集群中SCAN LISTENER的状态,命令lsnrctl status listener_scan1/2/3查看SCAN LISTENER监听到的数据库所有实例状态信息。客户端tnsnames.ora文件不再需要写所有节点的VIP只需要写SCANIP即可,用户也不会知道RAC是由多少个节点组成,在RAC架构中添加或删除节点的时候客户端是不需要做任何配置的。SCAN LISTENER接受客户端请求后根据负载把当前连接分发到不同的本地监听器中去,还是由本地监听器提供客户端连接,前提是客户端必须也是11GR2版本。如果只配置了1个SCAN IP,那么所有的客户端请求都会访问同一个SCAN LISTENER,配置多个SCAN LISTENER可以实现客户端连接时负载均衡。1个SCAN IP也可以完成Failover,如果SCAN IP所在的节点故障,Oracle会把该SCAN IP和对应的SCAN LISTENER飘到其他节点上继续提供服务。配置1个SCAN IP,可以在本地的hosts文件中解析即可。配置多个SCAN IP需要有DNS服务器负责解析SCAN IP实现轮询功能。有的公司用硬件完成负载均衡工作配置1个SCAN IP即可。
GNS VIP:11gRAC新特性,传统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。配置起来相对传统架构来说复杂一些所以11gRAC架构中很少会看到GNS VIP。12c Flex Cluster架构必须配置GNS VIP。
中国OCM之家
专注数据 共现梦想
QQ群:554334183