JDBC Failover 및 Load balancing
tbJDBC Failover 기능 및 로드밸런싱(Load balancing) 기능을 설명합니다.
Failover
tbJDBC는 일반 애플리케이션 프로그램 환경이나 TAC 환경에서 최초 연결을 맺을 때 또는 임의의 작업을 수행하는 중에 연결이 끊어졌을 때, 일부 자원들을 자동으로 복원해주는 기능을 제공합니다. 이를 Failover 라고 합니다.
Failover 기능 설정
Failover 기능을 사용하려면 DriverManager.getConnection()의 URL을 description 형태로 작성하고FAILOVER를 설정하여 사용합니다.
FAILOVER 항목에 설정할 수 있는 값은 아래와 같습니다.
NONE
Failover 기능을 비활성화 (기본값)
SESSION
연결에 실패했을 때, 다음 노드로 재접속을 시도하여 연결을 복원
CURSOR
이 옵션은 SESSION 복원을 포함하며, 사용중이던 java.sql.ResultSet을 복원 복원 가능한 경우
SELECT 문장을 직접 수행하는 경우
ResultSet 타입이 TYPE_FORWARD_ONLY, TYPE_SCROLL_INSENSI TIVE인 경우
ResultSet concurrency 모드가 CONCUR_READ_ONLY인 경우
재사용 가능한 파라미터만 사용한 경우(Reader, Stream 등의 휘발성 데이터나 또는 varchar 타입 최대 크기를 초과하는 String 데이터가 존재하면 복구 불가)
아래는 Failover 기능을 활성화하는 예입니다. svr1로 연결이 실패하면 자동으로 svr2로 연결을 시도합니다. (단, 모든 서버에 대한 연결 시도가 실패할 때는 오류가 발생합니다.)
Connection conn =
DriverManager.getConnection("jdbc:tibero:thin:@(description=(failover=session)" +
"(address_list="+
"(address=(host=svr1)(port=8629))"+
"(address=(host=svr2)(port=7629))"+
")(DATABASE_NAME=TACUAC))", "tibero", "tmax");
Failover 동작 관련 연결 속성
Failover SESSION 이상의 모드인 경우 연결 복원 과정에서 재시도 횟수를 다음의 속성을 통해 지정할 수 있습니다.
failover_retry_count
아래의 연결 속성을 이용하여, 실제로 장애가 발생하였더라도 클라이언트에서 연결 종료를 감지하지 못해 무한정 대기하는 경우를 회피할 수 있습니다.
login_timeout
read_timeout
self_keepalive
Load balancing
tbJDBC는 일반 애플리케이션 프로그램 환경이나 TAC 환경에서 여러 개의 노드로 사용자를 분산시켜 데이터베이스 서버의 효율성을 향상시키기 위한 기능을 제공합니다. 이를 로드 밸런싱(Load balancing)이라고 합니다.
로드 밸런싱 기능은 DriverManager.getConnection()의 URL을 description 형태로 작성하고 (load_balance=on) 를 추가하면 사용할 수 있습니다.
아래는 로드 밸런싱 기능을 활성화하는 예로써, 최초 연결을 맺을 때 내부 로직에 의해 svr1과 svr2 사용자로 분산시켜 연결을 맺습니다.
Connection conn =
DriverManager.getConnection("jdbc:tibero:thin:@(description=(load_balance=on)"
+
"(address_list="+
"(address=(host=svr1)(port=8629))"+
"(address=(host=svr2)(port=7629))"+
")(DATABASE_NAME=TACUAC))", "tibero", "tmax");
Last updated