Amazon RDS 多可用区实例部署为 RDS实例提供了增强的可用性和持久性。当我们配置多可用区 DB 实例时,Amazon RDS 会自动创建一个主 DB 实例,并将数据同步复制到另一个可用区(AZ)中的备用实例。每个可用区都在自己的物理上独立、独立的基础设施上运行,并经过高度可靠的设计。如果发生基础设施故障,Amazon RDS 会自动进行故障转移到备用实例,以便我们可以在故障转移完成后立即恢复数据库操作。由于我们的 DB 实例的端点在故障转移后保持不变,因此我们的应用程序可以在无需手动管理干预的情况下恢复数据库操作。更多详细信息可以在这里 查看。
在第一节我们创建RDS数据库时,选择了Multi-AZ DB Instance
的方式。除了创建primary库,还会创建一个standby库,这个standby库平时不抗流量,仅在primary库发生故障时自动failover, 而且failover后endpiont不变,程序自动连接无需手动干预:
本节我们就介绍Multi-AZ DB Instance
的Failover。RDS
为客户提供了一个选项来模拟可用区故障,方法是提供Failover
选项,重新启动 Postgres 实例。 此选项将启动实例的AZ级别failover,辅助可用区上的stand by
实例将成为primary,而primary
所在可用区上的实例将成为新的stand by实例。
首先在Configuration
中确认RDS已经开启Multi-AZ,可以看到standby节点是在us-west-2a
,和primary分布在不同的AZ:
当然也可以用CLI来确认是否开启multi-az
:
AWSREGION=`aws configure get region`
aws rds describe-db-instances \
--db-instance-identifier rds-pg-labs \
--query 'DBInstances[].MultiAZ' \
--output text \
--region $AWSREGION
在Cloud 9终端窗口中,输入并运行以下命令, 每隔 10 秒展示一次与数据库的连接:
while true;
do
psql pglab -c 'select now() ,inet_server_addr(), pg_postmaster_start_time() ';
echo -e "\n\n"
sleep 10
done
为了及时收到failover事件,RDS支持事件订阅。在控制台上点击Create event subscription
:
提前创建好一个SNS主题,以邮件方式接收事件通知:
Source选择rds-pg-labs
实例,事件类型选择failover
:
最后点击创建事件订阅
RDS
为客户提供了一个选项来模拟可用区故障,方法是提供Failover
选项来重新启动 Postgres 实例。 此选项将启动实例的AZ级别failover,辅助可用区上的stand by
实例将成为primary,而primary
所在可用区上的实例将成为新的stand by实例。
在RDS控制台,选中rds-pg-labs
数据库,点击Reboot
:
选择Reboot With Failover
并确认重启:
在RDS的Log & events
页面,也能看到failover的事件:
在Cloud 9的控制台上,能看到中间连接的数据库的IP发生了变化,并在数据库发生failover时有连接不上的提示:
同时也会收到几封邮件,分别代表开始发生failover以及完成failover过程: