【VIP】RAC中VIP2异常转移的解决方法

来源:互联网 发布:世界软件病毒排行榜 编辑:程序博客网 时间:2024/06/01 18:44

环境: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注册的过程)


7.上面实验的失败让人感到一点绝望。对于VIP2,你已经无可奈何。OCR信息的紊乱只能是将紊乱的信息unregister,然后重新register。但现在vip2无法unregister,也许将instan,listener同样unregister
后,vip2就可以unregister了。但是在生产环境中,同时考虑到时间问题来不及做测试是不敢做这个操作的。随后想到了另一种方法保守的做法,尽管不完美却行之有效:
既然对于VIP2丝毫没有可以撼动的办法,那就不管它了。然后手工重建一个新的VIP,新的VIP名字不要和ora.gisdb2.vip相同即可。这里我新建了一个ora.gisdb2-test.vip。
NOTE:下面将会用到crs_*的各种命令,详细用户与作用可操作官方文档的Oracle Clusterware and Oracle Real Application cLUSTERS Administraion and Deploymnt Guid的最下面部分。
7.1 首先,通过crs_profile创建vip资源,也就是关于vip的配置信息,就是crs_stat -p展现出来的那些信息
./crs_profile -create ora.gisdb2-test.vip -t application -d "vip on node2" -a $ORA_CRS_HOME/bin/usrvip -o oi=eth0,ov=192.168.10.14,on=255.255.255.0 -h gisdb2 -p favored
创建好vip配置文件后可以在$ORA_CRS_HOME/crs/profile(也可能是$ORA_CRS_HOME/crs/public下)目录下看到文件ora.gisdb2-test.vip.cap文件,你可以查看一下其内容
>cat ora.gisdb2-test.vip.cap,其显示的内容和crs_stat -p 显示的关于vip的信息结构是一样的。
7.2 创建好VIP的配置文件后,需要将其信息注册到ocr中
crs_register ora.gisdb2-test.vip.cap
注册完毕后,可以看到新增了资源:
crs_stat -t
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....est.vip application    OFFLINE   OFFLINE    gisdb2

7.3 对新增 的ora.gisdb2-test.vip资源进行赋权,在root用户下执行(不用的资源对应的权限可能不同,如果不知道资源是属于root还是oracle,可以先尝试给root,如果在后续启动资源时报错再尝试改为oracle)
root@gisdb2]#crs_setperm ora.gisdb2-test.vip -o root
root@gisdb2]#crs_setperm ora.gisdb2-test.vip -u user:oracle:r-x

7.4最后通过oracle用户启动资源ora.gisdb2-test.vip
crs_start ora.gisdb2-test.vip


7.5查看状态
crs_stat -t
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....est.vip application    ONLINE   ONLINE    gisdb2

至此新增的VIP还不能为我们服务,我们还需要lsnr资源。如果你此时尝试启动现有的lsnr资源则会报错。
此现有的lsnr资源和ora.gisdb2.vip关联的。所以,我们还需要重建注册一个新的与ora.gisdbs2-test.vip相关连的lsnr资源。


8. 新增lsnr资源。此资源的增加方法和vip类似。
我们在前面使用了crs_profile -create来生成了*.cap文件。而且此文件内容结构和crs_stat -p相同。
如果不知道如何使用crs_profile命令中的参数来生成lsnr资源的*.cap配置文件。可以使用另一个好的节点的lsnr资源信息:
8.1 root用户执行:
crs_stat -p ora.gisdb1.LISTENER_GISDB1.lsnr>$ORA_CRS_HOME/crs/profile/ora.gisdb2.LISTENER_GISDB2_test。lsnr.cap
8.2然后编辑ora.gisdb2.LISTENER_GISDB2_test。lsnr.cap,里面的信息很简单,将里面的节点信息改为gisdb2,vip信息改为ora.gisdb2-test.vip。
这里将ora.gisdb2.LISTENER_GISDB2_test。lsnr.cap文件的属组改为oracle:oinstall。
8.3进行注册ora.gisdb2.LISTENER_GISDB2_test.lsnr资源的注册
./crs_register ora.gisdb2.LISTENER_GISDB2_test。lsnr
8.4查看资源多了ora.gisdb2.LISTENER_GISDB2_test.lsnr
因为此资源与监听相关,你还要创建一个名字为LISTENER_GISDB2_test的监听后才可以启动该资源。


9.ons的添加,同lsnr资源的添加相同。如果理解了前面过程,ONS的添加同样没有问题。
最后资源情况如下:
oracle@gisdb2:/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....est.vip application    ONLINE    ONLINE    gisdb2      
ora....B2.lsnr application    ONLINE    OFFLINE               
ora....st.lsnr application    ONLINE    ONLINE    gisdb2      
ora.gisdb2.ons application    ONLINE    ONLINE    gisdb2      
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      

已经有了新的 VIP和LSNR,那两个OFFLINE的暂时先不用管了。此时应用可以连接到节点node2。


ballontt
2014/01/15

---The End---
微博weibo.com/ballontt
如需转载,请标明出处和链接,谢谢!


0 0
原创粉丝点击