본문 바로가기
Dev/DataBase

[MariaDB] JDBC를 통한 failover

by nakanara 2020. 10. 29.
반응형

MariaDB

MariaDB의 failover기능을 사용하기 위해 Galera Cluster이 아닌 Replication기능을 이용하여 Master-Master 설정하였으며, WAS의 JDBC를 통한 failover 설정을 함

JDBC에서 failover 및 load balancing을 위한 옵션이 존재하여 정리.

JDBC failover 및 load balancing 설정

  • JDBC 설정 방법

    jdbc:(mysql|mariadb):[replication:|sequential:|loadbalance:|aurora:]//[,...]/[database][?=[&=]...]

  • replication: jdbc:mysql:replication://master1,slave1,slave2/test
  • sequential: jdbc:mariadb:sequential://master1,master2/test
  • loadbalance: jdbc:mariadb:sequential://master1,master2/test

sequential

다중 마스터 환경에서 사용 가능하며, 정의된 순서대로 Connection 연결 시도, 첫 번째 호스트를 접속하지 못한 경우 다음 호스트로 순차적 접속 시도 연결 시도, (다중 Master, failover)

MariaDB Connector/J 1.3.0 이상

loadbalance

다중 마스터 환경에서 사용, 정의된 host 중 무작위로 선택, 부하를 분산 처리(다중 Master, 부하 분산)

Galera처럼 테이블을 동시에 잠금하여 작업하지 않는 이상 사용 불가, Relation기능을 이용한 다중 마스터의 경우 트랜잭션이 끝난 이후 동기화가 이루어지므로, 문제 발생 가능성 있음

MariaDB Connector/J 1.2.0 이상

replication

마스터-슬레이브 환경에서 슬레이브에 로드밸런싱을 지원, 슬레이브로 설정된 호스트에 무작위 연결 부하 분산
(슬레이브 failover, 부하 분산)

MariaDB Connector/J 1.2.0 이상

관련 변수

  • autoReconnect: failover기능이 비활성화된 상태에서는 해당 호스트에 재 연결을 시도하며, failover기능 활성화 상태에서는 다른 호스트에 연결을 시도 (default:false)
  • retriesAllDown: 모든 호스트가 작동이 중지된 경우 예외를 발생시키기 전 최대 연결 시도 횟수(default: 120) ??
  • failoverLoopRetries: 예외 발생 전 최대 연결 시도 횟수(default: 120), retriesAllDown와 다름???
  • validConnectionTimeout: 연결된 이후, 주기적 연결 확인, 0 설정한 경우 확인하지 않음(default: 120)
  • loadBalanceBlacklistTimeout: 연결이 실패한 경우 해당 호스트는 블랙리스트에 추가, 설정된 시간 동안 접속을 시도하지 않음, 남은 호스트가 없는 경우 블랙리스트에 있는 호스트도 접속 시도(default: 50초)
  • assureReadOnly: 읽기 전용 설정한 경우, 해당 값이 true인 경우 세션을 읽기 모드로 설정(default: false)
  • allowMasterDownConnection : replication모드로 사용 중 마스터가 중지된 경우 슬레이브에 기본 연결로 설정, 운영, 쓰기는 안됨(default: false)

설정

DB를 Master-Slave 기능을 양쪽으로 설정하여 Master-Master로 설정한 후, JDBC 설정을 sequential(순차적) 접속 연결로 설정하여, DB failover에 대응하도록 설정

 

2020/10/16 - [Dev/DataBase] - [MariaDB] 이중화 설정

<Resource name="jdbc" auth="Container"
      type="javax.sql.DataSource" 
      driverClassName="org.mariadb.jdbc.Driver"
      url="jdbc:mysql:sequential://192.168.0.100:3006,192.168.0.200:3006/db?characterEncoding=utf8&amp;connectTimeout=60000"
      username="id" 
      password="pw" 
      maxTotal="10" 
      maxIdle="5"
      maxWaitMillis ="-1"/>

참고

2020/10/16 - [Dev/DataBase] - [MariaDB] 이중화 설정

#mariadb #mysql #failover #loadbalancing

반응형