1. Replication 개요
MySQL 복제 기능은 원본에서 대상 서버로 데이터를 복제 하는 기능입니다. 모든 DB, 선택한 DB, 또는 특정 테이블만을 복제하는 것도 가능합니다. 디폴트는 비동기 방식이므로 Slave는 Master에 영구적으로 연결되어 있을 필요는 없습니다.
2. 용도
- Scale-out 솔루션 : Slave로 로드를 분산하여 성능을 향상시킬 수 있습니다. 모든 쓰기 작업은 Master 서버에서만 수행 가능합니다. 읽기 작업을 Slave들에 분산할 수 있으며 이를 통해 Master가 쓰기 연산에만 집중하여 쓰기 작업의 성능 향상도 얻을 수 있습니다.
- 백업 : Slave로 데이터가 복제되고 있고 복제를 중지할 수도 있으므로 백업을 Slave에서 수행할 수 있습니다. Master에 영향을 주지 않고 백업을 수행할 수 있게 됩니다.
- 통계분석용 : Master의 성능에 영향을 주지않고 Slave에서 통계 분석을 위한 작업을 수행할 수 있습니다.
- 원격지 데이터 복제 : 원본과 물리적으로 다른 장소에 데이터 복제본을 보유해둘 수 있고 DR과 같은 용도로 활용 가능합니다.
3. Replication 설정 방법
1) 시스템 구성 정보
a. 구성형태
- Binary Log file position based replication
- 2 nodes(Master-Slave)
- 복제대상 DB : repltest
b. Master Node
- hostname : az-mysql-01
- IP(Private IP) : 10.0.0.4
- Port : 3306
- 사양 : 2vCPU, 4GB Memory
- OS : Linux(CentOS 8.2.2004)
- DBMS : MySQL 8.0.17
c. Slave Node
- hostname : az-mysql-01
- IP(Private IP) : 10.0.0.5
- Port : 3306
- 사양 : 2vCPU, 4GB Memory
- OS : Linux(CentOS 8.2.2004)
- DBMS : MySQL 8.0.17
2) 이중화 구성 절차
a. Master 설정
a.1 server_id 설정 : replication 구성되는 서버 간에 중복되는 server_id가 없도록 설정합니다. 재기동 후에도 적용되도록 my.cnf에 추가합니다.
a.2 시스템 변수 확인
- log_bin = on : Binary 로깅을 활성화 하는 값이며 디폴트는 on입니다. 옵션으로 Binary 로그 파일 위치와 파일명을 지정할 수 있습니다.
- skip_networking = 0 : 네트워킹을 사용하지 않도록 하는 옵션으로 로컬에서만 접속 가능한 상태가 됩니다. 복제를 구성하려면 0으로 설정되어야 합니다.
a.3 Replication 용 계정 생성
- Slave에서 Master에 접근할 때 사용하는 복제 전용 계정을 생성합니다.
b. Slave 설정
b.1 server_id 설정 : Master와 겹치지 않도록 server_id를 변경합니다.
b.2 Slave는 Binary로깅 활성화가 필수는 아니지만 Slave에서 또 다른 서버로 복제를 걸거나 Slave의 데이터를 백업, 손상에서 복구 하기 위해 사용할 수 있습니다.
c. 데이터 이관
c.1 모든 테이블에 LOCK을 걸고 데이터 변경을 막은 다음 새로운 세션을 맺어 현재 Master의 바이너리 로그 파일과 Position을 확인합니다.
c.2 기존에 데이터가 있는 경우 스냅샷을 생성하여 Slave에 전달합니다.
c.3 Read lock을 반환합니다.
c.4 Slave가 자동으로 Replication을 사용하지 않도록 설정하고 서비스를 올립니다.(skip-slave-start)
c.5 Slave에 백업 받은 스냅샷을 넣어줍니다.
c.6 Slave에 Master에 대한 정보를 입력하고 Slave를 시작합니다.
d. 복제 확인
d.1 Master에서 프로세스 확인. repl 계정이 모든 binlog를 slave로 보낸 상태라는 것을 확인할 수 있습니다.
명령어 : show processlist\G
d.2 Slave에서 Slave의 상태를 확인. Master의 이벤트를 기다리고 있다는 메시지를 확인할 수 있습니다. Slave_IO_Running / Slave_SQL_Running 값이 Yes 일 경우 Replication 설정이 된 것입니다.
명령어 : show slave status\G
d.3 Slave에서 repltest DB를 조회 해봅니다. 그리고 Master에서 추가 데이터를 삽입하고 동기화 여부를 확인합니다.
- Master에서 데이터 삽입
- Slave에서 데이터 조회
'DB > MySQL' 카테고리의 다른 글
[MySQL] Replication 깨짐 복구 (0) | 2021.03.17 |
---|