• 워드프레스 → 라이믹스 블로그 이전 완료 일주일 동안 열지 않기
  • 목록
  • 아래로
  • 위로
  • 검색

Cubrid Linux에서 CUBRID 10.1 HA 구성

키큰난쟁이 키큰난쟁이
35 1 0

CUBRID.jpeg


 

들어가며

 

💡High Availability(HA)란, 하드웨어, 소프트웨어, 네트워크 등에 장애가 발생해도 지속적인 서비스를 제공하는 기능이다. 이 기능은 하루 24시간 1년 내내 서비스를 제공해야 하는 네트워킹 컴퓨팅 부분에서 필수적인 요소이다. HA 시스템은 두 대 이상의 서버 시스템으로 구성하여 시스템 구성 요소 중의 한 요소에 장애가 발생해 서비스를 중단 없이 제공할 수 있다.

 


 

큐브리드 설치

 

큐브리드 설치하기

 

2개 서버를 준비해주시고 목차 3번까지 동일하게 진행 하시고 오시면 됩니다.

 


 

HA 구성 전 주의사항 및 호스트 등록

 

HA 구성 전 주의사항

  • 복제가 정상적으로 수행되기 위해서는 테이블을 생성할 때 기본키(primary key)가 반드시 존재해야 한다는 점을 주의
  • 파라미터에서 명시한 멤버 노드들의 호스트 이름은 IP로 대체할 수 없으며, 사용자는 반드시 /etc/hosts 에 등록되어 있는 것을 사용 

호스트 등록 작업

  • 1번 Master 서버 호스트명(master) (IP : 192.168.0.2) / 2번 Slave 서버 호스트명(slave) (IP : 192.168.0.3) 

1번 Master 호스트명 등록

#호스트네임 확인
hostname
master
# root 계정으로 변경 후 아래 내용에 호스트 이름을 등록해준다.
su -
vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.2 master
192.168.0.3 slave

2번 Slave 서버 호스트명 등록

#호스트네임 확인
hostname
slave
# root 계정으로 변경 후 아래 내용에 호스트 이름을 등록해준다.
su -
vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.2 master
192.168.0.3 slave

  


 

데이터베이스 생성

 

데이터베이스 생성

  • CUBRID HA에 포함할 데이터베이스를 모든 CUBRID HA 노드에서 동일하게 생성한다. 데이터베이스 생성 옵션은 필요에 따라 적절히 변경
    아래 내용 1번 Master 서버와 2번 Slave 서버 동일한 DB 생성
cd $CUBRID_DATABASES
mkdir testdb
cd testdb
mkdir log
cubrid createdb -L ./log testdb en_US
Creating database with 512.0M size using locale en_US. The total amount of disk space needed is 1.5G.

CUBRID 10.1

 


 

큐브리드 서버 설정

 

큐브리드 cubrid.conf 수정

  • $CUBRID/conf/cubrid.conf 의 ha_mode 를 모든 HA 노드에 동일하게 설정한다. 특히, 로깅 관련 파라미터인 log_max_archives 와 force_remove_log_archives, HA 관련 파라미터인 ha_mode 의 설정에 주의한다.
    아래 내용을 1번 Master 서버와 2번 Slave 서버 동일하게 수정
vi $CUBRID/conf/cubrid.conf
# Service parameters
[service]
service=server,broker,manager

# Common section
[common]
service=server,broker,manager

# Server parameters
server=testdb
data_buffer_size=512M
log_buffer_size=4M
sort_buffer_size=2M
max_clients=100
cubrid_port_id=1523
db_volume_size=512M
log_volume_size=512M

# HA 구성 시 추가 (Logging parameters)
log_max_archives=100
force_remove_log_archives=no

# HA 구성 시 추가 (HA 모드)
ha_mode=on
  • 만약 Master / Slave 구성을 해야될 DB가 더 존재할 경우 $CUBRID/conf/cubrid.conf 에서 아래 내용 수정
#기본으로 설정되어있어여됨
ha_mode=on

# HA 구성 시 추가 (HA 모드)
[@이중화할 DB명1]
ha_mode=on
[@이중화할 DB명2]
ha_mode=on

#예시
[@master]
ha_mode=on
[@slave]
ha_mode=on

 

큐브리드 cubrid_ha.conf 수정

  • $CUBRID/conf/cubrid_ha.conf 의 ha_port_idha_node_listha_db_list 를 모든 HA 노드에 동일하게 설정한다. 다음 위에서 설정한 마스터 노드의 호스트 이름(master), 슬레이브 노드의 호스트 이름(slave)로 설정
    아래 내용을 1번 Master 서버와 2번 Slave 서버 동일하게 수정
vi $CUBRID/conf/cubrid_ha.conf
# ha_node_list=(서버계정명)@(마스터서버호스트명):(슬레이브서버호스트명)
[common]
ha_port_id=59901
ha_node_list=cubrid@master:slave
ha_db_list=testdb
ha_copy_sync_mode=sync:sync
ha_apply_max_mem_size=500

 

큐브리드 databases.text 수정

  • $CUBRID_DATABASES/databases.txt ($CUBRID_DATABASES 가 설정 안 된 경우 $CUBRID/databases/databases.txt)의 db-host에 마스터 노드와 슬레이브 노드의 호스트 이름을 설정(master:slave)한다.
    아래 내용을 1번 Master 서버와 2번 Slave 서버 동일하게 수정
vi $CUBRID_DATABASES/databases.txt
# 이중화 시킬 db의 db-host 명을 localhost -> master:slave 변경
#db-name vol-path db-host log-path lob-base-path
testdb          /home/cubrid/CUBRID/databases/testdb    master:slave       /home/cubrid/CUBRID/databases/testdb/log        file:/home/cubrid/CUBRID/databases/testdb/lob

 


 

CUBRID HA 시작 및 확인

 

CUBRID HA 시작

  • CUBRID HA 그룹 내의 각 노드에서 cubrid heartbeat start를 수행한다. cubrid heartbeat start 를 가장 먼저 수행한 노드가 마스터 노드가 되므로 유의해야 한다. 이하의 예에서 마스터 노드의 호스트 이름은 master, 슬레이브 노드의 호스트 이름은 slave

1. 마스터 노드

cubrid heartbeat start

2. 슬레이브 노드

cubrid heartbeat start

 

CUBRID HA 상태 확인

  • CUBRID HA 그룹 내의 각 노드에서 cubrid heartbeat status를 수행하여 구성 상태를 확인

1. 마스터 서버 확인

cubrid heartbeat status

@ cubrid heartbeat list
 HA-Node Info (current master, state master)
   Node slave (priority 2, state slave)
   Node master (priority 1, state master)

 HA-Process Info (master 1844, state slave)
 Applylogdb testdb@localhost:/home/cubrid/CUBRID/databases/testdb_slave (pid 9423, state registered)
 Copylogdb testdb@slave:/home/cubrid/CUBRID/databases/testdb_slave (pid 9418, state registered)
 Server testdb (pid 9306, state registered_and_active)

2. 슬레이브 서버 확인

cubrid heartbeat status

@ cubrid heartbeat list
 HA-Node Info (current slave, state slave)
   Node slave (priority 2, state slave)
   Node master (priority 1, state master)

 HA-Process Info (master 1844, state slave)
 Applylogdb testdb@localhost:/home/cubrid/CUBRID/databases/testdb_master (pid 2428, state registered)
 Copylogdb testdb@master:/home/cubrid/CUBRID/databases/testdb_master (pid 2424, state registered)
 Server testdb (pid 2137, state registered_and_standby)
  • CUBRID HA 그룹 내의 각 노드에서 cubrid changemode 유틸리티를 이용하여 서버의 상태를 확인

1. 마스터 서버 확인

cubrid changemode testdb@localhost
The server 'testdb@localhost''s current HA running mode is active.

2. 슬레이브 서버 확인

cubrid changemode testdb@localhost
The server 'testdb@localhost''s current HA running mode is standby.

 

CUBRID HA 동작 여부 확인

  • 마스터 노드의 액티브 서버에서 쓰기를 수행한 후 슬레이브 노드의 스탠바이 서버에 정상적으로 반영되었는지 확인
  •  HA 환경에서 CSQL 인터프리터로 각 노드에 접속하려면, 데이터베이스 이름 뒤에 접속 대상 호스트 이름을 반드시 지정해야 한다(“@<호스트 이름>”). 호스트 이름을 localhost로 지정하면, 로컬 노드에 접속

1. 마스터 서버

csql -u dba testdb@localhost -c "create table abc(a int, b int, c int, primary key(a));"
csql -u dba testdb@localhost -c "insert into abc values (1,1,1);"

2. 슬레이브 서버

csql -u dba testdb@localhost -l -c "select * from abc;"
=== <Result of SELECT Command in Line 1> ===
<00001> a: 1
        b: 1
        c: 1

 


 

브로커 시작 및 확인


브로커 시작 및 확인

  • 브로커는 JDBC나 CCI, PHP 등의 응용에서 접근하기 위해 사용하는 것이다. 따라서 간단한 서버 이중화 동작을 시험하고 싶다면 브로커를 시작할 필요 없이 서버 프로세스에 직접 접속하는 CSQL 인터프리터만 실행해서 확인할 수 있다. 브로커는 cubrid broker start 를 실행하여 시작하고 cubrid broker stop 을 실행하여 정지한다.

1. 마스터 서버

cubrid broker start

2. 슬레이브 서버

cubrid broker start

 


 

응용 프로그램 설정(JDBC 연결)


응용 프로그램 설정

  • 다양한 응용프로그램 설정이 존재한다. 큐브리드 공식 문서 통해서 확인

  • 필자는 JDBC 프로그램 예제로 진행

# DB 접근 방법
jdbc:CUBRID:192.168.0.2:33000:testdb:::?altHosts=192.168.0.3:33000&rcTime=600&charSet=utf-8
jdbc:CUBRID:[마스터IP]:[브로커포트]:[DB명]:::?altHosts=[슬래이브IP]:[브로커포트]&rcTime=600&charSet=utf-8
# 자바 스프링 log4j DB 설정
Globals.Url=jdbc:log4jdbc:cubrid:192.168.0.2:33000:testdb:::?altHosts=192.168.0.3:33000&rcTime=600&charSet=utf-8

 

아래에 자세한 내용 확인

 


 

신고공유스크랩

댓글 0

댓글 쓰기
에디터 모드

신고

"님의 댓글"

이 댓글을 신고하시겠습니까?

댓글 삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?

공유

퍼머링크