### 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 |