edp*_*lis 6 mysql amazon-ec2 amazon-ebs amazon-web-services
我是 Elastic Beanstalk 的新手,但我创建了一个环境,其中的容器运行 64 位 Amazon Linux,运行 PHP 5.3。我想在 EBS 上设置 MySQL,然后安装 phpMyAdmin 并导入我的数据库。
但是,我不知道如何执行此操作,因为文档对我不起作用: 使用 EBS (Elastic Block Store) 在 Amazon EC2 上运行 MySQL
由于该指南上次更新是在 2010 年 3 月 23 日,我想它可能已经过时了。
这是我所做的:
帮助!
编辑:谢谢您的评论和回答。我正在尝试找出在 AWS 上设置 PHP/MySQL 网站的最佳方法,因此 Elastic Beanstalk 似乎是一个好主意,因为 AWS 将其作为“一种让您在 AWS 中快速部署和管理应用程序的更简单的方法”云。”
但是,如果您想使用 EBS 运行 MySQL,这似乎并不完全正确。从我收集的信息来看,我猜每个人都将 RDS 与 Elastic Beanstalk 一起使用,因为它可以自动扩展并且大概具有自动快照功能。
所以我想我还有这些选择:
1) 不要使用 Elastic Beanstalk:根据 Eric Hammond 文档,设置一个在 EBS 卷上运行 MySQL 的 Ubuntu EC2 实例(听起来会存在一些可扩展性问题?)。
2) 使用 Elastic Beanstalk:在 RDS 上设置我的数据库(没有可扩展性问题)。
3) 使用 Elastic Beanstalk:但是使用配置了 MySQL 的 ubuntu AMI 在 EBS 卷上运行(这可能吗?Elastic Beanstalk 可以与私有 AMI 一起使用吗?)
4) 使用 Elastic Beanstalk:重新开始并使用cyberx86 的说明调整ubuntu 说明以在CentOS/RHL 上工作。
在这一点上,我的数据库和站点流量非常小。让它可扩展会很好,但在这一点上,我只想让它以一种方式运行,让我在我的代码在本地主机上工作后使用 git 部署新版本。首要任务是让网站启动并运行,然后重新开始营销和构建功能,而不是花时间在托管上。我该怎么办?
我不使用 Elastic Beanstalk - 但您遵循的指南适用于 EC2(我绝对可以提供帮助)。您遇到的第一个困难是您使用的指南适用于 Ubuntu 9.10;Amazon 的 Linux 基于 CentOS/RHEL - 因此,如果您能找到 CentOS 6 指南,您会更轻松。
您的问题的根源似乎源于“附加 EBS 卷”。在 EC2 上,您可以将多个 EBS 卷附加到单个实例。所有实例都有一个根卷 - 这些可以是 S3 支持的,也可以是 EBS 支持的。到目前为止,首选方法是使用 EBS 支持的根卷(成本稍高,但在灵活性和耐用性方面弥补了这一点)。具有 EBS 根卷的实例几乎总是将该卷附加为 /dev/sda1 - 在现代 Linux 系统上,该设备实际上显示为 /dev/xvda1 (并且应该将后者传递给任何命令)。(除了尝试格式化已安装的卷之外 - 您试图在实例运行时格式化根文件系统 - 即您试图擦除操作系统,如果可能的话,这绝对不是一个好主意)。
在这种情况下,建议添加第二个 EBS 卷 - 将其附加到您的实例(例如作为 /dev/sdh,但使用 /dev/xvdh 作为命令),并使用它来存储 MySQL 数据。(尽管没有使用 Elastic Beanstalk)我很难相信 Elastic Beanstalk 不允许您附加第二卷 - 因为此功能对于 EC2 来说相当重要。
您应该能够通过运行cat /proc/partitions
(或使用fdisk -l
)来获取 EBS 设备的列表。
您会注意到,在您所做的步骤 5 中,您实际上是在其自身内安装根卷(即 /dev/sda1 已安装为 / 并且您正在将 /dev/sda1 安装为 /ebsvol) - 最好避免这样做。
另外,虽然/etc/init.d/mysql stop
不起作用,/etc/init.d/mysqld stop
但可能会起作用。(同样,您可以通过运行来获取 init.d 脚本的列表ls /etc/init.d
- 并且应该能够使用这些路径,就像您一样,service
但我通常使用该命令)。
MySQL 数据库应该位于 /var/lib/mysql 中 - 但是, /etc/fstab 中的挂载点可能不正确(考虑到 /ebsvol 中的 ebsvol 问题)。当你cd /var/lib/mysql
应该能够看到你的数据库时 - 如果没有,你的安装就无法正常工作。(验证 /var/lib/mysql 是否安装在不同的设备上,并将mountpoint -d /var/lib/mysql
该设备与 进行比较cat /proc/partitions
)。
您所遵循的指南的基本思想非常有效 - 将数据和数据库放在与根卷不同的 EBS 卷上是常见的做法,因为它提供了许多优势(性能、易于快照、更容易在实例之间移动)等),并且基本的 Linux 命令没有改变 - 它们仅适用于 Ubuntu。
撤消您的挂载umount /path
- 就像您通常所做的那样,当然,您需要确保设备不忙(如果您尚未成功启动 MySQL,这可能不是问题)。不过 umount 只是临时的 - 因此您还必须/etc/fstab
从那里编辑和删除对安装点的任何引用。如果您的实例上没有任何有价值的东西,您可能最好重新开始(不是因为很难卸载一些卷,而是因为当您从头开始时,总是更容易找出哪里出了问题已知状态)。
最后,关于 Elastic Beanstalk 上的 MySQL:Elastic Beanstalk 的要点应该是它自动处理资源配置和扩展 - 它仍然基于核心 AWS 组件(例如 EC2、S3、ELB 等),但它会为你做一些事情。Elastic Beanstalk 通常使用 RDS 来处理 MySQL 数据库。RDS 是 MySQL 的 Amazon 托管版本,可简化 MySQL 实例的配置和扩展。请记住,如果没有大量设置,MySQL 不太适合自动缩放。您不能只启动第二个 MySQL 实例并在两个实例之间分配负载 - 您需要设置复制,这可能不是一个简单的任务)。
从本质上讲,如果您能够以这样的方式设置 MySQL,使其从您的 Web 服务器实例运行并且可以无缝自动扩展,那么您几乎肯定直接使用 EC2 会更好,而不必担心 Elastic Beanstalk。因此,我建议大多数人实际上并没有在 Elastic Beanstalk 上设置 MySQL(您可以做的是设置一个单独的 MySQL 实例,但如果您使用 Beanstalk,RDS 可能是一种更简单的方法)。
编辑:
与大多数以黑匣子方式运行的许多其他服务不同,Elastic Beanstalk 确实允许您访问底层组件。也就是说,如果您打算手动设置 EC2 实例,那么您就否定了 Elastic Beanstalk 的意义。
如果您使用 EC2,则有几种使用 PHP/MySQL 的方法:
关于同一主题的其他一些答案:
我的观点通常是,一键式解决方案并不是最好的方法 - 我喜欢手动执行某些操作所提供的控制。我发现我不仅通常会得到更加定制和高效的最终结果,而且我对系统的工作原理也有了更好的理解,这使得找出问题所在变得更加容易。一旦您充分了解了它们的复杂性,您就可以随时自动化您自己的设置。
关于 RDS 需要记住的一点 - 它已经得到 EBS 支持。RDS 是 MySQL - 它不是类似的东西,也不是另一个关系数据库。它是在 EBS 支持的 EC2 实例上运行的 MySQL 托管实例。AWS 将使软件保持最新,您可以对数据进行正常的 EBS 快照等。您只是无法直接访问实例上运行的底层软件。
至于操作系统的选择,我偏爱亚马逊的Linux。它得到AWS的良好支持,并且使用最少的资源——它与CentOS完全兼容(事实上,它在最新版本中默认包含EPEL存储库)。通常的观点是使用您熟悉的任何 Linux 发行版,因为差异通常很小(对于您正在使用的说明,CentOS 的工作方式与 Ubuntu 一样 - 大多数命令(除了 apt-get)在 CentOS 上是相同的鉴于我自己的设置使用 Amazon Linux 将数据库放在单独的 EBS 卷上,我可以向您保证这并不难做到)。
我建议主要考虑以下几个方面:
我建议不要将 Elastic Beanstalk 与 AMI 中内置的 MySQL 一起使用 - 如果它能正常工作,它可能会非常不稳定。(只要想想当它向集群添加和删除实例时,或者当数据进入一个实例而不是另一个实例时会发生什么......)
牢记可扩展性固然很好,但不要过早优化,否则你将永远无法完成任何事情。一定要记住这一点,但如果使特定组件可扩展的成本(时间、金钱等)目前不切实际,请不要太担心 - 当需要扩展它时,您就可以你会明白的(毕竟,大多数流行的网站都是这样开始的)。
我建议,如果您的应用程序被设计为可以利用一些缓存,那么它将大有帮助。
通常,在 EC2 上,垂直扩展(扩展到更大的实例)比水平扩展(扩展到更多实例)更好。然而,首先,您希望扩展到两个实例,以便拥有一些冗余并最大限度地减少单点故障。因此,一种可能的方法可能是:
归档时间: |
|
查看次数: |
5494 次 |
最近记录: |