Answers:
在RDS中升级实例意味着RDS会将数据库物理迁移到新实例(可能在其他物理主机上),因此停机是不可避免的。迁移到预配置的IOPS可能意味着您的数据将被迁移到新的EBS卷(并且随着这一更改,服务器也可能被迁移到新的实例,这取决于内部是否能够访问具有预配置的IOPS的EBS卷的计算机)物理上与非物理上的机器隔离开来,以便它们可以位于不同类的网络硬件上),因此停机时间将不可避免。
似乎有一种避免这种中断的方法:多可用区部署,该部署在该区域内的另一个可用性区域中创建了一个对您来说不可见和无法访问的副本。
在进行操作系统修补或数据库实例扩展之类的系统升级的情况下,这些操作首先在备用数据库上应用,然后进行自动故障转移。因此,对可用性的影响仅限于完成自动故障转移所需的时间。
尽管我还没有机会测试该功能,但这应该提供快速无缝的迁移路径。出现在控制台中的“修改”可让您将实例转换为多可用区。据推测,这将导致克隆实例时短暂的I / O冻结,因此我当然建议您在尝试所有这些功能之前先对其进行测试。
另外,RDS支持一种内部机制,该机制应允许您模拟“添加从属服务器;升级为主服务器;切换客户端”操作,这也应允许您实现接近零的停机时间转换:
http://aws.amazon.com/about-aws/whats-new/2012/10/11/amazon-rds-mysql-rr-promotion/
即使在多可用区环境中,您也会有60-120秒的停机时间。 当我从PostgreSQL db.m3.medium升级到db.m3.large的过程中反复打RDS实例时就是这种情况。
也有可能避免升级期间的任何停机时间。 为此,方法是从只读副本快照中短暂启动一个新的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_data2
M1上使用带有选项的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