环境:AIX 5.3+10.2.0.5 RAC
情景描述:在一套RAC中,node2节点的VIP2异常漂移至node1通过重启VIP2无法使其转移回node2,于此同时node2节点上并没有发现任何故障。服务器甚至都尝试了重启也无法使VIP2恢复正常。
VIP2的无法使用,使得node2没有新的连接接入,负载全部存在了node1上,同时node1没有故障转移功能了,为了使node2可用,在无法解决原VIP2的前提下,最后的解决办法是:不在考虑原有VIP2的问题,将VIP2在node1关掉,随后在node2上重新添加了一个VIP。
1. 查看资源状态
Oracle@gisdb1:/oracle$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.lsnr application ONLINE ONLINE gisdb1
ora.gisdb1.gsd application ONLINE ONLINE gisdb1
ora.gisdb1.ons application ONLINE ONLINE gisdb1
ora.gisdb1.vip application ONLINE ONLINE gisdb1
ora....B2.lsnr application ONLINE OFFLINE
ora.gisdb2.vip application ONLINE OFFLINE
ora.gisdb2.ons application ONLINE ONLINE gisdb2
ora.gisdb2.gsd application ONLINE ONLINE gisdb2
ora.nxgis.db application ONLINE ONLINE gisdb2
ora....s1.inst application ONLINE ONLINE gisdb1
ora....s2.inst application ONLINE ONLINE gisdb2
此时ora.gisdb2.vip资源无法再节点node2启动,如果使用crs_start 启动则自动在node1上起来。
当然,此时节点node2上的资源ora.gisdb2.listener_gisdb2.lsnr依赖vip2,必然同样无法启动。
2. 在问题解决期间尝试了多次跟踪vip2的启动过程,但依然没有有效的收获。随后查看ocr里的信息:
oracle@gisdb1>ocrdump
OCRDUMPFILE
oracle@gisdb1>vi OCRDUMPFILE
发现里面没有vip2的有关信息,我们知道此时ocr里的信息混乱了。(曾在此之前执行过:srvctl remove nodeapps -f,其中-f参数指强制执行,此参数可能会造成ocr信息的紊乱,非常不建议执行)
3. 当ocr里的ora.gisdb2.vip信息出现问题时,首先考虑进行重新注册ora.gisdb2.vip。
所谓的重新注册就是将ocr中关于ora.gisdb2.vip的信息删除,然后重建vip。重建VIP可以使用VIPCA工具也可以用命令crs_profile,crs_register等一系列的crs_*命令来完成。
4. 移除ora.gisdb2.vip使用命令:
root用户执行:
root@gisdb2: ./srvctl remove nodeapps -n gisdb2(此命令会删除vip,ons,gsd,所以一会你得重建vip和ons,gsd为了保持向后兼容而存在可以选择不重建)
PRKO-02112:"Some or all node applications are not removed successfully onnode:gisdb2"
显然,这里报错无法完成删除node2上的nodeapps
随后查看crs的资源:
oracle@gisdb1:/oracle$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....B1.lsnr application ONLINE ONLINE gisdb1
ora.gisdb1.gsd application ONLINE ONLINE gisdb1
ora.gisdb1.ons application ONLINE ONLINE gisdb1
ora.gisdb1.vip application ONLINE ONLINE gisdb1
ora....B2.lsnr application ONLINE OFFLINE
ora.gisdb2.vip application ONLINE OFFLINE
ora.nxgis.db application ONLINE ONLINE gisdb2
ora....s1.inst application ONLINE ONLINE gisdb1
ora....s2.inst application ONLINE ONLINE gisdb2
可以看到ora.gisdb2.vip依然存在,但是ora.gisdb2.ong,ora.gisdb2.gsd资源没有了。
5. 为了从ocr中移除ora.gisdb2.vip,又尝试使用crs_unregister,此命令从ocr文件中删除掉相应资源的信息
root用户执行:
root@gisdb2:/# ./crs_unresgiter ora.gisdb2.vip
Cann't unregister 'ora.gisdb2.vip‘ because it is required by other resources.
CRS-0214:Could not unregister resource 'ora.gisdb2.vip'
再次报错,因与其它资源关联无法注册掉ora.gisdb2.vip。要注销掉vip设置可能要先注册掉lsnr,database(未测试)
总之,我们失败了。此时问题陷入了窘境。VIP2删除的命令无法成功,我们就没办法更新OCR里的VIP2信息。VIP2在node2上不可用,
RAC此时变成了单节点失去了高可用性。
6. 我们随后考虑到OCR里已经没有了VIP2的信息,我们是否可以直接向OCR中添加VIP2的信息呢,随后的实验还是失败了。报错信息显示ora.gisdb2.vip已经存在,无法添加。
(详细的添加过程这里不在显示,后面会有手动VIP注册的过程)