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 데이터가 존재하면 복구 불가)

circle-info

참고

이전 버전에서 지원하던 Failover 옵션 OFF는 NONE으로 ON은 SESSION으로 동작합니다.

다음은 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

circle-info

참고

각 연결 속성별 설명 및 사용 방법은 “제3장 tbJDBC의 사용”“3.2. Connection Properties”를 참고 합니다.

로드 밸런싱

tbJDBC는 일반 애플리케이션 프로그램 환경이나 TAC 환경에서 여러 개의 노드로 사용자를 분산시켜 데이터베이스 서버의 효율성을 향상시키기 위한 기능을 제공합니다. 이를 로드 밸런싱(Load balancing)이라고 합니다. 로드 밸런싱 기능을 사용하려면 DriverManager.getConnection()의 URL을 description 형태로 작 성하고 (load_balance=random)의 형식으로 추가하면 됩니다.

로드 밸런싱 기능 설정

LOADBALANCE 항목에 설정할 수 있는 값은 다음과 같습니다.

설정값
설명

OFF

로드 밸런싱 기능을 비활성화 한다. 항상 URL의 description에 명시된 첫번째 노드로만 연결 (기본값)

RANDOM

이 옵션은 최초 연결 시에 URL의 desctription에 명시된 노드 중 임의의 노드로 연결

ROUND_ROBIN

  • 이 옵션은 최초 연결 시에 URL의 description에 명시된 노드에 순차적으로 연결

  • 3개의 노드에 10회 연결을 시도하는 경우, 연결 순서는 1번, 2번, 3번 노드로 순차적으로 반복하여 1, 2, 3, 1, 2, 3, 1, 2, 3, 1번 노드로 연결

유의 사항은 다음과 같음

  • 연결 순서는 동일한 Connection URL별로 독립적으로 관리됨

  • Failover 시에 연결된 노드는 로드 밸런싱 연결 순서에 영향을 미치지 않음. 예를 들어, 1번 노드에 연결 실패하여 Failover를 통해 3번 노드에 연결 되어도, 다음 연결 시 1번 노드 다음 순서인 2번 노드에 연결.

다음은 로드 밸런싱 기능을 활성화하는 예로 최초 연결을 맺을 때 내부 로직에 의해 svr1과 svr2 사용자로 분산시켜 연결을 맺습니다.

circle-info

참고

이전 버전에서 지원하던 로드 밸런싱 옵션 ON은 RANDOM으로 동작합니다. 로드 밸런싱 기능은 Failover 기능과 혼용하여 설정할 수 있습니다.

  • 로드 밸런싱이 OFF로 설정되면 Failover 시에 그다음 노드에 재접속을 시도합니다.

  • 로드 밸런싱이 RANDOM, ROUND_ROBIN으로 설정되면 Failover 시에 임의의 노드에 재접속을 시도합니다.

ROUND_ROBIN 기능은 Tibero 7.2.3 이후 릴리즈부터 지원합니다.

Last updated