높은 트래픽 환경에 대한 MySQL 복제를 최적화하기위한 주요 구성 설정에는 성능, 안정성 및 데이터 일관성의 균형을 맞추기 위해 다양한 복제 및 서버 매개 변수를 신중하게 조정해야합니다.
활성/수동 구성 사용 :
교통량이 많은 시나리오에서는 Active/Passive Replication Architecture를 사용하는 것이 좋습니다. 하나의 기본 MySQL Server (Master)는 모든 쓰기 작업 및 다중 수동적 복제품 (Slaves)이 읽기 작업을 처리합니다. 이로 인해 워크로드가 효과적으로 나뉘어 리플리카가 읽기 전용 트래픽을 제공하는 동안 마스터 핸들은 쓰여집니다. 이 설정은 활성/활성 구성의 복잡성 및 충돌 문제를 피합니다. 그러나이 설정에서 흔히 볼 수있는 비동기 복제는 마스터와 복제간에 약간의 지연을 도입 할 수 있으므로 응용 프로그램 논리는 읽기 후에 일관성 요구 사항을 고려해야합니다.
복제 모드 :
MySQL 복제는 비동기 및 반 동시 복제 모드를 지원합니다. 비동기 복제는 기본값이며 고성능이지만 잠재적 인 복제 지연이 있습니다. 반 동기성 복제는 중 하나 이상의 복제가 진행하기 전에 트랜잭션 수령을 확인할 때까지 마스터가 대기하도록하여 데이터 일관성을 향상시킵니다. 이렇게하면 장애 조치 상황에서 데이터 손실의 위험이 줄어들지 만 대기 시간이 추가됩니다. 트래픽이 높은 경우 일관성과 성능 사이의 적절한 상충 관계를 보장하기 위해 반 동기 모드의 시간 초과 설정을 조정해야합니다 (기본 10 초). 때로는 중요한 복제본이 반 동기화를 사용하고 다른 사람들은 비동기를 사용하여 가용성과 성능의 균형을 잡는 경우 혼합 모드가 사용됩니다.
이진 로깅 구성 :
`log-bin``를 설정하고 고유 한 'Server-ID'를 할당하여 마스터에서 바이너리 로깅을 활성화하십시오. `binlog_format = row`를 선택하여 특히 복잡한 워크로드에서 정확도와 일관성에 대한 명령문보다는 개별 행 변경을 기록하십시오. 복구 능력 및 저장 요구의 균형을 맞추기 위해 이진 로그 보유 정책을 현명하게 구성하십시오. 또한 글로벌 트랜잭션 식별자가 복제 관리 및 장애 조치를 단순화하여 자동화를 향상시키기 위해`gtid_mode = on`및`enforce_gtid_consistency = on '을 활성화합니다.
성능을위한 복제 토폴로지 :
높은 트래픽 시나리오에서 복제를 스케일링하려면 계층 적 복제 토폴로지 (Chained 또는 Relay 복제라고도 함)가 권장됩니다. 마스터는 중간 서버 (릴레이 슬레이브)로 복제되어 다른 복제본으로 복제됩니다. 이는 네트워크를 위임하여 마스터의 부하를 줄이고 중간 복제본으로 복제 트래픽을 줄입니다. 이 토폴로지는 네트워크 병목 현상을 완화하고 전반적인 복제 처리량을 향상시킵니다. 그러나 릴레이 서버에서`log_slave_updates`를 활성화해야하므로 성능 오버 헤드를 전달하고 계단식 복제 지연을 방지하기 위해 신중한 모니터링이 필요합니다.
노예의 병렬 복제 :
복제 성능을 향상시키기 위해 복제본에서 병렬 복제를 활성화하십시오. MySQL 5.6+는 다중 스레드 슬레이브 SQL 실행을 지원합니다. `glave_parallel_workers`와 같은 구성 가능한 옵션을 사용하면 여러 복제 SQL 스레드가 트랜잭션을 병렬로 적용 할 수 있도록하여 독립적 인 트랜잭션을 사용한 워크로드에 대한 복제 지연이 줄어 듭니다. 경합을 일으키지 않고 CPU 및 워크로드 특성을 기반으로 최적의 스레드 수를 설정하려면 신중한 튜닝이 필요합니다.
네트워크 및 연결 최적화 :
복제 트래픽을위한 네트워크 구성 최적화 :
- 복제를 위해 전용 네트워크 인터페이스를 사용합니다.
- 복제 스트림에서 압축을 활성화하여 대역폭 사용을 줄입니다.
- 복제 트래픽을 안전하게 허용하도록 방화벽 규칙을 올바르게 구성합니다.
-CPU 오버 헤드가 추가되지만 안전한 데이터 전송을 위해 SSL 암호화 (`-ssl` 옵션 활성화)를 사용합니다.
- 연결 풀링은 빈번한 연결 설정에서 오버 헤드를 줄일 수 있습니다.
저장 및 I/O 최적화 :
바이너리 로깅이 복제에 직접적인 영향을 미치기 때문에 바이너리 로그 쓰기 마스터에서 빠른 스토리지 (SSD 선호)를 사용하십시오. 복제본에서 I/O 경합을 피하기 위해 릴레이 로그에 대한 별도의 저장 장치를 고려하십시오. 복제 로그에는 정기적 인 FSYNC와의 순차적 쓰기가 포함되므로 쓰기에 대한 I/O 스케줄러 설정 및 파일 시스템 매개 변수를 최적화합니다. 디스크 대기 시간은 복제 지연과 전반적인 성능에 직접 영향을 미칩니다.
시간 초과 및 재시험 설정 :
`glave_net_timeout '과 같은 복제 시간 초과 설정을 조정하여 복제 연결이 트래픽 또는 고도가 높은 네트워크에서 조기에 삭제되지 않도록하십시오. 또한 과도 네트워크 고장 중에 더 나은 탄력성을 위해`mas
모니터링 및 경고 :
복제 지연, 네트워크 처리량, 디스크 I/O 및 CPU 사용에 대한 모니터링을 구현하십시오. 도구는 복제 지연 임계 값 및 성능 저하를 나타낼 수있는 기타 이상을 경고 할 수 있습니다. 교통량이 많은 환경에서는 복제 건강을 유지하기 위해 사전 모니터링이 중요합니다.
장애 조치 및 백업 전략 :
고 가용성을 위해 복제를 사용하는 것 외에도 복제본을 정기적으로 백업해야합니다. 실패 절차를 자주 테스트합니다. GTID를 사용하여 마지막으로 실행 된 트랜잭션을 쉽게 식별하고 복제본이 데이터 손실없이 따라 잡을 수 있도록 장애 조절 복구를 단순화합니다. 사슬 된 복제 토폴로지에서, 릴레이 슬레이브와 잎 복제본이 장애 조치 전에 완전히 동기화되도록하십시오.
추가 설정 :
- 오버 헤드를 줄이려면 복제본에서 불필요한 로깅 및 모니터링을 비활성화합니다.
- 내구성을 위해 마스터에`sync_binlog = 1`를 사용하고, 인식은 디스크 성능에 영향을 미칩니다.
-`max_allowed_packet '을 조정하여 오류없이 대규모 트랜잭션을 복제 할 수 있습니다.
주요 구성 매개 변수 요약 :
- 마스터 :
-`server-id` (고유)
-`log-bin = mysql-bin`
-`binlog_format = row`
-`gtid_mode = on
-`enforce_gtid_consistency = on '
-`sync_binlog = 1` (내구성을 위해)
- 복제본 :
-`server-id` (마스터와 다른 독특)
-`relay_log '
-`log_slave_updates` (중간 릴레이로 사용되는 경우)
-`ravel_parallel_workers` (병렬 복제의 경우 1)
-네트워크 조건을 위해``슬레이브-네트 타임 아웃 '
- 복제 모드 :
- 임계 복제본에 대한 반 동시성 복제 활성화 (`rpl_semi_sync_master_enabled = on,`rpl_semi_sync_slave_enabled = on ')
- 네트워크 :
-SSL이 복제를 위해 활성화되었습니다
- 처리량이 제한된 경우 압축이 가능합니다
- 저장:
- 이진 및 릴레이 로그 용 SSD
- 가능한 경우 릴레이 로그에 대한 별도의 디스크
- 토폴로지 :
- 체인 또는 계층 적 복제를 사용하여 하중을 분배하십시오.