Mysql & Maria/admin

MySQL의 복제 지연을 줄이기 위한 전략

dbavayne 2024. 8. 27. 13:43

복제지연은 대량의 쓰기 작업이 발생했을 때 가장 많이 발생합니다. 덩치가 큰 테이블의 인덱스를 생성하거나 DDL작업이 발생할 때도 복제지연이 발생할 수 있습니다.

 

복제 지연에 영향을 주는 파라미터 값들

MySQL의 InnoDB 스토리지 엔진은 디스크 I/O 작업을 관리하기 위해 다양한 파라미터를 제공하는데, 그 중 하나가 innodb_io_capacity입니다. 이 파라미터는 InnoDB가 내부 작업(특히 버퍼 풀에서 디스크로의 플러시 작업)을 처리할 때 사용할 수 있는 I/O 작업의 최대 수를 설정합니다. 이 설정은 복제지연(replication lag)에 직접적인 영향을 미칠 수 있습니다. 이번 포스트에서는 innodb_io_capacity가 복제지연에 미치는 영향을 살펴보겠습니다.

innodb_io_capacity, innodb_io_capacity_max

innodb_io_capacity는 InnoDB가 디스크로 플러시할 수 있는 I/O 작업의 최대 수를 지정합니다.

innodb_io_capacity의 설정 값을 찾기 위해서는 아래와 같은 절차를 거쳐야 합니다.

  • 디스크 IOPS 측정: 서버의 디스크가 지원하는 최대 IOPS를 확인합니다. SSD의 경우 일반적으로 높은 값을 사용할 수 있으며, HDD의 경우 상대적으로 낮은 값을 사용해야 합니다.
  • 점진적 조정: innodb_io_capacity 값을 점진적으로 조정하여 최적의 성능을 찾습니다. 기본값(200)에서 시작하여 디스크 I/O 성능과 복제지연을 관찰하면서 값을 조정합니다.
  • 모니터링 도구 사용: MySQL의 성능 스키마와 모니터링 도구(Prometheus, Grafana 등)를 사용하여 복제지연 및 디스크 I/O 사용률을 모니터링합니다.

innodb_io_capacity는 MySQL의 복제지연에 큰 영향을 미치는 중요한 설정입니다. 디스크 I/O 성능에 맞게 적절히 조정하여 InnoDB의 플러시 작업이 원활하게 이루어지도록 해야 합니다. 이를 통해 주 서버와 보조 서버 간의 데이터 동기화 속도를 최적화하고, 복제지연을 최소화할 수 있습니다. 최적의 값을 찾기 위해 디스크 IOPS를 측정하고, 실시간 모니터링을 통해 설정 값을 조정하는 것이 중요합니다.

MySQL innodb_io_capacity의 기본값은 200이며, innodb_io_capacity_max의 기본값은 2000 인데, 이 값을 조정해서 I/O 성능을 조정할 수 있으며, 모니터링을 통해 WriteIOPS가 실제 얼마나 일어나는지를 파악해서 충분히 크기를 늘려주는 것이 좋습니다. 실제 WriteIOPS 가 2000 이상 발생한다면, innodb_io_capacity = 2000 innodb_io_capacity_max 값는 최대 IOPS의 7~80% 수준으로 늘려주는 것이 좋습니다.

AWS RDS 의 경우 IOPS의 계산식은

IOPS = 초당 데이터 전송량 / 블럭크기(단위 데이터 용량)

으로 블럭 크기는 DBMS마다 기준이 다릅니다. Oracle, MS-SQL, PostgreSQL은 8KB, MySQL은 16KB 입니다.

 

slave_parallel_workers

slave_parallel_workers은 복제 사용하는 프로세스 수를 결정합니다. slave_parallel_workers에 설정된 수 만큼의 멀티 프로세스를 통해 병렬로 복제를 진행할 수 있는데, 이 값은 복제서버의 CPU 코어수에 영향을 미치기 때문에 복제 서버가 가지고 있는 코어를 복제에 다 사용하지 않도록 구성하는 것이 중요합니다.

RDS에서 읽기 복제를 생성하면 slave_parallel_workers의 기본값이 4이기 때문에 너무 작은 인스턴스를 복제 인스턴스로 사용하면 복제하는데 모든 CPU 코어를 사용해버리기 때문에 문제가 생길수 있습니다. 수동으로 값을 줄여주거나, 인스턴스 사이즈를 키워야하는 경우가 발생할 수 있습니다.


출처

https://rastalion.dev/mysql-%eb%b3%b5%ec%a0%9c-%ec%a7%80%ec%97%b0/