### MySQL Replication



# 싱글 Master, 멀티 Slave


cf) Write Cache, RAID구성을 함께

but, BBU(Battery Backup Unit)이 함께 탑재해야 Write Unit이 유효할 수 있음


# 비동기 데이터 복제, SQL문 단위로 수행


# replication 원리


- I/O Thread, SQL Thread

- Binary Log, Relay Log

- Position 정보


1. I/O Thread, SQL Thread


- I/O Thread, SQL Thread : 마스터에서 얻은 데이터를 Relay Log에 기록

- SQL Thread : Relay Log를 읽어서 실행만 수행

=> thread 분리 : 리플리케이션 지연 줄이기


2. Binary Log, Relay Log


Binary Log : 데이터를 갱신하는 처리만 기록

데이터를 참조하는 쿼리는 기록되지 않음

replication 외에도 full-backup에서 갱신된 내용만 보관할 때 사용

text 형식이 아니고 Binary 형식이므로 에디터로는 볼 수 없고 mysqlbinlog 명령어 사용


- Relay Log : Slave의 I/O Thread가 마스터로부터 갱신로그(갱신관련 쿼리를 기록한 데이터)를 수신해서 슬레이브에 저장

바이너리 로그와 내용은 동일함

but, 필요없어지면 SQL Thread에 의해 자동 삭제

- Position 정보 : 리플리케이션의 완료된 위치 정보

master.info

"SHOW SLAVE STATUS" 



# my.conf


[mysqld]

server.id, log-bin, log-bin-index, relay-log, relay-log-index, log-slave-updates 



# replication용 사용자 생성


"REPLICATION SLAVE" 권한

Grant Replication slave on *.* to repl'192.168.31.0/255/255/255/0' identified by 'password';


# replication을 위해 필요한 데이터


=> full-dump + position정보

1. mysqld 중지

2. MYSAM이나 InnoDB의 데이터 파일이 있는 MySQL 데이터 디렉토리를 그대로 tar로 복사.

LVM 사용중이면 해당 snapshot 기능 이용

(position 정보도 잊지말기)

3. mysqld를 중지할 수 없을 때

갱신 관련 쿼리를 막은 상태에서 Full-dump를 수행

"SHOW MASTER STATUS" 결과를 메모


# MySQL Slave + 내부 load-balancer


- 조작쿼리(insert, delete, update)는 Master로

- 조회쿼리(select)는 slave로 하여 부하분산


* 여러 slave 부하분산

1. application으로 부하분산 (ex. 계층을 분산하는 O/R mapper)

2. 로드밸런서


# 내부 로드밸런서 구축


* 내부 밸런서의 주의사항, 분산 방법(lvs_method)을 'NAT'가 아닌 'DSR'로 설정해야 함






[서버/인프라를 지탱하는 기술]




'Network/Infra' 카테고리의 다른 글

DNS 다중화  (0) 2015.12.28
스토리지 서버의 필요성  (0) 2015.12.28
UTM, VoIP  (0) 2015.12.27
네트워크 보안 접근  (0) 2015.12.27
로드밸런싱 서버, 캐시 서버  (0) 2015.12.27

+ Recent posts