AWS上基于Docker的3层Java应用程序(Niginx,Tomcat和MySQL)的端到端自动化

Amazon Web Service的地理分布和不断增长的云服务数量促使许多初创企业和企业将应用程序托管在分布在不同地区的Amazon Instances上。 但是,随着开发团队开始增长或企业开始新的开发项目,为快速增长的团队复制一致的DEV / TEST环境在任何云基础架构上都将变得很困难。

DCHQ简化了企业应用程序的容器化,并使得可以通过一键式部署按钮在多个主机上复制非常复杂的应用程序环境。 DCHQ不仅可以自动化应用程序部署,还可以与AWS集成,以自动化由分布式Amazon实例组成的启用Weave的集群的配置和自动扩展。

在本博客中,我们将介绍在AWS上的自动基础架构配置以及在群集Tomcat服务器上部署的3层Java应用程序的自动部署和生命周期管理,并分别使用Nginx和MySQL作为负载平衡器和数据库。

在AWS上自动化集群的配置和自动扩展

首先,用户可以通过导航到“管理”>“回购和云提供者”,然后单击“ +”按钮选择AWS,为AWS注册云提供者。 需要提供AWS Access Key和Secret Key –可以从AWS Console的Security Credentials部分检索。

2838740_orig

然后,用户可以使用自动扩展策略创建启用了Weave的集群,以自动启动新的Amazon实例。 Weave集群中服务器之间的通信受密码保护–确保没有其他Weave集群能够与任何正在运行的容器建立通信。 可以通过导航到“管理>数据中心和群集”页面,然后单击+按钮来完成此操作。 您可以选择基于容量的放置策略,然后选择“编织”作为网络层,以便于集群中多个主机之间的跨容器通信。 本示例中的自动扩展策略将VM(或Amazon实例)的最大数量设置为10。

  9365170_orig

用户现在可以导航到“管理”>“ Bare-Metal服务器和VM”,然后单击+按钮以选择AWS,从而在新创建的集群上配置许多Amazon实例。 选择云提供商后,用户可以选择区域,实例类型和映像。 DCHQ已通过Red Hat Enterprise Linux,CentOS和Ubuntu的认证-但用户应避免选择处于beta或alpha模式的图像。 最近经过测试的Ubuntu映像是us-west-1 / ami-1fc03e5b(或ubuntu / images / ubuntu-trusty-14.04-amd64-server-20150812)。 用户需要提供安全组名称(例如,默认)。 安全组需要打开以下入站端口:用于Docker的32000-59000,用于Weave的6783和用于RabbitMQ的5672。 然后选择一个数据中心(或集群),然后可以指定Amazon实例的数量。

  4133379_orig

建模和部署基于Docker的多层Java应用程序(Nginx,集群Tomcat和MySQL)

设置Amazon实例后,用户可以在新的Amazon实例上部署基于Docker的多层应用程序。 这可以通过导航到自助服务库,然后单击“自定义”来请求多层应用程序来完成。

在此示例中,我们有一个多层应用程序,由Nginx(用于负载平衡),Tomcat(集群应用程序服务器)和MySQL(作为数据库)组成。 您会注意到Nginx正在调用BASH脚本插件来动态(或在请求时)在default.conf文件中添加应用程序服务器的容器IP。 Tomcat也正在调用BASH脚本插件,以从指定的URL部署Java WAR文件。 您会注意到,cluster_size参数使您可以指定要启动的容器数(具有相同的应用程序依赖性)。 host参数允许您指定要用于容器部署的主机。 以下是host参数支持的值:

  • host1,host2,host3等–在数据中心(或群集)中随机选择一个主机以进行容器部署
  • <IP地址1,IP地址2等>-允许用户指定用于容器部署的实际IP地址
  • <主机名1,主机名2等>-允许用户指定用于容器部署的实际主机名
  • 通配符(例如“ db- *”或“ app-srv- *”)–指定要在主机名中使用的通配符

此外,用户可以通过引用另一个图像的环境变量来创建跨图像环境变量绑定。 在这种情况下,我们进行了几个绑定-包括database.url = jdbc:mysql:// {{MySQL | container_ip}}:3306 / {{MySQL | MYSQL_DATABASE}} –动态解析数据库容器的IP和名称在请求时使用,并用于在应用程序服务器中配置数据库URL。

以下是受支持的环境变量的列表:

  • {{字母数字| 8}} –创建一个随机的8个字符的字母数字字符串。 这对于创建随机密码最有用。
  • {{<图像名称> | ip}} –允许您输入容器的主机IP地址作为环境变量的值。 这对于允许中间件层与数据库建立连接最有用。
  • {{<图像名称> | container_ip}} –允许您输入容器的内部IP作为环境变量的值。 这对于允许中间件层与数据库建立安全连接(不暴露数据库端口)最有用。
  • {{<图像名称> | port _ <端口号>}} –允许您输入容器的端口号作为环境变量的值。 这对于允许中间件层与数据库建立连接最有用。 在这种情况下,指定的端口号必须是内部端口号,即不是分配给容器的外部端口。 例如,{{PostgreSQL | port_5432}}将转换为实际的外部端口,该端口将允许中间件层与数据库建立连接。
  • {{<图像名称> | <环境变量名称>}} –允许您将一个图像的环境变量的值输入到另一个图像的环境变量中。 这里的用例是无止境的-因为大多数多层应用程序将具有跨映像依赖关系。

用户可以在单击运行之前选择环境标签(例如DEV或QE)和为AWS创建的数据中心。

8449035_orig

1356195_orig  

监视正在运行的容器的CPU,内存和I / O

一旦应用程序启动并运行,用户可以监视正在运行的容器的CPU,内存和I / O利用率,并执行第二天的操作,例如备份,使用BASH插件进行容器更新,切入/切出和连续交付。

用户可以执行历史监视分析,并将问题与容器更新或构建部署相关联。 这可以通过单击正在运行的应用程序的“操作”菜单,然后单击“监视”来完成。 可以选择一个自定义日期范围以历史查看CPU,内存和I / O利用率。

2857218_orig

2416979_orig

向外扩展Tomcat应用服务器集群

如果正在运行的应用程序受到资源限制,则用户可以扩展应用程序以满足不断增加的负载。 此外,例如,用户可以在工作时间安排向外扩展,在周末安排向外扩展。

要将Tomcat服务器的群集从2扩展到4,用户可以单击正在运行的应用程序的“操作”菜单,然后选择“扩展”。 然后,用户可以为群集指定新的大小,然后单击“立即运行”。

然后,我们使用BASH脚本插件来更新Nginx的default.conf文件,以便它知道添加的新应用程序服务器。 还可以安排BASH脚本插件来适应用例,例如清理日志或以定义的频率更新配置。 应用程序时间轴可用于跟踪对应用程序所做的每个更改,以进行审核和诊断。

6915207_orig

向外扩展完成后,用户可以执行BASH插件来更新Nginx的default.conf文件,以便它知道所添加的新应用程序服务器。 还可以安排BASH脚本插件来适应用例,例如清理日志或以定义的频率更新配置。

要在正在运行的容器上执行插件,用户可以单击正在运行的应用程序的“操作”菜单,然后选择“插件”。 然后,用户可以选择负载平衡器(Nginx)容器,搜索需要执行的插件,并使用切换按钮启用容器重新启动。 该插件的默认参数将动态解析正在运行的Tomcat服务器的所有容器IP,并将它们添加为default.conf文件的一部分。

6614589_orig

应用程序时间轴可用于跟踪对应用程序所做的每个更改,以进行审核和诊断。 可以从正在运行的应用程序页面底部的可扩展菜单中访问它。

9747891_orig

当容器或主机关闭或主机或容器的CPU和内存使用率超过定义的阈值时,警报和通知可用。

1881925_orig

触发构建后,使用Jenkins启用持续交付工作流以更新正在运行的应用程序的WAR文件

对于希望遵循“不可变”容器模型的开发人员,通过重建包含应用程序代码的Docker映像并在每次应用程序更新时旋转新容器,DCHQ提供了自动构建功能,该功能允许开发人员从Dockerfiles或包含Dockerfiles的GitHub项目中自动创建Docker映像。 。

但是,许多开发人员可能希望使用最新的Java WAR文件来更新正在运行的应用程序服务器容器。 为此,DCHQ允许开发人员使用Jenkins启用连续交付工作流程。 这可以通过单击正在运行的应用程序的“操作”菜单,然后选择“连续交付”来完成。 用户可以选择已经向DCHQ注册的Jenkins实例,将在Jenkins上生成最新WAR文件的实际Job,然后选择BASH脚本插件来获取此构建并将其部署在运行的应用程序服务器上。 保存此策略后,只要触发构建,DCHQ就会从Jenkins获取最新的WAR文件,并将其部署在运行的应用程序服务器上。

3368850_orig

结论

容器化企业Java应用程序仍然是一个挑战,主要是因为现有的应用程序组合框架无法解决复杂的依赖关系,外部集成或置备后的自动扩展工作流。 此外,容器的短暂设计意味着开发人员必须启动新的容器并在每次版本更新时重新创建复杂的依赖关系和外部集成。

DCHQ具有托管和内部部署版本,可解决所有这些挑战,并通过高级应用程序组合框架简化企业Java应用程序的容器化,该框架可促进跨映像环境变量绑定,可在以下位置调用的可扩展BASH脚本插件。请求时间或事后置备,以及应用程序群集以在多个主机或区域上实现高可用性,并支持自动扩展。

http://DCHQ.io上免费注册,以访问现成的多层Java应用程序模板以及应用程序生命周期管理功能,例如监视,容器更新,扩展/扩展和连续交付。

翻译自: https://www.javacodegeeks.com/2015/10/end-to-end-automation-for-docker-based-3-tier-java-apps-niginx-tomcat-and-mysql-on-aws.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值