Galera 클러스터 모니터링 가이드

1. 클러스터 일관성 모니터링

1.1 클러스터 UUID 확인

다음 명령어로 현재 노드가 올바른 클러스터에 속해 있는지 확인합니다:

mysql> SHOW STATUS LIKE 'wsrep_cluster_state_uuid';

클러스터 내 모든 노드에서 이 값이 동일해야 합니다. 값이 다르면 해당 노드가 클러스터에서 분리된 상태입니다.

1.2 클러스터 구성 변경 횟수 확인

mysql> SHOW STATUS LIKE 'wsrep_cluster_conf_id';

이 변수는 클러스터 멤버십 변경이 발생한 총 횟수를 나타냅니다. 모든 노드에서 값이 같아야 하며, 다를 경우 해당 노드가 클러스터에서 분리되었음을 의미합니다. 네트워크 연결 등을 점검하여 일관된 상태로 복구해야 합니다.

1.3 클러스터 노드 수 확인

mysql> SHOW STATUS LIKE 'wsrep_cluster_size';

클러스터에 연결된 노드의 총 개수를 표시합니다. 실제 환경에서는 최소 3개 이상의 홀수 노드로 구성하는 것이 권장됩니다(짝수는 스플릿 브레인 위험).

1.4 클러스터 상태 확인

mysql> SHOW STATUS LIKE 'wsrep_cluster_status';

값이 Primary여야 정상입니다. Primary가 아니라면 일부 노드가 사용 불가능하거나 스플릿 브레인이 발생했을 수 있습니다.

모든 노드가 Primary 상태가 아니라면 쿼럼 리셋이 필요하며, 불가능할 경우 수동 재시작이 필요합니다:

  1. 모든 노드 종료
  2. 각 노드를 재시작하며 wsrep_last_committed 값을 기준으로 마스터 노드 결정

참고: 수동 재시작 시 캐시가 손실되어 IST(Incremental State Transfer)를 사용할 수 없습니다.

2. 노드 상태 모니터링

2.1 SQL 쿼리 가능 여부 확인

mysql> SHOW STATUS LIKE 'wsrep_ready';

ON이면 정상, OFF이면 wsrep_connected 값을 추가로 확인해야 합니다.

2.2 클러스터 연결 상태 확인

mysql> SHOW STATUS LIKE 'wsrep_connected';

값이 OFF이면 노드가 클러스터에 연결되지 않은 것입니다. 이는 주로 wsrep_cluster_address 또는 wsrep_cluster_name 설정 오류 때문이며, 에러 로그를 통해 원인을 진단할 수 있습니다.

2.3 노드의 상세 상태 확인

mysql> SHOW STATUS LIKE 'wsrep_local_state_comment';

노드가 Primary 컴포넌트에 속할 때 일반적인 상태값:

  • Joining
  • Waiting for SST
  • Joined
  • Synced (정상 동기화 완료)
  • Donor

wsrep_readyOFF이고 상태가 Joining, Waiting for SST, Joined 중 하나라면 동기화가 진행 중입니다. Initialized는 노드가 Primary 컴포넌트에 속하지 않음을 의미합니다.

3. 복제 성능 및 상태 확인

3.1 Flow Control 영향 확인

mysql> SHOW STATUS LIKE 'wsrep_flow_control_paused';

값이 0.0에 가까울수록 좋습니다. Slave 지연으로 인해 전체 클러스터 성능이 저하되는 정도를 나타냅니다. 개선 방법:

  • wsrep_slave_threads 값 증가
  • 복제가 느린 노드를 클러스터에서 제거

wsrep_slave_threads 설정 시 wsrep_cert_deps_distance 값을 참고하여 이 값을 크게 초과하지 않도록 합니다.

3.2 네트워크 성능 진단

mysql> SHOW STATUS LIKE 'wsrep_local_send_queue_avg';

이 값이 높으면 네트워크 연결이 병목일 가능성이 있습니다. 물리 계층이나 OS 설정에서 원인을 찾아야 합니다.

4. 전체 wsrep 상태 변수 조회

mysql> SHOW STATUS LIKE '%wsrep%';

다음은 주요 상태 변수들의 예시 출력입니다:

+------------------------------------------+-------------------------------------------------------+
| Variable_name                             | Value                                                 |
+------------------------------------------+-------------------------------------------------------+
| wsrep_local_state_uuid                    | e8149a5c-636a-11e5-8b4b-67b16bb666a4                |
| wsrep_protocol_version                    | 7                                                     |
| wsrep_last_committed                      | 526498                                                |
| wsrep_replicated                          | 526498                                                |
| wsrep_replicated_bytes                    | 238196578                                             |
| wsrep_repl_keys                           | 1926403                                               |
| wsrep_repl_keys_bytes                     | 27520685                                              |
| wsrep_repl_data_bytes                     | 176980021                                             |
| wsrep_repl_other_bytes                    | 0                                                     |
| wsrep_received                            | 7970                                                  |
| wsrep_received_bytes                      | 64791                                                 |
| wsrep_local_commits                       | 526357                                                |
| wsrep_local_cert_failures                 | 0                                                     |
| wsrep_local_replays                       | 0                                                     |
| wsrep_local_send_queue                    | 0                                                     |
| wsrep_local_send_queue_max                | 2                                                     |
| wsrep_local_send_queue_min                | 0                                                     |
| wsrep_local_send_queue_avg                | 0.000041                                              |
| wsrep_local_recv_queue                    | 0                                                     |
| wsrep_local_recv_queue_max                | 4                                                     |
| wsrep_local_recv_queue_min                | 0                                                     |
| wsrep_local_recv_queue_avg                | 0.034504                                              |
| wsrep_local_cached_downto                 | 1                                                     |
| wsrep_flow_control_paused_ns              | 22690449177                                           |
| wsrep_flow_control_paused                 | 0.000005                                              |
| wsrep_flow_control_sent                   | 0                                                     |
| wsrep_flow_control_recv                   | 371                                                   |
| wsrep_cert_deps_distance                  | 74.734609                                             |
| wsrep_apply_oooe                          | 0.000000                                              |
| wsrep_apply_oool                          | 0.000000                                              |
| wsrep_apply_window                        | 1.000000                                              |
| wsrep_commit_oooe                         | 0.000000                                              |
| wsrep_commit_oool                         | 0.000000                                              |
| wsrep_commit_window                       | 1.000000                                              |
| wsrep_local_state                         | 4                                                     |
| wsrep_local_state_comment                 | Synced                                                |
| wsrep_cert_index_size                     | 43                                                    |
| wsrep_cert_bucket_count                   | 126282                                                |
| wsrep_gcache_pool_size                    | 261431296                                             |
| wsrep_causal_reads                        | 0                                                     |
| wsrep_cert_interval                       | 0.000002                                              |
| wsrep_incoming_addresses                  | 10.130.7.5:3306,,10.130.7.4:3306                      |
| wsrep_evs_delayed                         |                                                       |
| wsrep_evs_evict_list                      |                                                       |
| wsrep_evs_repl_latency                    | 0/0/0/0/0                                             |
| wsrep_evs_state                           | OPERATIONAL                                           |
| wsrep_gcomm_uuid                          | e813b31f-636a-11e5-90c7-0f6d378e1dfb                 |
| wsrep_cluster_conf_id                     | 5                                                     |
| wsrep_cluster_size                        | 3                                                     |
| wsrep_cluster_state_uuid                  | e8149a5c-636a-11e5-8b4b-67b16bb666a4                 |
| wsrep_cluster_status                      | Primary                                               |
| wsrep_connected                           | ON                                                    |
| wsrep_local_bf_aborts                     | 0                                                     |
| wsrep_local_index                         | 2                                                     |
| wsrep_provider_name                       | Galera                                                |
| wsrep_provider_vendor                     | Codership Oy <info@codership.com>                     |
| wsrep_provider_version                    | 3.11(rXXXX)                                           |
| wsrep_ready                               | ON                                                    |
+------------------------------------------+-------------------------------------------------------+
58 rows in set (0.12 sec)

출력 결과는 약 60개의 변수이며, 핵심 변수는 세 가지 범주로 나눌 수 있습니다:

  • 클러스터 무결성: wsrep_cluster_state_uuid, wsrep_cluster_conf_id, wsrep_cluster_size, wsrep_cluster_status
  • 노드 상태: wsrep_ready, wsrep_connected, wsrep_local_state_comment
  • 복제 성능: wsrep_local_recv_queue_avg, wsrep_flow_control_paused, wsrep_cert_deps_distance

5. wsrep 관련 주요 변수 설명

변수명설명
wsrep_local_state_uuid노드에 저장된 UUID 상태
wsrep_protocol_version사용 중인 wsrep 프로토콜 버전
wsrep_last_committed마지막으로 커밋된 트랜잭션 시퀀스 번호
wsrep_replicated다른 노드로 전송된 writeset 총 개수
wsrep_replicated_bytes다른 노드로 전송된 writeset 총 바이트 수
wsrep_repl_keys복제된 키 총 개수
wsrep_repl_keys_bytes복제된 키 총 바이트 수
wsrep_repl_data_bytes복제된 데이터 총 바이트 수
wsrep_repl_other_bytes기타 복제 데이터 총 바이트 수
wsrep_received다른 노드에서 수신한 writeset 총 개수
wsrep_received_bytes다른 노드에서 수신한 writeset 총 바이트 수
wsrep_local_commits해당 노드에서 커밋된 writeset 총 개수
wsrep_local_cert_failures인증 테스트에 실패한 writeset 개수
wsrep_local_replays비대칭 잠금 정밀도로 인해 재생된 트랜잭션 수
wsrep_local_send_queue현재 전송 대기열 길이 (전송 대기 writeset 수)
wsrep_local_send_queue_avg네트워크 병목 징후. 값이 높으면 네트워크 병목 가능성
wsrep_local_recv_queue현재 수신 대기열 길이 (처리 대기 writeset 수)
wsrep_local_recv_queue_avgSlave 트랜잭션 대기열 평균 길이. Slave 병목 징후
wsrep_local_cached_downtogcache 최소 시퀀스 번호. IST/SST 판단 기준. 0이면 gcache에 writeset 없음
wsrep_flow_control_paused_ns복제 중단 시간 (나노초)
wsrep_flow_control_pausedSlave 지연으로 인한 클러스터 느려짐 정도 (0~1). 0에 가까울수록 좋음. 1이면 복제 완전 중단. wsrep_slave_threads 최적화로 개선 가능
wsrep_flow_control_sent해당 노드가 복제를 중단한 횟수
wsrep_flow_control_recv해당 노드가 복제 중단을 요청받은 횟수
wsrep_cert_deps_distance병렬로 처리 가능한 트랜잭션 수. wsrep_slave_threads는 이 값을 크게 초과하지 않아야 함
wsrep_apply_oooewriteset이 순서에 맞지 않게(out-of-order) 적용된 빈도
wsrep_apply_oool큰 시퀀스값 writeset이 작은 시퀀스값보다 더 자주 적용된 빈도
wsrep_apply_window동시에 사용된 최대/최소 시퀀스값의 평균 차이
wsrep_commit_oooe트랜잭션이 대기열을 벗어난(비순차 커밋) 빈도
wsrep_commit_window동시에 커밋된 최대/최소 시퀀스값의 평균 차이
wsrep_local_stateGalera 상태값. 1: Joining, 2: Donor/Desynced, 3: Joined, 4: Synced
wsrep_local_state_commentGalera 상태 설명. wsrep_connected=ON, wsrep_ready=OFF일 때 원인 확인 가능
wsrep_cert_index_size인증 인덱스의 엔트리 수
wsrep_cert_bucket_count해시 테이블 내 인증 인덱스 셀 수
wsrep_gcache_pool_sizegcache용 페이지 풀 또는 동적 할당된 바이트 수
wsrep_causal_reads처리된 writeset 수
wsrep_incoming_addresses클러스터 노드 주소 (쉼표로 구분)
wsrep_evs_delayed클러스터에서 제외된 UUID
wsrep_evs_evict_list지연이 있는 노드 목록
wsrep_evs_repl_latency클러스터 노드 간 통신 복제 지연 정보
wsrep_evs_stateEVS 프로토콜 상태
wsrep_gcomm_uuidGalera view ID. 클러스터 UUID와는 다르며 gvwstate.dat에서 확인 가능
wsrep_cluster_conf_id클러스터 멤버십 변경 횟수. 정상이면 모든 노드에서 동일. 다르면 임시 파티셔닝 발생
wsrep_cluster_size클러스터 내 노드 수. 예상 수와 일치하면 모든 노드 연결됨
wsrep_cluster_state_uuid클러스터 UUID. 모든 노드에서 동일해야 함. 다르면 해당 노드가 클러스터에 미연결
wsrep_cluster_status클러스터 노드 상태. Primary가 아니면 파티셔닝 또는 스플릿 브레인 발생 가능. 가능한 값: Primary, Non-Primary, Disconnected
wsrep_connected노드가 클러스터에 연결되었는지 여부. OFF면 wsrep_ready도 OFF이며 설정 오류 가능성
wsrep_local_bf_aborts다른 노드 트랜잭션에 의해 중단된 로컬 실행 트랜잭션 수
wsrep_local_index클러스터 내 노드 인덱스
wsrep_provider_namewsrep 제공자 이름
wsrep_provider_vendorwsrep 공급업체
wsrep_provider_versionwsrep 제공자 버전
wsrep_ready노드 쿼리 수용 가능 여부. ON이면 SQL 부하 수용, OFF면 wsrep_connected 확인 필요

6. 클러스터 모니터링 스크립트 확장

wsrep_notify_cmd 파라미터를 통해 명령어 스크립트를 호출하여 모니터링을 확장할 수 있습니다.

7. 주의사항

- 3개 미만의 노드에서 데이터베이스를 종료하지 마세요. 재부팅이 필요할 수 있습니다.
- 클러스터 구축 후 모든 노드를 종료해야 한다면, 재시작 시 반드시 재부팅(rebootstrap)이 필요합니다.
- MyISAM 등 비트랜잭션 테이블의 경우 DDL만 동기화되고 DML은 동기화되지 않습니다.
  예: MyISAM 테이블 생성 후 데이터를 삽입하면 다른 노드에는 테이블만 생성되고 데이터는 없습니다(0행).

8. 복제 성능 상세 진단

8.1 수신 대기열 평균 확인

mysql> SHOW STATUS LIKE 'wsrep_local_recv_queue_avg';

값이 0보다 크면 노드가 수신한 writeset을 적시에 적용하지 못하고 있음을 의미합니다. 최대/최소값도 함께 확인할 수 있습니다:

mysql> SHOW STATUS LIKE 'wsrep_local_recv_queue_min';
mysql> SHOW STATUS LIKE 'wsrep_local_recv_queue_max';

8.2 Flow Control 일시 정지율 측정

mysql> FLUSH STATUS;
-- 일정 시간 대기 후
mysql> SHOW STATUS LIKE 'wsrep_flow_control_paused';

이 값은 해당 기간 동안 복제가 중단된 시간의 비율(백분율)을 나타냅니다. 예: 0.18은 18%의 시간 동안 복제가 중단되었음을 의미합니다. 0이 아닌 값이 지속되면 wsrep_slave_threads 값을 늘려야 할 수 있습니다.

8.3 병렬 적용 가능성 평가

mysql> SHOW STATUS LIKE 'wsrep_cert_deps_distance';

이 값을 참고하여 wsrep_slave_threads 파라미터를 설정합니다. wsrep_slave_threads는 이 값을 크게 초과하지 않아야 합니다.

8.4 전송 대기열 분석 (네트워크 병목 진단)

mysql> SHOW STATUS LIKE 'wsrep_local_send_queue_avg';

값이 0보다 크면 노드가 writeset 전송을 따라가지 못하고 있음을 의미합니다. 하드웨어, OS 설정 등 다양한 원인이 있을 수 있습니다.

태그: Galera MySQL 클러스터 모니터링 wsrep 복제 성능

6월 24일 21:54에 게시됨