RAC

RAC 에서의 인스턴스간 통신 ☞ global enqueue, cache coherency
※ 여러 개의 인스턴스가 하나의 데이터베이스를 공유 하면서 일관성을 유지할 수 있도록 함

Big Picture

  • 각 노드는 클라이언트 접속을 위한 Public, 인스턴스간 통신을 위한 Private 네트워크에 연결 됨
  • 모든 인스턴스는 모든 스토리지에 접근 필요
  • 노드간 통신 실패를 제어하기 위해 Voting Disks 존재
  • OS 와 인스턴스 사이의 소프트웨어(클러스터 서비스)는 장비간 통신을 보장 (예: HACMP)
  • 클라이언트 접속을 위한 Virtual 네트워크가 public 네트워크 위에서 동작
  • 노드에 단일 ASM 인스턴스와 복수 가능 RDBMS 인스턴스 존재 (ASM 은 옵션)

VIRTUAL IP 주소 및 SCAN

  • 클러스터가 기동되면 RIP 위에 VIP 를 할당 하고 외부 장비간 통신에 활용
  • VIP 는 소프트웨어에 의해 제어되고 하드웨어 연관된 부분도 동적으로 변경 가능 (VIP 의 노드간 이동)
  • RIP 는 장애시 TCP/IP 타임아웃으로 인해 장애 감지가 느리지만, VIP 는 나머지 정상 노드로 이동 함 으로서 빠른 장애 극복 가능

노드 장애시 VIP / RIP 동작 방식 비교


-- VIP : 노드 장애시 다른 노드로 VIP 가 이동하여 클라이언트에 즉시 응답 (네트워크에 192.168.10.10 IP 는 존재, 1521 PORT 는 LISTEN 하지 않음)
root@oracleclub:~# time telnet 192.168.10.10 1521
Trying 192.168.10.10...
telnet: connect: A remote host refused an attempted connect operation.

real    0m0.03s
user    0m0.01s
sys     0m0.00s

-- RIP : 노드 장애시 네트워크에서 RIP 가 사라짐에 따라 클라이언트는 TIMEOUT 까지 대기 (네트워크에 192.168.10.11 IP 가 없음)
root@oracleclub:~# time telnet 192.168.10.11 1521
Trying 192.168.10.11...
telnet: connect: A remote host did not respond within the timeout period.

real    2m29.99s
user    0m0.00s
sys     0m0.00s

root@oracleclub:~# no -a | grep tcp_keepinit
              tcp_keepinit = 150

  • 11.2 에서 SCAN(Single Client Access Name) 소개
    • DNS => SCAN LISTENER + SCAN VIP ==> LISTENER + VIP
    • 노드 추가/제거 시 클라이언트 설정 변경 불필요