Datastream 관련 예전 포스팅 Datastream을 사용한 Cloud SQL to BigQuery CDC 파이프라인 구축 이후로 BigQuery로 바로 스트리밍 된다는 업데이트를 알게된 후 써봐야지 하다가.. 이제서야 써본다.
전과 다른 점은 Public한 환경이 아니라 Private한 환경을 구성해볼 것이다.
여기선 AWS와 GCP VPN 설정은 되어 있고 RDS도 생성되어 있다고 가정하고 RDS 설정과 Datastream 설정만을 다룰 것이다.
VPN 설정은 Cloud Storage BigQuery Private Access Part 1 포스팅 참고.
우선 진행은 RDS를 Read-replica하여 그 복사본 DB와 Datastream 간의 파이프라인을 구성할 것이다.
이를 위해 default 파라미터 그룹에서 바꿔줘야 할 파라미터들이 있는데 default 파라미터 그룹은 변경이 불가하므로 새로 생성해야 한다.
파라미터 그룹 생성
편집에서 아래 표와 같이 파라미터 설정.
매개변수 | 값 |
---|---|
log_bin_use_v1_row_events | ROW |
read_only | 1 |
binlog_format | 0 |
net_read_timeout | 3600 |
net_write_timeout | 3600 |
wait_timeout | 86400 |
읽기 전용 복제본(Read-replica) 생성
복제본 파라미터 그룹 변경
백업 보존 기간을 두는 이유는 최소 7일(또는 168시간) 동안 바이너리 로그를 보관하도록 시스템을 구성하여 적절한 복제를 수행하기 위함.
(뒤에 DB에 접속해서 따로 설정도 해줄 것이다)
구성을 보면 파라미터 그룹 변경으로 인해 재부팅이 필요할 것이므로 재부팅 해준다.
이제 Bastion을 통해 RDS(기본)에 접속하여 CDC를 할 간단한 테이블을 하나 만들어보자!!
Amazon Linux 3 MySQL install
sudo wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf install mysql80-community-release-el9-1.noarch.rpm -y
sudo dnf install mysql-community-server -y
sudo systemctl start mysqld
혹여나 아래와 같은 에러가 뜬다면 sudo dnf upgrade --refresh를 수행하고 위의 명령어 다시 실행
귀찮으므로 테이블은 아주아주 간단하게..ㅎㅎ
기본 RDS(왼쪽)에서 테이블을 생성하였고 복제본 RDS(오른쪽)에서 확인한 것이다.
추가로 앞서 말한 바이너리 로그 보관을 위한 기간 설정과 Datastream이 RDS 접근하기 위한 사용자를 만들어주고 권한을 부여해주는 쿼리문을 실행해보자
call mysql.rds_set_configuration('binlog retention hours', 168);
CREATE USER 'datastream'@'%' IDENTIFIED BY '<Password 설정>';
GRANT REPLICATION SLAVE, SELECT, REPLICATION CLIENT ON *.* TO 'datastream'@'%';
FLUSH PRIVILEGES;
이제 RDS 설정은 끝났다.
스트림 생성
※주의할 점※
AWS의 RDS가 위치한 리전과 반드시 같은 리전으로 설정해야 한다.
RDS의 Private IP와 Username, Password를 입력해준다.
RDS의 Private IP는 Bastion에서 아래 명령어로 쉽게 확인할 수 있다.
(당연히 dig 명령어로도 가능)
nslookup <RDS 엔드포인트>
53은 DNS 포트이므로 DNS 서버 주소이고 밑에 주소가 RDS의 Private IP
비공개 연결을 위해 Private Connectivity 구성
AWS와 VPN을 맺은 VPC 선택
IP 주소 범위는 GCP의 VPC 대역과 겹치지 않는 Private IP 대역대를 지정해준다.
테스트를 하기 전 Cloud Router에 해당 IP주소 범위에 대한 커스텀 경로를 지정해줘야 하고 RDS의 보안 그룹에도 이 대역대를 허용해줘야 한다.
Datastream은 Managed Service이므로 자체적으로 Datastream용 VPC가 생성되는데 비공개 연결을 구성하면 이 VPC가 AWS와 연결되어 있는 GCP VPC와 자동으로 피어링을 맺는다.
vpc1, vpc2는 피어링을 맺었고 vpc2와 vpc3이 피어링을 맺는다고해서 vpc1과 vpc3이 연결되지는 않는 것과 같은 피어링의 특성 때문에 앞서 말한 구성을 해줘야 하는 것.
커스텀 경로 수정
RDS 보안그룹은 인바운드 아웃바운드에 모두 Datastream의 대역대 추가
테스트 성공!
원하는 데이터 선택
BigQuery와의 연결 설정
프리픽스 설정을 하면 MySQL DB 이름 앞에 추가되어서 BigQuery 데이터 세트가 생성된다.
마지막으로 검증을 진행하고 만들기 클릭!
BigQuery로 가보면 기존 DB이름에 앞에 설정한 prefix로 데이터 세트가 생성된 것을 볼 수 있고 테이블도 잘 복제된 것을 확인할 수 있다.
[Datastream을 사용한 Amazon RDS to BigQuery CDC 파이프라인 구축 참고]