摘要: 本文主要探究如何通过采用一个负载均衡器和永久性磁盘使您的应用程序更为健壮。您将使用多个服务器并了解如何安全地备份您的数据。 ...
<!--[diy=diysummarybottom]--><!--[/diy]-->
<!--[diy=diycontenttop]--><!--[/diy]-->
本系列的 开发教程:如何将Linux应用程序迁移到Amazon云 介绍了如何将一个物理服务器迁移到一个物理云服务器中。尽管所有的工作都已完成,但是,应用程序并没有明显的改善,这主要是因为引入了更多的单点故障。
甚至在单个物理服务器上,您都有冗余电源、错误纠正 RAM、冗余磁盘和丰富的故障前诊断指示器监控。在一个云服务器上,您不知道您已经获取了什么 — 或者更确切地说,您不知道您访问了什么。云服务器通常是可靠的,但是采取预防措施是很明智的,特别是自从 Amazon 提供额外服务来提高可靠性之后。
当部署到一个云计算环境之后,最好做好有可能会丢失一个虚拟实例的准备。这不是说云服务是不可靠的,而是说您可能遇到的故障类型不像您在物理环境中所遇到的。因此您应该将智能性引入您的应用程序,处理通信损耗并在多个服务器之间实现伸缩性。不管您要构建什么类型的环境,这种思想将有助于您构建一个更好的应用程序。
在本文中,您将了解如何使用 Amazon Elastic Block Store (EBS) 改进数据库的短暂存储,您可以通过建立备份进一步提高数据保护功能。跨越多个实例进行负载均衡可防止应用程序服务器丢失,并允许您从各种故障中恢复。
图 1 展示了您上次中断的应用程序的架构。
图 1. 当前架构
所有对象都在一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例上。前端 Web 服务器、nginx 、请求多个混合实例的代理或服务器静态文件本身。混合应用程序服务器在同一个主机上访问一个 PostgreSQL 数据库。
配置永久性磁盘
实例存储是 Amazon EC2 与 VMware 和 Xen 等虚拟化技术之间最大的不同。我们知道,一个 Amazon EC2 实例提供一个 10GB 的固定根分区和一个实例磁盘,后者的大小取决于启动的实例的类型。根分区是在启动时从 Amazon Machine Image (AMI) 克隆的,实例存储为空。当您关闭您的服务器时,您的实例存储丢失。
Amazon 的初始位置告诉人们应该频繁地备份他们的服务器到 Amazon Simple Storage Service (Amazon S3)。如果您的服务器崩溃,那么您应该有其他的服务器承受负载,或者您可以从 Amazon S3 获取数据。最终,Amazon 推出了 EBS,这是一个提供永久性磁盘的服务 。如果您的服务器崩溃,您可以将 EBS 卷附加到另一个服务器上。Amazon 甚至构建一个快照来简化备份。
SmallPayroll 应用程序中数据库服务器的主要问题是一个单点故障。有两个常见的方法可以对其进行校正。一个是构建两个能够彼此接管的数据库;另一个是减少潜在停机时间让一切更为合理。第一种方法有最少的停机时间但是较为复杂,第二种方法在这种情况下更为实用。如果数据库服务器崩溃,将启动一个新的实例 替换它。EBS 考虑了数据安全性。从错误发现到启动一个新数据库服务器并重新指向客户机总共用时应该低于 10 分钟。作为一点优势是,EBS 存储比起实例存储有一个较高的 I/O 容量。
要使用 EBS,应该执行以下步骤:
- 用
ec2-create-volume 命令创建卷。
- 使用
ec2-attach-volume 命令将卷附加到一个正在运行的实例中。
- 在卷上创建一个文件系统。
- 将文件系统挂载到目录。
首次建立 EBS
建立 EBS 的第一步是通知 Amazon 您想要创建一个卷。您需要知道两件事:您的镜像的大小(千兆字节为单位)和您想要在其中使用镜像的可用性区域。可用性区域 的概念是 Amazon 提出的,用来描述服务器的位置。以 us-east 开始的区域是在北维吉尼亚州,统称为地区。此时,在 us-east 地区有 3 个这样的区域:us-east-1a、us-east-1b 和us-east-1c。每一个可用性区域设计的目的是隔离其他可用性区域中的故障。同一地区的区域彼此仍然很接近,因此它们是低延迟的。
EBS 的一个限制是卷只能挂载到创建它所在的可用性区域中。有办法可以移动它们,但是您必须在同一可用性区域中创建您的卷作为服务器。
运行命令:
ec2-create-volume -s 20 -z us-east-1a
|
在 us-east-1a 区域创建一个 20GB 的卷。如果您不知道您的服务器在哪,ec2-describe-instances 命令将会告诉您。您可以对 ec2-run-instance 使用 -z 参数来指定您的服务器启动的位置。清单 1 显示了这个命令以及输出。
清单 1. 创建 EBS 卷
$ ec2-create-volume -s 20 -z us-east-1a
VOLUME vol-c8791ca1 20 us-east-1a creating
2010-07-01T02:52:52+0000
|
清单 1 的输出显示了创建的卷以及卷的 ID 为 vol-c8791ca1 。了解这一点,您就可以将卷附加到一个正在运行的 Amazon EC2 实例中,前提是您要知道服务器的实例标识符以及将卷作为服务器的设备。运行命令:
ec2-attach-volume vol-c8701ca1 -i i-fd15e097 -d /dev/sdj
|
将这个最新创建的卷附加到服务器实例 i-fd15e097 。记住,您可以通过 ec2-describe-instances 命令找到您的实例标识符,并可使用 ec2-describe-volumes 查看卷列表。
现在,您的虚拟服务器有了一个名为 /dev/sdj 的磁盘,像查看普通磁盘那样查看它。对于任何一个磁盘,您需要在原始磁盘上创建一个文件系统。根据需要,您可以有不同的选择:
- 创建一个标准第三方可扩展(ext3)文件系统。
- 创建一个 XFS 文件系统。这样您就可以冻结文件系统来为备份创建一个快照。
- 在磁盘和文件系统之间建立 Logical Volume Manager (LVM) 层,这样以后您将可以扩展 EBS 卷。
- 使用 Linux® 软件 RAID 来条带化多个 EBS 卷,将 XFS 或 ext3 放在 RAID 集合的顶部。这将提供更高的磁盘性能。
即使 RAID 和 LVM 提供了有趣的特性,对于一个相对较小的 EBS 卷来说 XFS 也是最简单的选择。您将可以使用 XFS 的冻结特性以及 EBS 快照来进行一致的备份。清单 2 列出了如何创建一个 XFS 文件系统并将其挂载到主机上。
清单 2. 创建和挂载 XFS 文件系统
# mkfs.xfs /dev/sdj
meta-data=/dev/sdj isize=256 agcount=8, agsize=32768 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=2560, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0
# mkdir /ebsvol
# mount /dev/sdj /ebsvol
|
清单 2 运行 mkfs.xfs 命令来格式化 /dev/sdj。(如果没有 mkfs.xfs ,命令运行 gem install -y xfsprogs 。)该命令的输出描述了文件系统的参数。只要输出中没有错误,这些参数可以忽略。清单 2 中最后两个命令创建一个名为 /ebsvol 的挂载点,然后在挂载点挂载文件系统。
文件系统现在是可用的。即使服务器出现故障,/ebsvol 之下的任何文件都将持续保留。
|
分享到:
相关推荐
不论您是在本地还是在云中使用SQL Server技术,本书都将带您了解数据平台的重大变化。
Spring 与 Cloud Foundry:在云中珠联璧合
服务版本:0.1.0 为云中的应用程序定义服务抽象。目的当运行几个小服务而不是几个非常大的服务时,标准化某些元素很有用。 好处包括:提高开发人员的理解(源于熟悉),以及通用工具的出现——用于诸如监控和警报之...
DAOIC 在云中编排的分布式应用程序
HPC 云中的基准科学应用程序 这项工作创建了一个门户,用于在 Open Grid Scheduler (OGS/GE)(以前称为 Sun Grid Engine)中配置和提交作业。 该项目有 3 个部分,分为 3 个文件夹: hawki:带有 3 个模块...
笔者最近的工作使用到Azure和Silverlight,所以决定创建一个Silverlight程序,让它在ASP.NET MVC2应用程序中运行。本次实验使用了Visual Studio 2010,Silverlight 4和Azure SDK。
Windows Azure使用入门 第四课:开发测试在云中.pdf
Django Deploy是一个实验性工具,旨在使在公共云(例如 )上轻松部署新的和现有的应用程序变得容易。 目前, Django Deploy只能 部署到 。 部署到。 部署使用其自己的模板代码创建的应用程序。 Django Deploy是...
在云中管理应用程序。 yarn add -E artdeco 目录 原料药 可以通过导入其默认功能来使用该软件包: import artdeco from 'artdeco' artdeco( arg1: string, arg2?: boolean, ): void 调用此函数可获得所需的结果...
SecLoc:保护云中位置敏感的存储
NULL 博文链接:https://ximeng1234.iteye.com/blog/2205872
OpenStack:云中的“LINUX”.pdf
pnotesapp 该Web应用程序用于存储笔记,并使它们与Pnotes Android应用程序同步。 在以下查看Android应用程序: 想要贡献首先,您需要访问我的firebase项目,为此,请与我联系以访问该项目。 然后安装运行此程序所需...
您所有的聊天记录和日志都存储在云中。 随时随地访问它们 在高亮和PM上推送通知 与Web上的IRCCloud.com完全同步 适用于手机和平板电脑 加入irc.irccloud.com上的#feedback频道以获取反馈和建议,以便我们改进应用...
Boafft:用于云中大数据存储的分布式重复数据删除
OATS:在云中具有两级共享策略的在线聚合
与合作创建Moprim是一家软件公司,基于使用加速度计的专利方法,为智能移动性开发数据解决方案。想法与描述这个想法是创建一个React-Native应用程序,该应用程序可用于使用图片,视频和文本注释公共交通工具。 注释...
yarn install-backend# or npm i后端后端是一个Docker容器,该容器安装了可在Linux上与Puppeteer一起使用的最新Chrome程序包。 注意:在尝试本节中的每个步骤之前,您需要运行Docker。建立它yarn build运行容器容器...
该应用程序使用Firebase和Firestore进行在线数据库操作,其中用户条目存储在云中,并实时取回给用户。 建于 Figma-应用程序原型,Android Studio-Xml和应用程序操作,Firebase-数据多云 贡献 请阅读CONTRIBUTING.md...
cloud-enablement-azure:在云中启用MarkLogic(Azure)