Meta에서 데이터베이스로 MySQL을 사용하고 있는데 기존에는 반동기화 복제(Semisynchronous Replication)를 사용해서 여러 리전에 리플리카를 만들어서 고가용성을 확보하고 지역
Meta에서 데이터베이스로 MySQL을 사용하고 있는데 기존에는 반동기화 복제(Semisynchronous Replication)를 사용해서 여러 리전에 리플리카를 만들어서 고가용성을 확보하고 지역별로 리플레키를 배치해서 페타바이트의 데이터를 관리하고 있었다고 합니다. 하지만 이 Semisynchronous Replication을 이용한 방식이 리플리카 승격 및 장애 조치를 안전하게 하기 위해 수많은 자동화와 스크립트, 오케스트레이션이 필요했기 때문에 점점 복잡해지고 유지 보수도 쉽지 않아졌습니다. 이러한 문제를 해결하기 위해 MySQL을 완전한 분산시스템으로 만들기로 결정하고 컨트롤 플레인을 없애기 위해 Raft 합의 알고리즘을 사용하기로 했습니다. 이는 MySQL 서버간 리더십, 멤버십의 출처가 MySQL 서버내로 이동했다는 것을 의미하게 됩니다. Apache Kudu를 기반으로 한 MySQL용 Raft 합의 알고리즘 구현인 kuduraft를 만들어서 구현했습니다. 이를 이용하면 프라이머리 MySQL 서버가 Raft로 binlog를 작성하고 Raft가 binlog를 팔로어와 리플리케이터에게 보내게 됩니다. 이렇게 구현한 덕에 MySQL 서버가 승격과 멤버쉽 처리를 직업 하기 때문에 그동안 어려웠던 운영상 이슈가 크게 줄어들었다고 합니다. https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/