리눅스 서버 보안/데이터베이스 보안

데이터베이스 장애를 방지하기 위한 이중화 구성

seungwon9201 2024. 8. 5. 16:34

데이터베이스가 DDOS 공격이나 해킹을 당해서 장애가 발생하더라도 데이터베이스 서비스는 유지되어야 한다. 이를 위해서 여러 대의 데이터베이스 서버를 구성하여서 주 서버가 예비 서버에게 데이터를 실시간으로 복제하거나 3대 이상의 서버로 구성하는 클러스터 기능을 사용하자. 이번 실습에서는 MariaDB에서 제공하는 복제기능을 사용해서 데이터베이스 이중화를 구성해 볼 것이다.


데이터베이스 이중화

데이터베이스 이중화를 구성하려면 먼저 이중화를 위한 서버를 하나 생성해야한다. 

기존 서버를 종료하고 오른쪽 마우스를 클랙하면 복제버튼이 나올 것이다. 복제를 누르면 이러한 창이 뜬다.

예비 서버를 slave로 지정하고 복제를 해보자.

이렇게 설정하면 된다.

이렇게 설정이 끝났다면 slave 서버가 하나 복제가 될 것이다.

자, 이제 복제한 slave를 실행시켜보자! (만약 부트로더 설정을 했다면 이름과 패스워드를 입력해야 한다. 작성글 참고..)

 

성공적으로 접속이 됐다면 기존 서버의 주소인 192.168.100.11과는 다르게 192.168.100.12로 바꿔주자.

여기까지 완료했다면 주 서버와 slave 서버의 준비가 완료된것이다 이젠 MariaDB 복제를 위한 환경설정을 해야 한다.

먼저 주 서버 먼저 구성을 해보자.

slave 서버를 종료하고 다시 원래 우분투 서버로 접속을 하자.

 

이제 MariaDB의 기본설정 파일에 들어가기 위해서 vi /etc/mysql/my.cnf를 입력해 보자.

이번 실습에서는 binary log로 쌓인 데이터베이스의 변경 값을 slave 서버가 가져가는 방식으로 데이터베이스를 복헤해서 replica_db1이라는 데이터베이스를 만들고 복제할 것이다.

다음으로 slave 서버 데이터베이스가 주 서버 데이터베이스에 접근할 수 있도록 주 서버의 데이터베이스 IP 설정을 해야 한다. 50-server.cnf 파일에서 bind-address의 IP를 할당된 IP로 바꿔주면 된다.

이렇게 실행을 해주자.

여기까지 했다면 데이터베이스를 재시작하고 root로 MariaDB로 접속하자.

이제 복제할 데이터베이스를 생성하고 slave 서버에서 데이터베이스 복제에 사용할 데이터베이스 사용자를 생성하자. 

복제할 데이터베이스인 replica_db1을 생성하고 slave 서버에서 데이터베이스 복제에 사용할 데이터베이스 사용자인 slave1을 생성했다.

이렇게까지 했다면 주 서버와 slave 서버 데이터베이스 동기화 과정에서 무결성이 유지되도록 주 서버 설정이 정상적으로 되어 있는지 확인해야 한다. 

이렇게 표시된다면 정상적으로 표시된 것이다.

 

데이터베이스는 데이터 무결성이 중요하기 때문에 복제 기능을 사용할 때 주 서버의 데이터베이스애 있는 데이터를 덤프한 후 slave 서버에 복사해서 반영하는 과정을 필요로 한다. 

덤프하기 위해서는 데이터베이스 콘솔을 종료해야 한다. 그리고 주 서버에 있는 데이터베이스 내용과 설정들을 backup.sql 파일로 저장하자. 

 

다운로드한 데이터베이스 파일을 slave로 옮기려면 파일을 옮겨야 한다. 

서버들 간 파일을 주고받을 때는 보안 프로토콜인 SSH를 이용한 SCP 프로토콜을 이용해서 파일 전송이 가능하다. (slave 서버 측에서 ssh가 설치되어 있지 않다면 설치를 하자.)

 

slave 서버를 실행하고 주 서버에서 백업해놓은 데이터베이스 덤프 파일인 backup.sql을 slave 서버로 전송하자.

주 서버에서 입력한 명령어, scp는 secure copy의 약자로 ssh 프로토콜로 원격 서버에 더에터를 복사하는 기능이다.

이제 다시 데이터베이스 관리 콘솔에 접속해서 명령어로 잠금을 해제하면 주 서버의 설정은 끝이다!

 

이제 slave 서버를 접속해서 이중화 구성을 위해 mariadb 환경 설정 파일(/etc/mysql/my.cnf)을 열고 아래와 같이 입력하자.

이제 주 서버의 데이터베이스 값을 반영하기 위햇 해당 SQL에 데이터 값을 반영해 준다. 반영한 후에 데이터베이스를 재시작하자.

이제 slave 서버가 주 서버의 데이터를 복사하기 위해 주 서버의 접속 정보를 아래처럼 등록하자.

위에 show master status에서 확인한 FILE값과 Position 값을 확인해서 입력하고 주 서버에서 grant 명령어로 설정했던 패스워드 값을 입력하면 된다.

등록을 했다면 제대로 구성되었는지 확인하자. 

이런 창이 뜬다면 정상적으로 설정된 것이다!


데이터베이스 이중화 복제 테스트

이젠 모든 설정은 끝이다. 실제로 복제가 제대로 되는지 확인하기 위해서 테이블을 생성하고 데이터를 넣어볼 것이다.

주 서버에서 실행한 내용

이렇게 주 서버에서 테이블을 생성하고 데이터베이스 내 데이터를 저장해 보자.

이제 다시 slave 서버에 접속해서 주 서버에서 만든 데이터가 slave에서 보이는지 확인하면 끝이다.

slave 서버에서 실행한 내용

성공! 이렇게 slave에서도 동일한 데이터의 내용이 출력이 되었다!