升级生产RDS实例的最佳方法是什么?


33

我将MySQL小型RDS实例作为生产系统的一部分,我想通过提供的IOPS将其升级到中等实例。

作为老式的DBA,我知道“添加从属;升级为主控;切换客户端”方法,但是AWS承诺提供神奇的一键式升级路径,即“升级实例”,“添加提供的IOPS”。

在测试RDS实例上对此进行了尝试,停机时间过长,恕我直言:中小型升级大约需要5分钟,切换到提供的IOPS大约需要30分钟(!!!)。

  • 这是正常行为吗?
  • 有什么方法可以在不停机的情况下在生产RDS上运行升级吗?
  • 您是否建议采用“停止;创建快照;从快照还原到更大的实例”的方式?

Answers:


37

在RDS中升级实例意味着RDS会将数据库物理迁移到新实例(可能在其他物理主机上),因此停机是不可避免的。迁移到预配置的IOPS可能意味着您的数据将被迁移到新的EBS卷(并且随着这一更改,服务器也可能被迁移到新的实例,这取决于内部是否能够访问具有预配置的IOPS的EBS卷的计算机)物理上与非物理上的机器隔离开来,以便它们可以位于不同类的网络硬件上),因此停机时间将不可避免。

似乎有一种避免这种中断的方法:多可用区部署,该部署在该区域内的另一个可用性区域中创建了一个对您来说不可见和无法访问的副本。

在进行操作系统修补或数据库实例扩展之类的系统升级的情况下,这些操作首先在备用数据库上应用,然后进行自动故障转移。因此,对可用性的影响仅限于完成自动故障转移所需的时间。

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

尽管我还没有机会测试该功能,但这应该提供快速无缝的迁移路径。出现在控制台中的“修改”可让您将实例转换为多可用区。据推测,这将导致克隆实例时短暂的I / O冻结,因此我当然建议您在尝试所有这些功能之前先对其进行测试。

另外,RDS支持一种内部机制,该机制应允许您模拟“添加从属服务器;升级为主服务器;切换客户端”操作,这也应允许您实现接近零的停机时间转换:

  • 使用所需的实例类创建数据库的实际RDS只读副本
  • 等待副本联机并与主副本同步
  • 修改副本的配置以添加预配置的IOPS
  • 等待副本联机并与主副本同步
  • 使用第三方工具验证两个系统的数据是否相同
  • 断开您的应用程序与旧主机的连接
  • 验证主数据库和副本数据库上匹配的二进制日志坐标,以确保所有应用程序写入均已复制
  • 在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以来,我已经在近四年的时间里学到了很多东西(!?)。我将进行编辑。
Michael-sqlbot

我将在周一的Production上执行此操作,因此可能需要添加一些内容。我将基本上将副本更改为可读写,然后将所有服务指向该副本,然后将其升级。
Mahmoud Khateeb

使用RDS的@MahmoudKhateeb,当您升级副本时,与主服务器的连接将永久断开。您不能再回到将旧的母版用作母版了。旧的副本现在是主副本,必须保持这种方式。现在,创建现有副本的副本(RDS支持级联)...然后根据需要升级新副本和旧副本...然后开始使用新副本作为生产副本...然后升级原始副本并开始将其用作新的母版。丢掉老主人。
Michael-sqlbot


2

也有可能避免升级期间的任何停机时间。 为此,方法是从只读副本快照中短暂启动一个新的RDS,并将其配置为主动/主动主服务器到主服务器的复制。配置完成后,您可以一次将应用程序流量切换到一台APP服务器,而无需停机。每当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以从中获得M1二进制日志位置。然后从R1创建快照(SNAP1),然后从SNAP1启动M2。

  • 创建两个具有以下偏移量的RDS参数组,以避免PK冲突:

    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

  • 将参数组分配给M2,使其与M1具有不同的auto_increment_偏移量,以避免M / M复制键冲突

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服务器的方式来进行数据库维护,而不会造成停机。

以下是有关其工作原理的更多详细信息。

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


1

这将起作用,但是您必须确保在您的应用程序中未将RDS实例的端点配置为静态条目。交换RDS将更改端点。


1
请给您的答案更多内容,例如一些参考来支持您的答案和/或扩展推理。
Erik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.