我是Elastic Beanstalk的新手,但是我创build了一个运行64位Amazon Linux并运行PHP 5.3的环境。 我想在EBS上设置MySQL,然后安装phpMyAdmin并导入我的数据库。
但是,我不知道该怎么做,因为文档不适合我: 在Amazon EC2上使用EBS(Elastic Block Store)运行MySQL,
由于该指南最后更新于2010年3月23日,我想这可能是过时的。
以下是我所做的:
帮帮我!
编辑:谢谢你的意见和答案。 我试图找出在AWS上设置PHP / MySQL网站的最佳方法,因此Elastic Beanstalk似乎是一个好主意,因为AWS将它视为“更快速地部署和pipe理AWS中的应用程序云。”
但是,如果你想用EBS运行MySQL,这似乎不是完全正确的。 从我收集的信息来看,我想每个人都会使用RDS和Elastic Beanstalk,因为它可以自动扩展,并可能具有自动快照function。
所以我想我留下这些选项:
1)不要使用Elastic Beanstalk:根据Eric Hammond文档(听起来好像会有一些可伸缩性问题),在EBS卷上设置一个运行MySQL的Ubuntu EC2实例。
2)使用Elastic Beanstalk:在RDS上设置我的数据库(没有可伸缩性问题)。
3)使用Elastic Beanstalk:但是在EBS卷上运行configuration了MySQL的Ubuntu AMI(这可能吗?Elastic Beanstalk是否可以使用私有AMI?)
4)使用Elastic Beanstalk:重新开始,并使用cyberx86的指示来调整Ubuntu的指令在CentOS / RHL上工作。
在这一点上,我的数据库和网站stream量很小。 这将是很好的使其可扩展,但在这一点上,我只是想让它运行的方式,让我部署新的版本使用git之后,我的代码在本地主机上工作。 最重要的是让网站运行起来,回到营销和build设function,而不是花时间在主机上。 我该怎么办?
我不使用Elastic Beanstalk – 但是您所遵循的指南是针对EC2(我绝对可以提供帮助)。 你所遇到的第一个难题是你正在使用的指南是Ubuntu 9.10; 亚马逊的Linux基于CentOS / RHEL – 所以如果你能find一个CentOS 6指南,你会更容易。
您的问题的根源似乎源于“附加EBS卷”。 在EC2上,您可以将多个EBS卷附加到单个实例。 所有实例都有一个根卷,它们可以是S3支持的或EBS支持的。 到目前为止,首选的方法是使用EBS支持的根卷(花费更多一点,但在灵活性和耐久性方面弥补)。 具有EBS根卷的实例几乎总是将这个卷作为/ dev / sda1挂载在现代Linux系统上,实际上该设备显示为/ dev / xvda1(后者应该传递给任何命令)。 (除了尝试格式化已安装的卷 – 你试图格式化你的根文件系统的实例运行 – 即你试图擦除你的操作系统,绝对不是一个好主意,如果它甚至可能)。
在这种情况下,build议添加第二个EBS卷 – 将其附加到您的实例(例如,作为/ dev / sdh,但使用/ dev / xvdh作为命令),并将其用于存储您的MySQL数据。 (尽pipe没有使用Elastic Beanstalk)但我发现很难相信Elastic Beanstalk不允许您附加第二个卷 – 因为这个function对于EC2来说相当重要。
您应该能够通过运行cat /proc/partitions (或使用fdisk -l )来获取EBS设备的列表。
你会注意到,在你所做的第5步中,你实际上是在其内部安装根卷(即/ dev / sda1已经挂载为/,而你正在挂载/ dev / sda1为/ ebsvol) – 最好避免这样做。
另外,虽然/etc/init.d/mysql stop不起作用,但是/etc/init.d/mysqld stop可能会起作用。 (再次,你可以通过运行ls /etc/init.d得到一个init.d脚本的列表 – 并且应该能够使用这些path,就像你一样,我通常使用service命令)。
MySQL数据库应该位于/ var / lib / mysql中 – 但是,/ etc / fstab中的挂载点可能不正确(因为/ ebsvol问题中的ebsvol)。 当你cd /var/lib/mysql你应该能够看到你的数据库 – 如果没有你的坐骑没有正常工作。 (通过mountpoint -d /var/lib/mysqlvalidation/ 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是Amazon的一个MySQLpipe理版本,它简化了MySQL实例的configuration和扩展。 请记住,MySQL没有很好的自动调整function,没有太多的设置。 你不能只启动第二个MySQL实例,并在两个实例之间分配负载 – 你需要设置复制,这可能不是一个简单的任务)。
从本质上讲,如果你能够从你的web服务器实例运行MySQL并且可以无缝地进行自动调整,那么你几乎肯定会更好地直接使用EC2,而不用担心Elastic Beanstalk。 因此,我build议大多数人不会在Elastic Beanstalk上设置MySQL(你可以做的是设置一个单独的MySQL实例,但是如果你使用的是Beanstalk,RDS可能是一个更简单的方法)。
编辑:
与许多其他大多数作为黑盒子运行的服务不同,Elastic Beanstalk确实可以让您访问底层组件。 也就是说,如果您要手动设置您的EC2实例,您已经否定了Elastic Beanstalk的要点。
如果你使用的是EC2,PHP / MySQL的方法很less:
关于同一主题的其他一些答案:
我的观点是通常一点击解决scheme并不是最好的方法 – 我喜欢手动操作提供的控制。 我发现,不仅我通常会得到更加定制和有效的最终结果,而且我还更好地理解系统如何工作,这使得更容易找出错误。 一旦你对错综复杂的问题有了很好的了解,你就可以自动完成自己的设置。
有一点要记住RDS – 它已经被EBS支持了。 RDS是MySQL–它不是类似的,或者是其他的关系数据库。 它是在EBS支持的EC2实例上运行的MySQL的托pipe实例。 AWS将使软件保持最新状态,并且可以对数据执行正常的EBS快照等。您只是无法直接访问实例上运行的底层软件。
至于操作系统的select,我偏向于亚马逊的Linux。 它得到了AWS的很好的支持,并且使用了最less的资源 – 它完全与CentOS兼容(事实上,它包括最新版本默认的EPEL仓库)。 通常的观点是使用任何你喜欢的Linux发行版,因为它们之间的差异通常很小(CentOS的工作方式和Ubuntu的工作方式一样 – 大多数命令(apt-get除外)在CentOS上都是一样的考虑到我自己的安装程序使用Amazon的Linux在单独的EBS卷上有数据库,我可以向你保证这并不困难)。
我build议有一些主要考虑因素:
我build议不要在你的AMI中使用带有MySQL的Elastic Beanstalk,如果它工作的话,它可能是相当不稳定的。 (只要想一想当它向你的集群中添加和删除一个实例,或者当数据转到一个实例而不是另一个实例时会发生什么……)
记住可扩展性是很好的 – 但不要过早地优化,否则你永远无法完成任何事情。 一定要记住,但是如果现在制作一个特定组件的成本(时间,金钱等)是不现实的,那么不要太担心 – 当时机成熟时,我会弄清楚(最stream行的网站是这样开始的,毕竟)。
我build议,如果你的应用程序devise得可以利用一些caching,那么它将会有很长的路要走。
通常情况下,EC2最好是垂直扩展(对于更大的实例),而不是水平扩展(对于更多的实例)。 但是,首先要扩展到两个实例,以便有一定的冗余度,并尽量减less单点故障。 因此,可能的做法可能是:
现在我已经对Elastic Beanstalk和EC2更加熟悉了,我决定放弃使用Elastic Beanstalk,因为尽pipe它有一些很酷的function,但是对于我的喜好来说,它太过于苛刻。 例如,我不喜欢我无法更改httpd.conf文件的事实(当然,您可以更改它,但是当您的环境重新启动时,这些更改将消失)。 另一个原因是用MySQL运行Elastic Beanstalk的唯一方法就是使用RDS(适当地,即自动扩展和自动备份)。 即使您可以免费获得3个月的RDS新注册,但我并没有达到需要其function的规模,所以我不需要为RDS支付大约$ 76 /月的费用。
底线:如果您拥有合理的stream量,并且您需要一个能够自行扩展和自我pipe理的解决scheme,那么带有RDS的Elastic Beanstalk是一个不错的select。 我喜欢你可以使用git进行部署的事实。 这就像PHP的Heroku。 入门指南应包括设置MySQL的说明。
我做了什么:我select使用“Synthetic Elastic Beanstalk”:我可以使用AWS提供的各种产品重新创build其function,并且可以灵活地按照自己想要的方式进行configuration。 当我在踢AWS的轮胎时,我已经在与我的webapp相同的EC2实例上设置了MySQL(一旦你需要扩展,不是很理想,但是在你学习使用AWS的时候是完美的)。
本指南是我用来在运行Amazon Linux AMI的EC2实例上设置LAMP堆栈的。 我发现用phpmyadmin导入我的数据库比较容易。 因为我使用的是微型实例,所以默认情况下会使用EBS,您可以使用快照来备份数据。 我会build议为EC2设置CLI工具并运行
ec2-modify-instance-attribute --block-device-mapping "/dev/sda1=:false" i-xxxxxxx
其中i-xxxxxxxx是EBS卷所连接的EC2实例。 这可以防止实例终止时EBS卷被删除。 由于EBS卷是一切从哪里运行,我的数据库存储在哪里,我不想失去它(当我玩Elastic Beanstalk时,我的EC2实例被终止,Elastic Beanstalk立即启动另一个与一个新的EBS但是我幸运的将原始EBS卷的DeleteOnTermination设置更改为“false”,所以我能够停止新实例,分离新的EBS卷,并附加旧的EBS卷,从而保留了我的MySQL安装,数据库)。
总体而言,将网页应用程序迁移到AWS的整个过程仍然是一件非常痛苦的事情。 现在我已经经历了学习曲线,我感觉更舒适,但我不禁想到应该有更好的入门文档。