우아한테크코스/레벨4, 레벨5

[팀 프로젝트] docker에서 EC2로 DB 전환작업

nauni 2021. 10. 5. 08:14

기존

  • WAS가 떠있는 EC2 내부에 Docker 안에 DB를 구성
  • DB는 local에 파일로 볼륨 설정을 하여 컨테이너가 삭제되더라도 DB 데이터는 삭제되지 않도록 설정

왜 docker 환경에서 DB 구성을 전환하는가?

  • docker 는 불안정한 환경
    • 도커의 철학은 빠르고 쉽게 개발환경을 구축하는데 있다. 영속성을 가지는 DB 환경과는 상충된다.
  • DB를 scale up, scale out 하는 상황이 온다면?
    • WAS와 같은 서버에 있다면 그만큼 DB와 WAS가 사용할 수 있는 자원을 나누게 된다. DB의 대수를 늘리거나 사용할 수 있는 자원을 늘려야한다면 또 다른 EC2서버에 DB를 운영하는 것이 좋다.
  • volume 설정을 통해서 사용하면 DB에서 제공하는 기능들 활용하지 못함
    • 사실 DB에서 다양한 어떤 기능을 제공하는지는 잘 모른다. volume을 사용하여 백업하는 것은 데이터를 백업하는 것 뿐이다. transaction 도중 rollback 상황, DB 설정 등 DB가 제공하는 온전한 기능을 활용하기 어려울 수 있다. 사실 이 부분은 잘 모르겠으며 좀 더 DB자체를 공부하며 채워나가야 할 부분이다.
  • docker에 DB를 구성하는 장점이 크게 보이지 않음에도 불구하고 하나의 docker 라는 레이어를 둘 필요가 있을까?
    • docker를 사용하여 docker 관리, 컨테이너 관리, 볼륨 관리, 네트워크 등등 관리 포인트를 늘릴 필요가 없다.

도커 환경을 개발 단계의 DB 구축에서는 빠른 환경 구성으로 유용하게 사용할 수 있지만, 실 DB는 도커를 구성할 필요보다는 EC2를 사용하여 별도의 서버에서 운영하는 것이 좋다고 판단하였다.

DB: docker -> EC2 로 전환

  1. DB 덤프
  • docker에 접속하여 DB 컨테이너에 접속 docker exec -it [container id] /bin/bash
  • mysqldump -u [계정] -p [db이름] > [백업 파일 이름].sql
  • mysqldump 명령어로 현재 DB 상태를 쉽게 덤프할 수 있다. sql 파일로 저장한다.
  • docker 에 있는 덤프파일을 docker 밖으로 복사 docker cp [containerId]:[백업 파일 이름].sql [원하는 파일 위치]
  1. BASTION
  • 이 부분은 migration과 상관은 없지만, 작업진행을 하며 프로젝트에 적용한 부분이라 내용을 남김
  • bastion 서버를 생성
  • bastion의 퍼블릭 키를 다른 EC2 서버의 ~/.ssh/authrized_keys 에 추가해 줌
  1. DB
  • bastion의 퍼블릭키를 ~/.ssh/authrized_keys 에 추가해 줌
  • DB 서버를 생성하여 로컬에 DB를 설치 (인터넷 연결을 위해 Public IP를 오픈, private IP로만 설정시 NAT 설정을 하면 될 것 같기도 함)
  • apt에 다운로드링크를 등록 curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
  • mariaDB apt등록 참고
  • 설치 sudo apt-get install mariadb-server
  • scp 로 서버끼리 파일 주고 받고, mysql -u [계정] -p [DB 명] < [백업 파일 이름].sql 백업파일을 DB에 적용시킨다.
  • DB에서 /etc/mysql/mariadb.conf.d/50-server.cnf에서 ip 설정을 해주어야 요청을 주고 받을 수 있다. bind-address가 설정되어 있다면 설정된 Ip만을 허용하지만, 설정을 해주지 않으면 모든 ip에 대해서 허용을 해준다.

참고