이중화 방식     구성방식     비고
Asynchronous(비동기)     M-S
M(write/read), S(read)   

Semi-synchronous(반동기)     M-S
M(write/read), S(read)   

synchronous     M-M
M(write/read),M(write/read)     Mysql-cluster,galera cluster ...

M: mater / S:slave
MYSQL  asynchronous , semi-synchronous  구현 방법

<async>

MySQL의 Replication은 보통 비동기 방식으로 운영한다. 비동기 방식은 마스터 측은 슬레이브를 업데이트했는지 여부 및 업데이트 로그가 전송되었는지 여부는 신경쓰지 않는 방식이다. 만약 마스터의 장애나, 슬레이브 간의 네트워 장애가 발생하면 마스터 측과 슬레이브와의 데이터 차이는 커질 것이다.


<semi-sync>
마스터 업데이트 및 슬레이브 릴레이 로그 기록까지룰 "동기화" 범주로 보고 슬레이브 릴레이 로그에서 데이터베이스의 업데이트까지는 비동기이므로, "준 동기 (Semi-Synchronous)"라고 불린다.
여기서도 구체적으로 "슬레이브에 업데이트하는데 걸리는 시간 + α"시간이 지연된다고 볼 수 있다.

1) 구성하기

MASTER SERVER  설정하기

[my.cnf 파일에]
Server -id =1  

mysql>CREATE USER 'repl'@'%' IDENTIFIED BY 'repl123!@#';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
Mysql> flush privileges ;
                     
mysql> flush logs;                     ### 메모리에 남아있는 bin log 파일에 쓰기
mysql> flush tables with read lock ;     ### 테이블 락 걸기 데이터 베이스 변경금지
mysql> show master status ; ,          ### 파일 명 포지션과 파일 확인

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB
+------------------+----------+--------------+------------------+
| mysql-bin.000019 |     1607 |              |                 
+------------------+----------+--------------+------------------+

[root@adb1 ~]# mysqldump -uroot -proot  --master-data --databases mysql --socket=/MYSQL_DATA/db01/mysql.sock > mysql.sql

[root@adb1 ~]# cat mysql.sql  (--master-data 옵션을 사용하면 아래와 같은 내용이 추가된다)
--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000019', MASTER_LOG_POS=1607;

mysql> unlock table ;

1) 슬레이브=> 마스터 접근권한계정생성
2) 생성 계정에  리플리케이션 권한 부여
3) 테이블 락 설정 파일 dump

SLAVE SERVER  설정하기
[root@adb1 ~]# mysql -uroot -proot --socket=/MYSQL_DATA/db01/mysql.sock < mysql.sql
[my.cnf 파일에]
Server -id =2    ##### MASTER server-id 와 다른 것을 지정해야 함

mysql>CHANGE MASTER TO
mysql>MASTER_HOST='IP ADDRESS',
mysql>MASTER_USER='repl',
mysql>MASTER_PASSWORD='repl123!@#',
mysql>MASTER_LOG_FILE= 'mysql-bin.000019',   # --master-data 사용시 생략 가능
mysql>MASTER_LOG_POS=1607;                 # --master-data 사용시 생략 가능

mysql>CHANGE MASTER TO MASTER_HOST = '192.168.229.236', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=245, MASTER_PORT=3301 , MASTER_USER='repl' , MASTER_PASSWORD='repl';

mysql>START SLAVE;                


1) MASTER data dump 데이터 slave 에 넣기
2) 접속 IP , 유저 , 패스워드 , 파일, 포지션(check point) 설정
3) 슬레이브  시작

확인 하기 (CHECK)

Master SERVER
mysql> show processlist ;
+-------+------+---------------+------+-------------+---------+----------------------------------------------------------------+------------------+
| Id    | User | Host          | db   | Command     | Time    | State                                                          | Info             |
+-------+------+---------------+------+-------------+---------+----------------------------------------------------------------+------------------+
|   232 | repl | 10.1.5.6:5593 | NULL | Binlog Dump | 1722960 | Has sent all binlog to slave; waiting for binlog to be updated | NULL             |
| 53057 | root | localhost     | NULL | Query       |       0 | NULL                                                           | show processlist |
+-------+------+---------------+------+-------------+---------+----------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)
######### repl 계정 접속(슬레이브에서 접속 확인)

Mysql > 데이터 인서트 후 slave 에서 데이터 조회
         조회 가능하면 문제 없음

SLAVE SERVER
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.5.5
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000006
          Read_Master_Log_Pos: 947838124
               Relay_Log_File: mysqld-relay-bin.000064
                Relay_Log_Pos: 947838270
        Relay_Master_Log_File: mysqld-bin.000006
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 947838124
              Relay_Log_Space: 947838470
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

ERROR:
No query specified
Error 사항이 있는지 확인 없으면 이상 없음 ( master 데이터 인서트해서 확인해볼것)



semi_sync 플러그인 적용

mysql> show plugins ;
+--------------------------------+----------+--------------------+--------------------+---------+
| Name                           | Status   | Type               | Library            | License |
+--------------------------------+----------+--------------------+--------------------+---------+
| FEEDBACK                       | DISABLED | INFORMATION SCHEMA | NULL               | GPL     |
| partition                      | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| rpl_semi_sync_master           | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
| rpl_semi_sync_slave            | ACTIVE   | REPLICATION        | semisync_slave.so  | GPL     |
+--------------------------------+----------+--------------------+--------------------+---------+
44 rows in set (0.00 sec)

아래 두개의 모듈을 MASTER , 슬레이블에 설치
Mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

My.cnf
아래 2개 설정 추가
rpl_semi_sync_master_enabled=1  
rpl_semi_sync_slave_enabled=1   

MASTER , SLAVE 서버 재시작
재 시작시 master slave 서버에서 아래 로그 확인되면 정상
131203 12:14:09 [Note] Semi-sync replication initialized for transactions.
131203 12:14:09 [Note] Semi-sync replication enabled on the master.




































사업자 정보 표시
(주)블루원 | 김홍태 | 서울특별시 용산구 원효로 4가 135 금홍 2빌딩 | 사업자 등록번호 : 106-86-76684 | TEL : 02-3272-7200 | Mail : support_ora@blueone.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기

'DB - MySQL' 카테고리의 다른 글

MySQL my.cnf 파일 설정  (0) 2017.03.23
MySQL Isolation LEVEL  (0) 2017.03.22
MySQL 모니터링 툴  (0) 2017.03.06
MySQL DB 리소스 사용량  (0) 2017.03.06
MySQL 이중화 방식 - MHA 구성 방법  (0) 2017.03.06

+ Recent posts