본 장에서는 tbJDBC에서 제공하는 Failover 기능과 로드 밸런싱(Load balancing) 기능을 설명한다.
tbJDBC는 일반 애플리케이션 프로그램 환경이나 TAC 환경에서 최초 연결을 맺을 때 또는 임의의 작업을 수행하는 중에 연결이 끊어졌을 때 다시 자동으로 연결을 맺는 기능을 제공한다. 이를 Failover라고 한다.
Failover 기능을 사용하려면 DriverManager.getConnection()의 URL을 description 형태로 작성하고 (FAILOVER=ON)만 추가하면 된다.
다음은 Failover 기능을 활성화하는 예로, svr1로 연결이 실패하면 자동으로 svr2로 연결을 시도한다. 단, 모든 서버에 대한 연결 시도가 실패할 때는 에러가 발생한다.
Connection conn = DriverManager.getConnection("jdbc:tibero:thin:@(description=(failover=on)" + "(address_list="+ "(address=(host=svr1)(port=8629))"+ "(address=(host=svr2)(port=7629))"+ ")(DATABASE_NAME=TACUAC))", "tibero", "tmax");
Failover 기능을 활성화하여 서버와 연결을 맺을 때 옵션을 설정할 수 있다. 이 옵션은 java.util.Properties 클래스를 이용하여 저장되고, DriverManager.getConnection()의 파라미터로 사용된다.
Properties prop = new Properties(); prop.set("user", "tibero"); prop.set("password", "tmax"); prop.set("databaseName", "TACUAC"); ... Connection conn = DriverManager.getConnection("jdbc:tibero:thin:@(description=(failover=on)" + "(address_list="+ "(address=(host=svr1)(port=8629))"+ "(address=(host=svr2)(port=7629))"+ "))", prop);
사용자가 서버로 접속을 시도할 때 서버가 연결을 더는 맺을 수 없는 상황이거나 네트워크 문제로 오래 걸리는 경우가 있다. 이때 무한정 기다리는 것을 방지하기 위해 login timeout 옵션을 설정할 수 있다.
prop.set("login_timeout", "10000");
login_timeout | 설명 |
---|---|
기본값 | 무한대이다. |
키와 값 | 반드시 문자열로 설정해야 한다.
|
서버와 접속을 성공한 후 클라이언트와 통신 중에 서버가 바쁜 상황이거나 네트워크 문제로 오래 걸리는 경우가 있다. 이때 무한정 기다리는 것을 방지하기 위해 read timeout 옵션을 설정할 수 있다.
prop.set("read_timeout", "30000");
read_timeout | 설명 |
---|---|
기본값 | 무한대이다. |
키와 값 | 반드시 문자열로 설정해야 한다.
|
Failover 기능은 특정 조건이나 상황이 성립되어 서버로부터 연결이 끊어지면, 자동으로 다른 노드로 재연결을 시도한다. 그러나 어떤 특정 문제 때문에 다른 노드로의 연결도 실패할 수 있다. 이렇게 모든 노드에 대해 차례로 접속을 시도했으나 실패한 경우에는 처음부터 다시 모든 노드에 대해 접속을 시도한다. 이 접속 횟수를 결정하는 것이 failover_retry_count 옵션이다.
prop.set("failover_retry_count", "10");
failover_retry_count | 설명 |
---|---|
기본값 | 3 |
키와 값 | 반드시 문자열로 설정해야 한다.
|
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");
로드 밸런싱 기능은 Failover 기능과 혼용하여 설정할 수 있다.