多AZ(Availability Zone)是云计算中一种重要的容灾和冗余策略,它通过在不同的地理位置或不同的设备上存储数据副本以及网络切换策略,以保证在单个设备或地理位置发生故障时,云加计算集群仍然能够提供服务。
多AZ的特点包括:
高可用性:
多AZ可以提高系统的可用性,因为当一个AZ发生故障时,其他AZ可以继续提供服务,避免了单点故障的风险。
数据冗余:
多AZ可以保证数据的冗余存储,即使一个AZ的数据发生丢失,也可以从其他AZ的数据副本中恢复。
容灾能力:
多AZ可以提供更好的容灾能力,当一个AZ受到自然灾害、电力故障等影响时,其他AZ可以保证服务的连续性。
多AZ的使用常见于以下场景:
数据库:
数据库是使用多AZ最多的应用之一,通过在多个AZ中存储数据副本,可以保证在任何一个AZ发生故障时,数据库仍然能够正常运行。
文件存储:
文件存储也可以使用多AZ,将文件存储在多个AZ中,可以避免文件丢失或损坏的风险。
缓存:
缓存也可以使用多AZ,将缓存数据存储在多个AZ中,可以提高缓存的可用性和可靠性。
视频直播:
视频直播需要大量的存储和传输能力,使用多AZ可以保证视频直播的稳定性和可靠性。
总之,多AZ是云计算中重要的容灾和冗余策略,可以提供更好的系统可用性和容错性。
AWS多AZ实现过程
(1)前端ELB层,
可以将ELB设置成跨多个AZ,即将需要的子网(Available Subnet)添加进ELB就行,(点击Available Subnet前面的绿色加号按钮),这个时候,每个AZ至少选择一个Subnet,ELB就可以将流量分发到不同AZ上的实例。有一点需要注意的是,ELB是将流量均分到不同AZ中的,而不会考虑哪个AZ中实例多哪个少,因此部署的时候尽量在不同AZ均匀分布计算资源。实质上,ELB服务包含多AZ后,会在不同AZ创建不同LB实例,其私网IP是不同的,access日志中能看到,只不过这些LB会使用一个统一的url(endpoint)。因此可以在Route53中将域名CNAME或者Alias到ELB的endpoint上。
(2)web server服务层,
添加到ELB中的实例,也可以均分到不同的AZ,这是一个高可用方案的基本措施。如果实例已经运行在同一个AZ中了,可以通过将线上服做成AMI(注意勾选No reboot),然后基于此AMI再在别的AZ中创建同样的实例,并加入到ELB实例组中。你可以随时将实例退出或加入ELB实例组。
(3)缓存层,
ElasticCache服务不管是Memcached还是Redis,目前都不支持Node节点跨AZ,因此需要在不同AZ中创建单独的ElasticCache实例和节点,同事需要程序代码上做点改动。允许配置多个缓存实例,例如redis-master,redis-slave。相信不久AWS就会推出自动跨AZ的ElasticCache(即统一的endpoint,可以在不同AZ创建node)。
(4)DB层,
读写分离是一个比较好的方案,一写多读,多个读实例用内网ELB做负载均衡。但是写还是单点的,建议在不同AZ创建一个热备,作为DB slave(EC2做DB的方案);如果使用RDS服务的话,就更方便一些,你可以使用跨AZ的replica(创建RDS实例的时候可以选择Multi-AZ),好像最近有添加了跨Region的"Multi-AZ",还可以使用RDS的读写分离功能,创建多个读实例,然后这些读实例可以加入到一个内网的ELB中实现负载均衡。