Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

Aurora Cluster 간 replication 연결 본문

AWS 및 클라우드 지식/AWS RDS, Aurora 및 관련 지식

Aurora Cluster 간 replication 연결

`O` 2022. 6. 24. 03:15
728x90
반응형

해당 페이지에서는 RDS, Aurora Cluster 에서 자주 사용되는 DBInstanceClassMemory 값에 대하여 다룬다.

 

해당 내용은 아래의 공식 문서를 참조하여 기재한다.

 

https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Replication.html

 

또한 해당 글은 이전 개시글중에서 아래의 게시글을 먼저 읽고 오면 좋다.

 

2021.07.01 - [MySQL/Replication] - MySQL / MariaDB Replication 구성 방법 (mysqldump)

 

2021.07.09 - [MySQL/기타 지식] - MySQL / MariaDB Replication -Slave 서버 데이터 기입

 

2022.04.22 - [AWS 및 클라우드 지식/AWS 지식] - RDS 및 Aurora Cluster 개요

 

2022.05.10 - [AWS 및 클라우드 지식/AWS 지식] - RDS, Aurora Cluster 에서의 AWS, DBA 관리 영역

 

Aurora Cluster 에서 Replication 의 사용 의의

 

이전 게시글에서 설명을 했듯이, Aurora Cluster 자체에서는 Replication 을 사용하는 구조가 아니다.

하지만, 회사마다 운영하는 환경이나 기타 사유가 있을 시, 동일 Aurora Cluster 나 RDS, Bastion Host, 외부 OS 환경 등에서 Replication 을 사용해야 하는 경우가 있다. (ex : AWS 이외의 온프레미스에서 관리하는 서비스와 AWS 서비스를 연동 시키고 싶을 경우) AWS 에서도 이를 인지하여 Aurora Cluster 에서 Replication 에 사용할 binlog 설정 및 기타 Replication 명령어를 제공한다.

 

Aurora Cluster 간 Replication 의 사용 의의

 

Aurora Cluster 간에도 이를 응용하여 Replication 을 구성 할 수 있다.

Aurora Cluster 간에 Replication 을 사용하는 대표적인 작업 중 하나는 업그레이드 된 버전 혹은 인스턴스 class 를 사용하는 Cluster 를 기존 운영 서비스가 사용하는 Cluster 와 연결 한 뒤, application 이 새로 구성된 cluster 와 연결을 하게 함으로써 무중단으로 버전 업그레이드 및 인스턴스 class 업그레이드를 수행하는 것이다.

 

Aurora Cluster 에서 replication 을 구성하는 방법

 

온프레미스에서 구성하는 MySQL, MariaDB 의 replication 구성 방법 순서는 유사하나 

사용하는 파라미터 및 명령어는 다르다. 이는 온프레미스에서 replication 을 구성 할 때,

사용하는 superuser 인 root 계정을 RDS, Aurora Cluster 에서는 사용 할 수 없기 때문이다.

 

Aurora Cluster 에서 replication 사용 및 구성 방법은 다음과 같다.

여기서 설명하는 master slave 클러스터는 AS-IS, TO-BE 로 표현한다.

 

- Aurora Cluster 파라미터 그룹에서 binlog_format 을 OFF 이외의 값으로 선택하여 binlog 를 사용하도록 설정

 

본인 테스트 화면

 

- AS-IS 의 writer 인스턴스에서 binlog 설정 확인

 

MySQL [test]> show master status\G;

*************************** 1. row ***************************
			 File: mysql-bin-changelog.000002
		 Position: 120
	 Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.06 sec)

 

- TO-BE 에서 CALL mysql.rds_set_external_master 명령어로 연결할 AS-IS 정보 기입

단, 이는 Aurora 1,2 / 3 버전 차이가 있다.

 

For Aurora MySQL version 1 and 2:
CALL mysql.rds_set_external_master ('mydbinstance.123456789012.us-east-1.rds.amazonaws.com', 3306,
    'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

For Aurora MySQL version 3 and higher:
CALL mysql.rds_set_external_source ('mydbinstance.123456789012.us-east-1.rds.amazonaws.com', 3306,
    'repl_user', '<password>', 'mysql-bin-changelog.000031', 107, 0);

 

- 이에 따라 위에서 참고한 master status 정보 기입을 한다.

필자는 Aurora 3 버전에서 테스트를 했기에 아래와 같은 추가 Message 가 나온다.

 

MySQL [(none)]> CALL mysql.rds_set_external_master ('test-instance-1.csssomh1rwkc.ap-northeast-2.rds.amazonaws.com', 3306, 'admin', 'password', 'mysql-bin-changelog.000002', 120, 0);
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Message                                                                                                                                                                                      |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| rds_set_external_master is deprecated and will be removed in a future release. Use rds_set_external_source instead. Refer to the documentation for more information on deprecated statements |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

 

- 그 후, TO-BE 에서 CALL mysql.rds_start_replication 명령어로 start slave 기능을 실행한다.

MySQL [(none)]> CALL mysql.rds_start_replication;
+---------------------------+
| Message                   |
+---------------------------+
| Replica running normally. |
+---------------------------+
1 row in set (1.01 sec)


- 정상 결과가 나온다면 추가로 show slave status 로 연결 상황을 확인 한다.

MySQL [(none)]> show slave status\G;
*************************** 1. row ***************************
   Slave_IO_State: Waiting for master to send event
  Master_Host: test-instance-1.csssomh1rwkc.ap-northeast-2.rds.amazonaws.com
  Master_User: admin
  Master_Port: 3306
Connect_Retry: 60
  Master_Log_File: mysql-bin-changelog.000002
  Read_Master_Log_Pos: 120
   Relay_Log_File: relaylog.000002
Relay_Log_Pos: 329
Relay_Master_Log_File: mysql-bin-changelog.000002
 Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  Replicate_Do_DB:
  Replicate_Ignore_DB:
   Replicate_Do_Table:
   Replicate_Ignore_Table:
  Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table: mysql.%
   Last_Errno: 0
   Last_Error:
 Skip_Counter: 0
  Exec_Master_Log_Pos: 120
  Relay_Log_Space: 531
  Until_Condition: None
   Until_Log_File:
Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File:
   Master_SSL_CA_Path:
  Master_SSL_Cert:
Master_SSL_Cipher:
   Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
   Last_SQL_Errno: 0
   Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
 Master_Server_Id: 2093118851
  Master_UUID: 5c8bda1a-61af-3a36-b47e-1abb61e6b61a
 Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
  SQL_Remaining_Delay: NULL
  Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
   Master_Retry_Count: 86400
  Master_Bind:
  Last_IO_Error_Timestamp:
 Last_SQL_Error_Timestamp:
   Master_SSL_Crl:
   Master_SSL_Crlpath:
   Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
 Replicate_Rewrite_DB:
 Channel_Name:
   Master_TLS_Version:
   Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)

ERROR: No query specified


- 연결이 정상적으로 되었다면 AS-IS 에서 테스트 작업을 통하여 정상적으로 복제가 수행되는지 확인한다.

- AS-IS

MySQL [test]> create database mig_test;
Query OK, 1 row affected (0.01 sec)

- TO-BE

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mig_test           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
반응형
Comments