< Lab >
Migrate to Cloud SQL for PostgreSQL using Database Migration Service
Database Migration Service를 사용하여 PostgreSQL용 Cloud SQL로 마이그레이션
- Google Cloud Shell 활성화
- 클라우드 셸을 열고 PROJECT_ID 설정 확인
- 활성 계정 이름 나열
gcloud auth list
- 프로젝트 ID 나열
gcloud config list project
- 데이터베이스 마이그레이션 API가 활성화되어 있는지 확인
- 콘솔에서 Database Migration API 입력 후 활성화
- 서비스 네트워킹 API가 활성화되어 있는지 확인
- 콘솔에서 Service Networking API 입력 후 활성화
- 마이그레이션을 위한 원본 데이터베이스 준비
- pglogical 확장으로 데이터베이스 업그레이드 :
Compute Engine - VM 인스턴스 - postgresql-vm의 SSH를 클릭 후 pglogical 데이터베이스 확장 설치 및
PostgreSQL 구성 파일에 몇 가지 추가 사항을 다운로드하여 적용하고 서비스를 다시 시작
(pg_hba.conf는 모든 호스트에 대한 액세스를 허용하는 규칙
postgresql.conf는 pglogical이 모든 주소에서 수신 대기하도록 구성하는 최소 구성 설정)
psql 도구를 시작한 후 pglogical 데이터베이스에 대한 확장자를 추가sudo apt install postgresql-13-pglogical sudo su - postgres -c "gsutil cp gs://cloud-training/gsp918/pg_hba_append.conf ." sudo su - postgres -c "gsutil cp gs://cloud-training/gsp918/postgresql_append.conf ." sudo su - postgres -c "cat pg_hba_append.conf >> /etc/postgresql/13/main/pg_hba.conf" sudo su - postgres -c "cat postgresql_append.conf >> /etc/postgresql/13/main/postgresql.conf" sudo systemctl restart postgresql@13-main
서버의 PostgreSQL 데이터베이스 나열sudo su - postgres psql \c postgres; CREATE EXTENSION pglogical; \c orders; CREATE EXTENSION pglogical; \c gmemegen_db; CREATE EXTENSION pglogical;
- 데이터베이스 마이그레이션 사용자 생성 :
psql에서 아래 명령을 입력 하여 복제 역할을 가진 새 사용자를 생성
CREATE USER migration_admin PASSWORD 'DMS_1s_cool!'; ALTER DATABASE orders OWNER TO migration_admin; ALTER ROLE migration_admin WITH REPLICATION;
- 마이그레이션 사용자 (migration_admin 사용자에게 권한 할당 :
psql에서 postgres 데이터베이스의 pglogical 스키마와 테이블에 권한을 부여
psql에서 orders 데이터베이스의 pglogical 스키마와 테이블에 권한을 부여\c postgres; GRANT USAGE ON SCHEMA pglogical TO migration_admin; GRANT ALL ON SCHEMA pglogical TO migration_admin; GRANT SELECT ON pglogical.tables TO migration_admin; GRANT SELECT ON pglogical.depend TO migration_admin; GRANT SELECT ON pglogical.local_node TO migration_admin; GRANT SELECT ON pglogical.local_sync_status TO migration_admin; GRANT SELECT ON pglogical.node TO migration_admin; GRANT SELECT ON pglogical.node_interface TO migration_admin; GRANT SELECT ON pglogical.queue TO migration_admin; GRANT SELECT ON pglogical.replication_set TO migration_admin; GRANT SELECT ON pglogical.replication_set_seq TO migration_admin; GRANT SELECT ON pglogical.replication_set_table TO migration_admin; GRANT SELECT ON pglogical.sequence_state TO migration_admin; GRANT SELECT ON pglogical.subscription TO migration_admin;
psql에서 orders 데이터베이스의 public 스키마와 테이블에 권한을 부여\c orders; GRANT USAGE ON SCHEMA pglogical TO migration_admin; GRANT ALL ON SCHEMA pglogical TO migration_admin; GRANT SELECT ON pglogical.tables TO migration_admin; GRANT SELECT ON pglogical.depend TO migration_admin; GRANT SELECT ON pglogical.local_node TO migration_admin; GRANT SELECT ON pglogical.local_sync_status TO migration_admin; GRANT SELECT ON pglogical.node TO migration_admin; GRANT SELECT ON pglogical.node_interface TO migration_admin; GRANT SELECT ON pglogical.queue TO migration_admin; GRANT SELECT ON pglogical.replication_set TO migration_admin; GRANT SELECT ON pglogical.replication_set_seq TO migration_admin; GRANT SELECT ON pglogical.replication_set_table TO migration_admin; GRANT SELECT ON pglogical.sequence_state TO migration_admin; GRANT SELECT ON pglogical.subscription TO migration_admin;
psql에서 gmemegen_db 데이터베이스의 pglogica 스키마와 테이블에 권한을 부여GRANT USAGE ON SCHEMA public TO migration_admin; GRANT ALL ON SCHEMA public TO migration_admin; GRANT SELECT ON public.distribution_centers TO migration_admin; GRANT SELECT ON public.inventory_items TO migration_admin; GRANT SELECT ON public.order_items TO migration_admin; GRANT SELECT ON public.products TO migration_admin; GRANT SELECT ON public.users TO migration_admin;
psql에서 데이터베이스의 gmemegen_db public 스키마와 테이블에 권한을 부여\c gmemegen_db; GRANT USAGE ON SCHEMA pglogical TO migration_admin; GRANT ALL ON SCHEMA pglogical TO migration_admin; GRANT SELECT ON pglogical.tables TO migration_admin; GRANT SELECT ON pglogical.depend TO migration_admin; GRANT SELECT ON pglogical.local_node TO migration_admin; GRANT SELECT ON pglogical.local_sync_status TO migration_admin; GRANT SELECT ON pglogical.node TO migration_admin; GRANT SELECT ON pglogical.node_interface TO migration_admin; GRANT SELECT ON pglogical.queue TO migration_admin; GRANT SELECT ON pglogical.replication_set TO migration_admin; GRANT SELECT ON pglogical.replication_set_seq TO migration_admin; GRANT SELECT ON pglogical.replication_set_table TO migration_admin; GRANT SELECT ON pglogical.sequence_state TO migration_admin; GRANT SELECT ON pglogical.subscription TO migration_admin;
마이그레이션을 테스트할 때 소스 데이터를 편집하도록 migration_admin 사용자를 orders 데이터베이스의 소유자로 변경GRANT USAGE ON SCHEMA public TO migration_admin; GRANT ALL ON SCHEMA public TO migration_admin; GRANT SELECT ON public.meme TO migration_admin;
\c orders; \dt ALTER TABLE public.distribution_centers OWNER TO migration_admin; ALTER TABLE public.inventory_items OWNER TO migration_admin; ALTER TABLE public.order_items OWNER TO migration_admin; ALTER TABLE public.products OWNER TO migration_admin; ALTER TABLE public.users OWNER TO migration_admin; \dt
psql 및 postgres 사용자 세션 종료
\q exit
- 독립형 PostgreSQL 데이터베이스에 대한 데이터베이스 마이그레이션 서비스 연결 프로필 생성
- PostgreSQL 소스 인스턴스에 대한 연결 정보 가져오기 :
Compute Enigne - VM 인스턴스 - postgresql-vm 인스턴스를 찾아 내부 IP 주소 값 복사
+) 내부 IP 주소 : 10.128.0.2 - PostgreSQL 소스 인스턴스에 대한 새 연결 프로필 생성 :
콘솔창에 Database Migration - Connection profiles - 프로필 만들기 클릭 - PostgreSQL 선택 후 정보 입력
연결 프로필 이름 : postgres-vm
연결 프로필 ID : 자동 생성된 값 유지
호스트 이름 또는 IP 주소 : 10.128.0.2
포트 : 5432
사용자 이름 : migration_admin
비밀번호 : DMS_1s_cool!
postgres-vm이라는 새 연결 프로필 생성 확인
- 연속 마이그레이션 작업 생성 및 시작
- 새 마이그레이션 작업 만들기 (Get started) :
콘솔에서 Database Migration - Migration jobs - 마이그레이션 작업 만들기 - 정보 입력
마이그레이션 작업 이름 : vm-to-cloudsql
마이그레이션 작업 ID : 자동 생성된 값 유지
소스 데이터베이스 엔진 : PostgreSQL
마이그레이션 작업 유형 : Continuous - 소스 인스턴스 정의 (Define a source) :
소스 연결 프로필로 postgres-vm 선택 - 대상 인스턴스 만들기 (Create a destination) :
Cloud SQL에서 대상 인스턴스를 만드는데 필요한 정보 입력
대상 인스턴스 ID : postgresql-cloudsql
루트 비밀번호 : supersecret!
데이터베이스 버전 : Cloud SQL for PostgreSQL 13
존 : Any
연결 : Private IP and Public IP 선택 후 자동 할당된 IP 범위 사용
머신 유형 : standard, 1vCPU, 3.75GB
저장 유형 : SSD
저장 용량 : 10 - 연결 방법 정의 (Define connectivity method) :
VPC Peering 선택 - default 선택 - 자동으로 할당된 IP 범위에서 postgresql-vm 인스턴스에 대한 액세스 허용 :
데이터베이스 마이그레이션 서비스가 독립형 PostgreSQL 데이터베이스에 액세스할 수 있도록 PostgreSQL 구성 파일을 편집
VPC - VPC Network Peering 을 클릭 후 servicenetworking-googleapis-com 클릭
Imported routes 탭에서 가져온 Destination IP range를 선택하고 복사한 후 pg_hba.conf 파일을 편집하고
마지막 줄에서 모든 IP 주소를 Destination IP range로 변경 후 저장하고 종료 후 PostgreSQL 서비스 재시작
+) Destination IP range : 172.17.0.0/24
sudo nano /etc/postgresql/13/main/pg_hba.conf sudo systemctl start postgresql@13-main
- 지속적인 마이그레이션 작업 테스트 및 시작 :
마이그레이션 세부 정보 검토 후 테스트 작업을 클릭하여 테스트가 성공적으로 끝나면 작업 만들기 및 시작 클릭 - 지속적인 마이그레이션 작업 상태 검토 :
콘솔창에서 Database Mirgration - Migration jobs 틀릭 - vm-to-cloudsql을 클릭한 후 마이그레이션 작업 상태 검토
현재 Running 상태이지만
대상 데이터베이스가 데이터 읽기 및 쓰기를 위한 독립 실행형 데이터베이스로 승격된 후 Completed 상태가 될 것
- PostgreSQL용 Cloud SQL에서 데이터 확인
- Cloud SQL에서 PostgreSQL 데이터베이스 확인 :
콘솔에서 SQL 클릭 후 postgre-cloudsql-master 인스턴스 ID 클릭 - Replica 인스턴스 메뉴에서 데이터베이스 클릭
postgres, orders, gmemegen_db 라는 데이터베이스가 Cloud SQL로 마이그레이션된 것 확인
- PostgreSQL 인스턴스에 연결 :
Replica 인스턴스 메뉴에서 Overview 클릭
- 이 인스턴스에 연결 패널에서 클라우드 셸 열기 버튼 클릭 후 암호를 입력해 PostgreSQL 대화형 콘솔 활성화
gcloud SQL 연결 postgresql-cloudsql --user=postgres --quiet supersecret!
- PostgreSQL용 Cloud SQL 인스턴스의 데이터 검토 :
데이터베이스를 선택한 후 쿼리를 수행
\c orders; select * from distribution_centers;
PostgreSQL 대화형 콘솔 종료
\q
- 지속적인 마이그레이션을 테스트하기 위해 독립 실행형 소스 데이터 업데이트 :
클라우드 셸에서 원본 PostgreSQL 인스턴스에 연결 후 명령 실행
암호는 DMS_1s_cool!
대화형 psql 세션을 닫음export VM_NAME=postgresql-vm export PROJECT_ID=$(gcloud config list --format 'value(core.project)') export POSTGRESQL_IP=$(gcloud compute instances describe ${VM_NAME} \ --zone=us-central1-a --format="value(networkInterfaces[0].accessConfigs[0].natIP)") echo $POSTGRESQL_IP psql -h $POSTGRESQL_IP -p 5432 -d orders -U migration_admin \c orders; insert into distribution_centers values(-80.1918,25.7617,'Miami FL',11);
\q
- Cloud SQL PostgreSQL 데이터베이스에 연결하여 업데이트된 데이터가 마이그레이션되었는지 확인 :
클라우드 셸에서 Cloud SQL PostgreSQL 인스턴스에 연결하여 PostgreSQL 대화형 콘솔 활성화
gcloud sql connect postgresql-cloudsql --user=postgres --quiet supersecret!
- PostgreSQL용 Cloud SQL 데이터베이스의 데이터 검토 :
데이터베이스를 선택한 후 쿼리를 실행
독립 실행형 orders 데이터베이스에 추가된 새 행은 마이그레이션된 데이터베이스에 있는 것을 확인 가능\c orders; supersecret! select * from distribution_centers;
PostgreSQL 대화형 콘솔 종료
\q
- Cloud SQL을 데이터 읽기 및 쓰기를 위한 독립 실행형 인스턴스로 승격
- 콘솔에서 Database Migration - Mirgraion jobs 클릭 후 vm-to-cloudsql 클릭 후 Promote 클릭
승격이 완료되면 SQL을 클릭해 postgresql-cloudsql이 데이터 읽기 및 쓰기를 위한 독립 실행형 인스턴스가 됨