Fast Application Notification (FAN) 관련 사항

Fast Application Notification(FAN)이란 무엇인가?

Fast Application Notification (FAN)은 Oracle Real Application Clusters (RAC) 환경에서 데이터베이스 인스턴스, 노드, 서비스의 상태 변경을 애플리케이션에 실시간으로 알리는 기능입니다. 이를 통해 애플리케이션은 장애 발생 시 즉각적으로 대응하고, 작업 부하를 효율적으로 분산하여 고가용성을 보장할 수 있습니다.

FAN의 작동 방식

FAN은 데이터베이스에서 발생하는 UP 또는 DOWN 이벤트에 대한 알림을 애플리케이션에 전달합니다. 애플리케이션은 이 알림을 기반으로 다음과 같은 작업을 수행할 수 있습니다.

  • 연결 풀 관리: DOWN 이벤트 발생 시, 해당 인스턴스에 대한 연결을 제거하고, UP 이벤트 발생 시 연결을 추가합니다.
  • 작업 부하 재분산: 서비스 멤버십 정보(어떤 인스턴스가 서비스를 제공하는지)를 기반으로 활성 인스턴스로 작업을 라우팅합니다.
  • 캐시 무효화: 데이터 변경 알림을 기반으로 애플리케이션 캐시를 무효화합니다.

FAN의 주요 이점

  • 고가용성: 장애 발생 시 애플리케이션의 다운타임을 최소화합니다.
  • 작업 부하 관리: 작업 부하를 활성 인스턴스에 효율적으로 분산하여 성능을 향상시킵니다.
  • 애플리케이션 응답성: 실시간 알림을 통해 애플리케이션의 응답성을 개선합니다.
  • 간편한 구성: 애플리케이션 코드 변경 없이 대부분의 FAN 기능을 활용할 수 있습니다.

FAN 구성 및 사용 방법

1. Oracle 클라이언트 구성

FAN을 사용하려면 OCI, JDBC, ODP.NET 등 Oracle 클라이언트를 구성해야 합니다. 각 클라이언트 환경에 따라 구성 방법이 다르며, 이에 대한 자세한 내용은 Oracle 클라이언트 설명서를 참조하십시오. 예시로 JDBC 클라이언트 구성을 설명합니다.

# JDBC 연결 문자열 예시
jdbc:oracle:thin:@(DESCRIPTION=
 (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=racnode1)(PORT=1521))
 (ADDRESS=(PROTOCOL=TCP)(HOST=racnode2)(PORT=1521)))
 (LOAD_BALANCE=yes)
 (CONNECT_DATA=(SERVICE_NAME=myservice.example.com)))

위의 연결 문자열에서 LOAD_BALANCE=yes는 로드 밸런싱을 활성화하고, 클라이언트가 모든 RAC 노드에 연결할 수 있도록 합니다. SERVICE_NAME은 서비스 이름을 지정합니다.

2. 데이터베이스 서비스 구성

FAN은 데이터베이스 서비스와 함께 작동하므로, 데이터베이스 서비스가 올바르게 구성되었는지 확인해야 합니다. 데이터베이스 서비스는 하나 이상의 인스턴스에서 제공될 수 있으며, FAN은 서비스의 상태 변경을 애플리케이션에 알립니다.

3. FAN 이벤트 처리 콜백 등록

애플리케이션은 FAN 이벤트(UP, DOWN 등)를 처리하기 위한 콜백 함수를 등록해야 합니다. 클라이언트 유형에 따라 콜백 등록 방법이 다릅니다. JDBC의 경우, oracle.jdbc.fanEnabled=true 속성을 설정하고 Connection 객체에서 FAN 이벤트를 수신할 수 있습니다. OCI 클라이언트의 경우 OCI API를 사용하여 FAN 콜백을 등록합니다.

// JDBC FAN 이벤트 핸들러 예시
Properties connectionProperties = new Properties();
connectionProperties.setProperty("user", "myuser");
connectionProperties.setProperty("password", "mypassword");
connectionProperties.setProperty("oracle.jdbc.fanEnabled", "true");

Connection conn = DriverManager.getConnection(
  "jdbc:oracle:thin:@(DESCRIPTION=
   (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=racnode1)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=racnode2)(PORT=1521)))
   (LOAD_BALANCE=yes)
   (CONNECT_DATA=(SERVICE_NAME=myservice.example.com)))",
   connectionProperties);

// Connection 객체를 사용하여 FAN 이벤트 처리

실전 예제: 장애 감지 및 작업 부하 재분산

다음은 FAN을 사용하여 RAC 환경에서 장애를 감지하고 작업 부하를 재분산하는 예시입니다.

# 데이터베이스 서비스 생성
srvctl add service -db mydb -service myservice -instances "mydb1,mydb2" -preferred mydb1 -available mydb2

# 데이터베이스 인스턴스 mydb1 중단
sqlplus / as sysdba
shutdown immediate;

# 애플리케이션은 mydb1에 대한 연결이 끊어짐을 감지하고, mydb2로 작업 부하를 재분산
# srvctl start instance -db mydb -instance mydb1 # mydb1 인스턴스 복구

위의 예에서 애플리케이션은 mydb1 인스턴스가 중단되었음을 FAN 알림을 통해 감지하고, LOAD_BALANCE=yes에 따라 mydb2 인스턴스로 자동으로 작업을 재분산합니다. mydb1이 복구되면 다시 mydb1 인스턴스로 작업을 재분산할 수 있습니다.

주의사항

  • FAN은 RAC 환경에서만 작동합니다.
  • FAN을 사용하려면 Oracle 클라이언트 및 데이터베이스가 올바르게 구성되어 있어야 합니다.
  • 콜백 함수는 FAN 이벤트에 신속하게 응답하도록 설계되어야 합니다.

결론

Fast Application Notification (FAN)은 Oracle RAC 환경에서 애플리케이션의 고가용성 및 성능을 향상시키는 데 중요한 기능입니다. FAN을 올바르게 구성하고 활용하면, 장애 발생 시 애플리케이션의 다운타임을 최소화하고, 작업 부하를 효율적으로 분산하여 사용자 경험을 개선할 수 있습니다.

위로 스크롤