我们可以使用oifcfg很方便的配置oracle集群的网络,例如通过下面的命令,我们可以增加一个私有网络:
oifcfg setif -global ib1/172.16.1.0:cluster_interconnect,asm
如果因为粗心大意,比如把命令写成下面这样,然后没发现就把旧的网络删除了,就会导致集群之间通信出现问题:
# 错误的命令
oifcfg setif -global ib1:172.16.1.0/24:cluster_interconnect,asm
# 删除旧的网络
ifcfg deif -global ib0
根据现场情况的不同,有下面两种方法可以恢复集群的网络。
如果此时还有online的节点,可以登录那个节点所在的主机,通过oifcfg来删除错误的网络配置,并把正确的配置添加回来:
oifcfg setif -global ib1/172.16.1.0:cluster_interconnect,asm
oifcfg deif -global ib1:172.16.1.0
使用oifcfg getif确认修改无误后,尝试拉起其他offline节点的集群,这时应该就可以成功拉起了。
由于oifcfg命令只有在集群状态为online时才可以使用,当所有集群都处于offline状态时,无法使用oifcfg命令来修改集群网络配置。错误的网络配置集群又无法启动,似乎陷入了一个死循环之中,这时候有什么办法可以恢复正确的集群网络呢?
oifcfg原理也是通过修改gpnp信息来去修改网络配置,而oracle提供了gpnptool工具可以修改gpnp信息,可以通过下面的步骤,在所有的集群节点都处于offline的状态下,修改集群网络配置并恢复集群:
首先确认所有的集群节点都已经stop,然后在任意一个节点,以独占模式拉起集群:
crsctl start crs -excl -nocrs
备份crs配置信息
mkdir /home/grid/gpnp
export GPNPDIR=/home/grid/gpnp
gpnptool get -o=$GPNPDIR/profile.xml
修改备份的CRS gpnp配置信息,这里需要注意的是,新的gpnp配置文件中的序列号一定要大于集群当前的序列号,否则会无法覆盖掉远程的gpnp配置
# 查看crs配置信息
gpnptool get
# 修改备份的CRS配置信息
cp $GPNPDIR/profile.xml $GPNPDIR/p.xml
# 找到prf_sq
crs rget
# 修改配置文件中的序列号prf_sq(原crs序列号+1,以及正确的网段信息)
gpnptool edit -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -prf_sq=30 -net2:net_ip=172.16.0.149
# 用私钥重新标识配置文件
gpnptool sign -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -w=$GRID_ORACLE_HOME/gpnp/h2c400607/wallets
# 将配置文件信息回写到crs中(如果提示order错误,则prf_sq序列号比当前的要小)
gpnptool put -p=$GPNPDIR/p.xml
# 重启集群服务
crsctl stop crs -f
crsctl start crs
将配置文件信息回写到crs集群中,覆盖掉远程的gpnp信息
# 将配置文件信息回写到crs中(如果提示order错误,则prf_sq序列号比当前的要小)
gpnptool put -p=$GPNPDIR/p.xml
重启所有节点的集群,这时所有的集群都可以被正常拉起
crsctl stop crs -f
crsctl start crs