Transparent Application Failover (TAF) 소개
Transparent Application Failover (TAF)는 Oracle Database에서 고가용성을 확보하기 위한 핵심 기능 중 하나입니다. TAF는 예기치 않은 장애 발생 시 애플리케이션이 자동으로 데이터베이스에 재접속하여 작업을 지속할 수 있도록 지원합니다. 특히, 클라이언트 애플리케이션의 중단 시간을 최소화하여 사용자 경험을 유지하는 데 중요한 역할을 합니다.
TAF의 핵심 개념
- 서비스 (Service): 애플리케이션이 연결할 데이터베이스 인스턴스를 대표하는 논리적 이름입니다.
- 장애 감지 (Failure Detection): 장애 발생 시, 클라이언트에게 통보하는 과정입니다.
- 자동 재접속 (Automatic Reconnect): 장애가 발생한 인스턴스에서 사용 가능한 다른 인스턴스로 자동으로 연결을 전환합니다.
- 콜백 (Callback): 재접속 과정에서 필요한 사용자 정의 로직을 수행하는 함수입니다.
TAF 구성 단계
TAF를 구성하는 주요 단계는 다음과 같습니다.
- 서비스 구성: 데이터베이스 서비스 생성 및 구성.
- TAF 정책 설정: 서비스에 대한 TAF 정책 정의 (재접속 타입, 페일오버 방식 등).
- 클라이언트 구성: 클라이언트 측 연결 설정 (Easy Connect String, TNS Names 등).
TAF 구성 예시
다음은 TAF를 구성하는 구체적인 예시입니다.
1. 서비스 생성
먼저, 데이터베이스 서비스를 생성합니다.
SQL> EXECUTE DBMS_SERVICE.CREATE_SERVICE(service_name => 'myapp_service', network_name => 'myapp_service');
SQL> EXECUTE DBMS_SERVICE.START_SERVICE('myapp_service');
2. TAF 정책 설정
서비스에 TAF 속성을 설정합니다.
SQL> EXECUTE DBMS_SERVICE.MODIFY_SERVICE(service_name => 'myapp_service',
failover_method => 'BASIC', -- Basic 또는 PRECONNECT
failover_type => 'SELECT', -- SELECT, SESSION, 또는 NONE
failover_retries => 180, -- 재시도 횟수
failover_delay => 10); -- 재시도 간격 (초)
참고:
failover_method
:BASIC
은 장애 발생 시 재접속을 시도하고,PRECONNECT
는 대기 인스턴스에 미리 연결을 설정합니다.failover_type
:SELECT
는 SELECT 문에 대한 페일오버를 지원하고,SESSION
은 전체 세션에 대한 페일오버를 지원합니다.NONE
은 페일오버를 사용하지 않음을 의미합니다.
3. 클라이언트 연결 설정
클라이언트 연결 문자열을 구성합니다.
# Easy Connect String 예시
myapp = (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL=TCP)(HOST=primary_host)(PORT=1521))
(ADDRESS = (PROTOCOL=TCP)(HOST=standby_host)(PORT=1521))
)
(CONNECT_DATA = (SERVICE_NAME=myapp_service))
)
TAF 운영 모드
- Basic TAF: 장애 발생 후 클라이언트가 자동으로 재접속을 시도합니다.
- Preconnect TAF: 장애 발생에 대비하여 대기 인스턴스에 미리 연결을 설정해 둡니다. 장애 발생 시 즉시 연결을 전환하므로, Basic TAF보다 빠른 페일오버가 가능합니다.
TAF 활용 시 고려 사항
- 트랜잭션: 진행 중인 트랜잭션은 페일오버 시 롤백될 수 있습니다.
- 세션 상태: 세션 상태는 페일오버 후 유실될 수 있습니다. 애플리케이션 레벨에서 세션 상태를 관리해야 합니다.
- 리소스: 파일 핸들, 메모리 등은 재접속 후 재할당이 필요합니다.
TAF 관련 팁
- 가능하면
PRECONNECT
TAF를 사용하여 빠른 페일오버를 구현합니다. - 애플리케이션 레벨에서 재접속 로직 및 에러 처리를 구현하여 안정성을 높입니다.
- 세션 상태 유지를 위한 메커니즘을 고려합니다 (예: 쿠키, 세션 서버).
TAF 장애 상황 테스트
고의로 Primary DB에 장애를 발생시키고, Standby DB로 Failover 되는지 확인한다.
#Primary DB Shutdown
sqlplus / as sysdba
shutdown immediate;
#Failover 확인
#어플리케이션 로그, 또는 DB 접속 정보를 통해 확인
결론
Transparent Application Failover (TAF)는 Oracle Database 환경에서 고가용성을 확보하기 위한 중요한 기능입니다. 적절한 구성과 애플리케이션 레벨의 재접속 처리 로직을 통해, 장애로 인한 서비스 중단을 최소화하고 사용자에게 안정적인 서비스를 제공할 수 있습니다. 실제 운영 환경에 TAF를 적용하기 전에 반드시 테스트 환경에서 충분한 테스트를 수행하여 잠재적인 문제를 사전에 식별하고 해결하는 것이 중요합니다.