17.3.8 Semisynchronous Replication(반동기 복제)
MySQL 5.6은 비동기 복제를 내장하고 있습니다 만, 또한 플러그인에 의해 구현되는 준 동기 복제에 대한 인터페이스를 지원합니다. 이 섹션에서는 준 동기 복제의 개요와 그 동작에 대해 설명합니다. 다음 섹션에서는 준 동기 복제에 대한 관리 인터페이스 및이를 설치, 구성 및 모니터하는 방법에 대해 설명합니다.
MySQL 복제는 기본적으로 비동기입니다. 마스터는 이벤트를 바이너리 로그에 기록하지만, 슬레이브가 그들을 취득하여 처리 여부 또는 그 일시를 인식하지 않습니다. 비동기 복제는 마스터가 충돌해도 그것이 커밋 된 트랜잭션이 슬레이브에 전송되지 않은 경우가 있습니다. 즉,이 경우 마스터에서 슬레이브로 장애 조치가 발생하면 마스터에 관련된 트랜잭션이 서버로 장애 조치 될 수 있습니다.
준 동기 복제는 비동기 복제의 대안으로 사용할 수 있습니다.
슬레이브는 마스터에 연결 될 때 준 동기 대비 여부를 알려줍니다.
준 동기 복제가 마스터 측에서 유효하고, 준 동기 슬레이브가 하나있는 경우 마스터에서 트랜잭션 커밋을 수행하는 스레드는 커밋 후 차단 된 적어도 하나의 준 동기 슬레이브가 트랜잭션의 모든 이벤트 을 받았다는 것을 알리거나 시간이 초과 될 때까지 기다립니다.
슬레이브는 이벤트가 릴레이 로그에 기록 된 디스크에 플래시 된 후에 만 트랜잭션 이벤트를받은 것을 통지합니다.
슬레이브에서 트랜잭션 수신 통지가없는 상태에서 타임 아웃이 발생하면 마스터는 비동기 복제로 돌아갑니다. 적어도 하나의 준 동기 슬레이브가 따라 잡았을 때도, 주인은 준 동기 복제로 돌아갑니다.
준 동기 복제는 마스터와 슬레이브 모두에서 활성화해야합니다. 준 동기 복제가 마스터로 사용할 수 있거나 마스터에서 활성화에도 슬레이브에서 그렇게되어 있지 않으면 마스터는 비동기 복제를 사용합니다.
마스터 블록 중 (커밋을 실행 한 후 슬레이브로부터의 통지를 대기 중)은 트랜잭션을 실행 한 세션으로 돌아 가지 않습니다. 블록이 완료되면 마스터는 그 세션으로 돌아가 다른 문 실행에 진행합니다. 이 시점에서 트랜잭션은 마스터 측에서 커미트에서 해당 이벤트를받은 것이 하나의 슬레이브로부터 통지되어 있습니다.
블록은 바이너리 로그에 기록되는 롤백 후에도 발생하고 이것은 비 트랜잭션 테이블을 변경하는 트랜잭션이 롤백 될 때 발생합니다. 롤백 트랜잭션은 트랜잭션 테이블에 영향을주지 않는 경우를 포함하여 로그가 기록됩니다. 비 트랜잭션 테이블의 변경 내용은 롤백 할 수없고, 슬레이브로 전송 될 필요가 있기 때문입니다.
트랜잭션 컨텍스트에서 발생하지 않는 문의 경우 (즉, 트랜잭션이 START TRANSACTION
또는 SET autocommit = 0
에서 시작되지 않은 경우) 자동 커밋이 활성화되어 있고, 각 문은 암시 적으로 커밋됩니다. 준 동기 복제는 명시 적 트랜잭션 커밋과 마찬가지로 마스터는 이러한 각 문을 커밋 한 후 차단됩니다.
"준 동기 복제"의 "준"의 의미를 이해하려면 비동기 및 전체 동기화 복제와 비교합니다.
비동기 복제는 마스터 이벤트를 바이너리 로그에 기록 노예가 준비되어있는 때 그들을 요청합니다. 이벤트가 슬레이브에 반드시 도달하는 것은 보증되지 않습니다.
전체 동기화 복제는 마스터가 트랜잭션을 커밋하면 마스터가 트랜잭션을 실행 한 세션에 돌아 오기 전에 모든 슬레이브도 트랜잭션을 커밋합니다. 이것의 단점은 트랜잭션의 완료가 크게 지연 될 수있는 것입니다.
준 동기 복제는 비동기 및 전체 동기화 복제의 중간입니다. 마스터는 커밋 후 적어도 1 개의 슬레이브가 이벤트를 수신 로그를 기록 할 때까지 기다립니다. 모든 슬레이브가 수신을 알릴 때까지 기다리지 않고 슬레이브에서 이벤트가 완전히 실행되고 커밋 된 것이 아니라, 수취만을 요구합니다.
준 동기 복제는 비동기 복제에 비해 데이터 무결성이 향상됩니다. 커밋이 완료되었는지를 반환하면 데이터가 적어도 2 개의 장소 (마스터와 하나의 슬레이브)에 존재하는 것을 알 수 있습니다. 마스터는 커밋하더라도, 마스터가 슬레이브로부터의 통지를 대기 중에 충돌이 발생하면 트랜잭션이 슬레이브에 도달하지 못한 가능성이 있습니다.
준 동기 복제는 바이너리 로그 이벤트를 마스터에서 슬레이브로 보낼 수있는 속도를 제한하는 것으로, 바쁜 세션에 속도 제한을 설정할 수도 있습니다. 사용자가 너무 바쁜 경우, 이에 따라 속도가 느려지고 일부 배포 상황에서 도움이됩니다.
준 동기 복제 노예를 기다릴 필요에 의해 커밋이 느려지므로 성능에 약간 영향을줍니다. 이것은 데이터 무결성 향상 사이의 균형입니다. 속도 저하의 양은 슬레이브에 커밋을 보내 슬레이브로부터의 수령 통지를 대기하는 TCP / IP 왕복 시간 이상입니다. 이것은 준 동기 복제는 고속 네트워크에서 통신하는 가까운 서버에 적합하며, 느린 네트워크에서 통신하는 먼 서버에 최악임을 의미합니다.