摘要: 本文主要探究如何通过采用一个负载均衡器和永久性磁盘使您的应用程序更为健壮。您将使用多个服务器并了解如何安全地备份您的数据。 ...
<!--[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技术,本书都将带您了解数据平台的重大变化。
它支持多种编程语言和框架,包括Java,而Spring是Java生态系统中的核心框架,尤其在企业级应用开发中占有重要地位。Spring框架提供了一整套的开发工具和服务,如依赖注入、AOP(面向切面编程)、数据访问和事务管理...
服务版本:0.1.0 为云中的应用程序定义服务抽象。目的当运行几个小服务而不是几个非常大的服务时,标准化某些元素很有用。 好处包括:提高开发人员的理解(源于熟悉),以及通用工具的出现——用于诸如监控和警报之...
在本篇文章中,我们将深入探讨 Spring Roo 的使用,以及如何结合 Cloud Foundry 进行云端应用开发。Spring Roo 是一个基于 Java 的开源工具,它简化了 Spring 应用程序的构建过程,通过自动化任务和代码生成,让...
它旨在解决现代云应用的复杂性,提高可伸缩性、可靠性和资源利用率。在这个项目中,JavaScript是主要的编程语言,这表明DAOIC可能是通过JavaScript库或者框架来实现对云中分布式应用的管理和控制。 分布式应用程序...
在本文中,我们将探讨如何使用Visual Studio 2010在云环境中运行Silverlight应用程序,具体涉及Azure、ASP.NET MVC2以及Silverlight 4技术。首先,我们需要了解Azure是微软提供的一个云服务平台,允许开发者在云端...
微软Windows Azure云应用开发实践 微软Windows Azure云应用开发...微软Windows Azure云应用开发实践是开发人员快速掌握云计算平台的开发技能的指南,帮助开发人员快速上手云计算平台,并开发出高质量的云应用程序。
- **缓存**:提高应用程序性能的缓存服务。 - **SQL 数据库**:基于 SQL 的关系型数据库服务。 - **SQL 导入/导出**:便于数据迁移的服务。 ##### 应用服务 - **Active Directory**:身份验证和授权服务。 - **访问...
HPC 云中的基准科学应用程序 这项工作创建了一个门户,用于在 Open Grid Scheduler (OGS/GE)(以前称为 Sun Grid Engine)中配置和提交作业。 该项目有 3 个部分,分为 3 个文件夹: hawki:带有 3 个模块...
3. WXML、WXSS、JS语言的应用:本资源使用了微信的WXML、WXSS、JS语言,实现了中国象棋小程序的开发,展示了微信小程序开发的技术细节。 4. 中国象棋游戏的实现:本资源实现了中国象棋游戏,增加了人机对战和UI界面...
Django Deploy是一个实验性工具,旨在使在公共云(例如 )上轻松部署新的和现有的应用程序变得容易。 目前, Django Deploy只能 部署到 。 部署到。 部署使用其自己的模板代码创建的应用程序。 Django Deploy是...
1. 工作多、应用程序多、服务器多、应用资源消耗大、人少、开发少、运维少等问题。 2. 需要微服务编排、动态资源分配、持续集成等功能。 3. 需要解决课件云基础架构层、平台服务层、客户端层、云存储、容器转码、音...
Azure是微软提供的全球领先的云计算服务平台,提供了丰富的计算、存储和其他服务,为开发者提供了构建、部署和管理应用程序的广阔舞台。在这个项目中,Azure作为基础架构,为我们的云猫应用提供了可靠的存储和计算...
在云中构建可扩展的分布式应用程序时,Hadoop可以与云计算平台紧密结合,提供弹性扩展性。例如,在Amazon Web Services (AWS)上,可以使用Elastic MapReduce (EMR)服务快速启动和管理Hadoop集群,根据需求自动扩展或...
在云中管理应用程序。 yarn add -E artdeco 目录 原料药 可以通过导入其默认功能来使用该软件包: import artdeco from 'artdeco' artdeco( arg1: string, arg2?: boolean, ): void 调用此函数可获得所需的结果...
OpenStack:云中的“LINUX”.pdf
pnotesapp 该Web应用程序用于存储笔记,并使它们与Pnotes Android应用程序同步。 在以下查看Android应用程序: 想要贡献首先,您需要访问我的firebase项目,为此,请与我联系以访问该项目。 然后安装运行此程序所需...
您所有的聊天记录和日志都存储在云中。 随时随地访问它们 在高亮和PM上推送通知 与Web上的IRCCloud.com完全同步 适用于手机和平板电脑 加入irc.irccloud.com上的#feedback频道以获取反馈和建议,以便我们改进应用...