在第一节我们创建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过程: