[scrap] mysql – dual master replication

http://simonshin.egloos.com/2247518

  • /etc/my.cnf 파일 내용

Below is what needs to be added to the configuration for Server A:

server-id = 1
replicate-same-server-id = 0             //슬레이브 서버에서 사용됨. 일반적으로는 디폴트 설정 값인 0을 사용하는데,

                                                   //이 값은 순환 리플리케이션(circular replication)에 의한 무한 루프를 방지합니다.

                                                   //이 값을 1로 설정한다면, 슬레이브는 자신의 서버 ID를 가지고 있는 이벤트를 건너 띄지 않게 됩니다.
auto-increment-increment = 2

auto-increment-offset = 1

master-host = <IP address of Server B>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>

log-bin = C:mysqlloglog-bin.log  // 시스템에 맞도록 binlog가 쌓이게 될 위치를 정해 준다.

binlog-do-db = <database name>

 

Below is what needs to be added to the configuration for Server B:

server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = <IP address of Server A>
master-user = <slave user>
master-password = <slave password>
master-connect-retry = 60
replicate-do-db = <database name>

log-bin= C:mysqlloglog-bin.log # change this to a path/name appropriate to your system
binlog-do-db = <database name>

멀티 마스터로 서비스를 운영하다 보면 뜻하지 않게 pk 중복이 발생하는 경우가 있다.

이러한 경우는 M1에서 write모드를 운영중이다가 장애가 발생해 M2로 write모드가 이양되었는데 replication이 모두 M2로 옮겨지지 않은 상태에서 다시 M2에 write operation이 들어와서 발생되는 경우이다.

이같은 상황을 피해가기 위해서 Mysql 5.X버전에서는

auto_increment_increment

auto_increment_offset

이란 파라미터가 추가되었다.

 

auto_increment_increment=2 로 설정한다는 것의 의미는 해당 db server에서의 auto컬럼은 2단위로 증가한다는 것이다.

예를 들면1, 3, 5..와 같이

 

여기에 auto_increment_offset=5로 지정하면

시작점이 5부터 지정된다.

 

때문에 듀얼마스터 구조를 가진다면

M1에서

auto_increment_increment=2

auto_increment_offset=1

로 설정하면

pk는 1,3,5,7,9로 증가하고

 

M2에서

auto_increment_increment=2

auto_increment_offset=2

로 설정하면

pk는 2,4,6,8,10과 같은 순서로 증가하게 된다.

 

때문에 이경우 각서버에서 발급되는 pk가 중복되지 않게 된다.