部署高可用及共享存储Web服务
随着业务规模的增长,数据请求和并发访问量增大、静态文件高频变更,企业需要搭建一个高可用和共享存储的网站架构,以确保网站服务能够7*24小时运行的同时,可保障数据一致性和共享性,并降低数据重复存储的成本。
一、方案架构
方案提供的默认设置完成部署后在阿里云上搭建的高可用及共享存储Web服务运行环境如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。
本方案的技术架构包括以下基础设施和云服务:
1个专有网络VPC:为负载均衡CLB、云服务器ECS、文件存储NAS等云资源形成云上私有网络。
2台交换机:将2台云服务器ECS连接在同一网络上,实现它们之间的通信,并提供基本的网络分段和隔离功能。
2台云服务器ECS:同地域不同可用区的2台ECS,组成一个高性能和高可用的后端服务。
1个公网负载均衡CLB:基于对流量按需分发的能力,可以将流量分发到不同的后端服务器,可消除系统中的单点故障,当某个服务器发生故障时,CLB会自动将请求分配到其他正常的服务器上,从而保证服务的连续性和稳定性。
2个文件存储NAS:实现多个Web服务器之间的数据共享和同步,确保数据的一致性。同时通过自动化脚本、inotify-tools和sync工具,实现主备NAS自动增量备份和主备自动切换。
二、方案部署
手动部署
您可参考以下步骤,手动部署高可用及共享存储Web服务:
1、(可选)步骤一:创建ECS实例并部署Web服务
重要
如果您已创建ECS实例并配置Web服务,可跳过该步骤,直接执行下一步。
本步骤以操作系统Alibaba Cloud Linux 3为例,指导您如何部署Web服务,其他操作系统教程略有差异。更多建站教程,请参见建站零基础入门。
前往实例创建页,选择自定义购买页签,按界面提示创建一个ECS实例(假设为ECS_01)。
请注意以下参数:
付费类型:抢占式实例。
重要
为节省测试成本,本文示例采用抢占式实例,相对按量付费实例有一定的折扣。默认情况,您可以稳定持有抢占式实例至少一小时。一小时后,当市场价格高于您的出价或实例库存不足时,抢占式实例会被自动释放,请做好数据备份工作。
如果您需要长期稳定持有ECS实例,付费类型建议选择包年包月或按量付费。
地域:建议选择靠近您业务的地域,本文示例为华东1(杭州)。
镜像:Alibaba Cloud Linux 3。
公网 IP:勾选分配公网 IPv4 地址。
安全组:新建普通安全组,IPv4端口开通22、80端口。
登录凭证:选择自定义密码,登录名选择
ecs-user
并设置登录密码。高级选项-资源组:选择
高可用测试资源组
。
其他按需配置,详细说明,请参见自定义购买实例。
部署Web服务。
远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例。
执行以下命令,安装Nginx。
sudo yum -y install nginx
下载网站示例代码和图片文件。
以下文件仅为示例,供学习体验使用,您也可以替换为自定义文件。
sudo wget -O /usr/share/nginx/html/index.html https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20231013/jhgg/index.html sudo wget -O /usr/share/nginx/html/lipstick.png https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20230925/zevs/lipstick.png
执行以下命令,启动Nginx并设置开机自启动。
sudo systemctl start nginx sudo systemctl enable nginx
在浏览器输入ECS实例的公网服务地址(例如
http://123.1.XX.XX
),可正常访问网站服务,表示Web服务部署成功。
2、步骤二:部署NAS实现共享存储和NAS容灾
本方案通过NAS实现共享存储。同时基于inotify-tools和rsyn实现:
主备增量备份(Master -> Backup):Master NAS有数据变化时,自动同步到Backup NAS。
主备切换:自动检测Master NAS是否可用,若可用则使用Master NAS,否则自动切换到备用NAS;Master NAS恢复后,自动切换回Master NAS。
重要
当前NAS容灾备份方案是一个最简单的示例和基本思路,还存在一些局限性,需要用户您结合自身业务去做一些完善和补充。
例如,当前NAS容灾备份方案是单向的(Master -> Backup),在真实的业务场景中,如果文件不只是读,还有写操作的情况下,Master NAS出现故障后,需要结合自身业务做一些额外的策略:
如果对于写的可用性要求不高,可以在切换到Backup NAS时,禁止写入文件。
如果对于写有可用性要求,那么在Master NAS故障恢复后,不应该立即将 ECS 应用的操作文件目录切换到Master NAS的挂载点目录上,应该先将故障期间,Backup NAS上产生的新文件,同步到Master NAS之后,再做切换,并且要确保切切换期间,Backup NAS上不要产生文件变更,或者产生的文件变更也能同步到Master NAS中。
请确保待挂载的实例状态均为运行中。
登录NAS控制台。
在左侧导航栏,选择文件系统>文件系统列表。
创建2个不同可用区的文件存储NAS。
创建一个文件系统作为Master NAS存储。
单击创建文件系统,选择通用型NAS并单击创建通用型NAS。NAS文件系统需满足以下要求(详细参数说明,请参见创建文件系统):
地域:需与ECS实例在相同地域(例如,华东1 杭州)
可用区:华东1 可用区F
存储规格:容量型
协议类型:NFS
VPC:需与ECS实例在同一个VPC
重复步骤a,创建另一个NAS(与Master NAS在不同可用区,例如华东1 可用区K),作为Backup NAS。
将2个文件系统NAS均挂载到ECS实例上。
假设Master NAS挂载路径为
/nas_master
,Backup NAS的挂载路径为/nas_backup
。在文件系统列表,单击操作列的挂载。
按照界面提示完成挂载。
请注意以下配置项,其他参数按需设置,参数详细说明,请参见通过控制台实现ECS实例一键挂载文件系统。
重复步骤a~c,将另一个文件系统挂载至ECS实例上(挂载路径为
/nas_backup
)。
将需要共享的文件挪到NAS的挂载路径下,挪动后文件将存储在主NAS上(
/nas_master
)。远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例。
将需要共享的文件,移动到NAS中存储。
sudo cp -Lvr <待共享文件的绝对路径> <NAS文件系统的挂载路径>
示例:将网站服务前端的html文件夹及其文件(路径为/usr/share/nginx/html),改存储到NAS里(挂载路径为
/nas_master
)。sudo cp -Lvr /usr/share/nginx/html /nas_master
远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例。
安装inotify-tools和rsync。
sudo yum install inotify-tools rsync
准备脚本,实现NAS多可用区容灾。
下载脚本。
sync_nas.sh
:通过inotify和sync实现,当Matser NAS有数据变化时,自动同步到Backup NAS。您可以根据实际需求调整。sync_check_switch.sh
:实现自动检测Matser NAS是否可用,若可用则使用Matser NAS;否则自动切换到Backup NAS。您可以根据实际需求调整。
sudo wget -P /etc/systemd/system/ https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20231017/pftz/sync_nas.sh sudo wget -P /etc/systemd/system/ https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20230925/wmaj/sync_check_switch.sh
使用以下命令,为脚本添加可执行权限。
sudo chmod +x /etc/systemd/system/sync_nas.sh sudo chmod +x /etc/systemd/system/sync_check_switch.sh
配置上述脚本的开机自动启动,确保服务器故障恢复后,NAS可用性检测及容灾切换服务可以正常执行。
创建
sync-check-switch.service
文件。sudo vi /etc/systemd/system/sync-check-switch.service
在打开的文件中,添加以下内容。添加后按下Esc键,然后输入
:wq
,保存并关闭文件。[Unit] Description=Sync Check Switch After=network.target [Service] ExecStart=/etc/systemd/system/sync_check_switch.sh RestartSec=3 Restart=always [Install] WantedBy=default.target
创建
sync-nas.service
文件。sudo vi /etc/systemd/system/sync-nas.service
在打开的文件中,添加以下内容。添加后按下Esc键,然后输入
:wq
,保存并关闭文件。[Unit] Description=Sync NAS Service After=network.target [Service] ExecStart=/etc/systemd/system/sync_nas.sh Restart=always RestartSec=3 [Install] WantedBy=default.target
运行以下命令来重新加载systemd配置。
sudo systemctl daemon-reload
运行以下命令启动服务并设置为开机自启动。
sudo systemctl start sync-nas.service sudo systemctl enable sync-check-switch.service sudo systemctl start sync-check-switch.service sudo systemctl enable sync-nas.service
3、步骤三:部署CLB实现业务高可用
3.1、复制已部署Web服务的ECS实例
高可用架构需要至少2台的ECS实例,通过复制方式可快速创建与原实例有相同的操作系统、Web服务器、数据库等环境配置和数据的新实例。
基于已部署Web服务的ECS实例(假设为ECS_01),创建自定义镜像。
登录ECS管理控制台。
在左侧导航栏,选择实例与镜像 > 实例。
在页面左侧顶部,选择目标资源所在的地域。
在实例列表找到目标实例,在操作列中,选择 > 云盘与镜像 > 创建自定义镜像。
输入镜像名称,资源组选择
高可用测试资源组
,单击确认。在左侧导航栏,单击实例与镜像 > 镜像,并选择自定义镜像,查看镜像创建进度。
创建镜像需要一段时间,请您耐心等待。当目标镜像的进度为100%、状态为可用时,表示镜像创建成功。
使用该自定义镜像创建一个新的ECS实例(假设为ECS_02)。
在左侧导航栏,单击实例与镜像 > 镜像。
在自定义镜像页面,找到上一步创建的自定义镜像,在操作列,单击创建实例。
在自定义购买页面,镜像区域已设置为您选择的自定义镜像。根据页面提示,完成其他配置项并购买1台ECS实例。
其中:
付费类型:抢占式实例。
地域:选择与源实例相同的地域(本文示例:华东1(杭州))。
网络及可用区:选择与源实例相同的VPC,不同可用区。
公网:取消勾选分配公网IPv4地址。
安全组:选择与源实例相同的安全组。
登录凭证:选择自定义密码,登录名选择
ecs-user
并设置登录密码。高级选项-资源组:选择
高可用测试资源组
。
其他参数按需配置,详细说明,请参见自定义购买实例。
3.2、配置CLB实例
负载均衡CLB可消除单台服务器的单点故障,当某个服务器发生故障时,CLB会自动将请求分配到其他正常的服务器上,从而提升服务的连续性和稳定性。
在页面左上角资源组(例如
高可用测试资源组
)和地域。创建一个在实例管理页面,单击创建传统型负载均衡。
CLB实例需满足以下要求(其他参数按需配置,参数说明请参见创建实例):
付费模式:按量付费
地域和可用区:需与ECS实例在相同地域(本文示例:华东1(杭州))
实例类型:公网
实例计费方式:按流量计费
IP版本:IPv4
资源组:选择
高可用测试资源组
创建后,在CLB实例管理页面找到目标CLB实例,在操作列单击监听配置向导,按照界面提示完成配置。
请注意以下参数(其他参数按需配置,参数说明请参见配置CLB实例):
三、方案验证
验证ECS高可用
您可以通过停机一台ECS模拟故障进而验证服务的可用性。操作如下:
登录ECS控制台,选择概览,在资源列表选择一台ECS实例(假设为ECS_01),单击停止。
等ECS状态为已停止后,输入负载均衡公网IP访问网站,能正常访问网站,则表明服务高可用。
验证共享存储
您可以通过在其中一台ECS实例上的NAS文件系统挂载路径上更新、新增、或删除文件,如果另一台ECS实例对应路径下的文件,也同步更新了,表明存储共享。
验证NAS容灾高可用
您可以移除Maser NAS的挂载点,约4秒后再输入负载均衡公网IP访问网站,能正常访问网站,则表明已从Maser NAS切换至Backup NAS。如何移除挂载点?
重要
NAS容灾恢复策略需要结合业务定制,本文只是简单的示例参考。
若移除挂载点后,出现无法重新挂载文件系统至ECS的情况,可尝试执行
sudo umount -f <挂载地址>
或重启ECS后,再添加挂载点并将文件系统挂载至ECS。如何添加挂载点?