우리는 ProxySQL과 함께 MySQL 클러스터를 사용하고 있으며 다음과 같이 설정되어 있습니다.
질문은 이것입니다: 서버 2의 사용자가 SQL UPDATE, UPDATE 클라이언트 SET 이름= '새 이름' WHERE id = 123을 트리거합니다. (이 업데이트는 서버 1로 전송된 다음 서버 2로 업데이트됩니다.)
동일한 코드 블록에서 레코드(SELECT name FROM 고객 WHERE id =123)를 선택하면 쿼리가 로컬 서버로 전송되고 결과는 1초 동안 코드를 일시 중지하지 않는 한 "이전 이름"이 됩니다( 시험용).
우리가 생각한 한 가지 해결책은 연결(PHP)을 변경하고 서버 1로 직접 이동하여 나머지 코드 블록을 가져오는 것이었지만, 그런 종류의 방법은 목적에 어긋나고 이상적이지 않습니다(조용히 큰 코드베이스를 업데이트해야 함).
proxySQL과 관련된 솔루션이 있나요?
복제 대기 시간이 긴 슬레이브 서버로 쿼리가 라우팅되는 것을 방지하려면 테이블 mysql_server 열에서 최대 복제 대기 시간 임계값을 설정할 수 있습니다. 최대 복제 지연. 참조: max_replication_lag
max_replication_lag – 0보다 크면 ProxySQL은 복제 대기 시간 및 구성된 제한을 초과하는지 여부를 정기적으로 모니터링합니다. 임계값을 초과하면 복제가 따라잡을 때까지 일시적으로 호스트를 회피합니다.
쿼리 읽기와 쓰기를 분할하는 쿼리 규칙을 만들 수도 있습니다. 참조: ProxySQL 분할 읽기/쓰기
Important: proxysql-gtid-causal-reads Mysql 버전 5.7.5 이상을 사용하는 경우 이 방법으로 문제가 주로 해결될 수 있습니다.