고가용성
개요
고가용성(HA)은 일반적으로 가동 중단을 거의 허용할 수 없는 핵심 인프라에 필요합니다. 따라서 장애가 발생할 수 있는 모든 서비스에는 현재 서비스에 장애가 발생했을 때 이를 대신할 장애 조치 수단이 마련되어 있어야 합니다.
Zabbix는 설정이 쉽고 사전 HA 전문 지식이 필요하지 않은 내장형 고가용성 솔루션을 제공합니다. Zabbix 내장 HA는 Zabbix 서버의 소프트웨어/하드웨어 장애에 대한 보호를 한층 강화하거나 유지보수로 인한 가동 중단 시간을 줄이는 데 유용합니다.
Zabbix 고가용성 모드에서는 여러 Zabbix 서버가 클러스터의 노드로 실행됩니다. 클러스터에서 하나의 Zabbix 서버가 활성 상태로 동작하는 동안 나머지 서버는 대기 상태를 유지하며 필요할 때 역할을 인계받을 준비를 합니다.

Zabbix HA로 전환하더라도 계속 사용할 필요는 없습니다. 언제든지 독립 실행 방식으로 되돌릴 수 있습니다.
함께 보기: 구현 세부 정보
고가용성 활성화
Zabbix 서버를 클러스터 노드로 시작하기
Zabbix 서버를 클러스터 노드로 시작하려면 서버 설정에 두 가지 매개변수가 필요합니다.
- HA 클러스터 노드로 사용할 각 Zabbix 서버에
HANodeName매개변수를 지정해야 합니다.
이는 에이전트 및 프록시 설정에서 서버를 참조하는 데 사용하는 고유한 노드 식별자(예: zabbix-node-01)입니다.
HANodeName을 지정하지 않으면 서버가 독립 실행 모드로 시작됩니다.
- 각 노드에
NodeAddress매개변수를 지정해야 합니다.
Zabbix 프런트엔드는 NodeAddress 매개변수(address:port)를 사용하여 활성 서버 노드에 연결합니다.
NodeAddress는 해당 Zabbix 서버의 IP 또는 FQDN과 일치해야 합니다.
설정 파일을 변경한 후 모든 Zabbix 서버를 다시 시작합니다. 이제 서버가 클러스터 노드로 시작됩니다. 서버의 새 상태는 보고서 > 시스템 정보에서 확인하거나 다음 명령을 실행하여 확인할 수 있습니다.
zabbix_server -R ha_status
이 런타임 명령은 현재 HA 클러스터 상태를 Zabbix 서버 로그에 기록하고 표준 출력(stdout)으로도 출력합니다.

프런트엔드 준비
Zabbix 서버의 address:port가 프런트엔드 설정(프런트엔드 파일 디렉터리의 conf/zabbix.conf.php)에 정의되어 있지 않은지 확인합니다.

Zabbix 프런트엔드는 Zabbix 데이터베이스의 nodes 테이블에서 설정을 읽어 활성 노드를 자동으로 감지합니다. 활성 노드의 주소가 Zabbix 서버 주소로 사용됩니다.
프록시 설정
수동 또는 능동 Zabbix 프록시의 설정에 HA 클러스터 노드(서버)를 나열해야 합니다.
수동 프록시의 경우 프록시의 Server 매개변수에 노드 이름을 쉼표로 구분하여 나열해야 합니다.
Server=zabbix-node-01,zabbix-node-02
능동 프록시의 경우 프록시의 Server 매개변수에 노드 이름을 세미콜론으로 구분하여 나열해야 합니다.
Server=zabbix-node-01;zabbix-node-02
에이전트 설정
Zabbix 에이전트 또는 Zabbix 에이전트 2의 설정에 HA 클러스터 노드(서버)를 나열해야 합니다.

수동 검사를 활성화하려면 Server 매개변수에 노드 이름을 쉼표로 구분하여 나열해야 합니다.
Server=zabbix-node-01,zabbix-node-02
능동 검사를 활성화하려면 ServerActive 매개변수에 노드 이름을 나열해야 합니다. 능동 검사에서는 노드와 다른 서버를 쉼표로 구분해야 하지만, 노드끼리는 세미콜론으로 구분해야 합니다. 예:
ServerActive=zabbix-node-01;zabbix-node-02
대기 노드로 장애 조치
활성 노드가 중지되면 Zabbix는 자동으로 다른 노드로 장애 조치를 수행합니다. 장애 조치가 이루어지려면 대기 상태의 노드가 하나 이상 있어야 합니다.
장애 조치는 얼마나 빨리 이루어질까요? 모든 노드는 5초마다 마지막 접속 시간과 상태(변경된 경우)를 갱신합니다. 따라서 다음과 같이 동작합니다.
- 활성 노드가 종료되면서 상태를 "중지됨"으로 보고할 수 있으면 다른 노드가 5초 이내에 역할을 인계받습니다.
- 활성 노드가 상태를 갱신하지 못한 채 종료되거나 사용 불가능해지면 대기 노드는 장애 조치 지연 시간 + 5초 동안 기다린 후 역할을 인계받습니다.
장애 조치 지연 시간은 설정할 수 있으며, 지원 범위는 10초에서 15분까지입니다(기본값은 1분). 장애 조치 지연 시간을 변경하려면 다음 명령을 실행합니다.
zabbix_server -R ha_set_failover_delay=5m
HA 클러스터 관리
전용 런타임 제어 옵션을 사용하여 HA 클러스터의 현재 상태를 관리할 수 있습니다.
ha_status- HA 클러스터 상태를 Zabbix 서버 로그에 기록하고 표준 출력(stdout)으로도 출력합니다.ha_remove_node=target-<target>으로 식별되는 HA 노드를 제거합니다. 이 값은 노드의 이름 또는 ID입니다(이름/ID는ha_status실행 결과에서 확인할 수 있습니다). 예:
zabbix_server -R ha_remove_node=zabbix-node-02
활성/대기 노드는 제거할 수 없습니다.
ha_set_failover_delay=delay- HA 장애 조치 지연 시간을 설정합니다(10초에서 15분 사이이며, 시간 접미사를 지원합니다(예:30s,1m)).
노드 상태는 다음 방법으로 모니터링할 수 있습니다.
- 보고서 > 시스템 정보에서 확인합니다.
- 시스템 정보 대시보드 위젯에서 확인합니다.
- 서버의
ha_status런타임 제어 옵션을 사용합니다(위 내용 참조).
zabbix[cluster,discovery,nodes] 내부 아이템은 고가용성 노드 정보가 담긴 JSON을 반환하므로 노드 검색에 사용할 수 있습니다.
HA 클러스터 비활성화
고가용성 클러스터를 비활성화하려면 다음과 같이 합니다.
- 설정 파일의 백업 사본을 만듭니다.
- 대기 노드를 중지합니다.
- 활성 주 서버에서 HANodeName 매개변수를 제거합니다.
- 주 서버를 다시 시작합니다(독립 실행 모드로 시작됩니다).
HA 클러스터 업그레이드
HA 노드의 주 버전 업그레이드를 수행하려면 다음과 같이 합니다.
- 모든 노드를 중지합니다.
- 데이터베이스 전체 백업을 생성합니다.
- 데이터베이스에서 복제를 사용하는 경우 모든 노드가 동기화되어 있고 문제가 없는지 확인합니다. 복제에 문제가 있으면 업그레이드하지 마세요.
- 데이터베이스 업그레이드를 수행할 노드 하나를 선택하고,
HANodeName을 주석 처리하여 독립 실행 모드로 설정한 다음 업그레이드합니다. - 데이터베이스 업그레이드가 완전히 끝났는지 확인합니다(시스템 정보에 Zabbix 서버가 실행 중이라고 표시되어야 합니다).
- 노드를 HA 모드로 다시 시작합니다.
- 나머지 노드를 업그레이드하고 시작합니다(이 시점에는 데이터베이스가 이미 업그레이드되었으므로 독립 실행 모드로 변경할 필요가 없습니다).
부 버전 업그레이드에서는 첫 번째 노드를 업그레이드하고, 업그레이드가 완료되어 실행 중인지 확인한 다음, 다음 노드의 업그레이드를 시작하면 됩니다.
구현 세부 정보
고가용성(HA) 클러스터는 선택적으로 활성화하는 솔루션이며 Zabbix 서버에서 지원됩니다. 내장 HA 솔루션은 사용이 간편하도록 설계되었으며, 여러 사이트에 걸쳐 동작하고 Zabbix가 지원하는 데이터베이스에 별도의 요구 사항을 부과하지 않습니다. 사용자는 환경의 고가용성 요구 사항에 가장 적합한 Zabbix 내장 HA 솔루션 또는 타사 HA 솔루션을 자유롭게 선택할 수 있습니다.
이 솔루션은 여러 zabbix_server 인스턴스 또는 노드로 구성됩니다.
각 노드는 다음과 같은 특성을 갖습니다.
- 개별적으로 설정됩니다.
- 동일한 데이터베이스를 사용합니다.
- 활성, 대기, 사용 불가, 중지 등 여러 모드가 있습니다.
한 번에 하나의 노드만 활성(작동) 상태가 될 수 있습니다. 대기 노드는 HA 관리자 프로세스 하나만 실행합니다. 대기 노드는 데이터 수집, 처리 또는 기타 일반적인 서버 작업을 수행하지 않으며, 포트에서 수신 대기하지 않고 데이터베이스 연결을 최소한으로 유지합니다.
활성 노드와 대기 노드 모두 5초마다 마지막 접속 시간을 갱신합니다. 각 대기 노드는 활성 노드의 마지막 접속 시간을 모니터링합니다. 활성 노드의 마지막 접속 이후 '장애 조치 지연 시간'을 초과하면 대기 노드가 스스로 활성 노드로 전환하고 이전 활성 노드에 '사용 불가' 상태를 할당합니다.
활성 노드는 자체 데이터베이스 연결 상태를 모니터링합니다. 연결이 failover delay-5초 이상 끊기면 모든 처리를 중지하고 대기 모드로 전환해야 합니다.
활성 노드는 대기 노드의 상태도 모니터링합니다. 대기 노드의 마지막 접속 이후 '장애 조치 지연 시간'을 초과하면 해당 대기 노드에 unavailable 상태를 할당합니다.
노드는 Zabbix의 부 버전 간에 호환되도록 설계되었습니다.