본문 바로가기
기술 공부/Database

Oracle RAC 19c 노드 추가 구성 가이드 - VirtualBox 환경에서의 삼중화 구축

by soy-ul 2025. 11. 9.
반응형

안녕하세요! 😊

 

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}"

이 단계에서 수행되는 작업:

  1. Grid Infrastructure 소프트웨어를 RAC3에 배포
  2. Oracle Clusterware 구성 (CRS Stack)
  3. ASM 인스턴스 생성 및 시작 (+ASM3)
  4. Cluster 리소스 등록 (VIP, Network)
  5. Voting Disk 및 OCR 접근 권한 설정
  6. 클러스터 멤버십 업데이트

실행 확인:

# 노드 확인
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}"

이 단계에서 수행되는 작업:

  1. ORACLE_HOME 디렉토리 생성
  2. Database 바이너리 파일 복사
  3. Oracle Inventory 업데이트
  4. 환경 변수 설정 파일 생성

주의:

  • 이 단계에서는 Database 인스턴스를 생성하지 않습니다
  • 소프트웨어 배포만 수행됩니다

5단계: Database 인스턴스 추가

RAC1(또는 RAC2)에서 oracle 사용자로 실행:

dbca -silent -addInstance \
  -gdbName racorcl \
  -nodeName rac3 \
  -instanceName racorcl3

DBCA가 자동으로 수행하는 작업:

  1. Undo Tablespace 생성 (UNDOTBS3)
  2. Redo Log Group 생성 (Thread 3)
  3. Instance Number 할당 (3)
  4. SPFILE 파라미터 업데이트
    • cluster_database_instances=3
    • thread=3 (SID별)
  5. 인스턴스 시작
  6. 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

 

 

🔹 마치며

올바른 노드 추가 절차

  1. 새 노드 준비(OS만 설치)
  2. 네트워크 구성 (/etc/hosts 통일)
  3. Grid addnode (기존 노드에서 실행)
  4. Database addnode (기존 노드에서 실행)
  5. DBCA로 인스턴스 추가 (기존 노드에서 실행)
  6. 검증 및 테스트

 

올바른 노드 추가 절차

 

  • ✅ 새 노드는 깨끗한 상태(OS만 설치)로 준비
  • ✅ addnode는 반드시 기존 노드에서 실행
  • ✅ Grid → Database → DBCA 순서 준수
  • ✅ 각 단계마다 검증 수행

 

이 글이 RAC 환경 구축하시는 분들에게 도움이 되면 좋겠습니다.

감사합니다!

 

반응형