RAC HAIP
NOTE:
HAIP(ohasd管理的资源)
对于 oracle集群,私网通信是非常重要的,因为节点和节点之间的通信绝大部分都是要通过私网来实现的,私网通信基本上可以分为两种:第一种是集群层面之间的通信:第二种是数据库实例之间的通信。
第一种通信(例如:节点间的网络心跳)主要特点是持续存在,实时性要求高,是数据量比较小,所以通过TCP/IP协议传递就可以了。
第二种通信,也就是所熟知的内在合存融合造成的实例之间的数据传输,特点是数据量很大,而且速度要求非常高,TCP/IP协议此时已经不能足Oracle的要求了,所以需要使用UDP或者RDS,同时oracle也一直建议用户对集群的私网进行高可用性和负载均的衡配置,对于10G和11GR1版本的集群Oracle并不提供段私网的高可用性和负载均衡配置,而是建议用户在操作系统层面配置,例如linux bonding,AIX etherchannel等,而从11.0.0.2版本开始,Oracle提供了私网的高可用性和负载均衡特性-HAIP。
首先,用户需要在安装GI的过程当中为集群私网制定多块网卡。
上面的截图是真正的生产环境,版本是11.2.0.4,没有使用HAIP特性,还是使用了操作系统层面配置,例如linux bonding。
下图是使用OUI安装集群过桩中选择集群网络的页面,选用了使用eth1,eth2
作为集群的私网。
HAIP顾名思义就是一个(或多个)P地址,Oracle会自动在集群的每一块私网网卡上绑定一个网段169.254.*.*(这个网段地址在下面查看网卡信息会看到)的IP地址,这个1P地址被称为HAIP,数据实例(ASM实例也同样适用)之间在进行通信时,会通过这个Oracle绑定的IP地址来完成。当对应的网卡绑定的IP地址可以飘移到其他私有网卡上面,这就实现了私网的高可用性。从另一个角度来讲,如果集包含了多块私网,也就意味着会有多个HAIP被绑定在每块私两卡上,每一块网卡都问时承担实倒之间的通信,从而实现了私网通信的负载均衡,因此,能看到HAIP的功能要比很多操作系统层面的网卡绑定更加强大,而且管理起来更加简单,因为用户只需要在安装的时候选择私网网卡就可以了,oracle会在启动集群的时候自动把HAIP绑定到网卡上。此外,HAIP的负载均衡是以网卡为单位,不需要额外的OS软件和交换机支持,下面是我自己测试环境下面输出。
[[email protected] ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.100 rac1
192.168.56.11 rac1-vip
10.10.10.1 rac1-priv1
10.10.10.2 rac1-priv2
192.168.56.101 rac2
192.168.56.22 rac2-vip
10.10.10.3 rac2-priv1
10.10.10.4 rac2-priv2
192.168.56.33 scan
[[email protected] ~]# ifconfig -a
eth1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe91:87f4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:258590 errors:0 dropped:0 overruns:0 frame:0
TX packets:197388 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:175228591 (167.1 MiB) TX bytes:97648064 (93.1 MiB)
eth1:1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:169.254.89.248 Bcast:169.254.127.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0e:16f1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:372574 errors:0 dropped:0 overruns:0 frame:0
TX packets:301407 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:236054233 (225.1 MiB) TX bytes:148160593 (141.2 MiB)
eth2:1 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:169.254.145.149 Bcast:169.254.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
可以看到上面网卡eth1 HAIP地址169.254.89.248被绑定,网卡eth2上面169.254.145.149被绑定,到目前为止,oracle最多支持4块私网网卡,网卡数量和HAIP数量关系如下:
1块私网网卡对应1个HAIP地址
2块私网网卡对应2个HAIP地址
3块私网网卡对应4个HAIP地址
4块私网网卡对应4个HAIP地址
接下来通过下面测试来说明HAIP是如何工作。
步骤1:检查HAIP资源状态和私网设置
[[email protected] ~]$ crsctl stat res -t -init
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.asm
1 ONLINE ONLINE rac1 Started
ora.cluster_interconnect.haip
1 ONLINE ONLINE rac1
HAIP资源状态正常。
[[email protected] ~]$ oifcfg getif
eth0 192.168.56.0 global public
eth1 10.10.10.0 global cluster_interconnect
eth2 10.10.10.0 global cluster_interconnect
集群私网存在两个私网网卡
步骤2:检查HAIP是否已经绑定到对应的网卡上面了
[[email protected] ~]# ifconfig -a
eth1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe91:87f4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:258590 errors:0 dropped:0 overruns:0 frame:0
TX packets:197388 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:175228591 (167.1 MiB) TX bytes:97648064 (93.1 MiB)
eth1:1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:169.254.89.248 Bcast:169.254.127.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0e:16f1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:372574 errors:0 dropped:0 overruns:0 frame:0
TX packets:301407 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:236054233 (225.1 MiB) TX bytes:148160593 (141.2 MiB)
eth2:1 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:169.254.145.149 Bcast:169.254.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
从上面可以看出网卡eth1的HAIP地址169.254.89.248 被绑定,网卡eth2上的HAIP地址169.254.145.149 被绑定。
步骤三:将网卡eth1停掉,再看一下HAIP情况
[[email protected] ~]# ifconfig -a
eth2 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0e:16f1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:374306 errors:0 dropped:0 overruns:0 frame:0
TX packets:302837 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:237141579 (226.1 MiB) TX bytes:148877761 (141.9 MiB)
eth2:1 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:169.254.89.248 Bcast:169.254.127.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2:2 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:169.254.145.149 Bcast:169.254.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1HAIP 从上面可以看出网卡HAIP地址169.254.145.149 被绑定到私网网卡eth2上面了。
步骤四:恢复网卡eth1,再看一下HAIP情况
[[email protected] ~]# ifconfig
eth1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:10.10.10.1 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe91:87f4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:261365 errors:0 dropped:0 overruns:0 frame:0
TX packets:198958 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:177241573 (169.0 MiB) TX bytes:98637336 (94.0 MiB)
eth1:1 Link encap:Ethernet HWaddr 08:00:27:91:87:F4
inet addr:169.254.89.248 Bcast:169.254.127.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth2 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:10.10.10.2 Bcast:10.10.10.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fe0e:16f1/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:390125 errors:0 dropped:0 overruns:0 frame:0
TX packets:315262 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:247423964 (235.9 MiB) TX bytes:154418399 (147.2 MiB)
eth2:1 Link encap:Ethernet HWaddr 08:00:27:0E:16:F1
inet addr:169.254.145.149 Bcast:169.254.255.255 Mask:255.255.128.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
可以看到HAIP地址169.254.89.248被重新绑定到私网网卡eth1上面了,说明集群管理软件会在私网网卡出现问题之后仍然会继续继续监控这块网卡,以便在网卡恢复正常之后能够将HAIP重新恢复到原有的网卡上面,从而保证HAIP能够恢复负载均衡。
需要说明,数据库和ASM实例在启动的时候会去读取HAIP地址,下面是数据库一小段alter日志,数据库提供UDP协议在ip地址169.254.89.248和169.254.145.149上上实现实例数据传输。
Private Interface 'eth1:1' configured from GPnP for use as a private interconnect.
[name='eth1:1', type=1, ip=169.254.89.248, mac=08-00-27-91-87-f4, net=169.254.0.0/17, mask=255.255.128.0, use=haip:cluster_interconnect/62]
Private Interface 'eth2:1' configured from GPnP for use as a private interconnect.
[name='eth2:1', type=1, ip=169.254.145.149, mac=08-00-27-0e-16-f1, net=169.254.128.0/17, mask=255.255.128.0, use=haip:cluster_interconnect/62]
Public Interface 'eth0' configured from GPnP for use as a public interface.
[name='eth0', type=1, ip=192.168.56.100, mac=08-00-27-60-03-77, net=192.168.56.0/24, mask=255.255.255.0, use=public/1]
Public Interface 'eth0:1' configured from GPnP for use as a public interface.
[name='eth0:1', type=1, ip=192.168.56.11, mac=08-00-27-60-03-77, net=192.168.56.0/24, mask=255.255.255.0, use=public/1]
CELL communication is configured to use 0 interface(s):
在整个过程当中,HAIP会一直存在,只不过绑定的网卡发生了飘移,所以数据库实例和ASM实例一直保持正常运行,不会出现实例终止的问题出现,从而实现了实例通信的高可用性和负载均衡等待特性。