데이터베이스 (DB)2015. 12. 25. 00:19

1. 고려사항
 * HA 구성을 위해서 고려해야할 사항은 다음과 같다.
  - 동일한 플랫폼에서만 구현이 가능하며, LINUX, AIX 에서만 HA를 사용할 수 있다.
  - 저장 장치를 공유하지 않는, 별개의 데이터베이스로 구성되어 있어 상호간에 복제를 기반으로 동작한다. 따라서 복제를 위해 모든 테이블에 반드시 기본키(primary key)가 존재하여야 한다.
  - LOB 데이터는 복제가 되지 않으므로, CLOB 의 경우 string(varchar 1G 크기)을 사용하고, BLOB 인 경우 bit varying을 사용한다. bit varying을 이용한 BLOB 구현 방법은 큐브리드사의 FAQ를 참조하면 된다.
 
2. HA 구성 방법 (최초)
 * HA 구성은 다음 순서로 진행하며, 아래 예시는 다음을 가정한다.
  - hostname : active -> db_A, stand by -> db_S
  - IP address : active -> 192.168.0.10, stand by -> 192.168.0.11
  - 각 서버에서의 명령을 구분하기 위해 prompt 에 hostname을 병행 표기
  - 데이터베이스 이름 : mydb
  - 데이터베이스 디렉토리 : /NCIA/DB/mydb
  - 데이터베이스 로그는 데이터베이스와 동일한 디렉토리에 있는 것으로 가정한다. 만약 다른 경우 백업 수행시 로그디렉토리에 백업 관련 파일들이 생성된다.
  - 모든 작업은 cubrid 계정에서 진행
 2-1. stand by 서버를 준비하고, active 서버와 동일한 계정(cubrid)을 생성하여 CUBRID를 설치한다.
 2-2. 각 서버(active, stand by)의 hostname과 IP address에 대한 정보가 올바로 설정되어있는지 확인한다. 만약 hostname 이 없다면 hostname 은 반드시 설정하여야 한다.
  - 각 서버의 /etc/hosts 상에 각 서버에 대한 정보가 모두 올바르게 저장되어야 한다. 다음은 올바른 예시이다.
    192.168.0.10 db_A
 192.168.0.11 db_S
 2-3. 데이터베이스에 관련된 디렉토리는 active 서버와 동일하게 구성한다.
    db_S% mkdir /NCIA/DB/mydb
    db_S% mkdir /NCIA/BACKUP/mydb
 2-4. active 서버의 CUBRID 서비스를 중단한다.
    db_A% cubrid service stop
 2-5. active 서버의 데이터베이스를 백업한다.
    db_A% cubrid backupdb -S -r -z mydb
 2-6. 백업 파일을 stand by 서버로 ftp 등을 이용하여 전송한다. 전송은 active 서버와 동일한 위치로 한다. 전송 대상 파일은 다음과 같다.
    /NCIA/DB/mydb/mydb_bk*
 2-7. active server 의 데이터베이스 정보 파일을 HA 환경에 맞게 수정한다. 아래 붉은색으로 표시된 부분이 수정된 부분이다.
    db_A% vi $CUBRID_DATABASES/databases.txt
 mydb /NCIA/DB/mydb db_A:db_S /NCIA/DB/mydb file:/NCIA/mydb/lob
 2-8. stand by 서버에 백업된 데이터베이스를 복구하기 위해 데이터베이스 정보를 만들어 준다. 위에서와 동일한 파일을 동일한 내용으로 만들어 주면 된다.
    db_S% vi $CUBRID_DATABASES/databases.txt
 mydb /NCIA/DB/mydb db_A:db_S /NCIA/DB/mydb file:/NCIA/DB/mydb/lob
 2-9. stand by 서버에서 데이터베이스의 복구를 수행한다. active 서버와 동일한 데이터베이스를 만들기 위해 수행하는 작업이다.
    db_S% cubrid restoredb mydb
 2-10. HA를 사용하기 위해 설정화일을 수정한다. active 서버와 stand by 서버 모두 동일하게 수정하여야 한다.
    db_A% vi $CUBRID/conf/cubrid.conf
 service=heartbeat,broker,manager
 ha_mode=on
 log_max_archives=20
 force_remove_log_archives=no
 db_A% vi $CUBRID/conf/cubrid_ha.conf
 ha_mode=on
 ha_port_id=59901
 ha_node_list=cubrid@db_A:db_S
 ha_db_list=mydb
 2-11. 서비스를 구동한다. 먼저 구동되는 쪽에 active 서버가 되므로, db_A에서 서버를 먼저 구동한후, 정상적으로 구동되면 db_S를 구동한다.
    db_A% cubrid service start
 2-12. HA 상태를 확인하여, db_A가 active, db_S가 stand by 로 나오면 정상적으로 구동된 것이다.
    db_A% cubrid heartbeat status
 HA-Node Info (current db_A, state master)
 Node db_S (priority 2, state slave)
 Node db_A (priority 1, state master)
 
3. HA 재구성 방법
 * HA를 다시 구성하는 방법을 소개한다.
 3-1. active 서버와 stand by 서버의 서비스를 모두 중단한다. stand by 서버를 먼저 종료하여야 한다. active 서버를 먼저 종료하면 절체가 발생하므로 데이터 불일치가 발생할 수 있다.
    db_S% cubrid service stop
 db_A% cubrid service stop
 3-2. 데이터베이스 내부에 존재하는 HA 설정 정보를 삭제한다. dba 계정에 대한 암호를 물어올 것이므로, dba 암호를 입력하여야 한다.
    db_A% csql -u dba -S --sysadm -c "delete from db_ha_apply_info" mydb
 3-3. active 서버의 데이터베이스를 백업한다. 만약 백업중 기존 백업이 존재한다고 메시지가 나오면, y를 입력하여 기존 백업을 삭제하고 새로이 백업을 하도록 한다.
    db_A% cubrid backupdb -S -r -z mydb
 3-4. stand by 서버의 데이터베이스 파일을 삭제한다.
    db_S% rm /NCIA/DB/mydb/*
 3-5. 백업 파일을 stand by 서버로 ftp 등을 이용하여 전송한다. 전송은 active 서버와 동일한 위치로 한다. 전송 대상 파일은 다음과 같다.
    /NCIA/DB/mydb/mydb_bk*
 3-6. stand by 서버에서 데이터베이스의 복구를 수행한다.
    db_S% cubrid restoredb mydb
 3-7. active 서버의 데이터베이스 복제 로그를 삭제한다.
    db_A% rm -rf $CUBRID_DATABASES/mydb_db_S
 3-8. stand by 서버의 데이터베이스 복제 로그를 삭제한다.
    db_S% rm -rf $CUBRID_DATABASES/mydb_db_A
 3-9. 서비스를 구동한다. 먼저 구동되는 쪽에 active 서버가 되므로, db_A에서 서버를 먼저 구동한후, 정상적으로 구동되면 db_S를 구동한다.
    db_A% cubrid service start
 3-10. HA 상태를 확인하여, db_A가 active, db_S가 stand by 로 나오면 정상적으로 구동된 것이다.
    db_A% cubrid heartbeat status
 HA-Node Info (current db_A, state master)
 Node db_S (priority 2, state slave)
 Node db_A (priority 1, state master)
 
 

Posted by 랩퍼우