콘텐츠로 이동

3. Altibase Heartbeat 구성하기#

이 장에서는 Altibase Heartbeat를 설정하는 방법을 설명한다. 또한 Altibase Heartbeat를 분산 데이터베이스 환경에서 어떻게 이용할 수 있는지 살펴본다.

환경 설정#

이 절은 Altibase Heartbeat를 분산 데이터베이스 환경에 사용하기 위해 필요한 환경 설정에 대해 설명한다.

환경 변수#

필수 환경 변수#

아래는 Altibase Heartbeat를 사용하기 위해 반드시 설정해야 하는 환경변수의 목록이다.

  • ALTI_HBP_HOME
    Altibase Heartbeat의 홈 디렉토리를 설정한다. 아래 예제와 같이 환경 변수 PATH에 ALTI_HBP_HOME/bin을 추가해야 한다.

    export PATH=$ALTI_HBP_HOME/bin:$PATH : PATH
    
  • ALTI_HBP_ID
    Altibase Heartbeat가 위치하는 노드를 식별하기 위한 ID를 설정한다. 1에서 99 사이의 정수로 설정해야 하며, 각 노드는 유일한 ID를 가져야 한다. 특히 ID 0은 해당 노드의 aheartbeat가 외부 네트워크에 존재함을 나타내기 때문에, 내부망에 존재하는 노드의 ID로는 사용할 수 없다.

  • ALTI_HBP_ALTIBASE_PORT_NO
    Altibase Heartbeat가 감시할 Altibase 서버의 리스닝 포트 번호(listening port number)를 설정한다. 즉, aheartbeat와 동일한 노드에 존재하는 Altibase 서버의 리스닝 포트 번호이다.

  • ALTI_HBP_DETECT_INTERVAL
    Altibase Heartbeat가 Altibase 서버의 장애를 검사하는 주기를 초 단위로 설정한다.

  • ALTI_HBP_DETECT_HIGHWATER_MARK
    Altibase Heartbeat가 감시하는 Altibase 서버 또는 다른 노드의 aheartbeat로의 접속 시도에 대해 응답이 없는 경우, 몇 회 접속 시도 이후에 장애로 판단할 것인지 설정한다.

선택 환경 변수#

아래의 환경변수는 필요에 따라 추가적으로 설정할 수 있다.

  • ALTI_HBP_ALTIBASE_FAILURE_EVENT
    Altibase Heartbeat가 같은 노드의 Altibase 서버의 장애를 감지할 때 실행하는 실행 가능한 바이너리 파일 또는 스크립트 파일의 이름이다. 설정하지 않으면 기본으로 $ALTI_HBP_HOME/bin/altibaseFailureEvent.sh가 실행된다.

  • ALTI_HBP_REMOTE_NODE_FAILURE_EVENT
    Altibase Heartbeat가 다른 노드의 장애를 감지한 경우 실행하는 실행 가능한 바이너리 파일 또는 스크립트 파일의 이름이다. 설정하지 않으면 기본으로 $ALTI_HBP_HOME/bin/remoteNodeFailureEvent.sh가 실행된다.

aheartbeat 노드 설정#

Altibase Heartbeat을 이용한 분산 환경 구성을 위하여 aheartbeat.settings 파일이 존재한다. aheartbeat.settings 파일은 분산 환경을 구성하는 모든 노드에 대한 정보를 저장하는 파일로써, $ALTI_HBP_HOME/conf 디렉터리에 존재한다. 이 파일은 Altibase Heartbeat를 실행하기 위해 반드시 필요하다.

aheartbeat.settings에 저장되는 각 노드에 대한 정보는 노드 ID, IP 주소, aheartbeat의 리스닝 포트 번호(listening port number)로 구성된다. 각 요소는 aheartbeat가 다른 노드의 aheartbeat에 접속하기 위해 필요한 항목이다.

만약 한 장비가 여러 개의 IP 주소를 가지는 경우, 동일한 ID에 대해 서로 다른 IP 주소로 구성된 세트를 4개까지 설정할 수 있다. 그리고 동일한 ID에 대해 IP 버전별 설정도 가능하다.

aheartbeat.settings 파일의 예시:

# ID   IP                  PORT
0      169.215.114.23    55778     # public domain
0      222.112.231.234   55778     # public domain
1      192.168.2.33       55444
1      222.112.181.231   55444     # public domain
2      192.168.2.33       54321
2      ::ffff:c0a8:221   54321     # IPv6

위의 예시에서 노드 0은 두 개의 IP 주소 169.215.114.23과 222.112.231.234를 가지며 aheartbeat의 리스닝 포트 번호는 55778이다. 노드 1은 192.168.2.33과 222.112.181.231 두 개의 IP 주소를 가지며 aheartbeat의 리스닝 포트 번호는 55444이다.

노드 2의 경우 동일한 ID에 대해 IP 버전별로 설정한 것으로써, IPv4 주소 192.168.2.33과 IPv6 주소 ::ffff:c0a8:221을 따로 설정한 것이다. aheartbeat의 리스닝 포트 번호는 55321이다. 그리고 #을 이용하여 주석을 남길 수 있다.

주의 사항#

한 분산 환경을 구성하는 모든 노드는 aheartbeat.settings 파일의 설정 내용이 동일해야 한다. 그렇지 않으면 Altibase Heartbeat가 오동작을 일으킬 수 있다.

failover 수행 파일#

aheartbeat가 자기 노드의 Altibase 서버 혹은 다른 노드의 aheartbeat에 접속이 불가능하면, 즉 장애를 감지하면 failover용 실행 파일을 실행한다. failover용 실행 파일은 $ALTI_HBT_HOME/bin 디렉토리에 있어야 하며, 파일명은 위의 절에서 설명한 ALTI_HBP_ALTIBASE_FAILURE_EVENT, ALTI_HBP_REMOTE_NODE_FAILURE_EVENT 환경변수로 설정할 수 있다.

기본으로 제공하는 failover용 스크립트 파일은 아래와 같다.

  • altibaseFailureEvent.sh
    Altibase Heartbeat가 같은 노드의 Altibase 서버의 장애를 감지한 경우 실행하는 스크립트 파일이다. DBA에게 장애 발생을 알려주거나 해당 노드의 Altibase 서버를 재구동하는 등의 작업을 포함시킬 수 있다.

  • remoteNodeFailureEvent.sh
    Altibase Heartbeat가 다른 노드의 장애를 감지한 경우 실행하는 스크립트 파일이다. 장애가 발생한 데이터베이스의 서비스를 failover하는 등의 작업을 포함시킬 수 있다.

데이터베이스 관리자는 기본으로 제공되는 스크립트 파일을 상황에 맞게 수정하거나, failover 작업을 수행하는 응용프로그램을 작성하여 장애에 능동적으로 대처할 수 있다.

0번 aheartbeat#

내부망의 데이터베이스가 외부망의 클라이언트에 서비스를 제공하는 시스템 구성에서, 내부망에서 외부망으로의 네트워크 장애를 감지하기 위해 외부망에 Altibase Heartbeat를 둘 수 있다. 외부망에 aheartbeat를 두는 노드의 ID는 반드시 0이어야 한다. 이런 연유로 외부망에 두는 aheartbeat를 0번 aheartbeat라고 부른다.

0번 aheartbeat의 추가는 사용자 선택사항이다.


Altibase Heartbeat 시스템 구성 연습#

이 절은 Altibase와 Altibase Heartbeat 유틸리티로 분산 환경을 구성하는 방법을 예시와 함께 살펴본다.

Altibase로 이루어진 분산 환경에 Altibase Heartbeat 유틸리티를 포함시켜서 더욱 강화된 무정지 데이터베이스 서비스를 제공할 수 있다.

분산환경 구성도 및 조건#

내부망에 A, B, C 세 노드가 있고 각 노드에 Altibase 서버와 aheartbeat가 존재한다.

heartbeat_sample

그림 3-1 분산환경 구성도

  • 각 노드의 Altibase에 서비스를 요청하는 클라이언트가 존재한다.

  • 0번 aheartbeat가 공용망인 169.215.114.23에서 리스닝 포트 번호 44000으로 동작한다.

  • 각 노드의 IP 주소와 aheartbeat, Altibase 서버의 리스닝 포트 번호는 아래와 같다.

    노드 IP 주소 Altibase 서버 리스닝 포트 번호 aheartbeat 리스닝 포트 번호
    A 192.168.100.30 20000 21000
    B 192.168.100.31 30000 31000
    C 192.168.100.32 40000 41000

환경변수 설정#

위와 같은 조건하에서 각 노드의 환경변수는 아래와 같이 설정할 수 있을 것이다.

  • 0 번 aheartbeat의 노드(외부망):

    • ALTI_HBP_HOME=/altibase/hbp_home
    • ALTI_HBP_ID=0
    • ALTI_HBP_DETECT_INTERVAL=3
    • ALTI_HBP_DETECT_HIGHWATER_MARK=10
  • 노드 A:

    • ALTI_HBP_HOME=/altibase/hbp_home

    • ALTI_HBP_ID=1

    • ALTI_HBP_ALTIBASE_PORT_NO=20000

    • ALTI_HBP_DETECT_INTERVAL=3

    • ALTI_HBP_DETECT_HIGHWATER_MARK=10

  • 노드 B:

    • ALTI_HBP_HOME=/altibase/hbp_home
    • ALTI_HBP_ID=2
    • ALTI_HBP_ALTIBASE_PORT_NO=30000
    • ALTI_HBP_DETECT_INTERVAL=3
    • ALTI_HBP_DETECT_HIGHWATER_MARK=10
  • 노드 C:

    • ALTI_HBP_HOME=/altibase/hbp_home
    • ALTI_HBP_ID=3
    • ALTI_HBP_ALTIBASE_PORT_NO=40000
    • ALTI_HBP_DETECT_INTERVAL=3
    • ALTI_HBP_DETECT_HIGHWATER_MARK=10

참고: 0번 노드에서는 ALTI_HBP_ALTIBASE_PORT_NO 환경변수가 무시된다.

aheartbeat.settings#

$ALTI_HBP_HOME/conf/aheartbeat.settings 파일의 내용은 모든 노드에서 동일하며 아래와 같다.

# ID     IP PORT
0      169.215.114.23        44000    #External Network
1      192.168.100.30        21000    #NODE A
2      192.168.100.31        31000    #NODE B
3      192.168.100.32        41000    #NODE C

failover 수행 파일#

$ALTI_HBP_HOME/bin 디렉토리의 altibaseFailureEvent.sh 파일과 remoteNodeFailureEvent.sh의 내용을 상황에 맞게 수정한다. 또는 failover를 위한 응용프로그램을 작성한 후 실행 바이너리를 $ALTI_HBP_HOME/bin 디렉토리에 두고 해당 환경변수를 설정한다.

aheartbeat 구동#

각 노드에서 Altibase Heartbeat를 아래의 명령어로 실행한다.

$ aheartbeat -r

노드별 구동 순서는 상관없다. 실행 후 시간이 조금 경과하면 아래의 명령어로 각 노드의 상태를 확인할 수 있다.

$ aheartbeat -i