하나의 슬레이브, 다중 마스터 MySql


9

하나의 슬레이브가 두 개의 다른 마스터를 수신하도록 MySql Replication을 설정할 수 있습니까?

답변:


3

설계 상 하나의 mysqld 프로세스는 동시에 두 개의 다른 마스터를 청취 할 수 없습니다.

CHANGE MASTER TO 명령은 하나의 마스터를 읽을 소스로만 설정할 수 있습니다.

이것을 흉내 내려면 두 마스터 사이를 프로그래밍 방식으로 바꿔야합니다. 어떻게합니까?

StackOverflow에서 각 마스터가 랩톱이고 슬레이브가 중앙 컴퓨터 인 다른 마스터에 슬레이브를 수동으로 연결하는 방법을 설명했습니다.

기본 아이디어는 다음과 같습니다

  • 마스터 M1
  • 마스터 M2
  • 노예 S1

이와 같이 M1을 S1로 복제 한 다음 M2를 S1으로 복제 설정

  • 1) S1을 M1을 소스로하여 CHANGE MASTER TO를 실행하십시오.
  • 2) 시작 슬레이브;
  • 3) 잠시 동안 복제 실행
  • 4) 슬레이브 중지;
  • 5) S1을 M2를 소스로하여 CHANGE MASTER TO를 실행하십시오.
  • 6) 시작 슬레이브;
  • 7) 잠시 동안 복제 실행
  • 8) 슬레이브 중지;
  • 9) 1 단계로 돌아가십시오

한 마스터에서 다른 마스터로 전환 할 때마다 두 개의 값을 기록해야합니다. SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

이 두 값은 마스터에서 왔으며 슬레이브에서 다음에 실행될 마지막 SQL 문을 나타냅니다.

한 가지 중요한주의 사항이 있습니다. M1과 M2가 상호 배타적 인 데이터베이스를 업데이트하는 한이 알고리즘은 괜찮습니다.

믿거 나 말거나, 2011 년 5 월 ServerFault에서 이와 같은 문제를 해결했습니다. "고성능 MySQL"이라는 책을 기반으로 BLACKHOLE Storage Engine을 사용하여 진정한 멀티 마스터 / 단일 슬레이브를 에뮬레이트하는 방법을 실제로 설명했습니다.


나는 실제로 그것을 직접 필요로하지는 않았지만, 나는이 문제에 대해 일찍 생각하고있다. 기본적으로 두 번째 마스터의 binlog를 mysql 슬레이브로 파이프하는 것이 가능하지 않습니까? 가장 좋은 방법은 일반적인 복제 슬레이브 스레드와 마찬가지로 각 쿼리의 결과를 주시하고 오류를 중지시키는 도구를 사용하는 것입니다. 그러나 본질적으로 간단한 파이프도해야합니다. 물론 두 데이터베이스 모두 같은 데이터베이스 / 테이블에 쓰는 것은 까다로울 것입니다. 전문가들이 숙고 할만한 점이 있습니까?
Jannes

1
MySQL 5.6 이이 작업을 수행하지 않더라도 5.7이 여러 마스터를 지원한다는 답변에 추가 할 가치가 있다고 생각합니다.
Phil Sumner

4

롤란도의 솔루션에는 많은 경고가 있습니다. 첫 번째 복제본 스트림은 반드시 복제하지 않아도되고 다른 복제본 스트림은 복제되지 않습니다. 이것은 슬레이브가 동기화되지 않은 시간을 당신에게 줄 것입니다. 이제 "턴"이있을 때 각각을 따라 잡을 수있는 충분한 시간을 확보하기 위해 섬세한 균형 조정을해야합니다.

설명한대로 다시 전환하려면 로그 위치의 북 키퍼를 재생해야합니다. 이것은 실제로 버그가있는 것처럼 보이며, 누락되거나 일관성이없는 데이터의 창을 열거 나 잘못되었을 때 복제를 중단합니다 (로그 위치의 '하나의 꺼짐'오류로 인해 발생)

여러 개의 MySQL 인스턴스를 실행하는 것이 좋습니다. 동일한 머신에서 둘 이상의 mysql을 실행하는 것을 막을 수는 없습니다. 물론 동일한 포트에서 작동 할 수는 없습니다. 모든 클라이언트와 라이브러리가 3306 이외의 것을 지정할 수 있기 때문에 이것이 실제로 문제라고 생각하지 않습니다.

port = 3307 (또는 .cnf 파일 중 하나에있는 것) 만 지정하십시오.

개별적으로 구성된 버퍼 풀과 다른 메모리 구성이 서로 상충되지 않도록주의해야합니다. 실제로 복제중인 개별 데이터베이스의 특정 요구 사항에 맞게 해당 설정을 조정할 수 있기 때문에 이점이 있습니다.

이 방법으로 동일한 서버에서 두 개의 복제 스트림을 실행할 수 있습니다. 결코 뒤에, 책 유지가 필요하지 않습니다, "스와핑"스크립트가 필요하지 않습니다.


누군가 부기 광기를 이해하게되어 기쁩니다. 좋은 답변도 있습니다. +1 !!!
RolandoMySQLDBA


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.