DB/MariaDB

[MariaDB] Galera cluster flow control

Dev.Congsik 2024. 11. 18. 13:48
728x90
  • Galera Cluster의 Flow Control은 Galera 클러스터에서 노드 간의 데이터 동기화를 관리하는 메커니즘으로, 클러스터의 안정성과 데이터 일관성을 유지하기 위해 중요한 역할을 합니다.
  • Galera는 동기식 멀티마스터 데이터베이스 클러스터로 설계되어 데이터 무결성과 일관성을 보장하지만, 노드 간 데이터 동기화 속도와 처리 속도 차이를 조정해야 하는 상황이 종종 발생합니다. Flow Control은 이런 상황에서 클러스터의 전체 성능과 안정성을 조율합니다.

1. Galera Cluster의 동작 원리

Galera 동기화 구조

  • Galera는 **Write Set Replication(WSREP)**을 사용하여 트랜잭션 데이터를 클러스터 내 모든 노드에 복제합니다.
  • 각 노드는 Write Set을 받고, 이를 처리하여 상태를 일치시킵니다.
  • 데이터 무결성을 보장하기 위해 동기식 복제 방식으로 동작하지만, 각 노드의 처리 속도는 다를 수 있습니다.

2. Flow Control의 필요성

Galera 클러스터에서 노드 간 처리 속도 차이가 발생하면 다음과 같은 문제가 발생할 수 있습니다:

  • 백로그 증가: 느린 노드가 Write Set을 빠르게 처리하지 못하면, 송신자 노드에 백로그가 쌓임.
  • 메모리 과부하: 백로그가 증가하면 메모리 사용량이 급증.
  • 노드 장애: 특정 노드가 처리되지 않은 Write Set으로 인해 클러스터에서 분리될 수 있음.

Flow Control은 이러한 상황을 방지하기 위해 설계되었습니다.


3. Flow Control의 동작

Galera Flow Control은 토큰 기반 방식으로 동작합니다.
수신자가 처리할 수 있는 Write Set의 양이 한계치에 도달하면 송신자에게 데이터를 일시적으로 멈추도록 요청합니다.

 

핵심 과정

  1. 노드의 큐 상태 확인:
    • 각 노드는 수신 대기 큐(갤레라의 gcache 버퍼) 크기를 모니터링.
    • 큐가 특정 임계값(예: fc_limit)을 초과하면 Flow Control이 활성화됩니다.
  2. Flow Control 신호 전달:
    • 느린 노드는 다른 노드에 Flow Control 신호를 보내 송신을 중단시키고 대기하도록 요청.
    • 이 신호는 PAUSE 형태로 전달되며, 모든 송신자는 이를 수신하면 데이터 전송을 일시 중지합니다.
  3. 재개 조건:
    • 느린 노드가 Write Set을 처리하여 큐 크기가 임계값 이하로 내려가면 Flow Control 신호를 해제(RESUME)하여 데이터 전송을 재개.

4. 주요 구성 파라미터

gcs.fc_limit Flow Control이 활성화되는 임계값. 기본값은 16. (큐 크기가 이 값을 초과하면 Flow Control 발동)
gcs.fc_factor Flow Control이 비활성화되는 큐 사용량의 비율. 기본값은 0.5 (50%).
gcs.fc_master_slave Flow Control이 모든 노드에 적용되지 않고 특정 노드에만 작동하도록 설정. (Master-Slave 환경)
wsrep_provider_options 클러스터 내의 Flow Control 동작을 세부적으로 제어하는 설정.

5. Flow Control의 장점과 단점

장점

  • 클러스터 안정성 유지: 느린 노드로 인해 발생할 수 있는 데이터 손실과 과부하를 방지.
  • 데이터 일관성 보장: 모든 노드가 동일한 Write Set을 처리할 시간을 확보.
  • 장애 복구 지원: 노드가 정상 상태를 회복할 수 있도록 조정.

단점

  • 성능 저하: Flow Control로 인해 송신자 노드의 작업이 일시적으로 멈추면 클러스터의 처리량(Throughput)이 감소.
  • 지연 증가: 느린 노드 때문에 클러스터 전체의 응답 시간이 늘어날 수 있음.

6. Flow Control 모니터링

Galera의 상태를 모니터링하면 Flow Control의 활성화 빈도와 클러스터의 성능을 분석할 수 있습니다.

상태 확인

  • SHOW STATUS 명령어:
    SHOW STATUS LIKE 'wsrep%';
    • wsrep_flow_control_paused: Flow Control로 인해 중단된 시간 비율.
    • wsrep_flow_control_sent: Flow Control 요청이 발생한 횟수.
    • wsrep_flow_control_recv: Flow Control 요청을 받은 횟수.

7. Flow Control 최적화

1) 느린 노드의 병목 해결

  • 하드웨어 업그레이드(디스크 I/O, 네트워크 속도 향상).
  • 적절한 메모리 할당 및 튜닝.

2) Flow Control 파라미터 조정

  • gcs.fc_limit 값을 증가시켜 Flow Control의 민감도를 줄임.
  • 클러스터 환경에 따라 fc_factor를 최적화.

3) 애플리케이션 부하 분산

  • 클러스터에 데이터 쓰기 작업이 집중되지 않도록 트래픽을 분산.

 

728x90