【RAC】Oracle RAC如何修改心跳网络

转自Oracle 官方 mos文档,具体可查看其他相关信息:


文档内容


目标

解决方案

例1: 更改私有主机名

例2:只更改私有 ip 地址不更改网卡、子网及子网掩码信息

例3:只改变私有网络的 MTU 值

例4:更改私有网卡名字,子网及掩码

A. 对于 11gR2 以前的集群管理软件

B. 对于 11gR2 和 12c 上没有使用 flex ASM 的版本

C. 对于 12C和18C flex ASM 结构

关于 11gR2 的一些注意事项

关于 Windows 系统注意事项

使用 oifcfg 命令更改网卡名字的影响

Oifcfg 命令用法

例5 对于 11gR2 或以上版本的 HAIP 添加或删除集群私网

参考

适用于:

Oracle Database Backup Service - 版本 N/A 和更高版本
Oracle Database Exadata Express Cloud Service - 版本 N/A 和更高版本
Oracle Database Cloud Service - 版本 N/A 和更高版本
Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 12.2.0.1 [发行版 10.1 到 12.2]
Oracle Database Cloud Schema Service - 版本 N/A 和更高版本
本文档所含信息适用于所有平台

目标

本文的目的是描述如何在 oracle 集群环境中更改或更新私有网络(cluster_interconnect)信息。

有时我们需要更改或更新网卡的名字,或者更改网卡的子网掩码,再或者更改当时原始安装时就输入了不正确的信息,也许还有其它的原因,oifcfg 工具当时没有成功的安装。

请参考文档: Note 276434.1 for modifying public network and VIP associated information
和文档:  Note 1386709.1 for basics of IPv4 subnet and Oracle Clusterware。

提示:对于 oracle Engineered system(Exadata)和 oracle Applicance(ODA)不适用本文档。

 

解决方案

Oracle 集群中的网络信息(接口,子网及每个网卡的角色)都可以被’oifcfg’ 命令管理, 但是没有网卡的IP地址除外,oifcfg 命令不能修改IP地址信息. ‘oifcfg getif’ 命令可以用来显示OCR中当前网卡的配置信息:

% $CRS_HOME/bin/oifcfg getif 
0 10.X.XXX.0 global public 
1 192.XXX.X.0 global cluster_interconnect

在 Unix/Linux 系统中,网卡名字是被系统自动分配的,依据系统平台的不同而不同。对于 windows 系统,请参考下面的附带的文档. 上面的例子显示当前网卡 0 被用作公网并且子网为 10.2.156.0 1 被用作集群私网,子网为192.168.0.0。

‘公有’ 网络是服务器与客户端之间的通信(与 VIP 使用相同的网段并以不同的记录存储在 OCR 中),与之对应的’cluster_interconnect’网络是用来在 RDBMS/ASM 节点间缓存融合。从 11gR2 开始,cluster_interconnect 同时被用作集群间的心跳,相对于 11gR2 以前的版本,当配置集群心跳信息时指定主机名而言,这是一个标志性的改变。

如果私有网卡的子网或接口名字配置不正确,我们需要使用 crs/grid 用户来更改。

例1: 更改私有主机名

在 11.2 oracle clusterware 之前的版本,私有主机名被记录在 OCR 中, 它不能被更改,一般情况下私有主机名是不需要改变的,它附属的 ip 可以被更改,只有使用删除/添加节点或重新安装 oracle clusterware 来更改私有主机名。

在 11.2 Grid 结构中,私有主机名不在记录在 OCR 中,并且不存在依赖关系,所以它可以在 /etc/hosts 文件中任意更改。

例2:只更改私有 ip 地址不更改网卡、子网及子网掩码信息

举例,私有 ip 地址从 192. XXX.X.10 更改至 192.XXX.X.21,网卡名字及子网保持不变。或者只改变MAC地址,保持private IP address/interface name/subnet/network不变

只要关闭需要更改主机上的 oracle clusterware 软件,在操作系统层,根据需求更改私有 ip 地址或者MAC地址(如:/etc/hosts,OS network config 等等), 再重启启动 oracle clusterware 软件即可。

例3:只改变私有网络的 MTU 值

举例, 将私有网络 MTU 值从1500更改至9000(激活 jumbo frame),网卡名字保持不变。

1. 关闭集群中的所有节点。
2. 在操作系统层更改 MTU 需要设定的值,确保更改后 MTU 值的私有网卡可用并且可以 ping 通集群中的所有节点。
3. 重启所有节点的集群管理软件。

例4:更改私有网卡名字,子网及掩码

提示:当子网掩码被更改,但是子网标识没有改变时,如:
子网掩码从 255.255.0.0 更改至 255.255.255.0,私网 ip 为 192.168.0.x,子网标识保持不变 192.168.0.0,网卡名字没有改变.关闭所有需要更改的主机 oracle clusterware,在操作系统层修改私有网络IP地址(如:操作系统 网络配置等等)。并重启集群中所有节点,请注意,这种更改是不能采用轮转方式(rolling manaer)完成的。

当子网掩码被改变,附属的子网标识也经常会被改变,oracle 在 OCR 中只存储网卡名字及子网标识的信息,而不存储子网掩码。可以使用 oifcfg 命令完成这样的变更, oifcfg 命令只需在集群中的一个节点执行,而不是所有节点。

A. 对于 11gR2 以前的集群管理软件

1. 使用 oifcfg 命令添加新的私有网络信息,删除旧的私有网络信息:

% $ORA_CRS_HOME/bin/oifcfg/oifcfg setif -global /:cluster_interconnect
% $ORA_CRS_HOME/bin/oifcfg/oifcfg delif -global [/]]

举例:
% $ORA_CRS_HOME/bin/oifcfg setif -global  3/ 192.168.2.0:cluster_interconnect
% $ORA_CRS_HOME/bin/oifcfg delif -global  1/192.168.1.0

校验结果
% $ORA_CRS_HOME/bin/oifcfg getif   
eth0 10. X.XXX.0 global public 
eth3  192. XXX.2.0 global cluster_interconnect

2. 关闭 Oracle Clusterware

使用 root 用户执行: # crsctl stop crs

3. 在操作系统层面更改网络配置,修改集群内所有节点的 /etc/hosts 文件,确保集群内所有节点新的网络设置都已生效:

% ping
% ifconfig -a  on Unix/Linux 

% ipconfig /all on windows

4. 重新启动 Oracle Clusterware

以 root 用户:# crsctl start crs

提示:如果在 linux 系统上正在运行 OCFS2,则可能还需要更改 OCFS2 运行在其它节点的私有 ip 地址. 更多详细的信息,请参考:  Note 604958.1

 

B. 对于 11gR2 和 12c 上没有使用 flex ASM 的版本

针对于 11.2 的结构,私有网络配置信息不但保存在 OCR 中,而且还保存在 gpnp 属性文件中。如果私有网络不可用或定义错误,则 CRSD 进程将无法启动,任何随后对于 OCR 的改变都是不可能完成的,因此需要注意当对私有网络的配置信息进行修改,正确的改变顺序是非常重要的。同时请注意,手动修改 gpnp 属性文件是不支持的。

在对集群中所有节点操作之前,请先备份 profile.xml 配置文件。作为 grid 用户执行:
$ cd $GRID_HOME/gpnp//profiles/peer/
$ cp -p profile.xml profile.xml.bk


1. 确保集群中的 所有节点都已启动并正常运行

2. 使用 grid 用户:

获取下面信息, 例如:

$ oifcfg getif
1 100.17.10.0 global public
0 192.168.0.0 global cluster_interconnect


加入新的集群私网通讯信息:

$ oifcfg setif -global /:cluster_interconnect

例如:
a. 加入新的并有相同子网的接口卡 bond0
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect

b. add a new subnet with the same interface name but different subnet or new interface name
$ 添加一个新的子网具有相同网卡的名称但不同的子网或新的网卡名

$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect

 

1. 如果网卡不可用,需要使用 –global 选项来完成,而不能使用 –node 选项,它将导致节点被驱逐。

2. 如果网卡在服务器上可用,则可以使用下面命令识别子网地址:
$ oifcfg iflist

它列出了网卡及子网地址,即使 oracle 集群没有启动,此命令也可以被执行。 请注意,子网掩码有可能不是 x.y.z.0 的格式,它可以是 x.y.z.24,x.y.z.64 或 x.y.z.128 等格式。如:
$ oifcfg iflist 
lan1 18.1.2.0
lan2  10.2.3.64        << 这是一个私有网络子网地址附属的私有网络 ip 地址为 10.2.3.XX

3. 如果需要添加第二个私有网络,而不是替换现有的私有网络, 则需要保证两个网卡的 MTU 值相同,否则实例将无法启动并报如下错误信息:
ORA-27504: IPC error creating OSD context
ORA-27300: OS system dependent operation:if MTU failed with status: 0
ORA-27301: OS failure message: Error 0
ORA-27302: failure occurred at: skgxpcini2
ORA-27303: additional information: requested interface lan1:801 has a different MTU (1500) than lan3:801 (9000), which is not supported. Check output from ifconfig command

4. 对于 11gR2 或更高版本, 不建议在 ASM 或 database 的 spfile 或 pfile 中设置 cluster interconnects 参数。无论什么原因如果设置了该参数,则需要在集群关闭之前需将新的私网 ip 地址设置在 spfile 或 pfile 中,否则它会由于私网信息不匹配而导致重启失败。


校验更改后的值:

$ oifcfg getif


3. 使用 root 用户关闭集群中所有的节点并禁用集群:

# crsctl stop crs
# crsctl disable crs


4. 使网络配置信息都已在 OS 层更改完成,确保更改完成后新的接口在所有的节点都可用有效:

$ ifconfig -a
$ ping


5. 使用 root 用户激活 oracle 集群并重新启动集群中的所有节点:

# crsctl enable crs
# crsctl start crs


6. 如果需要去除旧接口卡信息:

$ oifcfg delif -global [/]
例如:
$ oifcfg delif -global eth0/192.168.0.0

 

C. 对于 12C和18C flex ASM 结构

请检查上面部分B,并关注提示部分,按下面命令做备份:

在对集群中所有节点操作之前,请先备份 profile.xml 配置文件。 作为 grid 用户执行:
$ cd $GRID_HOME/gpnp//profiles/peer/
$ cp -p profile.xml profile.xml.bk

1. 确保 oracle 集群中的 所有节点都已正常运行。

2. 使用 grid 用户:

得到现有信息,如下:

$ oifcfg getif
1 100.17.10.0 global public
0 192.168.0.0 global cluster_interconnect,asm

上面例子显示网卡 ech0 被用作集群私网和 ASM 网络。

加入新的集群私网信息:

$ oifcfg setif -global /:cluster_interconnect[,asm]

如:
a. 加入一个新的具有相同子网网卡 bond0
$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect,asm

b. 加入一个新的并具有相同网卡名字的子网,或不同子网和具有新的接口名字
$ oifcfg setif -global eth0/192.68.10.0:cluster_interconnect,asm

$ oifcfg setif -global eth3/192.168.1.96:cluster_interconnect,asm

 如果有不同的网络用于私有网络和 ASM 网络,则可以对其进行相应的调整。

3. 当 ASMLISTENER 正被用作私有网络,如果对其修改则会影响 ASMLISTENER。需要添加一个新的 ASMLISTENER 及新的网络配置。如果 ASM 的子网网络没有改变则跳过这一步。

3.1. 加入一个新的 ASMLISTENE(例:ASMNEWLISNR_ASM)及新的子网,使用 grid 用户:

$ srvctl add  listener -asmlistener -l -subnet

如:
$ srvctl add listener -asmlistener -l ASMNEWLSNR_ASM -subnet 192.168.10.0

3.2. 删除现有的 ASMLISTENER(这个例子中 ASMLSNR_ASM)并去除依赖关系,使用 grid 用户:

$ srvctl update listener -listener ASMLSNR_ASM -asm -remove -force
$ lsnrctl stop ASMLSNR_ASM

 

注意. 需要使用 –force 选项,否则会出现下面错误:

$ srvctl update listener -listener ASMLSNR_ASM -asm -remove
PRCR-1025 : Resource ora.ASMLSNR_ASM.lsnr is still running
$ srvctl stop listener -l ASMLSNR_ASM
PRCR-1065 : Failed to stop resource ora.ASMLSNR_ASM.lsnr
CRS-2529: Unable to act on 'ora.ASMLSNR_ASM.lsnr' because that would require stopping or relocating 'ora.asm', but the force option was not specified


3.3 校验配置信息:

$ srvctl config listener -asmlistener
$ srvctl config asm


4. 使用 root 用户关闭集群中的 所有节点并禁用集群:

# crsctl stop crs
# crsctl disable crs

5. 在操作系统层面更改网络配置,更改之后,确保所有节点上的新网卡生效:

$ ifconfig -a
$ ping

6. 使用 root 用户激活 oracle 集群并重新启动集群中的所有节点:

# crsctl enable crs
# crsctl start crs

7. 删除旧的网卡信息:

$ oifcfg delif -global [/]
如:
$ oifcfg delif -global 0/192.168.0.0

 

 

关于 11gR2 的一些注意事项


1. 如果底层网络配置已经更改, 但是 oifcfg 尚未执行同样的变更,则重启 oracle 集群会导致 crsd 进程不能启动。

crsd.log 日志将会显示如下:

2010-01-30 09:22:47.234: [ default][2926461424] CRS Daemon Starting
..
2010-01-30 09:22:47.273: [ GPnP][2926461424]clsgpnp_Init: [at clsgpnp0.c:837] GPnP client pid=7153, tl=3, f=0
2010-01-30 09:22:47.282: [ OCRAPI][2926461424] clsu_get_private_ip_addresses: no ip addresses found.
2010-01-30 09:22:47.282: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 2, from [ clsinet.c : 1732], ret gipcretSuccess (0)
2010-01-30 09:22:47.283: [GIPCXCPT][2926461424] gipcShutdownF: skipping shutdown, count 1, from [ clsgpnp0.c : 1021], ret gipcretSuccess (0)
[ OCRAPI][2926461424]a_init_clsss: failed to call clsu_get_private_ip_addr (7)
2010-01-30 09:22:47.285: [ OCRAPI][2926461424]a_init:13!: Clusterware init unsuccessful : [44]
2010-01-30 09:22:47.285: [ CRSOCR][2926461424] OCR context init failure. Error:  PROC-44: Error in network address and interface operations Network address and interface operations error [7]
2010-01-30 09:22:47.285: [ CRSD][2926461424][PANIC] CRSD exiting: Could not init OCR, code: 44
2010-01-30 09:22:47.285: [ CRSD][2926461424] Done.

以上错误显示操作系统层面的设置(oifcfg iflist)与 gpnp profile.xml 配置文件设置不匹配。

解决方法:恢复操作系统网络配置到最初的状态,启动 oracle 集群,然后再按照上面的步骤重新更改。

如果底层的网络并没有改变,但 oifcfg 已经被设置了一个错误的子网地址或接口名字,则会发生同样的问题。

2. 如果集群中的任何一个节点关闭,oifcfg 命令将会失败并显示错误:

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect
PRIF-26: Error in update the profiles in the cluster

解决方案:启动 oracle 集群中没有运行的节点,确保集群中所有的节点都已启动,如果由于操作系统原因不能启动的节点,请先将此节点从集群中删除在执行私网网络变更。

3. 如果执行上面命令的的用户非 GI 的拥有者,则会出现相同的错误:

$ oifcfg setif -global bond0/192.168.0.0:cluster_interconnect
PRIF-26: Error in update the profiles in the cluster

解决方案:确保使用 GI 的拥有者登录并执行上面命令。

4. 从 11.2.0.2 开始,如果在没有加入一个新私有网卡,就试图删除最后一个私有网卡(集群私网)则会发生下面错误:

PRIF-31: Failed to delete the specified network interface because it is the last private interface

解决方案:在删除旧的私有网卡之前,先加入新的私有网卡。

5. 如果主机节点的 oracle 集群关闭在关闭状态,则会报下面错误:

$ oifcfg getif
PRIF-10: failed to initialize the cluster registry

解决方案:启动该主机节点上的 oracle 集群软件。

 

关于 Windows 系统注意事项

更改网卡的语法在 windows/RAC 和Unix/Linux 集群是一样的,但是网卡名称会略有不同,在 windows 系统上,默认分配给接口通常的名称为:

Local Area Connection
Local Area Connection 1 
Local Area Connection 2

如果使用一个网卡名称含有空格,则名称必须使用引号括起来,同时,请注意这是区分大小写的。例如,在 windows上,设置集群私网链接:

C:\oracle\product\10.2.0\crs\bin\oifcfg setif -global "Local Area Connection 1"/192.168.1.0:cluster_interconnect

然而,在 windows 上重新命名网卡按最佳实践更有意义,如重命名为”ocwpublic” 和”ocwprivate”。如果 oracle 集群安装完成后需要更改网卡名字,则需要运行”oifcfg”命令来添加新的网卡并删除旧的。综上所述。

您可以运行下面命令查看每个节点上可用的网卡名字。

oifcfg iflist -p -n

必须在每个节点上运行这个命令来验证网卡名称相同的定义。

使用 oifcfg 命令更改网卡名字的影响

对于私网网卡,数据库将使用存储在 OCR 中定义为集群互联的网卡作为节点间缓存融合通信。在告警日志开始的时候,就会显示集群互联有效的信息。在参数清单。例如:

For pre 11.2.0.2:
Cluster communication is configured to use the following interface(s) for this instance 
192. XXX.X.1


For 11.2.0.2+: (HAIP address will show in alert log instead of private IP)
Cluster communication is configured to use the following interface(s) for this instance
  169. XXX.XX.97

如果上面信息不正确,则实例需要重启以便 OCR 条目修正,这同样适用于 ASM 实例和数据库实例。 在 windows 系统上,实例被关闭后,在 OCR 将被重读之前,还需要停止/启动 OracleService < SID >(或 OracleASMService < ASMSID > 。

 

Oifcfg 命令用法

查看 oifcfg 命令的全部选项,只需输入:

$ /bin/oifcfg

 

例5 对于 11gR2 或以上版本的 HAIP 添加或删除集群私网

1. 添加另外的私有网络到现有的使用 HAIP 的集群中,作为 grid 用户执行:

$ oifcfg setif -global /:cluster_interconnect

例如:

$ oifcfg setif -global /192.XXX.XX.0:cluster_interconnect

 关闭 CRS 中的 所有节点,通过重新启动 crs 中的 所有节点,来使 HAIP 读入新的接口,不能使用滚动方式重启。

2. 在使用 HAIP 的集群中删除私有网络,作为 grid 用户执行:

$ oifcfg delif -global

例如:
$ oifcfg delif -global 

HAIP 将切换至其它可用接口,在接口被删除后,集群/数据库会继续采用此方式运行。

删除多余的 HAIP 接口,应关闭 CRS 所有节点,然后重启 CRS 所有节点。不能采用以滚动的方式重新启动 CRS。

 

参考

NOTE:1054902.1  - How to Validate Network and Name Resolution Setup for the Clusterware and RAC
NOTE:1386709.1  - The Basics of IPv4 Subnet and Oracle Clusterware
NOTE:276434.1  - How to Modify Public Network Information including VIP in Oracle Clusterware
NOTE:604958.1  - OCFS2 Node Fence Caused by Removing the External Network Cable


请使用浏览器的分享功能分享到微信等