안녕하세요! 😊
VirtualBox 환경에서 운영 중인 Oracle RAC 19c 2노드 클러스터에 3번째 노드를 추가하는 작업을 진행했습니다.
그 과정에서 addnode.sh 스크립트를 실행하면 ASM이나 Oracle을 손쉽게 설치, 노드 추가할 수 있다는 것을 알게 되었는데요.
실제로 노드를 추가하며 제가 겪었던 VM 복제를 하였을 때 발생한 문제점과 해결한 방법을 정리해보았습니다!
🔹 환경 구성
기존 환경
- OS: Oracle Linux 7
- Oracle Grid Infrastructure: 19c
- Oracle Database: 19c - 19.20.0.0
- 구성: 2-node RAC (rac1, rac2)
- 공유 스토리지: ASM (Disk Groups: CRS, DATA, FRA)
목표
- 3번째 노드(rac3) 추가
- 3-node RAC 클러스터 구성
🔹 VM 복제 방식의 문제점
시도한 방법: 연결된 복제(Linked Clone)
RAC2 VM을 VirtualBox의 연결된 복제 기능으로 복사하여 RAC3 생성을 시도하니 아래와 같은 에러가 발생하였습니다.
문제 발생:
[INS-40915] 설치 프로그램이 [rac3] 노드에서 Oracle Clusterware를 감지했습니다.
원인 분석:
연결된 복제는 소스 VM의 모든 상태를 복사합니다:
- Grid Infrastructure 설치 상태
- Oracle Inventory 정보
- Clusterware 구성 파일
- Node ID 및 클러스터 식별자
Oracle의 addnode.sh는 미설치 상태의 노드에 소프트웨어를 배포하는 방식으로 동작합니다.
이미 복제된 VM에는 Grid Infrastructure가 설치된 노드이니 충돌이 발생하였습니다.
추가 확인된 문제:
Oracle Inventory에 이미 설치 정보가 등록되어 있어 중복 설치로 인식되었습니다.
[INS-32046] 홈 이름(OraGI19Home1)을 이미 다음 원격 노드에서 사용 중임: [rac3]
🔹 해결 방법: RAC3 환경 초기화
1단계: Grid Infrastructure 완전 제거
# RAC3에서 oracle sudo 권한으로 실행
# [참고] Grid, Oracle 을 oracle OS 유저로 진행
# Grid Infrastructure deconfig
/u01/app/19c/grid/crs/install/rootcrs.sh -deconfig -force
# 설치 디렉토리 제거
rm -rf /u01/app/19c/grid
rm -rf /u01/app/oracle/product/19c/db_1
rm -rf /u01/app/grid
rm -rf /u01/app/oracle
# Oracle Inventory 제거
rm -rf /u01/app/oraInventory
rm -rf /etc/oraInst.loc
rm -rf /var/opt/oracle/oraInst.loc
# 설정 파일 제거
rm -rf /etc/oracle
rm -rf /etc/oratab
# 임시 파일 정리
rm -rf /tmp/CVU*
rm -rf /tmp/OraInstall*
rm -rf /tmp/.oracle
# 재부팅
init 6
2단계: 네트워크 구성 통일
모든 노드에서 동일한 /etc/hosts 파일 구성:
### Public Network
192.168.0.65 rac1 rac1.localdomain
192.168.0.66 rac2 rac2.localdomain
192.168.0.71 rac3 rac3.localdomain
### Private Network (Interconnect)
192.167.1.11 rac1-priv rac1-priv.localdomain
192.167.1.12 rac2-priv rac2-priv.localdomain
192.167.1.13 rac3-priv rac3-priv.localdomain
### Virtual IP
192.168.0.67 rac1-vip rac1-vip.localdomain
192.168.0.68 rac2-vip rac2-vip.localdomain
192.168.0.69 rac3-vip rac3-vip.localdomain
### SCAN IP
192.168.0.51 rac-scan rac-scan.localdomain
192.168.0.52 rac-scan rac-scan.localdomain
192.168.0.53 rac-scan rac-scan.localdomain
주의사항:
- RAC3의 Public IP가 기존 노드의 VIP와 충돌하지 않도록 확인
- 모든 IP는 사전에 네트워크 테스트 완료 필요
🔹 노드 추가 프로세스
3단계: Grid Infrastructure 노드 추가
RAC1(또는 RAC2)에서 grid infra 설치 사용자로 실행:
참고로 저는, oracle 유저로 설치하였기 때문에 oracle 유저에서 addnode.sh 스크립트를 실행하였습니다.
cd /u01/app/19c/grid/addnode
./addnode.sh "CLUSTER_NEW_NODES={rac3}" \
"CLUSTER_NEW_VIRTUAL_HOSTNAMES={rac3-vip}"
이 단계에서 수행되는 작업:
- Grid Infrastructure 소프트웨어를 RAC3에 배포
- Oracle Clusterware 구성 (CRS Stack)
- ASM 인스턴스 생성 및 시작 (+ASM3)
- Cluster 리소스 등록 (VIP, Network)
- Voting Disk 및 OCR 접근 권한 설정
- 클러스터 멤버십 업데이트
실행 확인:
# 노드 확인
olsnodes -n
# 출력:
# rac1 1
# rac2 2
# rac3 3
# 클러스터 상태 확인
crsctl status resource -t
# ASM 인스턴스 확인
srvctl status asm -node rac3
# 출력: ASM is running on rac3(호스트명)
4단계: Oracle Database 소프트웨어 노드 추가
RAC1(또는 RAC2)에서 oracle 사용자로 실행:
cd /u01/app/oracle/product/19c/db_1/addnode
./addnode.sh -silent "CLUSTER_NEW_NODES={rac3}"
이 단계에서 수행되는 작업:
- ORACLE_HOME 디렉토리 생성
- Database 바이너리 파일 복사
- Oracle Inventory 업데이트
- 환경 변수 설정 파일 생성
주의:
- 이 단계에서는 Database 인스턴스를 생성하지 않습니다
- 소프트웨어 배포만 수행됩니다
5단계: Database 인스턴스 추가
RAC1(또는 RAC2)에서 oracle 사용자로 실행:
dbca -silent -addInstance \
-gdbName racorcl \
-nodeName rac3 \
-instanceName racorcl3
DBCA가 자동으로 수행하는 작업:
- Undo Tablespace 생성 (UNDOTBS3)
- Redo Log Group 생성 (Thread 3)
- Instance Number 할당 (3)
- SPFILE 파라미터 업데이트
- cluster_database_instances=3
- thread=3 (SID별)
- 인스턴스 시작
- Cluster 리소스 등록 (ora.racorcl.db)
🔹 구성 완료 후 검증
클러스터 리소스 상태
#ASM 노드 및 DB 인스턴스(racorcl3) 정상 기동 여부 확인 필요
crsctl status resource -t
확인 항목:
- ora.asm - 3개 노드 모두 ONLINE
- ora.DATA.dg, ora.CRS.dg, ora.FRA.dg - 3개 노드에서 접근 가능
- ora.rac3.vip - ONLINE
- ora.racorcl.db - 3개 인스턴스 모두 ONLINE
서비스 상태 확인
srvctl status database -d racorcl
# 출력:
# Instance racorcl1 is running on node rac1
# Instance racorcl2 is running on node rac2
# Instance racorcl3 is running on node rac3
srvctl config database -d racorcl
# 출력에서 Configured nodes 확인: rac1,rac2,rac3
🔹 학습하며 이해한 아키텍처 설명
Grid Infrastructure addnode vs Database addnode
구분Grid addnodeDatabase addnode
| 구분 | Grid addnode | Database addnode |
| 실행 경로 | /u01/app/19c/grid/addnode | /u01/app/oracle/product/19c/db_1/addnode |
| 권한 | grid 설치 OS 유저 | oracle DB 설치 유저 |
| 설치 대상 | Clusterware + ASM | Database 바이너리 |
| 인스턴스 생성 | ASM 인스턴스 생성 | 인스턴스 생성 안 함 |
| 클러스터 등록 | 노드를 클러스터에 추가 | ORACLE_HOME 등록 |
스크립트 실행 간 참고
addnode.sh는 기존 노드에서 실행해야 합니다:
- 기존 클러스터 구성 정보를 읽어옴
- SSH를 통해 원격 노드에 소프트웨어 배포
- OCR에서 클러스터 메타데이터 업데이트
새 노드(RAC3)에서 실행하면 안 되는 이유:
- 클러스터 구성 정보 없음
- OCR 접근 불가
- 클러스터 멤버십 정보 없음
🔹 트러블슈팅
문제 1: VIP INTERMEDIATE 상태
crsctl stat res ora.rac1.vip -t
# State: INTERMEDIATE
해결:
#명령어 수행 노드의 VIP 재기동
srvctl stop vip -node rac1
srvctl start vip -node rac1
🔹 유용한 명령어
인스턴스 관리
노드 추가, 멀티 인스턴스 환경을 구성하였습니다. 아래 명령어를 실행하여 특정 인스턴스나 DB 컨트롤을 효율적으로 진행하였습니다.
# 특정 인스턴스 시작/중지
srvctl start instance -db racorcl -instance racorcl3
srvctl stop instance -db racorcl -instance tdeorcl3
# 전체 데이터베이스 시작/중지
srvctl start database -db racorcl
srvctl stop database -db tdeorcl
🔹 마치며
올바른 노드 추가 절차
- 새 노드 준비(OS만 설치)
- 네트워크 구성 (/etc/hosts 통일)
- Grid addnode (기존 노드에서 실행)
- Database addnode (기존 노드에서 실행)
- DBCA로 인스턴스 추가 (기존 노드에서 실행)
- 검증 및 테스트
올바른 노드 추가 절차
- ✅ 새 노드는 깨끗한 상태(OS만 설치)로 준비
- ✅ addnode는 반드시 기존 노드에서 실행
- ✅ Grid → Database → DBCA 순서 준수
- ✅ 각 단계마다 검증 수행
이 글이 RAC 환경 구축하시는 분들에게 도움이 되면 좋겠습니다.
감사합니다!
'기술 공부 > Database' 카테고리의 다른 글
| MongoDB 최신 버전 설치와 데이터 마이그레이션 가이드 (Ubuntu 24.04) (2) | 2025.07.08 |
|---|