简介: RDS的高可用外围---Aurora
阿里云关系型数据库RDS是一种稳固牢靠、可弹性伸缩的在线数据库服务。
阿里云关系型数据库RDS基于阿里云分布式文件系统和高性能存储,提供了容灾、备份、复原、监控、迁徙等方面的全套解决方案,彻底解决数据库运维的懊恼。
那么,为了确保数据库的高可用性,RDS管控如何进行保障的呢?
1.RDS的高可用性能
首先从整体架构来看,RDS分为以下三种架构和容灾形式。
1.1 主备架构
RDS实例采纳主备架构,两个实例位于不同服务器,主动同步数据。主实例不可用时,零碎会主动将数据库连贯切换至备实例。
1.2 同城容灾
在不同可用区部署主备实例,独立的电力、网络环境可晋升数据可靠性。
1.3 异地容灾
RDS MySQL反对创立异地灾备实例,通过数据传输实现异地数据实时同步,在突发状况下,用户可将异地灾备实例切换为主实例,保障业务可用性。
2. RDS的高可用外围Aurora
RDS的高可用外围是Aurora服务,Aurora是RDS HA服务的代码实现,是以集群形式部署的分布式服务。一个region部署一套Aurora集群,每个机房大略3-5个Aurora实例。总数大略20左右,其中一个实例为leader(JGroup选举得出),其它为follower。leader和follower实质上是雷同的服务过程,只是选举后leader不仅具备follower的性能,还负责零碎元数据的治理及HA工作散发。
2.1 aurora的管控架构
Aurora
该服务负责对metaDB中的信息进行保护,对托管于aurora的实例进行诊断。针对诊断后果异样的实例进行修复。
修复工作依赖备库状况,如果想要确保高可用失常,那么备库的状态至关重要。确保同步状态失常之外,还要确保主备提早在60S之内,能力确保修复工作失常进行。
作为RDS产品高可用外围的aurora服务,具备探测(Diagnose)、决策(decision)、修复(treat)的性能。
Fireman
该服务是aurora的agent节点,部署在数据库物理机中。次要配合aurora修复工作,实现aurora下发的命令,如重启实例、kill过程、设置只读等。
2.2 HA切换的流程架构
aurora服务每15秒探测一次已托管实例的衰弱状态(创立实例之后主动托管于aurora)。下发checkMaster工作。
- 如果探测胜利,则进入决策阶段,期待下一次探测工作。
- 如果探测不胜利,则继续执行checkMaster工作,如果间断三次探测失败,则进入决策阶段,进行failover。
进入决策阶段之后首先确定HA切换起因,确定起因之后进入修复阶段,进行HA切换修复。
修复阶段首先申请SLB确定backend绑定的物理IP,确定为主库的IP和端口。通过主库的IP找到对应的备库的IP和端口。并确定备库的同步状态和主备提早大小和磁盘空间是否合乎切换条件。
- 如果确认胜利,则进行下一步。
- 如果确认失败,则退出。
杀掉备库的所有过程,之后再次试探主库是否能够连贯。
- 如果能够连贯,须要杀掉主库的所有线程,或者进行MySQL过程。确保没有新的连贯产生。
- 如果不能够连贯,则持续下一步。
确认备库与主库的心跳时间差。
- 如果大于60s,则退出。
- 如果小于60s,则持续。
前置查看胜利之后开始正式修复工作。修复详情如下:
2.3 探测
Diagnose
开启诊断:diagnose started
根据SLB链路上的IP确定以后主库,在主库执行心跳查看SQL:
connection_timeout=15,squery_timeout=15s
SET sql_log_bin = 1;/* rds internal mark */ INSERT INTO mysql.ha_health_check (id, type)VALUES (${以后工夫戳}, 'm')ON DUPLICATE KEY UPDATE id = ${以后工夫戳};/* rds internal mark */ DELETE FROM mysql.ha_health_check WHERE id <${以后工夫戳} AND type = 'm';
CheckMaster
第一次查看,如果胜利,则间接进行决策,如不胜利进行第二次查看。
CheckMaster
第二次查看,如果胜利,则间接进行决策,如不胜利进行第三次查看。
CheckMaster
第三次查看,如果胜利,则间接进行决策,如不胜利进行故障决策。
2.4 决策
2.4.1 SetHaReason
依据连贯报错设置HA切换类型。
MASTER_DOWN
如果有相似"Connection refused"的网络不通错误信息,即为网络不通。将切换起因设置为MASTER_DOWN。
CONNECTION_TIMEOUT
如果有相似"Connection timed out"的连贯超时,即为连贯超时。将切换起因设置为CONNECTION_TIMEOUT。
TCP_TIMEOUT
是否连贯失常,但读超时。如果有"Read timed out"错误信息,即为读超时。
执行如下sql,如果1执行有异样,或者2返回“是否大于1000”,均视为IO Hang, 将切换起因设置为TCP_TIMEOUT。
1.SELECT id FROM mysql.ha_health_check WHERE type = 'm'2.SELECT max(max_time) FROM information_schema.INNODB_IO_STATUSMASTER_HANG
如果有相似"MySQLTimeoutException.class"的报错,则将切换起因设置为MASTER_HANG。
2.4.2 Failover
开启修复。
2.5 修复
RefreshCurrentBackend
通过申请SLB,失去后端IP,端口,ins_id.
FindTargetSlave
所有备库节点进行如下查问操作,条件从上至下,合乎多的优先。
show slave statue;
查看主备提早,不能超过60s。1. show slave status 有返回2. Master_Log_File最大3. Read_Master_Log_Pos最大
查看指标备库磁盘空间,是否满(95%)。
设置指标备库为只读。
执行如下命令:
show global variables like 'read_only'
如果返回非“ON”,则执行如下命令:
set global read_only = ON
KillTargetProcess
kill备库所有连贯。
BackendConnectable
探测主库是否可连贯。
如果不可连贯,持续下一阶段。
如果可连,执行如下操作。
1.kill原主库的客户端连贯。
2.将其设置为只读。
- 胜利:再次kill主库的客户端连贯, 以确保原主不会再有写入操作。
- 失败:Kill原主库上的MySQL过程,以确保原主不会再有写入操作。
3.放大sync_binlog: set global sync_binlog = 1000
4.敞开event: set global event_scheduler = OFF
5.期待备库同步,如果同步失败,退出,回滚将主库设为读写状态。
show global variables like rds_rpl_double_sync_enabled 如果有返回就执行1, 否则2
1 select master_pos_wait('${file}', ${pos}, ${timeout});
2 select master_pos_wait('${file}', ${pos}, ${timeout}, '')
其中file, pos是后面show status返回的Master_Log_File, Read_Master_Log_Pos
如果SQL返回第1列后果是空,或者是-1,都认为同步失败。
CheckTimestampDelta
探测heartbeat on master,slave
SELECT id FROM mysql.ha_health_checkWHERE type ='m'
SELECT id FROM mysql.ha_health_checkWHERE type ='s'
比照ID转化的工夫戳是否差距在60s之内。
TransferApplyBinlog
给备库主机上的fireman过程下发申请,获取日志信息。
LogMasterSlaveStatus
查看slave status。
ChangeBackend
申请SLB,更换backend for vip。
更换backend,从主库IP:端口,更改为备库IP:端口。
KillBackendProcess
杀死原主库上的过程。
MaintainMetadata
批改dbaas库的instance_stat表中的主备关系。
KeepTargetReadWrite
给新主库的fireman过程下发申请,新主库执行如下命令,敞开只读。
set read_only OFF
ReduceTargetSyncBinlog
减小sync_binlog参数。
新主库执行如下命令:
set sync_binlog =1
OpenTargetEventScheduler
关上event_scheduler参数。
新主库执行如下命令:
set event_scheduler = 'ON'
FireChangeMasterTask
开启change master for readonly instance工作。
StartupBackend
给新备库的fireman过程下发申请,开启备库过程。
原文链接
本文为阿里云原创内容,未经容许不得转载。