Multi-AZ DB Instance Failover

在第一节我们创建RDS数据库时,选择了Multi-AZ DB Instance的方式。除了创建primary库,还会创建一个standby库,这个standby库平时不抗流量,仅在primary库发生故障时自动failover, 而且failover后endpiont不变,程序自动连接无需手动干预:

image-20231105071151998

本节我们就介绍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:

image-20231104145817534

当然也可以用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

image-20231104150017043

为Failover 事件创建事件订阅

为了及时收到failover事件,RDS支持事件订阅。在控制台上点击Create event subscription

image-20231104150104995

提前创建好一个SNS主题,以邮件方式接收事件通知:

image-20231104150611418

Source选择rds-pg-labs实例,事件类型选择failover:

image-20231104150233763

最后点击创建事件订阅

执行failover

RDS 为客户提供了一个选项来模拟可用区故障,方法是提供Failover选项来重新启动 Postgres 实例。 此选项将启动实例的AZ级别failover,辅助可用区上的stand by实例将成为primary,而primary所在可用区上的实例将成为新的stand by实例。

在RDS控制台,选中rds-pg-labs数据库,点击Reboot

image-20231104150740701

选择Reboot With Failover并确认重启:

image-20231104150755397

在RDS的Log & events页面,也能看到failover的事件:

image-20231104151338204

在Cloud 9的控制台上,能看到中间连接的数据库的IP发生了变化,并在数据库发生failover时有连接不上的提示:

image-20231104151423333

同时也会收到几封邮件,分别代表开始发生failover以及完成failover过程:

image-20231104151547456