티스토리 뷰




master - slave 를 구성해야 하는 이유가 뭘까요?

크게 두가지로 볼 수 있을듯 합니다.

1. 나름 백업

2. 분산처리( 쓰기는 마스터만, 읽기는 슬레이브에서만 )

분산처리란 결국 안정성 향상이라고 볼수도 있겠죠~


이글의 작성 기준은 아래와 같습니다


Master

Ubuntu 12.04 Server ( IDC / 한국 )

MariaDB 5.5.44


slave

Ubuntu 14.04 Server ( AWS / 일본 )

MariaDB 5.5.44




1. Master 설정


1-1. my.cnf  설정 변경

# vi /etc/mysql/my.cnf

[mysqld] 에 아래 내용 추가

# master sertting

server_id = 1

log_bin = mysql.bin


1-2. 사용자 추가

# mysql -uroot -p 

MariaDB [(none)]>  grant replication slave, replication client on *.* to repl@'%' identified by '비밀번호';


1-3. server-id 확인 및 수동 설정

   * 이렇게 해주는 이유는 간혹 my.cnf에 설정했더라도 slave실행시 Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids 오류가 발생할 수 있음

MariaDB [(none)]>  show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

MariaDB [(none)]>  SET GLOBAL server_id = 1;


1-4. master 정보 확인 및 DB LOCK

   * DB 락을 거는 이유는 서비스중일경우 LOCK을 걸고 하시기 바랍니다. 그게 아닌 신규셋팅일경우 신경쓰지 않아도 됩니다.

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+

| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+--------------------+----------+--------------+------------------+

| mariadb-bin.000226 |      483 |              |                  |

 

+--------------------+----------+--------------+------------------+

   * FIle 명과 Position을 기억해주세요 Slave 셋팅시 사용합니다



2. Slave 설정


2-1. my.cnf  설정 변경

[mysqld] 에 아래 내용 추가

# slave Setting

log_bin = mysql-bin

sever-id = 2

relay_log =mysql-relay-bin

log_slave_updates = 1

read_only = 1


2-2. server-id 확인 및 수동 설정

   * 이렇게 해주는 이유는 간혹 my.cnf에 설정했더라도 slave실행시 Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids 오류가 발생할 수 있음

MariaDB [(none)]>  show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

MariaDB [(none)]>  SET GLOBAL server_id = 2;

2-3. master접속 정보 설정

MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST='master서버IP', MASTER_USER='repl', MASTER_PASSWORD='password',MASTER_PORT=3306,MASTER_LOG_FILE='mariadb-bin.000226',MASTER_LOG_POS=483,MASTER_CONNECT_RETRY=10;

    * 위 강조된 부분들을 자신의 환경에 맞게 설정해주세요


2-4. SLAVE 시작

MariaDB [(none)]>  start slave;


2-5. 동작확인
MariaDB [(none)]>  show slave status\G;


Slave_IO_Running: Yes

Slave_SQL_Running: Yes


  * 위 두개 항목이 YES 이고 Slave_IO_State: Waiting for master to send event 이면 정상동작 입니다.


이제 master 에서 데이터를 변경하거나 insert 해보시면 slave도 변경되는걸 보실 수 있습니다.
만약 변경이 안되신다면 처음부터 다시 확인해보세요~

감사합니다.


댓글
  • 프로필사진 궁금증 안녕하세요, 우선적으로 양방향까지는 테스트를 해보지않았지만,
    mariadb 5.5.5-10.0.12 를 master / slave 서버 둘다 설정하여 사용하고있었습니다.
    하지만 해당 부분에서의동기화 오류가 빈번하게 발생하여, 혹시나 하는 마음으로
    Mariadb 10.0.19 버전으로 master / slave / slave(10.0.19) 로 작업을 하였더니,
    10.0.19 버전으로 설정해놓은 slave 서버는 문제가없는데요 혹시 테스트시 환경이
    지속적으로 운영 서버에서도 정상적으로 진행이 되었는지 궁금하네요.
    2015.11.04 17:59 신고
댓글쓰기 폼