오라클 클라우드 MySQL Database Service (5) - MDS HA 기능 - Oracle Cloud

Share

Last Updated on 10월 3, 2022 by Jade(정현호)

안녕하세요 
이번 포스팅은 MDS 에서 업데이트된 고가용성(HA) 기능에 대해서 확인 해보도록 하겠습니다. 

이전 포스팅은 아래 링크를 확인 하시면 됩니다. 

 

              

1. Release to MDS HA

2021년 3월 31일 에 MySQL Database Service(MDS) 의 HA 의 기능이 추가 되었습니다.


단독(Standalone) 서버, 복제(Channel) , Heatwave 등은 지원 하고 있었고 이번에 고가용성(HA) 기능이 지원이 되었고 데이터가 그룹 복제로 수행되며, 3개의 Fault Domains 으로 이루어집니다.

          

2. MDS HA 생성

2-1 시스템 생성

MDS -> 생성한 구획을 지정 후 -> MySQL DB 시스템 생성 을 선택 합니다.




2-2 MDS 인스턴스의 이름 지정

사용할 MDS 인스턴스의 이름을 지정해야 합니다.




2-3 고가용성 선택 및 계정 정보

인스턴스 타입은 고가용성(HA)를 선택 하고 관리자 계정의 아이디와 패스워드를 지정 합니다.(master 라는 아이디는 포스팅에서의 예시 입니다)




2-4 네트워크 및 가용성 영역

네트워크 설정 및 가용성 도메인등을 선택 합니다. 참고로 MDS 는 외부에서 접속이 불가하고 내부에서만 접속이 가능합니다.




2-5 하드웨어 및 백업

하드웨어 구성 및 백업 구성을 선택 합니다. 




참고로 고가용성(HA) 타입의 MDS 에서 선택 할 수 있는 사양 입니다.




2-6 Endpoint 호스트명

가장 하단에 있는 고급 옵션 -> Networking  으로 이동 합니다. 옵션이지만 중요한 점은 호스트 이름 을 지정하지 않으면 Endpoint 이 설정되지 않습니다 그래서 아래와 같이 호스트 이름을 지정을 하는 것이 좋습니다.

호스트 이름까지 지정 하였다면 아래 "생성" 을 클릭하여 MDS 인스턴스를 생성 합니다.




생성이 진행되는 과정이며 CPU 와 메모리 , 저장영역 에 보면 고가용성은 3개의 인스턴스가 생성되기 때문에 DB시스템 구성 현황은 X3 이 되게 됩니다.

  • CPU1 x 3 = 합계 3
  • 메모리 인스턴스당 8G x 3 = 총 24GB
  • 저장영역 50GB x 3 = 150GB




인스턴스가 완료되면 하단의 Endpoint(끝점) 에서 Endpoint 도메인 정보와 IP 정보를 확인 할 수 있습니다.


           

3. 접속

MDS HA 도 일반 MDS 와 같이 Endpoint 나 IP 를 이용하여 접속을 하면 되며 MDS HA에서 사용되는 IP 는 Failover(Switchover) 가 되어도 계속 사용이 가능한 VIP 형태 입니다. 변경이 되지 않는 Endpoint 도메인 처럼 사용 가능한 VIP 입니다.

베스천 호스트에서 MDS 에 접속하기 위해서 네트워크 보안그룹에서 수신 규칙을 만들어줘야 합니다. 관련 된 정보는 아래의 이전 포스팅에서 확인 하시면 됩니다.


수신규칙 이 완료 되었다면 아래와 같이 베스천 호스트에서 mysql 이나 mysqlsh 등을 이용하여 MDS로 접속 할 수 있습니다.

ubuntu@mds-bastion:~$ mysqlsh -u master -p -h MDS-HA-1.xxxx.vcn.oraclevcn.com
Cannot set LC_ALL to locale en_US.UTF-8: No such file or directory
Please provide the password for 'master@MDS-HA-1.xxxx.vcn.oraclevcn.com': ************
Save password for 'master@MDS-HA-1.xxxx.vcn.oraclevcn.com'? [Y]es/[N]o/Ne[v]er (default No): Y
MySQL Shell 8.0.23

Copyright (c) 2016, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
Creating a session to 'master@MDS-HA-1.xxxx.vcn.oraclevcn.com'
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 49 (X protocol)
Server version: 8.0.23-u2-cloud MySQL Enterprise - Cloud
No default schema selected; type \use <schema> to set one.
 MySQL  MDS-HA-1.xxxx.vcn.oraclevcn.com:33060+ ssl  JS > \sql
Switching to SQL mode... Commands end with ;
 MySQL  MDS-HA-1.xxxx.vcn.oraclevcn.com:33060+ ssl  SQL > 

                 

4. Switch Over(전환)

MDS 인스턴스를 다른 Secondary(Standby) 인스턴스로 이동하는 방법은 Master 인스턴스의 장애에 의한 자동 Fail-over 나 직접적으로 전환(Switch-over) 기능을 이용하는 것 입니다.


4-1 전환 선택

전환은 MDS 인스턴스 의 리스트 항목에서 오른쪽 점3개 메뉴 -> 전환 을 선택 하여 진행 할 수 있습니다.




4-2 Fault Domain 선택

전환 시 남은 2개의 FD 중 1개를 선택 을 해야 하고 선택 후 하단의 전환을 클릭하면 다른 인스턴스로 Master Instance 가 전환되게 됩니다.




4-3 상태 업데이트

전환을 선택하면 인스턴스의 상태가 "업데이트 중" 으로 변경 됩니다. 테스트 하였을 때 콘솔 메뉴상에서는 오랫동안 업데이트 중 으로 표기되었지만 실제 MDS 인스턴스의 접속은 짧은 시간의 접속 끊김(순단) 정도 였고 바로 다른 인스턴스로 접속이 가능하였습니다.
(콘솔 에서의 상태 값의 반영이 실제 보다 느림)




• 전환 시 순단은 발생함

 MySQL  MDS-HA-1.xxxx.vcn.oraclevcn.com:33060+ ssl  SQL > select user,host from mysql.user;
ERROR: 2006: MySQL server has gone away
The global session got disconnected..
Attempting to reconnect to 'mysqlx://master@MDS-HA-1.xxxx.vcn.oraclevcn.com:33060'..
The global session was successfully reconnected.
 MySQL  MDS-HA-1.xxxx.vcn.oraclevcn.com:33060+ ssl  SQL > select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| administrator    | %         |
| master           | %         |
| ocirpl           | %         |
| ociadmin         | 127.0.0.1 |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+

               

5. HA 제약사항

MDS HA 에는 아래와 같은 제약사항이 있습니다.

• Downtime during MySQL instance upgrades. Each MySQL instance is upgraded separately.
• It is not possible to enable HeatWave clusters on a DB System with High Availability.
• It is not possible to enable Inbound Replication on a DB System with High Availability.
• It is not possible to restore a backup from a standalone DB System to a DB System with High Availability.
• It is not possible to access the secondary instances directly, using MySQL Shell, or any other such client.
• It is not possible to enable High Availability on a running DB System.
• It is not possible to edit the configuration of a DB System with High Availability.

Ref. 아래 링크에서 Current Limitations 항목 참조


이 중에서 가장 큰 제약사항이라고 생각되는 부분은 secondary instance 에 대해서 직접 적으로 접속 할수 없다는 점 입니다.

MDS HA 를 생성시 총 3개의 인스턴스가 생성되지만 2개에 대해서는 Reader Node 형태로 사용할 수 없다는 의미 입니다. 그래서 2개의 인스턴스(서버)는 장애 발생에 의한 Fail-over 나 전환시에만 사용이 가능하게 됩니다.


타사 클라우드 RDS 의 옵션 기능 중에서 Multi-AZ 와 동일하다고 생각하시면 됩니다.( Cluster 형태는 아님 )


그 외 제약사항도 사용에 대해서 고민이 되게 하는 부분이 몇가지가 있긴 합니다.

MDS 에서 가장 대표 기능인 HeatWave 를 사용할수 없습니다.




MDS HA 는 Inbound Replication 이 불가능 합니다(Slave 형태는 불가능) 이 부분은 온프레미스 의 MySQL을 클라우드 MDS 로 전환하기 위해서 Replication 을 설정하여 동기화를 진행 후 클라우드로 전환 하는 형태로 사용은 불가능 함을 의미 합니다.
다만 Master 역할은 가능 합니다(다음에서 내용이 있음)





AWS 의 Aurora Cluster 와 같이 Write 인스턴스, Reader 인스턴스 가 각각 존재하고 각각 접속을 위한 Endpoint Domain 이 지정되어 있어서 고가용성(자동 Failover + Switchover) 사용의 Cluster 는 아니며 OracleCloud MDS 는 RDS MySQL 의 Multi-AZ 와 유사(동일) 한 형태 입니다.

< AWS Aurora Cluster>

                     

6. 복제 설정

MDS HA 를 Master 로 사용하여 Replication 을 구성할 수는 있습니다. MDS HA 를 Master 로 하여 Replication 을 설정하는 것은 MDS Replication 과 동일 하며 아래의 포스팅에서 내용을 확인하시면 됩니다.



고가용성(HA)가 아닌 일반 MDS 인스턴스를 하나 생성하여 진행하였으며 MDS HA 의 백업 본을 통해서 신규 인스턴스를 생성하여 진행해도 됩니다.

포스팅에서는 MDS-Single-1 이라는 MDS 를 별도로 생성하였습니다.





그리고 채널(복제)을 설정하였고 Master(Source) MDS HA 를 지정하여 설정을 하였습니다.




• Slave 에서 복제 상태 확인

*************************** 1. row ***************************
             Replica_IO_State: Waiting for master to send event
                  Source_Host: xxxxxxxxxxxx
                  Source_User: master
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: binary-log.000021
          Read_Source_Log_Pos: 196
               Relay_Log_File: relay-log-replication_channel.000004
                Relay_Log_Pos: 413
        Relay_Source_Log_File: binary-log.000021
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
<중략>
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 196
              Relay_Log_Space: 941
              Until_Condition: None
<중략>
  Replicate_Ignore_Server_Ids: 
             Source_Server_Id: 1425877596
                  Source_UUID: 04e3f7ff-99f8-11eb-aa60-0200170102a0
             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
<중략>
           Retrieved_Gtid_Set: 26706250-25c3-4c4d-80ef-0d9be203242a:1-3
            Executed_Gtid_Set: 26706250-25c3-4c4d-80ef-0d9be203242a: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

               

7. 다운타임 시간 체크

MDS HA 는 총 3개의 인스턴스를 보유한 고가용성 솔루션으로 사용하던 DB 인스턴스가 장애시 다른 가용 영역의 Instance 로 장애조치가 되게 됩니다.

전환 기능을 통해서 사용자 임의 failover 인 switchover 를 수행할 수 있습니다.
              

전환 또는 재시작

MDS HA 에서 전환(switchover) 는 아래 이미지와 같이 "작업 더 보기" -> "전환" 메뉴에서 진행할 수 있습니다.



전환을 하였을 때 시간을 측정해보았습니다.
해당 시간은 사용하는 DB 인스턴스의 시스템 사양 및 DB 크기, 사용 현황에 따라서 달라집니다.

time: 2022-07-28 00:06:04 uptime: 70565s hostname: 2hixtywwiz0vr0aw readonly: off
time: 2022-07-28 00:06:05 uptime: 70566s hostname: 2hixtywwiz0vr0aw readonly: off
time: 2022-07-28 00:06:06 uptime: 70567s hostname: 2hixtywwiz0vr0aw readonly: off
time: 2022-07-28 00:06:07 uptime: 70568s hostname: 2hixtywwiz0vr0aw readonly: off
time: 2022-07-28 00:06:08 uptime: 70569s hostname: 2hixtywwiz0vr0aw readonly: off
<--- 이 시점에 switchover 가 수행됨
time: 2022-07-28 00:06:09 uptime: 70514s hostname: 8bgjioojqicjnpad readonly: off
time: 2022-07-28 00:06:10 uptime: 70515s hostname: 8bgjioojqicjnpad readonly: off
time: 2022-07-28 00:06:11 uptime: 70516s hostname: 8bgjioojqicjnpad readonly: off
time: 2022-07-28 00:06:12 uptime: 70517s hostname: 8bgjioojqicjnpad readonly: off


테스트 할 때마다 약간의 차이는 있었지만 1초마다 상태 체크를 하는 스크립트에서는 경우에 따라 위와 같이 1초 미만으로 switch 가 되는 것을 확인 되거나 1번 정도 접속 불가(1초) 정도로 매우 짧은 시간 switch 되는 것은 확인 하였습니다.


HA 가 아닌 Standalone 시스템에서의 재부팅의 경우는 아래 로그와 같은 정도가 소요 되는 것을 테스트 하였습니다.

## reboot : 빠르게

time: 2022-07-28 09:08:38 uptime: 27970s hostname: 7n3eusplrvjd4lhu readonly: off
time: 2022-07-28 09:08:39 uptime: 27971s hostname: 7n3eusplrvjd4lhu readonly: off
time: 2022-07-28 09:08:40         MySQL Connection Error  Downtime: 1s
time: 2022-07-28 09:08:41         MySQL Connection Error  Downtime: 2s
time: 2022-07-28 09:08:42         MySQL Connection Error  Downtime: 3s
time: 2022-07-28 09:08:43         MySQL Connection Error  Downtime: 4s
time: 2022-07-28 09:08:44         MySQL Connection Error  Downtime: 5s
time: 2022-07-28 09:08:45         MySQL Connection Error  Downtime: 6s
time: 2022-07-28 09:08:47         MySQL Connection Error  Downtime: 7s
time: 2022-07-28 09:08:48         MySQL Connection Error  Downtime: 9s
time: 2022-07-28 09:08:49         MySQL Connection Error  Downtime: 10s
time: 2022-07-28 09:08:50         MySQL Connection Error  Downtime: 11s
time: 2022-07-28 09:08:51         MySQL Connection Error  Downtime: 12s
time: 2022-07-28 09:08:52         MySQL Connection Error  Downtime: 13s
time: 2022-07-28 09:08:53         MySQL Connection Error  Downtime: 14s
time: 2022-07-28 09:08:54 uptime: 2s hostname: 7n3eusplrvjd4lhu readonly: off
time: 2022-07-28 09:08:55 uptime: 3s hostname: 7n3eusplrvjd4lhu readonly: off


## reboot : 느리기

time: 2022-07-28 09:16:11 uptime: 439s hostname: 7n3eusplrvjd4lhu version: 8.0.30-cloud readonly: off
time: 2022-07-28 09:16:12         MySQL Connection Error  Downtime: 1s
time: 2022-07-28 09:16:13         MySQL Connection Error  Downtime: 2s
time: 2022-07-28 09:16:14         MySQL Connection Error  Downtime: 3s
time: 2022-07-28 09:16:15         MySQL Connection Error  Downtime: 4s
time: 2022-07-28 09:16:16         MySQL Connection Error  Downtime: 5s
time: 2022-07-28 09:16:17         MySQL Connection Error  Downtime: 6s
time: 2022-07-28 09:16:18         MySQL Connection Error  Downtime: 7s
time: 2022-07-28 09:16:19         MySQL Connection Error  Downtime: 8s
time: 2022-07-28 09:16:20         MySQL Connection Error  Downtime: 9s
time: 2022-07-28 09:16:21         MySQL Connection Error  Downtime: 10s
time: 2022-07-28 09:16:22         MySQL Connection Error  Downtime: 11s
time: 2022-07-28 09:16:23         MySQL Connection Error  Downtime: 12s
time: 2022-07-28 09:16:24         MySQL Connection Error  Downtime: 13s
time: 2022-07-28 09:16:25         MySQL Connection Error  Downtime: 14s
time: 2022-07-28 09:16:26         MySQL Connection Error  Downtime: 15s
time: 2022-07-28 09:16:27         MySQL Connection Error  Downtime: 16s
time: 2022-07-28 09:16:28         MySQL Connection Error  Downtime: 17s
time: 2022-07-28 09:16:29         MySQL Connection Error  Downtime: 18s
time: 2022-07-28 09:16:30         MySQL Connection Error  Downtime: 19s
time: 2022-07-28 09:16:31         MySQL Connection Error  Downtime: 20s
time: 2022-07-28 09:16:32 uptime: 1s hostname: 7n3eusplrvjd4lhu version: 8.0.30-cloud readonly: off

          

버전 업그레이드

버전 업그레이드 진행 시에 전환 속도를 테스트 해보도록 하겠습니다.

버전 업그레이드는 "작업 더 보기" -> "MySQL 버전 편집" 을 선택 하시면 됩니다.




• MDS HA : 버전 업그레이드시 접속 가능 로그

time: 2022-07-28 00:11:49 uptime: 70854s hostname: 8bgjioojqicjnpad version: 8.0.29-u2-cloud readonly: off
time: 2022-07-28 00:11:50 uptime: 70855s hostname: 8bgjioojqicjnpad version: 8.0.29-u2-cloud readonly: off
time: 2022-07-28 00:11:51 uptime: 70856s hostname: 8bgjioojqicjnpad version: 8.0.29-u2-cloud readonly: off
< ... 중략 ... >
time: 2022-07-28 00:45:41 uptime: 72886s hostname: 8bgjioojqicjnpad version: 8.0.29-u2-cloud readonly: off
time: 2022-07-28 00:45:43         MySQL Connection Error  Downtime: 2s
time: 2022-07-28 00:45:45         MySQL Connection Error  Downtime: 4s
time: 2022-07-28 00:45:47         MySQL Connection Error  Downtime: 6s
time: 2022-07-28 00:45:49         MySQL Connection Error  Downtime: 8s
time: 2022-07-28 00:45:51         MySQL Connection Error  Downtime: 10s
time: 2022-07-28 00:45:53         MySQL Connection Error  Downtime: 12s
time: 2022-07-28 00:45:55         MySQL Connection Error  Downtime: 14s
time: 2022-07-28 00:45:57         MySQL Connection Error  Downtime: 16s
time: 2022-07-28 00:45:59         MySQL Connection Error  Downtime: 18s
time: 2022-07-28 00:46:01         MySQL Connection Error  Downtime: 20s
time: 2022-07-28 00:46:03         MySQL Connection Error  Downtime: 22s
time: 2022-07-28 00:46:05         MySQL Connection Error  Downtime: 24s
time: 2022-07-28 00:46:07         MySQL Connection Error  Downtime: 26s
time: 2022-07-28 00:46:09         MySQL Connection Error  Downtime: 28s
time: 2022-07-28 00:46:11         MySQL Connection Error  Downtime: 30s
time: 2022-07-28 00:46:13         MySQL Connection Error  Downtime: 32s
time: 2022-07-28 00:46:15         MySQL Connection Error  Downtime: 34s
time: 2022-07-28 00:46:17         MySQL Connection Error  Downtime: 36s
time: 2022-07-28 00:46:19         MySQL Connection Error  Downtime: 38s
time: 2022-07-28 00:46:20 uptime: 1284s hostname: pbez1x9oz3mnu7bp version: 8.0.30-cloud readonly: off
time: 2022-07-28 00:46:21 uptime: 1285s hostname: pbez1x9oz3mnu7bp version: 8.0.30-cloud readonly: off


작업시 실제로 접속이 안되는 시간은 downtime 이 약 38초 가량 소요 되었습니다.
다만 다운타임은 길지 않았으나 작업의 총 시간이 매우 긴 시간이 소요 되는 것을 테스트 하였습니다. 

00:11:49 ~ 00:46:21 까지 소요 되었으며 약 35분 가량 소요된 것을 확인 하였습니다.
실제 다운타임은 길지 않았으나 사용자가 업그레이드 완료를 누르고 완료 까지는 콘솔에서 보았을 때 더 길거라고 생각 됩니다.


MDS HA 가 아닌 Standalone 에서는 아래와 같이 시간이 소요 된 것을 확인 할 수 있었습니다.
• Standalone : 버전 업그레이드시 접속 가능 로그

-- 작업 요청 시작 시간
time: 2022-07-28 01:12:15 uptime: 5165s hostname: 1vhuskbpcpzj2c4w version: 8.0.29-u2-cloud readonly: off
... < 중략 > ...
... < 중략 > ...
time: 2022-07-28 01:22:20         MySQL Connection Error  Downtime: 218s
time: 2022-07-28 01:22:22         MySQL Connection Error  Downtime: 220s
time: 2022-07-28 01:22:24         MySQL Connection Error  Downtime: 222s
time: 2022-07-28 01:22:26         MySQL Connection Error  Downtime: 224s
time: 2022-07-28 01:22:28         MySQL Connection Error  Downtime: 226s
time: 2022-07-28 01:22:29 uptime: 1s hostname: 7n3eusplrvjd4lhu version: 8.0.30-cloud readonly: off
time: 2022-07-28 01:22:30 uptime: 2s hostname: 7n3eusplrvjd4lhu version: 8.0.30-cloud readonly: off
time: 2022-07-28 01:22:31 uptime: 3s hostname: 7n3eusplrvjd4lhu version: 8.0.30-cloud readonly: off


다운타임은 약 225초 가량 정도의 소요 되었으며 업그레이드 시작 부터 접속이 다시 재개 될 때까지는 01:12:15 ~ 01:22:31 총 10분 정도 소요 되었습니다.
          

8. Conclusion

MDS HA 는 일반적인 MDS Replication(채널 구성) 상황에서 Master 인스턴스의 장애 발생시  FailOver 등의 기능 지원으로 가용성을 높이기 위해 나온 서비스 입니다.

다만 많은 제약사항이 존재하나 RDS Multi-AZ 처럼 가장 중요한 Switchover 나 Failover 는 매우 빠르게 동작하는 것으로 테스트 되었습니다. 

장애가 발생시 빠른 장애조치가 가능해서 업무 영속성에 도움이 될 거라고 생각하고 테스트로 확인 한 것처럼, 버전 업그레이드 시 Standalone 에 비해서 다운타임을 조금 더 짧게 소요 될 수 있는 장점이 있는 것으로 확인 되어 가용성 측면에서 도움이 될 것이라고 생각 됩니다.



관련된 다른 글

 

 

 

 

 

 

 

 

           

2
0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x