회사에서 운영하고 있는 레거시 시스템 중 하나를 버전업하게 되었는데, 해당 애플리케이션은 EC2 인스턴스 내에 MariaDB 엔진을 설치하여 running 중이었다. 버전업과 동시에 DB를 AWS RDS로 마이그레이션 하기로 결정하였는데 그 이유는 아래와 같다.
'확실히 AWS를 사용하면 사람이 편해진다.'
마이그레이션을 하면서 어떤 DB인스턴스를 사용해야할지 고민해보았다.
기본적으로 오토스케일링을 지원하는 서버리스 AuroraDB 사용을 검토해보았으나 해당 서비스는 유저수가 일정하여 부하가 많지 않을것이라고 판단하여 AWS RDS MariaDB로 채택하였다.
(현재 사내 시스템에선 AuroraDB와 MariaDB엔진을 상황에 맞게 사용중이다.)
마이그레이션 하는 방법은 여러 개가 존재한다.
AWS의 DMS, Xtra Backup을 사용한 마이그레이션, mysqldump를 사용한 마이그레이션 등등..
무중단 마이그레이션이 필요하였다면 DMS나 X-tra Backup을 사용하였겠지만 이번 시스템은 무조건 중단을 해야하는 환경이였으므로 mysqldump 명령어를 사용하기로 하였다. 그리고 10G 정도 되는 데이터 양이였기에 mysqldump 명령어로도 짧은 시간안에 마이그레이션이 가능하였다.
AWS Docs에도 설명이 되어있지만 아래 명령어로 덤프를 생성하여 바로 AWS RDS로 마이그레이션 할 수 있다. DB 인스턴스가 running 되고있는 서버 환경에 접속하여서 명령어를 사용하면 된다.
mysqldump -u <local_user> \
--databases <database_name> \
--single-transaction \
--compress \
--order-by-primary \
--routines=0 \
--triggers=0 \
--events=0 \
-p<local_password> | mysql -u <RDS_user> \
--port=<port_number> \
--host=<host_name> \
-p<RDS_password>
Parameters
(p다음에 공백없이 비밀번호를 입력해야 한다!)
_ex) mysql : 3306
_(p다음에 공백없이 비밀번호를 입력해야 한다.)
_Options
간단히 말하자면, DB에 Lock을 걸지 않아도 마이그레이션 되는 데이터들의 무결성이 유지된다.
(밑에 있는 주의할 점 참고)
(밑에 있는 주의할 점 참고)
AWS RDS를 사용해보며 비싸기는 하지만 매우 편리하다고 느끼고 있다. parameter group을 통한 DB 설정값 관리, CloudWatch, replication 기능들을 통해 devOps에 정말 많은 도움을 받고 있다. 하지만 비용이 무시하지 못할 비용이기에 최적화된 인스턴스 사이즈와 어플리케이션의 튜닝이 필요하다.