1 고가용성

개요

고가용성(HA)은 일반적으로 거의 다운타임을 허용할 수 없는 중요한 인프라에서 필요합니다. 따라서 실패할 수 있는 모든 서비스에 대해 현재 서비스가 실패할 경우 대신 작업을 수행할 장애 조치 옵션이 마련되어 있어야 합니다.

Zabbix는 설정이 쉽고 이전 HA 전문 지식이 필요하지 않은 네이티브 고가용성 솔루션을 제공합니다. 네이티브 Zabbix HA는 Zabbix 서버의 소프트웨어/하드웨어 오류에 대한 추가 보호 계층이나 유지 보수로 인한 다운타임을 줄이는 데 유용할 수 있습니다.

Zabbix 고가용성 모드에서는 여러 Zabbix 서버가 클러스터에서 노드로 실행됩니다. 클러스터의 한 Zabbix 서버가 활성 상태인 동안, 다른 서버들은 대기 상태에 있으며 필요시 역할을 인수받을 준비를 합니다.

Zabbix HA로 전환하는 것은 구속력이 없습니다. 언제든지 독립 실행 방식으로 다시 전환할 수 있습니다.

참고: 구현 세부사항

고가용성 활성화

클러스터 노드로 Zabbix 서버 시작

Zabbix 서버를 클러스터 노드로 시작하려면 서버 구성에 두 가지 매개변수가 필요합니다:

  • HANodeName 매개변수는 HA 클러스터 노드가 될 각 Zabbix 서버에 대해 지정되어야 합니다.

이는 에이전트 및 프록시 구성에서 서버가 참조될 고유한 노드 식별자입니다(예: zabbix-node-01). HANodeName을 지정하지 않으면 서버가 독립 실행 모드로 시작됩니다.

  • NodeAddress 매개변수는 각 노드에 대해 지정되어야 합니다.

NodeAddress 매개변수(address:port)는 Zabbix 프론트엔드가 활성 서버 노드에 연결하는 데 사용됩니다. NodeAddress는 해당 Zabbix 서버의 IP 또는 FQDN 이름과 일치해야 합니다.

구성 파일을 변경한 후 모든 Zabbix 서버를 다시 시작합니다. 이제 클러스터 노드로 시작됩니다. 서버의 새로운 상태는 Reports > System information에서 확인할 수 있고, 다음 명령을 실행하여도 확인할 수 있습니다:

zabbix_server -R ha_status

이 런타임 명령은 현재 HA 클러스터 상태를 Zabbix 서버 로그(및 stdout)에 기록합니다:

프론트엔드 준비

Zabbix 서버 address:port가 프론트엔드 구성(프론트엔드 파일 디렉토리의 conf/zabbix.conf.php에 있음)에 정의되지 않았는지 확인합니다.

Zabbix 프론트엔드는 Zabbix 데이터베이스의 노드 테이블에서 설정을 읽어 활성 노드를 자동으로 감지합니다. 활성 노드의 노드 주소가 Zabbix 서버 주소로 사용됩니다.

프록시 구성

HA 클러스터 노드(서버)는 패시브 또는 액티브 Zabbix 프록시 구성에 나열되어야 합니다.

패시브 프록시의 경우, 노드 이름은 프록시의 Server 매개변수쉼표로 구분되어 나열되어야 합니다.

Server=zabbix-node-01,zabbix-node-02

액티브 프록시의 경우, 노드 이름은 프록시의 Server 매개변수세미콜론으로 구분되어 나열되어야 합니다.

Server=zabbix-node-01;zabbix-node-02
에이전트 구성

HA 클러스터 노드(서버)는 Zabbix 에이전트 또는 Zabbix 에이전트 2의 구성에 나열되어야 합니다.

패시브 검사를 활성화하려면, 노드 이름이 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 - Zabbix 서버 로그(및 stdout)에 HA 클러스터 상태를 기록;
  • ha_remove_node=target - <target>으로 식별되는 HA 노드 제거 - 노드의 이름 또는 ID (ha_status 실행 출력에서 이름/ID를 얻을 수 있음), 예:
zabbix_server -R ha_remove_node=zabbix-node-02

활성/대기 노드는 제거할 수 없습니다.

  • ha_set_failover_delay=delay - HA 장애 조치 지연 설정 (10초에서 15분 사이; 시간 접미사 지원, 예: 10s, 1m).

노드 상태를 모니터링할 수 있습니다:

  • Reports > System information에서.
  • System information 대시보드 위젯에서.
  • 서버의 ha_status 런타임 제어 옵션 사용 (위 참조).

zabbix[cluster,discovery,nodes] 내부 아이템은 고가용성 노드 정보가 포함된 JSON을 반환하므로 노드 발견에 사용할 수 있습니다.

HA 클러스터 비활성화

고가용성 클러스터를 비활성화하려면:

  1. 구성 파일의 백업 사본을 만듭니다.
  2. 대기 노드를 중지합니다.
  3. 활성 주 서버에서 HANodeName 매개변수를 제거합니다.
  4. 주 서버를 다시 시작합니다 (독립 실행 모드로 시작됩니다).

HA 클러스터 업그레이드

HA 노드에 대한 주 버전 업그레이드를 수행하려면:

  1. 모든 노드를 중지합니다.
  2. 전체 데이터베이스 백업을 만듭니다.
  3. 데이터베이스가 복제를 사용하는 경우 모든 노드가 동기화되어 있고 문제가 없는지 확인합니다. 복제가 손상된 경우 업그레이드하지 마십시오.
  4. 데이터베이스 업그레이드를 수행할 단일 노드를 선택하고, HANodeName을 주석 처리하여 구성을 독립 실행 모드로 변경한 후 업그레이드합니다.
  5. 데이터베이스 업그레이드가 완전히 완료되었는지 확인합니다 (System information에 Zabbix 서버가 실행 중이라고 표시되어야 함).
  6. 노드를 HA 모드로 다시 시작합니다.
  7. 나머지 노드를 업그레이드하고 시작합니다 (이 시점에서 데이터베이스가 이미 업그레이드되었으므로 독립 실행 모드로 변경할 필요가 없습니다).

마이너 버전 업그레이드에서는 첫 번째 노드를 업그레이드하고 업그레이드되어 실행 중인지 확인한 다음 다음 노드에서 업그레이드를 시작하면 충분합니다.

구현 세부사항

고가용성(HA) 클러스터는 선택적 솔루션이며 Zabbix 서버에서 지원됩니다. 네이티브 HA 솔루션은 사용이 간단하도록 설계되었으며, 사이트 간에 작동하고 Zabbix가 인식하는 데이터베이스에 대한 특별한 요구사항이 없습니다. 사용자는 환경의 고가용성 요구사항에 가장 적합한 것에 따라 네이티브 Zabbix HA 솔루션 또는 타사 HA 솔루션을 자유롭게 사용할 수 있습니다.

솔루션은 여러 zabbix_server 인스턴스 또는 노드로 구성됩니다. 모든 노드는:

  • 별도로 구성됩니다.
  • 동일한 데이터베이스를 사용합니다.
  • 여러 모드를 가질 수 있습니다: 활성, 대기, 사용 불가능, 중지됨.

한 번에 하나의 노드만 활성(작동) 상태일 수 있습니다. 대기 노드는 HA 관리자라는 하나의 프로세스만 실행합니다. 대기 노드는 데이터 수집, 처리 또는 기타 정규 서버 활동을 수행하지 않으며, 포트에서 수신 대기하지 않고, 최소한의 데이터베이스 연결을 가집니다.

활성 및 대기 노드 모두 5초마다 마지막 액세스 시간을 업데이트합니다. 각 대기 노드는 활성 노드의 마지막 액세스 시간을 모니터링합니다. 활성 노드의 마지막 액세스 시간이 '장애 조치 지연' 초를 초과하면, 대기 노드는 자신을 활성 노드로 전환하고 이전에 활성이던 노드에 '사용 불가능' 상태를 할당합니다.

활성 노드는 자체 데이터베이스 연결을 모니터링합니다 - 장애 조치 지연-5초보다 오랫동안 연결이 끊어지면, 모든 처리를 중지하고 대기 모드로 전환해야 합니다. 활성 노드는 또한 대기 노드의 상태를 모니터링합니다 - 대기 노드의 마지막 액세스 시간이 '장애 조치 지연' 초를 초과하면, 대기 노드에 사용 불가능 상태가 할당됩니다.

노드는 Zabbix 마이너 버전 간에 호환되도록 설계되었습니다.