[03] SCAN (Single Client Access Network) 동작원리

 

오라클 12c RAC로 DB 서버를 신규 구축하려고 합니다. SCAN을 사용하는 것이 좋을까요?”

위와 같은 질문을 받았다고 가정해보겠습니다. 이에 대한 대답은 크게 3가지 정도로 나뉠 것 같습니다.

  1. 새로운 기능은 위험 부담이 있습니다. 기존처럼 VIP를 사용하는 것이 좋습니다
  2. SCAN이 좋다고 하던데, 한번 적용해 볼까요?
  3. SCAN의 특성은 이러합니다. 또한 SCAN의 장단점은 이러합니다. 따라서 우리 환경의 특성을 고려해볼 때 SCAN을 적용하는 것은 무리가 있을 것 같습니다. (또는, SCAN의 특성 상 우리 환경에 적합해 보입니다. 테스트 환경을 구축해서 검증해보도록 하겠습니다)

아마 1번과 같은 답변이 꽤 많을 것 같습니다. 왜냐하면, IT가 최첨단의 기술을 접목시키는 분야이기도 하지만, 인프라가 잘 운영(또는 고착)되고 있는 상황에서는 어느 정도의 보수성을 가지기 때문입니다. 2번과 같은 반응은 두말할 나위 없이 위험합니다. 우리가 공부를 하는 이유는 3번과 같은 답을 위해서 입니다.

제가 며칠동안 SCAN을 학습하면서 내린 나름의 결론은 “SCAN은 고수준의 자동 로드 밸런싱이 필요한 환경에서만 적용하는 것이 좋다”입니다. 좀 더 풀어서 말하면

  • RAC 노드들이 꽤 많고
  • 애플리케이션 로드 밸런싱을 수행하며
  • 노드들의 추가 또는 삭제가 자주 발생하는 환경을 의미합니다.

(이런 환경이 많이 있을지 의문이 들긴 합니다)

조금 더 세부적인 이야기는 SCAN의 동작원리를 설명하면서 진행하도록 하겠습니다.

3. SCAN (Single Client Access Network) 동작원리

3-1. SCAN이란?


SCAN은 11gR2부터 제공되며, 하나의 이름으로 RAC의 모든 노드를 액세스할 수 있는 기능입니다. 기존에는 클라이언트마다 커넥션 스트링을 관리한 반면, SCAN을 사용하게 되면 DNS 레벨에서 중앙 집중적으로 커넥션 스트링을 관리할 수 있게 됩니다. SCAN을 이용한 TNS 설정 방법은 “예시-1”을 참고하시면 됩니다.

예시-1. TNSNAMES.ORA 예제

-- SCAN을 이용한 설정
ORA12C_SCAN =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12C)
    )
)
-- VIP를 이용한 설정 (기존 방식)
ORA12C_VIP =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORA12C)
    )
  )

위의 예시에서 rac-scan이 SCAN 명이고 해당 명칭은 DNS에서 인식이 가능해야 합니다.

Note
테스트를 위해 DNS 서버를 구성하려는 분들은 “Dnsmasq를 이용해서 간단한 DNS 서버를 구성하는 방법”을 참고하세요.

 

3-2. SCAN의 장점


SCAN의 장점은 크게 2가지로 요약할 수 있습니다.

  1. 클라이언트마다 수행하던 커넥션 스트링 관리를 DNS 레벨에서 관리
  2. SCAN 리스너를 이용하여 기존보다 정확한 로드 밸런싱 수행

기존 방식을 사용할 경우에는 RAC 노드가 추가 또는 삭제될 경우에 클라이언트마다 커넥션 스트링 (TNSNAMES.ORA 및 JDBC Connection String)을 변경할 필요가 있습니다. 하지만 SCAN을 사용할 경우에는 DNS 서버에서 커넥션 스트링을 관리하므로 클라이언트들은 별도의 변경 작업이 필요 없다는 장점이 있습니다.

또한, 기존의 VIP 리스너는 워크로드를 정확하게 계산하지 못하므로 최적의 로드 밸런싱을 수행하지 못했던 문제가 존재했으나,, SCAN 리스너는 최적의 로드 밸런싱을 수행한다고 합니다.

이러한 2가지 장점이 큰 이득이 되는 환경에서는 SCAN 적용을 검토할 필요가 있습니다. 만일 그렇지 않다면 VIP를 이용하는 것이 좋습니다.

 

3-3. SCAN 구성도


SCAN 명은 DNS에서 관리되고, SCAN IP는 최대 3개를 사용합니다. SCAN IP 마다 1개의 SCAN 리스너가 할당되므로 SCAN 리스너 역시 최대 3개입니다. SCAN 리스너의 역할은 클라이언트의 접속 요청이 있는 경우에, DB 서버들의 부하를 체크한 후 최적의 노드를 선택하고 해당 노드의 Local 리스너에게 접속 요청을 전달하는 것입니다.

즉, 가벼운 역할 (부하 체크 & Local 리스너에게 접속 요청 재전송)만을 수행하므로 RAC 노드 수와 무관하게 (RAC 노드 수가 수십 개라도) 최대 3개만 제공합니다. SCAN를 적용한 RAC 구성도는 “그림-1”과 같습니다.

그림-1. SCAN을 적용한 RAC 구성도

03-1-_scan_%ea%b5%ac%ec%84%b1%eb%8f%84

Note
RAC 2 노드 환경에서 3개의 SCAN IP를 설정했다면 1개의 서버에 2개의 SCAN IP가 할당되고 나머지 1개의 서버에 1개의 SCAN IP가 할당됩니다.

 

3-4. Connection Pool 환경에서 SCAN 사용 시 주의 사항


WAS 환경에서는 일반적으로 Connection Pool을 사용하며, Connection Pool 별로 서로 다른 서비스를 제공합니다. “그림-2”는 VIP 환경에서 2개의 Connection Pool을 이용해서 2개의 서비스를 제공하는 예입니다.

그림-2. VIP 환경에서의 Connection Pool 예시

03-2
이러한 환경에서, “서비스” 설정 없이 SCAN을 사용할 경우에는 “그림-3”과 같은 문제가 발생하게 됩니다. 즉, 동일한 서비스에 대한 커넥션이 서로 다른 노드에 접속할 가능성이 높고, 이로 인해 불필요한 Interconnect 전송이 발생함으로써 성능 저하가 발생할 수 있습니다.

그림-3. SCAN 환경에서의 Connection Pool 예시

03-3

따라서, SCAN을 적용할 때는 커넥션 관리 부분을 신경 써야하고, 이를 위해서는 반드시 “서비스”를 적용하는 것이 좋습니다. “서비스”에 대해서는 다음 연재에서 다루도록 하겠습니다.

 

참고문헌


Expert Oracle RAC 12c [Apress – Syed Jaffar Hussain외 3명]
Oracle Single Client Access Network (SCAN) [June 2013 – An Oracle White Paper]

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s