0
点赞
收藏
分享

微信扫一扫

RAC VIP地址飘移

腊梅5朵 2022-08-17 阅读 93


从Oracle 11g开始,安装RAC至少需要7个IP地址,两块网卡(一块公网网卡,一块私网网卡),其中public、vip和scan都在同一个网段,使用的是公网网卡,private在另一个网段,使用的是私网网卡。主机名不能包含下横线,如:RAC_01是不允许的。通过执行ifconfig -a检查两个节点的网络设备名称是否一致。另外,在配置了/etc/hosts文件后,在安装RAC之前,公网、私网共4个IP可以ping通,其它3个IP不能ping通才是正常的。在安装RAC时,其IP地址的规划类似于下表所示:

RAC  VIP地址飘移_数据库

其在/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集群,私网通信是非常重要的,因为节点和节点之间的通信绝大部分都是要通过私网来实现的。私网通信基本上可以分为两种:第一种是集群层面之间的通信;第二种是数据库实例之间的通信。

  1. 第一种通信(例如:节点间的网络心跳)的主要特点是持续存在、实时性要求高,但是数据量比较小,所以通过TCP/IP协议传递就可以了。
  2. 第二种通信是缓存融合(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。

 

(四)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必须属于同一子网。

 

 

[root@rac1 ~]# srvctl status vip -n rac1  --查看vip状态

VIP rac1-vip is enabled

VIP rac1-vip is running on node: rac1

[root@rac1 ~]# srvctl status nodeapps  --查看vip状态

VIP rac1-vip is enabled

VIP rac1-vip is running on node: rac1

VIP rac2-vip is enabled

VIP rac2-vip is running on node: rac2

Network is enabled

Network is running on node: rac1

Network is running on node: rac2

GSD is disabled

GSD is not running on node: rac1

GSD is not running on node: rac2

ONS is enabled

ONS daemon is running on node: rac1

ONS daemon is running on node: rac2

 

如果第一个节点挂掉了(关机,断电,网卡坏),那么第一个节点的vip会飘移到第二个节点,即第二个节点会有两个vip。

[root@rac2 ~]# srvctl status nodeapps

VIP rac1-vip is enabled

VIP rac1-vip is running on node: rac2

VIP rac2-vip is enabled

VIP rac2-vip is running on node: rac2

Network is enabled

Network is running on node: rac1

Network is running on node: rac2

GSD is disabled

GSD is not running on node: rac1

GSD is not running on node: rac2

ONS is enabled

ONS daemon is running on node: rac1

ONS daemon is running on node: rac2

[root@rac2 ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:BC:6F:B1  --节点2public ip

          inet addr:192.168.11.102  Bcast:192.168.11.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:febc:6fb1/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:525 errors:0 dropped:0 overruns:0 frame:0

          TX packets:566 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:58230 (56.8 KiB)  TX bytes:81467 (79.5 KiB)

 

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:BC:6F:B1  --节点2 vip

          inet addr:192.168.11.103  Bcast:192.168.11.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

eth0:2    Link encap:Ethernet  HWaddr 00:0C:29:BC:6F:B1  --scan ip

          inet addr:192.168.11.104  Bcast:192.168.11.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

eth0:3    Link encap:Ethernet  HWaddr 00:0C:29:BC:6F:B1   --可以看到第一个节点vip已经飘移到底二个节点上

          inet addr:192.168.11.101  Bcast:192.168.11.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

 

注意这里飘移过去的vip 192.168.11.101是无法在客户端使用来连接数据库的。

为什么无法连接数据库?

[grid@rac2 ~]$ lsnrctl status

Listener Parameter File   /u01/app/11.2.0/grid/network/admin/listener.ora

Listener Log File         /u01/app/grid/diag/tnslsnr/rac2/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.102)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.11.103)(PORT=1521)))

可以看到数据库只监听192.168.11.102,192.168.11.103地址,对于飘过来的192.168.11.101并不会监听。当挂掉的节点启动后,vip又会飘移回去,这样就可以使用该vip来连接数据库。

 

总结一下VIP的用处如下:

10g 中为什么使用虚拟 IP (VIP)?为什么当它的主节点发生故障时不只是返回一个无效的连接呢?

这全是出于对应用程序可用性的考虑。当一个节点发生故障时,与其关联的 VIP 将被自动故障切换到另外某个节点上。当出现这种情况时,会发生两件事:

新的节点重新进行地址解析,显示该地址的一个新的 MAC 地址。对于直接连接的客户端,这通常使它们在连接旧地址时出现错误。随后发送到 VIP 的数据包前往新的节点,该节点将把错误的 RST 数据包返回客户端。这导致客户端立即收到错误信息。

这意味着,当客户端向现在已经停机的节点发出 SQL 时,或者在连接状态下遍历地址列表时,客户端不会等待很长的 TCP/IP 超时(大约 10 分钟),而是接收到一个 TCP 重置信息。就 SQL 来说,该信息为 ORA-3113。对于连接,使用 tnsname 中的下一个地址。

更进一步的操作是使用透明的应用程序故障切换 (TAF)。成功配置 TAF 后,就可以完全避免 ORA-3113 错误!

如果不使用 VIP,连接停用节点的客户端经常要等待 10 分钟的 TCP 超时,然后才收到错误信息。因此,不使用 VIP 您就不会真正拥有好的高可用性解决方案

举报

相关推荐

0 条评论