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가 존재한다.
그림 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