开发者社区> 技术小达人> 正文

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

简介: 在阿里云上应用多可用区可以显著地降低云上管理的难度和时间成本。
+关注继续查看

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

视频地址:

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

Ÿ 最佳实践讲解

Ÿ 容灾迁移及演练


一、最佳实践讲解


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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
13869 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
13804 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18470 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
24976 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20203 0
云原生趋势下的迁移与容灾思考
2020年9月,Snowflake以每股120美金IPO,创造了今年规模最大的IPO,也是有史以来最大的软件IPO。Snowflake利用云原生方式重构了数据仓库,成功颠覆了行业竞争格局。这正是市场对云原生发展趋势的最佳认可,所以下一个云原生颠覆的领域会不会是在传统的容灾领域呢?
3014 0
容灾渐进式云迁移
本文主要介绍基于容灾演练的理念,利用渐进式云迁移的思路和方法,将一部分调研工作后置,解决在上云前调研中的难点,通过构建”仿真“环境,在实践中完成调研中最困难的部分,加速云迁移的过程。
61 0
同城跨可用区容灾迁移及演练
使用阿里云少量增加成本实现云上客户单可用区到双可用区的迁移/包含切换及演练优化
596 0
977
文章
0
问答
来源圈子
更多
阿里云最佳实践,是基于众多客户上云的成功案例萃取而成的最优化企业上云指导。每个最佳实践包括使用场景、多产品部署架构及部署手册。帮助客户更好地理解阿里云的产品和解决方案,降低企业上云门槛的同时满足客户自服务的需求。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载