부하 분산 구성

부하 분산 구성은 HA 구성(한 개의 마스터 노드와 한 개의 슬레이브 노드)에 여러 개의 레플리카 노드를 두어 CUBRID 서비스의 가용성을 높이고, 많은 읽기 부하를 분산하여 처리할 수 있는 구성이다.

레플리카 노드들은 HA 구성에 포함된 노드들로부터 복제 로그를 받아 데이터를 동일하게 유지하고, HA 구성에 포함된 노드들은 레플리카 노드에서 복제 로그를 받지 않으므로 다중 슬레이브 구성에 비해 네트워크 및 디스크 사용률이 낮다.

레플리카 노드는 HA 구성에 포함되지 않으므로 HA 구성 내의 모든 노드에 장애가 발생해도 failover되지 않고 읽기 서비스만 제공한다.

노드 설정 예시

부하 분산 구성의 각 노드는 다음과 같이 설정한다.

브로커 노드의 databases.txt 파일에는 브로커의 용도에 맞게 HA 또는 부하 분산 서버와 연결될 수 있도록 DB 서버 호스트의 목록을 순서대로 설정해야 한다.

다음은 nodeA와 nodeB의 databases.txt 파일의 예이다.

#db-name    vol-path                  db-host       log-path             lob-base-path

testdb     /home/cubrid/DB/testdb1   nodeA:nodeB   /home/cubrid/DB/testdb/log file:/home/cubrid/CUBRID/testdb/lob

다음은 nodeC의 databases.txt 파일의 예이다.

#db-name    vol-path                  db-host       log-path             lob-base-path

testdb     /home/cubrid/DB/testdb   nodeC   /home/cubrid/DB/testdb/log        file:/home/cubrid/CUBRID/testdb/lob

다음은 nodeD의 databases.txt 파일의 예이다.

#db-name    vol-path                  db-host       log-path             lob-base-path

testdb     /home/cubrid/DB/testdb   nodeD   /home/cubrid/DB/testdb/log file:/home/cubrid/CUBRID/testdb/lob

cubrid_broker.conf 파일은 브로커를 어떻게 구성하느냐에 따라 다양하게 설정할 수 있으며 databases.txt 파일과 함께 별도의 장비로 구성하여 설정할 수도 있다.

예시에서는 nodeA, nodeB에 RW 브로커를 설정하고, nodeC, nodeD에 PHRO 브로커를 설정하였다.

다음은 nodeA와 nodeB의 cubrid_broker.conf의 예이다.

[%RW_broker]

 

# Broker mode setting parameter

ACCESS_MODE             =RW

다음은 nodeC의 cubrid_broker.conf의 예이다.

[%PHRO_broker]

 

# Broker mode setting parameter

ACCESS_MODE             =PHRO

PREFERRED_HOSTS         =nodeC:nodeD

다음은 nodeD의 cubrid_broker.conf의 예이다.

[%PHRO_broker]

 

# Broker mode setting parameter

ACCESS_MODE             =PHRO

PREFERRED_HOSTS         =nodeD:nodeC

응용 프로그램 연결 설정

읽기 쓰기로 접속하기 위한 응용 프로그램은 nodeA 또는 nodeB에 있는 브로커에 연결한다. 다음은 JDBC 응용 프로그램의 예이다.

Connection connection = DriverManager.getConnection("jdbc:CUBRID:nodeA:33000:testdb:::?charset=utf-8&althosts=nodeB:33000", "dba", "");

읽기 전용으로 접속하기 위한 응용 프로그램은 nodeC 또는 nodeD에 있는 브로커에 연결한다. 다음은 JDBC 응용 프로그램의 예이다.

Connection connection = DriverManager.getConnection("jdbc:CUBRID:nodeC:33000:testdb:::?charset=utf-8&althosts=nodeD:33000", "dba", "");

기타 자세한 사항은 환경 설정의 JDBC 설정, CCI 설정, PHP 설정을 참고한다.

주의 사항

이 구성은 다중 장애 시 CUBRID HA 그룹 내의 데이터가 동일하지 않은 상황이 발생할 수 있으며, 그 예는 다음과 같다.

이외에 복제 로그 복사 프로세스의 모드가 ASYNC이면 CUBRID HA 그룹 내의 데이터가 동일하지 않은 상황이 발생할 수 있다.

이와 같이 CUBRID HA 그룹 내의 데이터가 동일하지 않은 상황이 발생하면, 복제 재구축을 통해 CUBRID HA 그룹 내의 데이터를 동일하게 맞춰야 한다.

참고

이와 같은 구성에서 트랜잭션 로그의 이동 경로를 중심으로 살펴보면 다음과 같다.