==========================================================================================================

 

저뿐만 아니라 인터넷에는 많은 정보가 공유되어 있습니다.

나 스스로 이해하기에 넘 어려워..(그냥 단순히 순서만 있고 왜 이런것인가에 대해 설명이 없어)

직접 설치하면서 고민하던 것들에 대한 코멘트를 아는한 달면서 정리를 해볼까 합니다.

 

잘못된 부분이 있으면 조언과 지적부탁드립니다.

 

==========================================================================================================

 

먼저 TEST 하기전에 앞서 MySQL Replication에 대한 개념을 잡게 해준 글의 내용에 대한 기록부터..

출처 : 하이브레인넷 부설연구소 http://blog.hibrainapps.net/129 

 

MySQL Replication의 구성

; MySQL ReplicationData를 물리적으로 다른 서버의 저장 공간에 동일한 데이터를 복사하는 기술이다. 아래는 MySQLReplication을 간단하게 나타낸 그림이다.

1개의 Mastern개의 Slave로 구성이 가능하다. , 각각의 Slave는 다시 Master로서의 역할을 할 수 있으며 다른 Slave와 연결되면서 다양한 형태의 구성이 가능하다.

 

 

 

MySQL Replication Master에서만 데이터 변경(읽기작업 포함)작업을 수행할수 있으며, Slave에서는 읽기작업만 가능하다. 따라서 MySQL Replication은 읽기부하 분산은 가능하지만 쓰기부하 분산은 불가능하다.

MySQL에서 Replication이 실행되는 과정은 아래 그림과 같다.

 

 

1. Master에서 데이터의 변경작업이 발생하면 Master DB의 변경 실행

2. 변경된 이력을 Binary Log에 기록

3. Slave IO Thread Master의 변경 Event를 감지하고 MasterBinary Log를 자신(Slave)Relay Log에 기록한다.

4. Slave SQL Thread Relay Log를 읽는다.

5. 자신(Slvae) DB에 기록한다.

 

위 그림에서처럼 Master 에서 Slave 방향으로 단방향으로만 처리가 이루어지므로 변경작업(Write) Master에서만 하여야 한다.

Slave에서 변경작업을 할 경우 Master에는 당연히 반영이 안되며, Slave에서 변경작업한 Object 대하여 Master 서 변경작업을 다시 시도할 경우 변경은 되지만 다시 slave에 는 적용되지 않는다.

 

MySQL Replication 사용의 장점
-. 부하분산
쓰기/변경 부하는 Master 에만 실행해야 하지만 읽기 부하는 Master 와 Slave 둘다 가능하기 때문에 Master에는 쓰기만, Slave 는 읽기만 실행하는 형식으로 각각의 부하를 분산할수 있다.
 
-. 고가용성과 장애복구 의 장점이 있다.
Master 에서의 장애가 발생시 Slave를 이용하여 장애 복구 시간을 상당히 줄여줄 수 있다.
 

MySQL Replication 사용의 단점
Master와 Slave가 최소한의 정보만 공유하는 단순한 방식이 장점인 동시에 단점으로 작용한다.
1. Master-Slave pair 관리:서버들이 많아질 경우, Master와 Slave의 짝을 관리하는 것이 쉽지 않다. Master와 Slave의 짝을 관리해주어야 한다.

2. 실패 상황에서의 복구 : Master가 실패시 Master와 Slave의 교체, 혹은 Slave의 데이터를 Master로 복사하는 등의 작업을 수동으로 진행하여야 한다. Slave의 실패인 경우도 마찬가지이다.

3. binary log의 관리: Master 에 쌓이는 binary log에 대한 관리 또한 수동으로 처리하여야 한다.(cron등을 이용하여 정기적인 삭제 필요)

4.. asynchronicity: Master 와 Slave 의 데이터가 동일하다고 보장할 수 없다. Master의 처리량이 많은 경우 Slave는 지연시간이 발생하게 되고 그 시간동안의 데이터는 일치하지 않는 문제가 있다.

위의 1,2,3은 어느정도 Tool을 생성한 자동화로 해결이 가능할 수 있다. 특히 MysqlReplicationManager 을 이용하면 효율적일 수 있다.

4번의 문제는 Replication 이 아닌 다른 대안이 필요할 수 도 있다.
MySQL Cluster: MySQL이 직접 지원하는 것 중에 MySQL Cluster가 있지만, 아직은 메모리 기반 엔진인 NDB만 지원하기 때문에 메모리의 크기에 제약이 있다.
DRDB: 디바이스 수준에서 디스크를 분산하는 DRDB를 MySQL과 함께 사용. MySQL Replication보다 failure에 안전한 것은 아니지만, sync가 어긋난 상태는 최소화된다. 하지만, failover node (i.e. slave)는 MySQL 쿼리를 처리할 수 없다는 크나큰 제약이 있다. 백업의 용도로는 적절할수 있다.

 

참조
http://blog.naver.com/PostView.nhn?blogId=sylphjm&logNo=130134762447
http://blog.daum.net/_blog/BlogTypeView.do?blogid=0R6OX&articleno=70#ajax_history_home
http://blog.naver.com/PostView.nhn?blogId=lineage0909&logNo=20168228681&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
http://cdral.net/936
http://www.mysqlkorea.co.kr/sub.html?mcode=develop&scode=51ha&m_no=22918&cat1=1106&cat2=1289&cat3=1387&lang=k 

 

 

########################################################################################

########################################################################################

 

이상 위와 같이 공부를 하고 TEST를 해보기로 하였다. 우선 3대의 서버를 준비하였다.

 

HOSTNAME (임의)

OS 

IP(임의) 

MySQL ver 

MySQL repl 

 MaterDB

FreeBSD 8.3 i386 

192.168.0.1 

5.5.29 

 Master

 SlaveDB-2

CentOS 6.3 x86_64

192.168.0.2

5.5.30

 Slave

 SlaveDB-3

CentOS 5.9 i386

192.168.0.3

5.5.30

 Slave

 

# hostname과 ip는 실제 test용으로 바꾸어 설정하여 TEST (보안상)

# mysql ver을 통일시키는게 좋다. FreeBSD같은 경우에는 포트설치형식으로 mysql55 버전이 있었지만

# centos 일 경우에는 yum list에 없기 http://dev.mysql.com/downloads/mysql/ 해당사이트에서 rpm 파일을 # 다운받아 설치하도록 하자

 

MySQL 설치 이후 설정 (Replication)

 

############################ MASTER ############################

1. my.cnf 설정

shell> cp /usr/local/share/mysql/my-innodb-heavy-4G.cnf /var/db/mysql/my.cnf

# master 서버는 위에 서버표시처럼 FreeBSD이다. 그래서 샘플 cnf 파일의 위와 같은 경로에 있다.

 

2. slave 접근 유저 생성

mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com'; 

 

http://dev.mysql.com/doc/refman/5.5/en/replication-howto-repuser.html 내용중

 

# master에 접근유저 생성하도록 "repl" 계정을 등록하고 slave on 옵션을 주는 부분입니다.

# %.mydomain.com 이 부분은 TEST 설정에 맞게 아래와 같이 설정 함

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'slavepass';

# slave 서버가 2개를 사용하고 각각 ip를 설정하기 위해 % 표현식으로 등록함

 

3. mysql 재시작 한번 해주세요.

4. 설정확인

mysql> show master status\G

*************************** 1. row ***************************

            File: mysql-bin.000041

        Position: 107

    Binlog_Do_DB:

Binlog_Ignore_DB:

 

5. DB backup

mysql> FLUSH TABLES WITH READ LOCK;

shell> mysqldump --all-databases --lock-all-tables >dbdump.db

mysql> UNLOCK TABLES; 

 

 

 

############################ SLAVE ############################

 

1. Master DB와 동기화 할 DB생성(or dump)

shell> mysqldump --all-databases <dbdump.db

 

2. my.cnf 파일 설정

shell> cp /usr/share/mysql/my-innodb-heavy-4G.cnf /etc/my.cnf

#slave 서버는 centos 를 써서 파일 위치경로가 좀 다르다.

shell> vi /etc/my.cnf

server-id=1  → 주석처리

server-id=2  → 주석삭제 및 slave 별 고유 서버 id를 사용하여 수정한다.

 

3. mysql 재실행

4. master 서버 정보 업데이트 설정 (mysql55 버전부터는 직접 실정 my.cnf 설정시 error 발생)

mysql> stop slave;

mysql> reset slave;  (새로 설정하는 것이면 건너뜀)

mysql> CHANGE MASTER TO

    ->     MASTER_HOST='master_host_name',

    ->     MASTER_USER='replication_user_name',

    ->     MASTER_PASSWORD='replication_password',

    ->     MASTER_LOG_FILE='recorded_log_file_name',

    ->     MASTER_LOG_POS=recorded_log_position;

mysql> flush privileges;

mysql> start slave;

 

# master에서 보았던 log_file 과 log_pos 를 기록해주어야 합니다.

# 참 masteer_log_pos에서는 그냥 숫자만 입력하세요 ' ' 이거 넣으니까 에러가 나네요.

 

5. 상태확인

mysql> show slave status\G

 

'------------- 공부하자 > etc' 카테고리의 다른 글

centos 다운로드 & netinstall  (0) 2013.03.06
MySQL Replication TEST 정리  (0) 2013.02.20
네트워크 허브(Hub)의 종류  (0) 2012.09.04
OSI 7 Layer  (1) 2012.09.04
dig 활용방법 가이드 "dig 사용법"  (0) 2012.06.13
mySQL ERROR code  (0) 2012.04.27
Posted by SoulrideR

댓글을 달아 주세요