개발 환경과 실제 운영 환경을 분리하여 운영하기 위해 ec2 인스턴스를 추가로 생성하여
기존의 환경을 옮겨야 한다.
기존 컨테이너를 그대로 옮기는건 큰 문제가 되지 않는다.
어떤 ec2 인스턴스가 우리 서비스에 가장 적합한가?
현재 운영중인 데이터베이스의 데이터들은 어떻게 옮길 것인가?
요금 문제로 ec2 프리티어를 자주 사용해서, 무료 인스턴스 생성은 이제 익숙하다.
하지만 실제 운영되는 서버에 사용될 인스턴스이기 때문에 신중하게 고를 필요가 있다.
체크해야 할 부분
-> 아시아 태평양(서울) 이랑 미국에 오하이오 처럼 ec2 지역마다 대여 가격이 다르다.
-> 가장 중요한 '비용'에 대한 결제 방식을 고려한다. 3가지 방식을 소개하면
-> 대여할 인스턴스의 스펙을 고려한다.
현재 ec2 인스턴스를 사용중이고, 서비스하고 있는 중이면
htop 명령어를 통해 실시간 서버 리소스 사용량을 확인할 수 있다.
인스턴스 스펙 3요소를 보면
t 시리즈
t 시리즈는 기본 성능은 낮다.
하지만 t 시리즈에는 '버스트' 라는 기능이 있다.
t 시리즈는 '크레딧' 이라는걸 cpu 사용량이 적을 때 계속 조금씩 쌓아둔다.
그러다가 cpu 사용량이 폭발적으로 늘어나는 순간이 오면 크레딧을 사용해서 성능 향상을 시킬수 있다.
t 시리즈 마다 cpu 사용량 기준이 되는 지점이 있는데 해당 지점을 넘게되면 '버스트'가 활성화 된다.
t1 : 초창기 버전이다. 현재 지원 x
t2 : cpu 사용량이 많아져서 크레딧을 전부 소비하게 되면 속도가 제한된다.
-> cpu 사용량 10~20% 이상시 버스트, 크레딧 소진시 속도 제한 걸림
t3 : unlimited 옵션을 켜면 추가 요금을 발생시키지만 속도를 유지할 수 있다.
-> cpu 사용량 20~30% 이상시 버스트, 크레딧 전부 소진해도 unlimited 옵션을 켜면 속도 유지 but 추가요금 발생
t4g : unlimited 옵션을 켜면 추가 요금을 발생시키지만 속도를 유지할 수 있다.
'g' 가 붙었는데 g 는 아마존 자체 개발 인스턴스이고 그렇기에 '더 저렴하고 더 빠르다'라는 특징이 있음
g가 붙은것들은 !!⭐ARM 기반의 인스턴스이다.⭐!!(ARM 기반의 프로세서와 내 운영 서비스가 호환하는지 잘 찾아보기)
-> cpu 사용량 20~30% 이상시 버스트, 크레딧 전부 소진해도 unlimited 옵션을 켜면 속도 유지 but 추가요금 발생
c 시리즈
c 시리즈는 cpu에 최적화된 인스턴스 유형이다.
cpu 처리량이 많은 서버의 경우 c 시리즈로 시작하는 인스턴스를 사용하는게 좋다.
r 시리즈
r 시리즈는 메모리에 최적화된 인스턴스 유형이다.
메모리 속도가 빠르고 많은 용량이 필요할 경우 선택하게 된다.
i 시리즈
i 시리즈는 스토리지에 최적화된 인스턴스 유형이다.
읽고 쓰기가 많은 경우 저장장치의 읽고 쓰는 속도가 중요한데 읽고 쓰기 작업의 속도가 중요할 때 사용하는걸 추천한다.
인스턴스를 골라서 생성하고 나서
compose.yml을 옮기거나 각종 설정들을 다 해준 후
실제 운영데이터들을 옮겨야 할 것이다.
MySQL은 Data Exports를 해주면 된다.
보통 MySQL 쓸 때 cli 보다는 workbench를 많이 사용하는데
여기서 스키마 선택하고 Data Exports 해주면 dump 파일들이 생긴다.
이를 새로운 인스턴스에 접속해서 Data Import 해주면 끝
MySQL에서 스키마(DB) 라고 하는거를 MongoDB 에서는 그냥 DB 라고 하고
MySQL에서의 테이블을 MongoDB에는 Collection 라고한다.
또한 mysql의 튜플은 mongoDB에서 document 라고 한다.
그런데 중요한 점은
MySQL workbench에서는 DB exports 가 되어서 스키마 내부에 테이블들을 한번에 백업할 수 있다.
그런데 MongoDB 전용 툴인 MongoCompass 에서는 그게 안된다. 그래서 collection이 많다면 하나씩 옮기느라 시간이 오래걸릴 수 있다.
또한 각 DB 마다 '계정' 이 존재해서 이러한 정보들은 또 수동으로 옮겨줘야 한다.
나는 운영 mongo 안에 컬렉션이 너무 많아서 다른 방법을 찾았는데
컨테이너에 직접 접속해서 dump를 만들고 이를 밖으로 꺼내서 사용했다.
docker exec -it mongo mongodump -u <계정ID> -p <계정PW> --authenticationDatabase admin --out /data/dump
docker cp mongo:/data/dump ./dump
docker cp /home/ubuntu/dump mongo:/data/dump
docker exec -it mongo mongorestore -u <계정ID> -p <계정PW> --authenticationDatabase admin /data/dump
이러한 과정을 거치게 되면 내부 데이터를 복제해서 옮기는 것이기 때문에
온전한 데이터 이전이 가능하다.
물론 옮기는 과정 중 발생하는 데이터는 유실되므로 서비스를 중지하고 옮겨야 한다.
이렇게 ec2 이전 작업을 해보았다.
끝