프로덕션 RDS 인스턴스를 업그레이드하는 가장 좋은 방법은 무엇입니까?


32

프로덕션 시스템의 일부로 MySQL 소형 RDS 인스턴스가 있으며 제공된 IOPS를 사용하여 중간 인스턴스로 업그레이드하고 싶습니다.

구식 DBA로서 저는 "슬레이브 추가, 마스터로 승격; 클라이언트 전환"방법에 대해 알고 있지만 AWS는 마법의 원 클릭 업그레이드 경로 (예 : "업그레이드 인스턴스", "제공된 IOPS")를 제공 할 것을 약속합니다.

테스트 RDS 인스턴스에서 시도한 가동 중지 시간이 너무 깁니다. IMHO : 중소형 업그레이드의 경우 약 5 분, 제공된 IOPS로 전환하는 경우 30 분 (!!!).

  • 이것이 정상적인 행동입니까?
  • 다운 타임없이 프로덕션 RDS에서 업그레이드를 실행할 수있는 방법이 있습니까?
  • "중지, 스냅 샷 생성, 스냅 샷에서 더 큰 인스턴스로 복원"방법을 권장합니까?

답변:


37

RDS에서 인스턴스를 업그레이드한다는 것은 RDS가 데이터베이스를 물리적으로 다른 물리적 호스트에서 새로운 인스턴스로 물리적으로 마이그레이션하므로 다운 타임을 피할 수 없다는 것을 의미합니다. 프로비저닝 된 IOPS로 마이그레이션하면 데이터가 새로운 EBS 볼륨으로 마이그레이션 될 것입니다 (그리고 내부적으로 프로비저닝 된 IOPS로 EBS 볼륨에 액세스 할 수있는 머신이 그렇지 않은 시스템과 물리적으로 분리되어 다른 종류의 네트워크 하드웨어에있을 수 있으므로 다운 타임을 다시 피할 수 없습니다.

이 중단을 피할 수있는 방법이 있습니다. 다중 AZ 배포 : 리전 내의 다른 가용 영역에 보이지 않고 액세스 할 수없는 (사용자에게) 복제본을 만듭니다.

OS 패치 또는 DB 인스턴스 스케일링과 같은 시스템 업그레이드의 경우 이러한 작업은 자동 장애 조치 전에 대기에서 먼저 적용됩니다. 결과적으로, 가용성 영향은 자동 장애 조치가 완료되는 데 필요한 시간으로 만 제한됩니다.

http://aws.amazon.com/rds/multi-az/

해야 내가이 기능을 테스트 할 기회가 없었어요 불구하고, 신속하고 원활한 마이그레이션 경로를 제공한다. 콘솔의 "수정"은 인스턴스를 다중 AZ로 변환 할 수 있도록 나타납니다. 아마도 인스턴스가 복제 될 때 I / O가 일시 정지 될 수 있으므로이 기능을 모두 테스트하기 전에 테스트하는 것이 좋습니다.

또는 RDS는 "슬레이브 추가; 마스터로 승격; 클라이언트 전환"작업을 에뮬레이션 할 수 있도록하는 내부 메커니즘을 지원하며, 거의 0에 가까운 다운 타임 변환을 달성 할 수 있어야합니다.

  • 원하는 인스턴스 클래스로 데이터베이스의 실제 RDS 읽기 전용 복제본 생성
  • 복제본이 온라인 상태가되어 마스터와 동기화 될 때까지 기다립니다.
  • 프로비저닝 된 IOPS를 추가하도록 복제본 구성 수정
  • 복제본이 온라인 상태가되어 마스터와 동기화 될 때까지 기다립니다.
  • 타사 도구를 사용하여 두 시스템의 데이터가 동일한 지 확인
  • 이전 마스터에서 애플리케이션 연결 끊기
  • 마스터 및 복제본에서 일치하는 binlog 좌표를 확인하여 모든 애플리케이션 쓰기가 복제되었는지 확인하십시오.
  • RDS의 새 복제본에서 "프로모션 읽기 복제본"으로 시스템을 분할하십시오.
  • 응용 프로그램을 새로운 마스터에 연결

http://aws.amazon.com/about-aws/whats-new/2012/10/11/amazon-rds-mysql-rr-promotion/


마이클, 자세한 답변 감사합니다! Vitaly
Vitaly

읽기 전용 복제본을 마스터로 승격 시키면 다운 타임이 발생합니다 (인스턴스를보고해야 함) WATCH OUT!
Mahmoud Khateeb

@MahmoudKhateeb 감사합니다. 맞아요. 이것이 필요한 기술적 이유는 없지만 RDS는 인스턴스를 마스터로 승격 할 때 인스턴스를 재부팅합니다. 실제로 RDS가 처음 작성된 이후 거의 4 년 (!?) 동안 RDS의 작동 방식에 대해 더 많이 배웠습니다. 편집하겠습니다.
Michael-sqlbot

월요일에 프로덕션 에서이 작업을 수행하고 있으므로 추가해야 할 것이 있습니다. 기본적으로 복제본을 읽기 / 쓰기로 변경 한 다음 모든 서비스를 가리켜 서 마스터를 업그레이드합니다.
Mahmoud Khateeb

RDS가 ​​포함 된 @MahmoudKhateeb, 복제본을 승격하면 마스터에 대한 연결이 영구적으로 끊어집니다. 이전 마스터를 다시 마스터로 사용하여 다시 돌아갈 수 없습니다. 이전 복제본은 이제 마스터이므로 그대로 유지해야합니다. 이제 기존 복제본의 복제본을 작성하십시오 (RDS는 계단식을 지원함). 필요에 따라 새 복제본과 이전 복제본을 업그레이드 한 다음 새 복제본을 프로덕션 복제본으로 사용을 시작한 다음 원래 복제본 승격 새로운 마스터로 사용하기 시작합니다. 옛 주인을 버리고
Michael-sqlbot


2

업그레이드 중에 다운 타임을 피하는 것도 가능합니다. 이를 수행하는 방법은 읽기 전용 복제본 스냅 샷에서 새 RDS를 잠깐 시작하여 활성 / 활성 마스터-마스터 복제로 구성하는 것입니다. 일단 구성되면 다운 타임없이 한 번에 하나의 APP 서버로 애플리케이션 트래픽을 전환 할 수 있습니다. AWS는 예정된 유지 관리 중뿐만 아니라 다운 타임을 피하기 위해 AWS가 RDS 유지 관리를 발표 할 때마다이 방법을 사용합니다.

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2

세부 사항은 다음과 같습니다.

M1- 오리 그널 마스터

R1 -M1의 읽기 전용 복제본

SNAP1 -R1의 스냅 샷

M2- 새로운 마스터

M2 생성 순서 : M1 → R1 → SNAP1 → M2

  • RDS에 대해 SUPER 권한을 사용할 수 없으므로 — master_data2M1 에서 옵션 과 함께 mysqldump를 사용하지 않습니다 . 대신 R1을 시작 하여 M1binlog 위치 를 얻 습니다. 그런 다음 R1에서 스냅 샷 (SNAP1)을 생성 한 다음 SNAP1에서 M2를 시작하십시오.

  • PK 충돌을 피하기 위해 다음 오프셋으로 두 개의 별도 RDS 파라미터 그룹을 만듭니다.

    M1: auto_increment_ increment = 4 and auto_increment_offset = 1

    M2: auto_increment_ increment = 4 and auto_increment_offset = 2

  • M1에서 복제 사용자 생성

    GRANT EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘repl’@’%’ IDENTIFIED BY PASSWORD <secret>;

1. M1에서 R1 생성

-- Connect to the R1 and stop replication
   CALL mysql.rds_stop_replication;
-- Obtain M1’s (!!) current binlog file and position 
        `mysql> show slave status\G
             Master_Log_File: mysql-bin.000622
             Exec_Master_Log_Pos: 9135555

2. R1에서 SNAP1 생성

  • M1에서 얻은 속성으로 SNAP1에서 M2를 작성하십시오.

  • M / M 복제 키 충돌을 피하기 위해 M1과 다른 auto_increment_ 오프셋을 사용하여 M2에 파라미터 그룹을 할당

4. M / M 복제 설정

-- Configure M2 as a slave of M1
CALL mysql.rds_set_external_master (‘m1.xyxy24.us-east-1.rds.amazonaws.com’, 3306, repl’, mypassword’, mysql-bin.000622, 9135555, 0);
CALL mysql.rds_start_replication;
-- Connect to M2 and obtain its current binlog file and position
         mysql> show master status\G
            File: mysql-bin.004444
            Position: 6666622
-- Connect to M1 and configure it to be a slave of the M2
CALL mysql.rds_set_external_master (‘m2.xyxy24.us-east-1.rds.amazonaws.com’, 3306 , repl’, mypassword’, mysql-bin.004444, 6666622, 0);
CALL mysql.rds_start_replication;

5. R1 및 SNAP1은 더 이상 필요하지 않으므로 삭제하십시오.

6. AWS 콘솔을 통해 M2 업그레이드

표준 절차에 따라 필요에 따라 인스턴스를 수정하십시오.

7. M2 로의 원활한 전환 수행

M / M 복제가 성공적으로 설정되면 App 서버를 한 번에 하나씩 정상적으로 전환하여 다운 타임없이 DB 유지 관리를 진행할 수 있습니다.

작동 방식에 대한 자세한 내용은 다음과 같습니다.

https://workmarket.tech/zero-downtime-maintenances-on-mysql-rds-ba13b51103c2


1

이것은 작동하지만 RDS 인스턴스의 엔드 포인트가 애플리케이션에서 정적 항목으로 구성되어 있지 않은지 확인해야합니다. RDS를 교환하면 엔드 포인트가 변경됩니다.


1
답변 및 / 또는 확장 된 추론을 뒷받침하는 참고 자료와 같이 답변에 더 많은 내용을 적어주십시오.
Erik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.