【问题标题】:Java EE application deployment on Amazon EC2Amazon EC2 上的 Java EE 应用程序部署
【发布时间】:2011-06-17 09:48:14
【问题描述】:
我们有一个 Java EE 应用程序(JBoss、MySQL、MongoDB 上部署的EAR 文件),我们希望将其部署在 Amazon EC2 实例上。我有几个关于部署最佳实践的问题。
- 什么是最常用的 Linux AMI,我们可以依赖它来进行健壮的部署(Linux 变种太多,我不确定哪个 AMI 常用,是 Fedora、CentOS、Red Hat、 SUSE ...)
- 我们如何处理生产升级(EAR 文件修改或架构升级)。是否有任何工具可用于处理此安装或这些更改的回滚。
- 数据库有哪些数据备份能力?
- 我应该依靠 Amazon RDS 来获得 MySQL 支持吗?
- 我应该如何处理对 MongoDB 的支持?
这是我第一次托管网络应用程序,希望能提供一些有关如何管理生产实例的意见。
【问题讨论】:
标签:
mysql
jakarta-ee
deployment
amazon-web-services
amazon-ec2
【解决方案1】:
- 我同意 Mark Robinson 的回答:使用您最熟悉的任何 Unix 变体。选择一个具有不错的云支持的产品可能是值得的。对于我的网站,我使用 Ubuntu。
-
我有一个通用图像,它是我执行的每个版本部署的基础。我有 www.mysite.com 指向一个弹性 IP,所以我可以决定它去哪个实例。通用映像包含我需要安装的所有软件(Postgres/Postgis/Tomcat/etc),但数据库和 Web 服务器数据文件夹和符号链接到 Elastic Block Store (EBS) 实例。
当需要进行部署时,我会启动一个新实例,冻结生产环境中的 EBS 卷并为其创建快照,然后创建新卷。我将我的新实例指向新卷,然后在上面安装我需要的任何东西。一旦我成功测试了所有内容,我就可以切换弹性 IP 以指向新实例,并且一切都会继续进行。
我会注意到我目前的优势是只有我可以修改数据库;没有用户可以。这很快就会成为一个问题。
如果您在 EBS 卷上使用 XFS 文件系统,那么您可以告诉 XFS 冻结文件系统(因此不会发生更新),然后调用 EC2 api 对卷进行快照,然后解冻文件系统。结果是快照被快速拍摄并发送到 S3。我有一个夜间脚本可以做到这一点。
如果 RDS 看起来适合您的需求,请使用它。 Amazon 正在快速构建大量可靠的工具,如果您有任何可扩展性问题,这将缓解您的问题。
对不起,我不知道。
【解决方案2】:
好问题!
1) 我建议使用您最熟悉的任何 Linux 变体。如果你有一个真正热衷于 CentOS 的人,那就去吧。一旦您选择了您的 AMI,就可以使用它并通过配置您想要的方式对其进行自定义。然后将 那个 AMI 保存为您的基本布局。如果 EC2 出现故障,它将使推出新机器变得更加容易并节省您的培根。
2) 使用 EC2 进行升级非常酷。无需升级实时系统,而是使用您预先配置的 AMI,更新该 AMI 并将该 AMI 保存为 myAMI-1.1(或其他)。这样,您几乎可以立即切换到新系统并回滚到以前的版本,以防出现问题。您还可以将数据库实例备份到 S3。它的价格便宜,约为 0.10 美元/GB/月。
3) 这取决于您存储数据库的位置。如果您将其存储在您的 EC2 实例上,您就有麻烦了。 EC2 实例没有持久性存储。因此,如果您的机器崩溃,您将失去一切。我不熟悉 Amazon DB 系统,但您也应该查看 Elastic Block Store。它基本上是一个可以写入的实际硬盘驱动器。当您想要升级架构时,将完整的数据库转储到 S3,然后升级您的实际架构。如果出现问题,您可以将之前的版本从 S3 中拉出。
4) & 5) 我从来没用过,所以帮不了你。
【解决方案3】:
What is the most commonly used Linux AMI which we can rely on for a robust deployment (There are so many Linux variants, and I am not sure which AMI is commonly used, is it Fedora, CentOS, Red Hat, SUSE ...)
How do we handle production upgrades (EAR file modifications or schema upgrades). Are there any tools which are available to handle this installation or rollback of these changes.
What kind of data backup capability is available for the database?
Should I rely on Amazon RDS for MySQL support?
How should I handle support for MongoDB?
- 任何 Linux AMI 都可以完成这项工作,您只需要一个 JRE。 (假设不需要开发工作)。如果您需要监控 JVM 行为,请安装 JConsole。
- 最简单和无痛的方法是通过 SSH 进入本地主目录,传输更新的类文件/EAR 文件(取决于应用的更改数量)并复制并替换到 Tomcat 部署目录,重新启动 apache。 (确保在上传到生产环境之前在本地进行了测试)。
- 取决于您使用的数据库,如果您使用的是 MySQL,那么只需执行写入主目录的计划备份,这样您就可以不时通过 SSH 登录并下载副本以进行备份。
- 我不会考虑回复 Amazon RDS for MySQL 支持,原因有两个:MySQL 足够小且易于管理,而且我希望完全控制数据库,如果您可以自己做,为什么要支付更多费用FOC?
- MongoDB 的使用应与您的应用程序的目的以及您从中获得的好处保持一致。我建议您使用 MongoDB 进行静态数据检索,例如州、国家、地区等......其中 MySQL 仅用于交易数据。
【解决方案4】:
如果您可以在 TomEE 而不是 JBoss 上部署 Java EE 应用程序,Boxfuse 可以满足您的需求。
对于您的 Java EE 应用程序,您实际上只需要执行(TomEE 使用 war 文件而不是 ear 文件):
boxfuse run my-tomee-app-1.0.war -env=prod
这会
- 创建包含 TomEE 的 AMI 和准备启动的应用程序
- 创建弹性 IP 或 ELB
- 创建一个定义正确端口的安全组
- 创建自动缩放组
- 启动您的实例
任何后续更新都将作为零停机蓝/绿部署完成。
更多信息:https://boxfuse.com/blog/javaee-aws