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의 양이 한계치에 도달하면 송신자에게 데이터를 일시적으로 멈추도록 요청합니다.
핵심 과정
- 노드의 큐 상태 확인:
- 각 노드는 수신 대기 큐(갤레라의 gcache 버퍼) 크기를 모니터링.
- 큐가 특정 임계값(예: fc_limit)을 초과하면 Flow Control이 활성화됩니다.
- Flow Control 신호 전달:
- 느린 노드는 다른 노드에 Flow Control 신호를 보내 송신을 중단시키고 대기하도록 요청.
- 이 신호는 PAUSE 형태로 전달되며, 모든 송신자는 이를 수신하면 데이터 전송을 일시 중지합니다.
- 재개 조건:
- 느린 노드가 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
'DB > MariaDB' 카테고리의 다른 글
[Mysql] slow query 발생에 의한 mysqld 프로세스 cpu 사용률 급증 이슈 (1) | 2025.03.12 |
---|---|
java.sql.SQLTransientConnectionException: hikari-rw-chat - Connection is not available, request timed out after 30000ms 오류 해결방법 (0) | 2024.11.21 |
[MariaDB] InnoDB 성능 모니터링 (0) | 2024.11.08 |
[MariaDB] MySQL 성능 모니터링 (2) | 2024.11.04 |
[MariaDB] mysql 데이터 타입 (1) | 2024.09.26 |