首页
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源

我们可以使用oifcfg很方便的配置oracle集群的网络,例如通过下面的命令,我们可以增加一个私有网络:

  1. oifcfg setif -global ib1/172.16.1.0:cluster_interconnect,asm

如果因为粗心大意,比如把命令写成下面这样,然后没发现就把旧的网络删除了,就会导致集群之间通信出现问题:

  1. # 错误的命令
  2. oifcfg setif -global ib1:172.16.1.0/24:cluster_interconnect,asm
  3. # 删除旧的网络
  4. ifcfg deif -global ib0

恢复集群网络

根据现场情况的不同,有下面两种方法可以恢复集群的网络。

至少还有一个oneline状态的集群节点

如果此时还有online的节点,可以登录那个节点所在的主机,通过oifcfg来删除错误的网络配置,并把正确的配置添加回来:

  1. oifcfg setif -global ib1/172.16.1.0:cluster_interconnect,asm
  2. oifcfg deif -global ib1:172.16.1.0

使用oifcfg getif确认修改无误后,尝试拉起其他offline节点的集群,这时应该就可以成功拉起了。

所有的节点集群都处于offline状态

由于oifcfg命令只有在集群状态为online时才可以使用,当所有集群都处于offline状态时,无法使用oifcfg命令来修改集群网络配置。错误的网络配置集群又无法启动,似乎陷入了一个死循环之中,这时候有什么办法可以恢复正确的集群网络呢?

oifcfg原理也是通过修改gpnp信息来去修改网络配置,而oracle提供了gpnptool工具可以修改gpnp信息,可以通过下面的步骤,在所有的集群节点都处于offline的状态下,修改集群网络配置并恢复集群:

首先确认所有的集群节点都已经stop,然后在任意一个节点,以独占模式拉起集群:

  1. crsctl start crs -excl -nocrs

备份crs配置信息

  1. mkdir /home/grid/gpnp
  2. export GPNPDIR=/home/grid/gpnp
  3. gpnptool get -o=$GPNPDIR/profile.xml

修改备份的CRS gpnp配置信息,这里需要注意的是,新的gpnp配置文件中的序列号一定要大于集群当前的序列号,否则会无法覆盖掉远程的gpnp配置

  1. # 查看crs配置信息
  2. gpnptool get
  3. # 修改备份的CRS配置信息
  4. cp $GPNPDIR/profile.xml $GPNPDIR/p.xml
  5. # 找到prf_sq
  6. crs rget
  7. # 修改配置文件中的序列号prf_sq(原crs序列号+1,以及正确的网段信息)
  8. gpnptool edit -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -prf_sq=30 -net2:net_ip=172.16.0.149
  9. # 用私钥重新标识配置文件
  10. gpnptool sign -p=$GPNPDIR/p.xml -o=$GPNPDIR/p.xml -ovr -w=$GRID_ORACLE_HOME/gpnp/h2c400607/wallets
  11. # 将配置文件信息回写到crs中(如果提示order错误,则prf_sq序列号比当前的要小)
  12. gpnptool put -p=$GPNPDIR/p.xml
  13. # 重启集群服务
  14. crsctl stop crs -f
  15. crsctl start crs

将配置文件信息回写到crs集群中,覆盖掉远程的gpnp信息

  1. # 将配置文件信息回写到crs中(如果提示order错误,则prf_sq序列号比当前的要小)
  2. gpnptool put -p=$GPNPDIR/p.xml

重启所有节点的集群,这时所有的集群都可以被正常拉起

  1. crsctl stop crs -f
  2. crsctl start crs