Backend/Relational Databases

[Relational Databases] Database Replication 구현

lakelight 2022. 8. 16. 11:36
728x90
반응형

Database Replication 개념

 

[Relational Databases] Database Replication 개념

DB Replication 초기 서버를 구성할 때는 하나의 서버와 하나의 데이터베이스를 구성하지만, 사용자 많아지고, 데이터베이스에 많은 Query가 발생하게 되면 이 트래픽을 처리하기 힘든 상황까지 오게

lakelight.tistory.com

 

Database Replication 구현

Database Replication을 진행하기에 앞서 준비해야할 것들이 있습니다.

먼저 VirtualBox를 설치하고 ubuntu-20.04.4-desktop-amd64.iso (이미지 파일) 을 다운받습니다.

 

Ubuntu 20.04.4 LTS (Focal Fossa)

Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what m

releases.ubuntu.com

 

그리고 Master PC와 Slave PC를 구성합니다. (아래 설명 참조)

 

Virtual Box에서 Ubuntu PC를 구성하는 방법은 아래를 참조하였습니다.
 

버추얼박스(VirtualBox) 이용해서 우분투(Ubuntu) 설치하기

버추얼박스(VirtualBox) 를 이용해서 다양한 OS 를 자신의 컴퓨터에 설치할 수 있습니다. 저는 직업 특성상 리눅스 OS 를 접할 일이 많습니다. 별도로 컴퓨터를 마련해서 리눅스 테스트 환경을 갖추

mainia.tistory.com

 

Virtual Box에 Ubuntu가 올라갔다면 Ubuntu 내부 설정을 해야합니다.
그 이후에 MySQL을 설치하겠습니다.

 

Ubuntu 초기 설정과 MySQL 설치

1. Ubuntu Terminal을 열고 패키지에 대한 업데이트와 업그레이드를 진행합니다. (조금 시간이 소요됩니다.)

sudo apt-get update  // 사용가능한 패키지들과 버전 리스트를 업데이트 합니다.
sudo apt-get upgrade // 현재 우분투에 있는 패키지들을 최신 버전으로 업그레이드 합니다.

2. 네트워크 툴을 설치합니다. (ifconfig 등등)

sudo apt-get install net-tools

3. MySQL 설치

sudo apt-get install mysql-server

4. MySQL 잘 설치되었는지 확인

mysql -V // 버전 확인을 통해 잘 설치되었는지 확인합니다.

 

DB Replication을 위한 준비

1. MySQL 설정 파일 찾기 ( /etc/mysql/mysql.conf.d/mysqld.cnf )

2. master(=source) PC의 MySQL 설정과 slave(=replica) PC의 MySQL 설정

mater(=source) MySQL 설정
slave(=replica) MySQL 설정

GTID는 Global Transaction IDentifier 의 약자로 MySQL 데이터베이스에서 커밋되는 각 트랜잭션과 함께 생성되고 트랜잭션에 연결되는 고유한 식별자 입니다. GTID 정보만으로 master와 slave 사이에 일관성 확인이 수행됩니다.
트랜잭션이 커밋되면 GTID를 사용하여 복제하기 위한 설정을 위에서 하였습니다. gtid_mode = ON, enforce_gtid_consistency = ON 이 두가지 관련 파라미터를 설정 하였습니다.
server_id는 master는 1 slave는 2로 설정해주었습니다. server_id는 중복되지 않도록 설정만 하면 됩니다.
relay_log 는 slave관련 로그가 저장될 파일명을 설정해주었습니다.
read_only 는 1 로 설정해주어 읽기만 가능하도록 설정하였습니다.
log_slvae_updates는 ON으로 설정해주어 slave 자체에도 binlog를 저장하여 추후에 master 서버를 대신해야할 상황을 대비합니다.
replicate-do-db='repl_db' 를 설정해주어서 복제할 DB의 이름을 설정해주었습니다.
※ MySQL5.6부터는 [replicate-do-db] 설정을 넣지 않아도 모든 DB가 Replication 자동으로 반영됩니다.

 

MySQL 서버 재시작

1. 서버 재시작하고 MySQL 실행

sudo service mysql restart     //mysql 재시작
sudo mysql     //mysql 실행

 

Database Replication Test 진행

1. 네트워크 설정 변경 [virtual Box -> 설정 -> 네트워크]

다음에 연결됨을 NAT에서 어댑터에 브리지로 변경합니다.

 

2. mater DB에서 Replication을 수행 할 사용자를 생성합니다.

[Master Database]
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_user_password';
GRANT REPLICATION SLAVE ON *.* 'repl_user'@'%';
repl_userrepl_user_password는 변경가능합니다.
그리고 Mysql의 password 정책이 Low가 아니라면 Error가 발생합니다.
password 정책을 변경하는 명령어는 SET GLOBAL validate_password.policy=LOW;  입니다.

또한 %는 모든 IP를 허용한다는 의미인데 slave DB의 IP주소를 입력해주어 Slave PC만 접속하도록 할 수 있습니다.

 

3. slave DB에 Replication을 수행하기 위한 설정을 합니다. 아래의 SOURCE는 MASTER를 의미합니다.

[Slave Database]
CHANGE REPLICATION SOURCE TO
     SOURCE_HOST='서버 ip 주소',      // master pc 에서 ifconfig 를 통해 ipv4 주소를 찾아서 입력하면 됩니다.
     SOURCE_PORT=3306,
     SOURCE_USER='repl_user',
     SOURCE_PASSWORD='repl_user_password',
     SOURCE_AUTO_POSITION=1,
     GET_SOURCE_PUBLIC_KEY=1;

 

Slave PC Replication 설정 잘 되었는지 확인하고 Replication 시작

[Slave Database]
SHOW REPLICA STATUS \G;  

[Slave Database]
start replica; // Replication 진행

 

Master PC 에서 Replication 확인

SHOW PROCESSLIST \G;

 

이렇게 DB  Replication을 구현해보았습니다.
이 상태에서 Master DB에서 데이터베이스를 만들면 Slave DB에 자동으로 반영이 됩니다.
또한 만든 데이터베이스에 테이블을 추가하거나 데이터가 추가되면 그 또한 자동으로 반영이 됩니다.
728x90
반응형