이중화(MariaDB Galera) 환경 서버 재기동시 실행 절차

개요

  • 서버가 예기치 않게 정지·재기동되는 상황에 대비하여, 이중화 환경에서 Logpresso와 MariaDB(Galera Cluster)의 상황별 기동·정지 절차를 정리한 가이드입니다.
  • MariaDB(Galera)는 한 대만 재기동되는 경우 일반 기동으로 클러스터에 재합류하지만, 두 대가 동시에 정지되는 경우 Galera 구조상 수동 부트스트랩이 반드시 필요합니다.

주의 사항

  • 전체 정지 후 기동 시 반드시 seqno가 가장 높은(마지막까지 살아 있던) 노드에서 부트스트랩해야 합니다. 낮은 노드에서 부트스트랩하면 최신 트랜잭션이 유실됩니다.
  • Logpresso 기동은 항상 동일한 OS 계정으로 수행합니다. 기동 계정이 바뀌면 파일 소유권 문제로 Permission denied가 발생할 수 있습니다.
  • MariaDB 노드 간 3306 / 4444 / 4567 / 4568 포트 통신이 가능해야 합니다. (SST/IST 동기화용)

적용 대상

  • 제품: Logpresso Sonar (SNR)
  • 대상 환경:
    • 분석서버 2식 이중화 (Active / Standby)
    • MariaDB Galera Cluster 2노드
    • systemd 기반 Linux (RHEL, Rocky 등)

기준 경로

  • 본 가이드의 명령어는 아래 경로를 기준으로 작성되었습니다.

    구분 경로
    패키지(package) /opt/logpresso
    MariaDB 데이터(grastate.dat) /var/lib/mysql

상황별 대응 요약

상황 대응
한 대만 재기동 재기동된 노드에서 MariaDB 일반 기동 → 동기화 확인 → Logpresso 기동
계획된 전체 정지·기동 정지: Standby → Active 순 / 기동: 마지막 정지 노드에서 부트스트랩
두 대 동시 비정상 정지 (정전 등) seqno가 높은 노드 확인 후 해당 노드에서 부트스트랩
  • 각 상황별 상세 절차는 아래 상세 절차 1) ~ 3) 을 참고합니다.

상세 절차

1) 한 대만 재기동된 경우

반대편 노드가 정상 동작 중인 경우입니다. 재기동된 노드에서만 아래 순서로 기동하며, 이때 부트스트랩(galera_new_cluster)이 아닌 일반 기동을 사용합니다.

  1. MariaDB 기동
  • 살아 있는 노드에 자동으로 합류(IST/SST)합니다.
systemctl start mariadb
  1. 클러스터 동기화 상태 확인
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"          # 결과: 2
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment'"   # 결과: Synced
  1. Logpresso 기동
cd /opt/logpresso
./logpresso start

2) 계획된 전체 정지·기동 절차

작업 등으로 두 노드를 모두 정지해야 하는 경우입니다. 마지막에 정지한 노드를 반드시 기록합니다.

[정지 순서]

  1. Logpresso 정지 (양 노드)
cd /opt/logpresso
./logpresso stop
  1. MariaDB 정지 (Standby 먼저 → Active 마지막)
systemctl stop mariadb

[기동 순서]

  1. 마지막에 정지한 노드에서 부트스트랩
  • grastate.dat에서 safe_to_bootstrap: 1 확인 후 기동합니다.
cat /var/lib/mysql/grastate.dat
galera_new_cluster
  1. 반대 노드 MariaDB 기동
systemctl start mariadb
  1. 클러스터 상태 확인 후 Logpresso 기동 (양 노드, 순서 무관)
cd /opt/logpresso
./logpresso start

3) 두 대가 동시에 비정상 정지된 경우 (수동 복구 필수)

정전 등으로 양 노드가 동시에 정지되면 양쪽 모두 safe_to_bootstrap: 0 상태가 되어 일반 기동이 거부됩니다. 아래 절차로 수동 복구합니다.

  1. 양 노드에서 grastate.dat 확인
  • 양 노드 모두 seqno가 정상 기록되어 있으면 값을 비교해 높은 노드를 확인하고, 2번은 건너뜁니다.
cat /var/lib/mysql/grastate.dat
  1. 마지막 커밋 위치(seqno) 확인 — seqno가 -1인 경우에만 수행 (해당 노드 각각)
  • 비정상 정지된 노드는 seqno-1로 남으므로, MariaDB에 기본 포함된 galera_recovery 스크립트로 InnoDB 로그에서 마지막 커밋 위치를 확인합니다. (DB가 기동되지는 않습니다.)
galera_recovery
# 출력 예시 → Recovered position: <uuid>:<seqno>
  • 스크립트가 없는 환경(바이너리 설치 등)에서는 mariadbd --wsrep-recover 실행 후 로그의 Recovered position 라인을 확인합니다.
  1. seqno가 더 높은 노드에서 부트스트랩
  • 해당 노드의 grastate.dat에서 safe_to_bootstrap 값을 1로 수정 후 기동합니다.
vi /var/lib/mysql/grastate.dat
# safe_to_bootstrap: 0 → 1

galera_new_cluster
  1. 나머지 노드 기동
  • 전체 동기화(SST)가 발생할 수 있으며, 데이터 용량에 따라 시간이 소요될 수 있습니다.
systemctl start mariadb
  1. 클러스터 상태 확인 후 Logpresso 기동 (양 노드)
cd /opt/logpresso
./logpresso start

검증

  1. MariaDB 클러스터 상태 확인
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"          # 결과: 2
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_local_state_comment'"   # 결과: Synced
  1. Logpresso 프로세스 확인
ps -ef | grep araqne
  1. 기동 로그 확인
tail -f /opt/logpresso/log/araqne.log
  1. 웹 콘솔 접속 및 로그 수집·적재 현황 확인

여기서 언급할 내용은 아니지만 공식 매뉴얼 기준으로는 아래와 같은데요.

logpresso start/stop 하는게 맞을까요?

안녕하세요 로그프레소 이규호입니다

공식 매뉴얼 기준으로 logpresso 런처를 통해 systemd 에 등록하신 경우 systemd로 기동하시는게 맞습니다.

systemd 에 enabled 가 되어있을 경우 서버재기동 시 Requires=mariadb.service 옵션에 따라서 mariadb 가 기동되고 로그프레소 서비스가 자동으로 실행되게 됩니다.

감사합니다.

1개의 좋아요