오라클 클라우드 MySQL Database Service (3) - MDS - Oracle Cloud

Last Updated on 4월 11, 2021 by 태랑(정현호)



이번 포스팅에서는 오라클 클라우드 MDS DB Instance 에 대한 복제(replication) 구성과 Configuration(parameter) 변경에 대해서 확인 해보려고 합니다.

오라클 클라우드 MySQL Database Service 의 생성 및 접속 관련된 내용은 아래 이전 포스팅을 확인 하시면 됩니다.



1. Replication 유저 생성



오라클 클라우드 MDS 의 replication 도 보통의 MySQL의 Replication 과 동일하게 Replication 유저가 필요 합니다.

Master 인스턴스 에서 생성 하면 되며 유저명은 repl_user 으로 하겠습니다.

mysql> create user 'repl_user'@'%' identified by 'Repl_user12#$';
mysql> grant replication slave,replication client on *.* to 'repl_user'@'%';




2. 백업으로 부터 새 DB 생성



오라클 클라우드 MDS 는 자동 및 수동 백업을 지원하며 백업 파일로 부터 새로운 데이터베이스의 생성이 가능하고 쉽게 지원하기 때문에 백업을 통해 Replica 인스턴스 를 구성하겠습니다.


2-1 백업 -> 점 3개 -> 새 DB 시스템으로 복원  을 선택 합니다.




2-2 새로운 DB 인스턴스의 이름과 설명을 입력 합니다.




2-3 구성 선택 항목이 있으며 필요 시 변경 할 수 있습니다 하단의 다음 을 클릭 합니다.




2-4 관리자 아이디와 패스워드를 입력 합니다 그리고 하단에 호스트명을 꼭 입력 합니다. 포스팅에서는 인스턴스명과 동일하게 입력 하였습니다. 입력이 완료 되었다면 다음을 클릭 합니다.




2-5 백업 여부를 선택 후 생성 을 클릭 합니다.




2-6 생성이 완료 되었다면 아래와 같이 소스 에는 BACKUP 으로 확인되며 그 외 Endpoint 와 IP 정보 등을 확인 할 수 있습니다.





3. 수식 규칙 추가



MDS Instance 간에도 통신을 하기 위해서 Private Subnet 에 수신 규칙의 추가가 필요 합니다.


3-1 하단의 구획을 확인 후 -> 서브넷 으로 이동 합니다. 그리고 CIDR 블럭 정보를 확인 합니다 포스팅 환경에서는 10.0.1.0/24 입니다  전용 서브넷(Private Subnet) 을 클릭 합니다.




3-2 전용 서브넷 보안 목록 을 클릭 합니다.




3-3 수신 규칙 추가 를 클릭 합니다.




3-4 소스  CIDR 에는 위에서 확인 한 전용 서브넷 CIDR 를 입력 합니다 포스팅 환경에서는 10.0.1.0/24 입니다. 그 다음 대상 포트 범위에 3306 를 입력 합니다. 설명 란에는 간략하게 내용을 입력 후 하단의 수신 규칙 추가 버튼을 클릭 합니다.




3-5 이미지에서는 이전에 배스천 서버에서의 접속을 위해 추가한 수신 규칙 과 지금 추가한 내역을 확인할 수 있습니다.






4. 채널 생성



오라클 클라우드 MDS 에서는 Replication 을 채널(channel) 이라고 하며 채널을 생성 하도록 하겠습니다.


4-1 DB 인스턴스 하단의 채널 -> 채널 생성 을 클릭 합니다. 




채널 생성 시작은 DB 인스턴스 외 메뉴에서도 들어갈 수 있습니다




4-2 채널을 입력 후 아래에 "소스 접속" 항목의 호스트 이름에는 Master 서버(소스 서버) 의 IP나 Endpoint 정보를 입력 해 줍니다. 그 다음 사용자 이름 과 비밀번호는 위에서 생성한 replication 유저의 정보를 입력 합니다.




4-3 SSL 모드는 default 로 선택되어 있는 필요 로 선택하고 아래 항목으로 이동 합니다.




4-4 대상(Replica/Target) DB 시스템을 선택하면 되며 Replica 인스턴스에서 채널 구성을 시작 하게 되면 아래와 같이 대상 시스템에 선택되게 됩니다. 채널 구성을 통해서 생성을 진행 한다면 오른쪽 "DB 시스템"  변경을 클릭하여 복제 대상 시스템을 선택하면 됩니다.
선택이 완료 되었다면 하단의 "채널 생성" 을 클릭 합니다.




4-5 채널을 생성 하게 되면 아래와 같이 Replica 인스턴스는 업데이트 중 으로 상태가 변하게 됩니다.




4-6 처리 될 내역이 모두 완료 되었다면 아래와 같이 활성 으로 다시 상태가 변경 되게 됩니다.




4-7 채널 에서 확인 하였을 때 정상적으로 구성 되었다면 아래와 같이 상태가 활성 으로 확인 되게 됩니다.





5. 복제 정보 확인 및 테스트



Replication 이 구성된 이후에 상태 확인 및 간단하게 테이블 과 데이터를 입력해보도록 하겠습니다.


5-1 상태 확인

Source -Master 는 마스터 서버 이고 ,  복제 대상은 Target - Replica 로 표기 하였습니다.
Replica 의 Server ID는 2807790747 로 확인 됩니다.

# Source - Master

mysql> show master status\G
*************************** 1. row ***************************
             File: binary-log.000056
         Position: 196
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: c3bae1f6-7a74-11eb-9bd7-020017084359:1-21
1 row in set (0.0008 sec)

mysql> show replicas\G
*************************** 1. row ***************************
   Server_Id: 2807790747
        Host: 
        Port: 3306
   Source_Id: 2022394952
Replica_UUID: 17a0e0f6-7a8d-11eb-adb1-0200170892d3
1 row in set (0.0008 sec)



# Target - Replica
SQL > show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for master to send event
                  Source_Host: mysql-MDS1.sub02280924451.vcn1.oraclevcn.com
                  Source_User: repl_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: binary-log.000052
          Read_Source_Log_Pos: 196
               Relay_Log_File: relay-log-replication_channel.000002
                Relay_Log_Pos: 373
        Relay_Source_Log_File: binary-log.000052
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 196
              Relay_Log_Space: 596
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: Yes
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 2022394952
                  Source_UUID: c3bae1f6-7a74-11eb-9bd7-020017084359
             Source_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
    Replica_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Source_Retry_Count: 0
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set: c3bae1f6-7a74-11eb-9bd7-020017084359:1-3
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name: replication_channel
           Source_TLS_Version: TLSv1.2,TLSv1.3
       Source_public_key_path:
        Get_Source_public_key: 1
            Network_Namespace: mysql
1 row in set (0.0009 sec)



5-2 데이터 베이스 확인 및 생성

테이블을 생성 하기 위해서 test 라는 데이터베이스(Schema) 를 생성 하였고 복제도 정상적으로 이루어졌습니다.

# Source - Master
SQL > select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| r8uklqhg0givcdhi | 8.0.23-u2-cloud |  2022394952 | master@........ |
+------------------+-----------------+-------------+-----------------+

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+



# Target - Replica
SQL > select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| crotp1hnq2uuc4jz | 8.0.23-u2-cloud |  2807790747 | master@........ |
+------------------+-----------------+-------------+-----------------+

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+




# Source - Master
mysql> create database test;

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+



# Target - Replica
SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+



5-3 테이블 생성 및 데이터 입력

테이블 생성 및 데이터 입력 후 건수 를 확인 해보겠습니다.
구성에는 특이사항 없이, Replication 은 정상적으로 이루어 지는 것을 확인 할 수 있습니다.

# Source - Master

mysql> use test;

mysql> CREATE TABLE emp ( 
    empno int  NOT NULL  AUTO_INCREMENT,
    ename varchar(20),
    job varchar(20),
    mgr smallint,
    hiredate   date,
    sal numeric(7,2),
    comm numeric(7,2),
    deptno  int,
    CONSTRAINT pk_emp PRIMARY KEY ( empno )
 ) engine=InnoDB;


insert into emp values( 7839, 'KING', 'PRESIDENT', null, STR_TO_DATE ('17-11-1981','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-1981','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-1981','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-1981','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, DATE_ADD(STR_TO_DATE('13-7-1987','%d-%m-%Y'),INTERVAL -85 DAY)  , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-1980','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-1981','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-1981','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-1981','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-1981','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, DATE_ADD(STR_TO_DATE('13-7-1987', '%d-%m-%Y'),INTERVAL -51 DAY), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-1982','%d-%m-%Y'), 1300, null, 10);


mysql> select count(*) from emp;
+----------+
| count(*) |
+----------+
|       14 |
+----------+




# Target - Replica

mysql> select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| crotp1hnq2uuc4jz | 8.0.23-u2-cloud |  2807790747 | master@10.0.0.2 |
+------------------+-----------------+-------------+-----------------+

mysql> select count(*) from test.emp;
+----------+
| count(*) |
+----------+
|       14 |
+----------+




6. 구성 변경



구성된 MDS 인스턴스의 파라미터를 변경을 진행 하겠습니다.


6-1 마스터 인스턴스에서 구성 -> 구성 링크 를 클릭 합니다.




6-2 현재 사용중인 파라미터 항목과 값을 확인 할 수 있습니다. 변경하기 위해서는 구성 복사를 클릭 합니다.




6-3 구성에 대한 이름을 입력 합니다. 입력 후 하단의 다음 을 클릭 합니다.




6-4 여러 파라미터가 보이며, 리스트에 없는 파라미터의 경우 아래 다른 변수를 클릭 하여 추가 하면 됩니다. 포스팅에서는 max_connections 를 500 에서 1000 으로 변경 하겠습니다. 변경 완료 후에 하단의 "복사" 버튼을 클릭 합니다.




6-5 복사 가 완료 되었다면 아래와 같이 확인 할 수 있습니다.




6-6 MDS인스턴스 목록에서 1번 - 점3개 클릭 -> 2번 편집 을 선택 합니다.




6-7 하단의 구성의 변경시 DB 재시작이 된다는 문구가 보입니다. 구성 변경 버튼을 클릭 합니다. 




6-8 위에서 생성한 config 를 선택 후 "구성 선택" 버튼을 누릅니다.





6-9 최종적으로 "변경사항 저장" 을 클릭하면 DB 인스턴스 재시작과 함께 적용되게 됩니다.




재시작 하는 동안에는 접속 끊김이 발생 합니다.



6-10 변경시 아래와 같이 업데이트 중으로 상태가 확인 됩니다.




6-11 재시작이 완료 되면 아래와 같이 활성 상태가 되며 구성 정보는 위에서 별도로 생성하여 적용한 구성 명 이 보이는걸 확인 할 수 있습니다.




6-12 접속 하여 조회하였을때도 파라미터는 정상적으로 변경(반영) 된 것으로 확인 됩니다.





7. conclusion



지금 까지 사용 및 테스트를 해오면서 중간 정리를 해본다면 결론적으로 타사 대비 지원 되지 않은 기능이 몇가지 있다보니 다소 아쉽다 정도로 느껴집니다. HeatWave 라는 분석 쿼리 엔진에 집중을 하여서 그런 것인지 아직 까지 몇가지 다소 아쉬운 부분이 있긴 합니다. 그 중에서 몇가지를 언급 하면

1) 처음 생성 시 결정한 Disk 사이즈의 변경이 지원되지 않는 것 같습니다.

2) Replication 이 복제 까지만 기능 지원이 되고 그 이후 take-over(롤 체인지) 와 같은 기능이 없으며 vip 형태의 cluster Endpoint 가 없습니다. 또한 Replica 인스턴스가 read/write 로 운영 되고 read only 로 변경 하는 메뉴가 없습니다.(파라미터 에도 없음)



내용 업데이트 : 2021/03/31 에 MySQL Database Service High Availability 기능이 추가 되었습니다.


Ref link. Oracle Cloud Release Notes [Link]
관련된 내용은 다음 포스팅을 참조하시면 됩니다(MDS 5번째 글)



3) MySQL 5.6 버전이 21년 2월 초 EOS 되면서 버전의 범위가 5.7 또는 8.0 에서 선택해야 하지만 MDS 인스턴스 생성 시 버전에 대해서 선택 할 수 없습니다.

4) MySQL 에서는 Online 으로 변경 되는 파라미터가 있지만, MDS 에서는 구성 변경시 구성을 복제 해야 하고 그것을 적용하기 위해서 재 시작을 해야 한다는 거 입니다.

5) mysql.err 과 같은 로그 파일을 볼수 있는 웹 뷰어가 제공되지 않아서 로그를 확인 할 수 없습니다.


이러한 아쉬움이 있지만 그래도 Enterprise 기능 사용할 수 있다는 점과 오라클 에서 직접 서포트 등이 이루어지고 온프레미스 MySQL 과 버전이 거의 동일하게 가져간다는 점 등이 장점이라고 볼수 있을 것 같습니다.

다음 포스팅에서는 SSH 터널링을 통한 MDS 데이터 이관 과 DR 형태로 사용할 수 있는 다른 클라우드나 IDC 와의 Replication 을 구성을 해보겠습니다.



이어지는 글




관련 된 다른 글

 

 

 

 

 

 

 

답글 남기기