우아한테크코스/레벨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 로 전환
- DB 덤프
- docker에 접속하여 DB 컨테이너에 접속
docker exec -it [container id] /bin/bash
mysqldump -u [계정] -p [db이름] > [백업 파일 이름].sql
- mysqldump 명령어로 현재 DB 상태를 쉽게 덤프할 수 있다. sql 파일로 저장한다.
- docker 에 있는 덤프파일을 docker 밖으로 복사
docker cp [containerId]:[백업 파일 이름].sql [원하는 파일 위치]
- BASTION
- 이 부분은 migration과 상관은 없지만, 작업진행을 하며 프로젝트에 적용한 부분이라 내용을 남김
- bastion 서버를 생성
- bastion의 퍼블릭 키를 다른 EC2 서버의
~/.ssh/authrized_keys
에 추가해 줌
- 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에 대해서 허용을 해준다.