同城跨可用区容灾迁移及演练

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 在阿里云上应用多可用区可以显著地降低云上管理的难度和时间成本。

分享人:七凌   阿里云智能业务支撑平台解决方案架构师

视频地址:

正文:本文从两方面来介绍同城可用区容灾迁移及演练,让大家了解这种便捷的操作。

Ÿ 最佳实践讲解

Ÿ 容灾迁移及演练


一、最佳实践讲解


1)什么是容灾


image.png

在讲容灾的时候,我们常常提及到很多相关的概念,同城、异地、容灾、双活、还有RTO和RPO,今天我们就一一讲解这些概念。

同城又有真同城和伪同城之分,真同城网络时延小于3ms,伪同城网络时延在3ms到5ms。

异地常常由于数据中心之间的地理距离太长,光纤距离大于100公里,因此往往容易产生网络抖动和时延的问题,网络请求大于10ms。

容灾,当一处系统因意外(火灾、地震等)停止工作的时候,整个应用可以切换到另一处,使得该系统功能可以继续正常工作。

双活,两个站点同时承载业务流量,可以根据用户ID、地域或者其他业务属性,决定怎么分担流量。如图所示RTO,当业务系统挂掉了,需要多长时间能够恢复RPO,当系统挂了,数据损失多少,容灾方案的核心目标就是帮助企业平衡RTO和RPO的需求,找到最佳实现的技术和手段,并从经济的角度出发,帮助企业找到总体投入(TCO)和投资回报(ROI)的最佳平衡点。


2)为什么要做容灾


它有以下几个好处:比如常常上新闻的某某光纤被挖断、某某机房突然断电、地震火灾等等,导致企业业务中断,给业务带来很大损失,甚至导致企业的倒闭,所以做容灾可以让企业在巨大的灾难中做好准备,面对各种不确定性风险的情况下,将损失降到最低。


3)容灾痛点和挑战


image.png

在传统数据中心中,企业做容灾有哪些痛点和挑战呢?

Ÿ 容灾数据中心的建设是一次性投资,成本很高,闲置比例大,投资回报低,需要耗费较多精力管理容灾软件、硬件以及他们之间的兼容性。容灾所涉及到的硬件成本往往都非常的高。

Ÿ 业务系统变化频繁,进行容灾测试的成本很高,而且生产系统变更之后,较难验证其有效性,导致容灾演练的频率很低。

Ÿ 容灾切换时需要较多的人工操作,容易出错,导致企业不敢演练。


4)容灾架构迁移-单可用区部署到多可用区容灾


image.png

在阿里云上,很多云产品自身就具备了多可用区容灾的功能,而且很多功能本身是免费的,只为使用到的存储和计算资源付费,可以大大节约容灾开支的同时,提高业务的连续性。容灾切换时的自动化可以提高效率,降低人工失误的概率,便于进行容灾演练,更好的保障RTO和RPO。

接下来我们一起看下整体的容灾架构迁移方案,此方案至少覆盖两种场景:

场景一,部署在单可用区的业务系统,可以很容易通过这套方案进行容灾架构迁移,实现多可用区容灾。左图是单可用区部署的示意图,右图是多可用区的部署示意图。

场景二,部署在线下IDC的业务系统,可以直接采用右图的多可用区部署方案,实现容灾。


5)产品技术方案-SLB


image.png

常见的负载均衡有支持四层协议的SLB也有支持七层协议的ALB,比如开源社区里面,Nginx是7层协议的典型代表,LVS是4层协议的代表,这里我们重点讲SLB,如图所示,SLB默认进行多可用区部署,正常情况下,由SLB主节点提供服务。在异常情况下,再由Slave节点提供服务,这个过程是自动切换的,用户毫无感知。

在架构设计上面,配置通路和数据通路也是分离的。通过集群部署的方式,可以实现所有链路的冗余容灾。


6)产品技术方案-ECS


image.png

云主机ECS,它本身不具备同城容灾的能力,需要将ECS部署到不同的可用区,结合前端SLB做流量分发和负载均衡,实现同城容灾。

针对无状态的应用迁移,常常有两种方案:第一,通过镜像的方式,快速地在另一个可用区进行实例的创建。第二,通过自动化脚本进行批量的部署,这种方式更高效。


7)产品技术方案-消息队列MQ


消息队列Rocket MQ,该产品除了能够保证消息事务性,在容灾方面也非常优秀,产品的稳定性和可用性完全按照阿里巴巴内部标准进行实施,没有单点。故障情况下能自动切换,用户毫无感知。


8)产品技术方案-数据库存Redis


image.png

如图所示,云Redis产品内部各节点采用多点部署,Redis产品内部各节点采用多点部署,有效地避免了单点故障。当Redis实例所在的地域有多个可用区的时候,才支持迁移可用区的功能。

可用区迁移只支持将实例迁移到同地域的其它可用区。跨地域的迁移使用全球多活的功能进行迁移,这里有几个注意事项:

Ÿ 迁移完成的时间与实例中的数据量成正比,迁移过程中实例可以继续访问,但切换过程中会有一次秒级的闪断,确保应用程序具有数据库重连机制。

Ÿ 如果实例是从经典网络切换到专有网络的,并且还保留着经典网络的连接地址,则需要等到经典网络连接地址到期释放之后才能执行可用区迁移。

Ÿ 迁移之后实例的连接地址不会改变,但VIP会发生变化,建议在业务中使用连接地址、连接实例而非其VIP地址。


9)产品技术方案-数据库存RDS


image.png

云数据库RDS高可用版支持一主一备双机热备,在迁移可用区的过程中会有大约30秒的连接闪断,请确保应用程序有自动重连机制,并将迁移操作设置在业务低峰期的时候进行。


10)容灾架构迁移-自建或他云数据库


image.png

我们可以通过阿里云的DTS产品,将自建或它云的数据库,可以将业务停服的时间分钟级别。


11)跨可用区(Zone)成本模型对比


image.png

相比于自建,跨可用区的容灾方案,在可用性、安全性、资源利用率、运维等有明显的优势。跨可用区容灾方案相比于单可用区部署,整体价格变化不大,可以说在增加少量成本的情况下,实现了同城容灾的能力。


12)跨可用区(Zone)容灾原则


image.png

结合大量客户实现容灾的案例,这里总结了跨可用区容灾的几大原则:

第一, 保证冗余。

第二, 保证对等。

第三, 保证封闭。

首先,应用的部署形态是多样的,可以是基于ECS、K8S、EDAS等,在容灾场景下,要求应用做到跨可用区的冗余部署,保证每个模块、接口或微服务在多可用区都要进行部署,保证任一个可用区的应用均可独立运行。当然,数据库存及存储类云产品除外,比如:RDS、OSS,它们可以依赖云平台能力进行多可用区容灾切换,这就是冗余和对等原则。

然后,应用系统在多可用区部署后,在进行交互的时候,尽量避免跨可用区的调用,做到本可用区的封闭,即在本可用区完成业务调用,以降低延时,特别是在微服务的场景下,服务间调用是很频繁的,但本可用区优先策略对部署、对配置会带来一些开销,因此需要权衡之后再考虑使用。

最后,在分布式系统中,采用design for failur(面向失败的设计)的方式是比较推荐的,应用需要具备探测、捕获、处理网络连接错误的能力,以应对容灾场景下的服务切换等问题,典型的案例如之前我们讲的RDS数据库,在RDS主备切换时会有秒级连接中断,应用访问RDS会出现异常,而且当RDS完成切换后,应用可能依然无法访问数据库,其主要原因是连接池持有的无效连接未被清除,导致应用程序的报错,因此应用需要具备重连重试的功能,有效处理网络或服务切换的问题。

最后重要的事情说三遍,容灾演练很重要!容灾演练很重要!容灾演练很重要!


二、容灾演练


我们将以wordpress为初始化的应用服务,大家都知道wordpress是基于PHP的CMS博客系统,我们以它作为模拟的业务系统,重点介绍单可用区到跨可用区的迁移以及切换演练,帮助大家更清晰地体验同城跨可用区容灾的方案架构,整个环节大致分为五步:

Ÿ 基于CADT工具构建基础设施,CADT这个工具是阿里云提供的云架构设计工具,可以实现一键部署功能。

Ÿ 在ECS搭建wordpress应用,通过镜像的方式,在另一个可用区快速构建wordpress应用服务,并通过SLB的方式实现应用层的高可用。

Ÿ 数据库Redis迁移将单可用区的Redis迁移到多可用区,并验证数据的高可用性。

Ÿ 数据库RDS的迁移,将单可用区的RDS迁移到多可用区,并且在迁移过程中验证数据的高可用性。

Ÿ 跨可用区切换演练以及验证。

演示:

image.png

我们打开最佳实践页面,点击一键部署,我们通过CADT的方式做快速搭建,双击VPC,选择张家口,修改VPC的配置,选已有或新购。

image.png

点开eip的配置窗口,采用按量付费的方式。

image.png

查看vswitch的配置。

image.png 

双击应用服务器,确保实例的规格和实例的密码。

image.png

打开slb配置。

image.png

选择rds,确认rds的部署方案,这里选择单可用区的部署方式。

image.png

查看kvstore的配置。

image.png

保存模版,取名为容灾演练,点击确认。

image.png

部署应用。

image.png

在这里会进行资源的验证,保证可用区有足够的资源。

image.png

得到价格清单。

image.png

进行下一步创建资源,在这个过程中,可能会花一些时间,进行资源的部署,我们可以看到资源的部署状态和资源名称,资源名称在部署成功以后是可以点击资源名称直接进入到相应的控制台,部署成功了。

image.png

image.png

image.png

依次快速检查下对应资源是否有创建成功,比如这里的eip、vpc、slb,重点看状态。

image.png

拷贝redis的链接和端口,并进行白名单的配置,把vpc的IPv4 网段 192.168.0.0/16 添加到组内白名单中。

image.png

设置密码。

image.png

对rds进行配置,状态已经是运行中。

image.png

来到详细页面,设置白名单,把vpc也加到rds白名单里面。

image.png

我们拷贝rds内网地址和端口,这些信息会用于应用的配置。

image.png

创建帐号,配置数据库文件的帐号和密码。

image.png

创建数据库,把数据库和之前的帐号进行关联。

image.png

通过workbench的方式登陆ecs。

image.png

这里提前准备好了需要下载的安装文件,比如PHP,PHP的版本是5.6.40,wordpress可以根据操作手册进行实践下载这些应用,重要的是要修改wordpress的配置文件,重要的是添加之前配置的rds信息和redis的信息,wordpress的mysql用户名和密码,redis的用户名和密码。

image.png

这里要重启一下Apache。

image.png

通过eip的方式访问wordpress,进行站点的初始化配置。

image.pngimage.png

成功后用管理帐号登陆。

image.png

点击左侧的菜单栏的插件,这里可以看到redis的状态是连接成功。

image.png

刷新一下缓存,进入设置页面,在这里是可以填写申请的域名,因为域名是需要备案的,这里就采用eip的方式进行演示。

image.png

访问网站,通过dms的方式登陆redis。

image.png

同样也可以通过dms来登陆rds数据库。

image.png

第一次登陆是要根据提示加白名单。

image.png

选择对应的数据库,打开对应的表,已经看到有很多数据了。

image.png

在其它可用区创建交换机,这个目的是想在可用区B,根据镜像的方式创建一个实例。

image.png

来到ecs的控制台,将之前配置好的ecs实例来基于它创建一个自定义的镜像。

image.png

当镜像的状态变为100%可用之后。

image.png

我们基于镜像来创建一个按量付费的ecs实例。

image.png

选自定义镜像。

image.png

进入网络的选择。

image.png

设置登陆密码。

image.png

等应用启动成功之后。

image.png

去负载均衡的控制台,再进行负载均衡的配置。

image.png

添加默认的服务器组。

image.png

默认的是100。

image.png

接下来要配置监听,监听80端口。

image.png

配置成功之后检查它的健康状态应该是正常的。

image.png

找到slb的公网地址,通过公网地址来访问网站。

image.png

接下来进行云redis的迁移,我们将单可用区变为多可用区。

image.png

我们选立即执行,会有秒级的闪断。

image.png

我们快速进行数据库rds数据库的迁移,我们将单可用区的rds实例进行多可用区的迁移,在这个迁移过程中也会有30秒的闪断。

image.png

我们先进行网站的访问,刷新下页面。

image.png

查看redis里面是否有刚刚缓存的数据,可以看到已经有文章存到多可用区redis里面去了。

image.png

快速创建一篇文章来进行rds的测试。

image.png

登陆数据库存,打开对应的表,查看rds表的数据,刚刚的文章已经被成功写入。

image.png

接下来去模拟可用区B的一个故障,把可用区的实例在负载均衡的权重调整为0,这样就不会有公网流量打到它上面。

image.png

访问我们的网站。

image.png

再创建一篇文章。

image.png

关掉在可用区B的ecs实例,来看下是否仍然提供服务,停止实例。

image.png

刷新下网站,能被正常访问到。

image.png

去rds控制台,进行主备的切换,立即切换。

image.png

状态已经变为主备库切换中。

image.png

我们快速以管理员的身份登陆。

image.png

并且试图创建一个新的用户。

image.png

用测试用户来登陆系统,这代表我们的系统仍然能提供服务,我们业务的连续性也得到了很好的验证。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 运维 容灾
容灾的架构分析和容灾选择策略
容灾的架构分析和容灾选择策略
容灾的架构分析和容灾选择策略
|
容灾 测试技术 数据库
容灾架构迁移
容灾架构迁移
|
存储 运维 容灾
阿里云跨可用区备份容灾解决方案详解
本文结合阿里云的可用区资源及功能延展了一种更新的跨可用区容灾解决方案,并选型了一款对企业来说性价比较高的产品进行分析分享,希望对大家有帮助。
|
容灾
《基于阿里云构建同城跨可用区容灾的演练runbook》电子版地址
基于阿里云构建同城跨可用区容灾的演练runbook
250 0
《基于阿里云构建同城跨可用区容灾的演练runbook》电子版地址
|
运维 容灾
《云上跨可用区容灾和异地多活》电子版地址
云上跨可用区容灾和异地多活 | 云上自动化运维CloudOps系列沙龙_第一弹
127 0
《云上跨可用区容灾和异地多活》电子版地址
|
存储 弹性计算 运维
从备份升级到容灾,利用阿里云就可以做到的灾备方案
从备份升级到容灾,利用阿里云就可以做到的灾备方案
从备份升级到容灾,利用阿里云就可以做到的灾备方案
|
运维 容灾 网络协议
阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践
结合实际业务发展趋势、业务系统的特征以及资源成本等方面综合评估,选出最适合的容灾方案
阿里云技术专家邓青琳:云上跨可用区容灾和异地多活最佳实践
|
存储 弹性计算 运维
利用阿里云实现异地容灾的解决方案
利用阿里云实现异地容灾的解决方案
利用阿里云实现异地容灾的解决方案
|
存储 弹性计算 运维
异地灾备,利用阿里云就可以实现
异地灾备,利用阿里云就可以实现
异地灾备,利用阿里云就可以实现
|
容灾 Cloud Native 测试技术
关于阿里云多活容灾的那点事
关于阿里云多活容灾的那点事
关于阿里云多活容灾的那点事

相关实验场景

更多