Oracle 11g RAC集群删除节点和重建(二)

Oracle 11g RAC集群删除节点和重建(二)

一、前提说明

本文章计划删除节点三,这一点要注意!!!

1、本文章实验在一个4节点RAC集群中删除一个节点,实际如果是2节点RAC集群环境,步骤基本类似,完全可以参考

2、实验环境的安装,详见我以前的文章《Oracle 11g RAC集群安装_linux7》和《Oracle 11g RAC集群新增节点》

3、本文章计划删除节点三,这一点要非常注意!!!为了区别上一篇文章《Oracle 11g RAC集群删除节点(一)》,选择删除不同的集群节点

4、整个节点删除工作大致围绕三个方面展开:删除实例、删除Oracle数据库软件、删除GI软件

5、本文章删除节点的方法,主要直接通过rm -rf直接删除RAC集群节点(GI和oracle自带的卸载工具用于辅助)

6、在删除节点三后,会重建集群,即节点四重新加入集群

7、另一篇文章《Oracle 11g RAC集群删除节点(一)》,主要通过GI和oracle自带的卸载工具完成节点删除,可以参考

8、文章适用于Oracle RAC 集群中一个节点故障或损坏,需要将该节点从集群中删除,并重新替换新增节点

9、节点一、节点二、节点四可以统称为保留节点,或者存活节点

二、背景介绍

复制代码
集群环境配置如下
项目	              节点一服务器	      节点二服务器         节点三服务器	           节点四服务器
主机名              hostrac1            hostrac2            hostrac1             hostrac2       
操作系统            centos7.9_x64       centos7.9_x64       centos7.9_x64        centos7.9_x64  
集群和数据库软件    Oracle 11.2.0.4      Oracle 11.2.0.4      Oracle 11.2.0.4     Oracle 11.2.0.4
公共网络	        192.168.11.22	     192.168.11.23       192.168.11.27	     192.168.11.28  
私有网络	        10.10.10.22	         10.10.10.23         10.10.10.27	     10.10.10.28    
虚拟VIP	         192.168.11.24	      192.168.11.25       192.168.11.29	      192.168.11.30  
SCANIP	                                       192.168.11.26 
备注:整个集群两个节点共享一个SCANIP地址。

三、准备工作

条件允许的情况下,强烈建议下面的工作:

1、备份OCR/OLR集群配置文件

2、数据库备份

3、软件目录备份

四、正式删除节点

1、关闭节点三上的RAC集群
复制代码
节点三上执行
root用户执行
/u01/app/crs/bin/crsctl stop crs -f

systemctl stop oracle-ohasd.service
systemctl status oracle-ohasd.service

如果有残余,直接kill掉
ps -ef |grep -v grep|grep -E "ohasd|crsd|cssd|evmd|gipcd|gpnpd|mdnsd|diskmon|octssd|orarootagent|oraagent"| awk '{print $2}' | xargs kill -9 2>/dev/null
2、删除节点三实例

在保留节点上执行(节点一执行)

复制代码
方法一:通过dbca图形界面方式完成删除,依次选择 Real Application Clusters -- > Instance Management --- > Delete Instance
方法二:dbca静默方式完成删除实例
删除命令:
dbca -silent -deleteInstance [-nodeList node_name] -gdbName gdb_name -instanceName instance_name -sysDBAUserName sysdba -sysDBAPassword password
node_name  是删除节点名
gdb_name   是全局数据库名
instance   是删除的实例名
sysdba     是拥有sysdba权限的oracle用户名称
passwd     是sysdba用户的密码

具体执行:
su - oracle
dbca -silent -deleteInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle

输出类似如下:
[oracle@hostrac1 ~]$ dbca -silent -deleteInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle
Deleting instance
1% complete
2% complete
6% complete
13% complete
20% complete
26% complete
33% complete
40% complete
46% complete
53% complete
60% complete
66% complete
Completing instance management.
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl0.log" for further details.
3、检查验证
复制代码
在保留节点上执行(节点一、节点二、节点四都可以)
su - oarcle
srvctl status database -d orcl
srvctl config database -d orcl
4、删除节点三上GI集群和Oracle数据库软件的相关文件

待删除的节点三上执行

复制代码
[root@hostrac3 ~]# ls /u01/app/
crs  grid  oracle  oraInventory

linux7版本删除下面的相关文件
export ORACLE_BASE=/u01/app/grid
export GRID_HOME=/u01/app/11.2.0/grid
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1

rm -rf /u01/app/grid/*
rm -rf /u01/app/crs/*
rm -rf /u01/app/oracle/*
rm -rf /u01/app/oraInventory/*
rm -rf /var/tmp/.oracle
rm -rf /etc/oraInst.loc
rm -rf /etc/oratab
rm -rf /etc/oracle
rm -rf /opt/ORCLfmap


linux6版本删除下面的相关文件
export ORACLE_BASE=/u01/app/grid
export GRID_HOME=/u01/app/11.2.0/grid
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
cd $ORACLE_HOME
rm -rf *
cd $ORACLE_BASE
rm -rf *
cd $GRID_HOME
rm -rf * 

rm -rf /etc/rc5.d/S96ohasd
rm -rf /etc/rc3.d/S96ohasd
rm -rf /rc.d/init.d/ohasd
rm -rf /etc/oracle
rm -rf /etc/ora*
rm -rf /etc/oratab
rm -rf /etc/oraInst.loc
rm -rf /opt/ORCLfmap/
rm -rf /taryartar/12c/oraInventory
rm -rf /usr/local/bin/dbhome
rm -rf /usr/local/bin/oraenv
rm -rf /usr/local/bin/coraenv
rm -rf /tmp/*
rm -rf /var/tmp/.oracle
rm -rf /var/tmp
rm -rf /home/grid/*
rm -rf /home/oracle/*
rm -rf /etc/init/oracle*
rm -rf /etc/init.d/ora
rm -rf /tmp/.*
5、删除GI软件
1) 检查被删除节点状态
复制代码
在保留节点上执行(节点一、节点二、节点四都可以)
[grid@hostrac2 ~]$ olsnodes -s -n -t
hostrac1        1       Active  Unpinned
hostrac2        2       Active  Unpinned
hostrac3        3       Inactive        Unpinned
hostrac4        4       Active  Unpinned
2)从集群中删除节点三

在保留节点上执行(节点一、节点二、节点四都可以)

复制代码
在保留节点的$ORACLE_HOME/bin目录下运行如下命令在集群中删除节点(root用户执行)
获取$ORACLE_HOME目录
su - grid
env|grep ORACLE_HOME
ORACLE_HOME=/u01/app/crs
root用户执行
/u01/app/crs/bin/crsctl delete node -n hostrac3

输出如下
[root@hostrac1 ~]# /u01/app/crs/bin/crsctl delete node -n hostrac3
CRS-4661: Node hostrac4 successfully deleted.

验证
su - grid
olsnodes -s -n -t
[grid@hostrac1 ~]$ olsnodes -s -n -t
hostrac1        1       Active  Unpinned
hostrac2        2       Active  Unpinned
hostrac4        4       Active  Unpinned
6、删除节点三残留的资源

在保留节点上执行(节点一、节点二、节点四都可以)

复制代码
查看
crsctl stat res -t
ora.hostrac3.vip
      1        ONLINE  INTERMEDIATE hostrac2                 FAILED OVER 
节点三的VIP资源残留,需要手工删除掉      
su - grid
停止节点三的VIP资源
srvctl stop vip -i hostrac3
root用户删除节点三的VIP资源
su - root
/u01/app/crs/bin/srvctl remove vip -i hostrac3

再次验证查看
crsctl stat res -t
确保ora.hostrac3.vip资源已经被移除掉!

备注,如果还有其它资源残留,按此方法移除即可
7、更新GI集群软件inventory目录

在保留节点上都需要执行(节点一、节点二、节点四都需要执行!!!)!!!!

复制代码
更新inventory命令语法:
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=Oracle_home_location "CLUSTER_NODES={name_of_node_to_delete}"

具体如下:
su - grid
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={hostrac1,hostrac2,hostrac4}" CRS=TRUE 
8、更新Oracle数据库软件inventory目录

在保留节点上都需要执行(节点一、节点二、节点四都需要执行!!!)!!!

复制代码
更新inventory命令:
$ORACLE_HOME/oui/bin/runInstaller -updateNodeList ORACLE_HOME=Oracle_home_location "CLUSTER_NODES={remaining_node_list}"

具体如下:
su - oracle
$ORACLE_HOME/oui/bin/runInstaller -silent -updateNodeList ORACLE_HOME=$ORACLE_HOME "CLUSTER_NODES={hostrac1,hostrac2,hostrac4}" -local
9、检查集群状态
复制代码
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
crsctl stat res -t
10、验证节点是否删除成功
复制代码
这个步骤关系以后是否可以增加节点到集群中!!
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
cluvfy stage -post nodedel -n hostrac3 -verbose
11、备份OCR集群配置文件
复制代码
在保留节点上执行(节点一、节点二、节点四都可以)
su - grid
which ocrconfig
/u01/app/crs/bin/ocrconfig    //获取ocrconfig可执行文件的路径

root用户执行备份
/u01/app/crs/bin/ocrconfig -manualbackup
/u01/app/crs/bin/ocrconfig -local  -manualbackup

验证备份
/u01/app/crs/bin/ocrconfig -showbackup
/u01/app/crs/bin/ocrconfig -local  -showbackup
至此完成集群节点删除!

五、将删除的节点三,重新添加至集群

准备工作
(一)由于是将删除的节点重新加入,下面的准备工作1-17步骤,理论上都在安装阶段完成过,无需执行
复制代码
1、配置主机名  
2、/etc/hosts文件配置
3、集群GI和Oracle数据库安装用户创建
4、创建目录
5、oracle用户和grid用户ssh互信配置
6、共享磁盘配置(共享设备与ASM磁盘映射)
7、配置ntp时间同步
8、操作系统依赖包安装
9、关闭防火墙和selinux安全策略
10、停止和禁用linux7版本上的一些服务器
11、可选,设置linux多用户模式,即纯文本模式,没有图形界面
12、Linux7版本上关闭透明大页和NUMA
13、grid和oracle用户环境变量配置
14、修改/etc/profile配置文件
15、修改内核参数、操作系统用户限制、安全策略
16、可选,内存大于32G,建议设置大页,可以参考以前的文章《Oracle11g 安装完毕后的配置优化步骤》
17、重启生效
(二)18-22阶段的5个步骤,需要手工执行
复制代码
18、源有环境备份数据库(可选,强烈建议)
19、集群配置文件备份(OCR/OLR),这个步骤必须执行!!
节点一完成:
su - grid
which ocrconfig
/u01/app/crs/bin/ocrconfig    //获取ocrconfig可执行文件的路径

root用户执行备份
/u01/app/crs/bin/ocrconfig -manualbackup
/u01/app/crs/bin/ocrconfig -local  -manualbackup

验证备份
/u01/app/crs/bin/ocrconfig -showbackup
/u01/app/crs/bin/ocrconfig -local  -showbackup
20、/etc/oracle目录下的配置文件备份
源有集群三个节点都执行
tar -zcvf /etc/oracle.tar.gz /etc/oracle
21、备份数据库GI集群、DB数据库软件,这个步骤强烈建议执行!!

22、cluvfy验证添加节点的条件是否满足
节点一完成:以grid用户执行
su - grid
cluvfy comp peer -n hostrac1,hostrac2,hostrac3,hostrac4 -verbose
cluvfy stage -pre nodeadd -n hostrac3 -verbose
正式添加节点
1、添加GI集群节点
复制代码
节点一执行(grid用户)
su - grid
export IGNORE_PREADDNODE_CHECKS=Y
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={hostrac3-vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={hostrac3-priv}"

最后提示在新节点(节点三)root用户执行root.sh两个脚本。(这个提示需要执行两个脚本)
/u01/app/oraInventory/orainstRoot.sh #On nodes hostrac3
/u01/app/crs/root.sh #On nodes hostrac3
2、检查集群状态(可以每个节点都执行检查)

crsctl stat res -t

3、添加DB节点(节点一执行)
复制代码
以oracle用户执行,添加节点到Oracle RAC数据库软件
su - oracle
export IGNORE_PREADDNODE_CHECKS=Y
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}"

最后提示在新节点(节点三)root用户执行root.sh两个脚本
/u01/app/oracle/product/11.2/db_1/root.sh
4.添加数据库实例(节点一执行)
复制代码
oracle用户查看数据库配置(节点一执行)
su - oracle
dbca -silent -addInstance -nodeList hostrac3 -gdbName orcl -instanceName orcl3 -sysDBAUserName sys -sysDBAPassword oracle

实例添加后验证:
srvctl config database -d orcl|grep "Database instances"
Database instances: orcl1,orcl2,orcl3,orcl4
5、为新增的节点四数据库实例添加undo及redo(如果用使用DBCA可以自动完成创建Undo表空间、Redo日志及配置初始化参数等工作)
复制代码
在节点一上执行
su - oracle
sqlplus "/as sysdba"
CREATE UNDO TABLESPACE UNDOTBS3 DATAFILE '+DATA/orcl/datafile/undotbs03.dbf' SIZE 50M AUTOEXTEND ON;
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 5 ('+DATA/orcl/redo05.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE THREAD 3 GROUP 6 ('+DATA/orcl/redo06.log') SIZE 50M;
ALTER DATABASE enable THREAD 3;    
备注:如果当时删除节点时,上面的redo、undo都保留,且日志线程enable,则上面的无需执行
6、启动新增的节点三数据库实例
复制代码
启动新的数库实例
srvctl start instance -d orcl -i orcl3
备注:条件允许的情况下,建议直接将数据库整体来一次重启操作
srvctl stop database -d orcl
srvctl start database -d orcl
7、最终验证
复制代码
crsctl stat res -t

至此完成删除节点的重新加入!!

六、总结

复制代码
将节点三重新加入集群时报错,错误类似如下
$ORACLE_HOME/oui/bin/addNode.sh -silent "CLUSTER_NEW_NODES={hostrac3}" "CLUSTER_NEW_VIRTUAL_HOSTNAMES={hostrac3-vip}" "CLUSTER_NEW_PRIVATE_NODE_NAMES={hostrac3-priv}"

WARNING: Error while copying directory /u01/app/crs with exclude file list '/tmp/OraInstall2026-06-18_03-46-30PM/installExcludeFile.lst' to nodes 'hostrac3'. [PRKC-PRCF-2015 : One or more commands were not executed successfully on one or more nodes : <null>]
----------------------------------------------------------------------------------
hostrac3:
    PRCF-2014 : Executing command "mkdir" on "inventory" failed on node "hostrac3".
Permission denied
    PRCF-2014 : Executing command "mkdir" on "assistants" failed on node "hostrac3".
Permission denied
    PRCF-2014 : Executing command "mkdir" on "bin" failed on node "hostrac3".
    
    
节点三服务器上root用户执行
[root@hostrac3 ~]# ll /u01/app
drwxrwxr-x. 2 grid   oinstall  6 Jun 18 15:14 grid
drwxr-xr-x. 3 root   oinstall 28 Jun 18 15:14 crs
drwxrwxr-x. 2 oracle oinstall  6 Jun 18 15:14 oracle
drwxrwx---  2 grid   oinstall 28 Jun 18 15:48 oraInventory

chmod 775 /u01/app/crs

drwxrwxr-x. 3 root   oinstall 28 Jun 18 15:14 crs    修改为775权限,否则copy的时候,出现mkdir错误
drwxrwxr-x. 2 grid   oinstall  6 Jun 18 15:14 grid
drwxrwxr-x. 2 oracle oinstall  6 Jun 18 15:14 oracle
drwxrwx---  2 grid   oinstall 28 Jun 18 15:48 oraInventory