Sunday, 10 April 2016

泊坞窗Java应用程序使用Solr,蒙戈,与卡桑德拉:设计,部署,服务发现和管理生产中

泊坞窗Java应用程序使用Solr,蒙戈,与卡桑德拉:设计,部署,服务发现和管理生产中

---------------------------------------------------------------------------------

您可以克隆从GitHub的Java应用程序样本“目录名”。 
一步一步的指导Dockerizing和管理的Java应用程序:
  • Apache的HTTP服务器(httpd的公司)Nginx的用于负载平衡
  • 在JBoss Tomcat的公司码头如应用服务器
  • Solr的全文搜索
  • 蒙哥卡珊德拉在MySQL的甲骨文数据库
这是一个项目(扩展https://github.com/dchqinc/dchq-docker-java-example)。现在,应用程序支持的Solr的全文检索和两个蒙戈卡桑德拉作为支持的数据库。
要运行和管理24 在13个不同的云计算和虚拟化平台(包括在vSphere中,OpenStack的是,AWS,Rackspace公司,微软Azure,谷歌计算引擎,DigitalOcean,IBM的SoftLayer的,等等),为这个项目的Java应用程序模板确保你要么:
图片
图片

背景

集装箱企业Java应用程序仍然是主要是由于现有的应用程序框架的组成不涉及复杂的依赖关系,外部整合或工作流后会自动调整以提供一个挑战。此外,该容器设计简要意味着新容器的开发者必须旋转和重新创建与每一个版本更新复杂的依赖关系和外部结合。

DCHQ,在托管和内部部署版本解决了所有这些挑战,并通过扩展在图像环境变量绑定写的泊坞窗,可扩展的bash脚本插件,您可以要求在申请早期创作框架简化了在容器中的企业Java应用程序或供应,应用集群和呼叫和自动缩放后,支持在多个主机或高可用性。

当应用程序提供商,您可以监控CPU,内存和I运行容器/ O,接收通知和警报,并获得应用程序自动缩放过程输入/输出工作流程备份访问的实施,插件,更新运行容器 。此外,包装盒外的工作流程,并促进持续交付詹金斯使开发人员能够刷新应用程序运行的Java WAR文件而不会破坏现有的依赖和整合。

在以前的博客中,我们展示了基于各地13多克不同的云和虚拟化平台-多应用程序栈各种Java应用程序(如比萨饼店和电影商店应用)终端到终端的部署自动化。对于博客的完整列表,你可以访问此页:http://dchq.co/docker-java-applications.html

但是,许多用户还是觉得有些建模混淆了应用程序的基本方面。这些问题包括:

  • 如果这些环境变量基于模板YAML从您的应用程序?
  • 如何用适当的方式初始化数据库从我的Java应用程序的需求?
  • 我已经有我的计划部署WebLogic应用服务器。我跑我自己的脚本来部署Java应用程序?
为了解决这些问题,我们已经创建了一个示例,栈可以部署该项目的GitHub的“目录名的”Java在这些应用程序:
  • 的Apache HTTP服务器(httpd的),和Nginx的(用于负载平衡)
  • 在JBoss,Tomcat和Jetty的(如应用服务器)
  • Solr的(全文搜索)
  • 蒙哥,在卡桑德拉,MySQL和Oracle(数据库)
在这个项目中,我们将使用不同的应用程序堆栈配置,部署和管理Java应用程序和不同的云计算/虚拟化基础架构提供了一个一步一步的指导。
我们将包括:
  • Java配置文件数据库和Solr连接环境变量
  • 使用liquibase豆初始化数据库连接
  • 建立任何地方任何Linux主机上运行,​​你可以根据YAML重复使用的应用程序模板
  • 配置和自动缩放底层基础设施任何云(和Rackspace公司在这个博客为例)
  • Rackspace公司多公司部署在集群上的Java应用程序
  • 监控CPU,内存和我运行集装箱/ O
  • 建筑被触发更新运行的应用程序的WAR文件传递过程,使连续詹金斯
  • 在资源向外扩展应用服务器集群应用中使用该服务发现框架,以更新负载平衡服务受限

Java配置文件数据库和Solr连接环境变量

您可以从GitHub克隆这个样本“目录名”Java应用程序。


这是最重要的“Dockerizing的”Java一步到位申请。为了充分利用集装箱的环境变量可以在运行时进行传递,你需要确保你的应用程序的方式,将让你改变一些请求时配置的属性 - 是这样的:

  • Solr的URL和端口要使用
  • 数据库驱动程序,要使用
  • 数据库URL
  • 数据库凭据
  • 你想更改请求的任何其他参数(例如最小/最大连接池大小,空闲超时)
为了实现这一目标,我们已经创建了几个Java文件来声明,我们需要用它来连接到数据库和Solr环境变量。在config目录中的Java文件可以发现:


图片
你会发现,solr_host solr_port 当它被声明为环境变量来运行应用程序服务器容器,你可以。

你会发现,database_driverClassName database_url database_username database_password 当它被声明为环境变量来运行应用程序服务器容器,你可以。这些将被用于连接到MySQL,PostgreSQL和Oracle数据库。

图片
你会发现,mongo_url 当它被声明为环境变量来运行应用程序服务器容器,你可以。
然而MongoConfig.java也可以用来填补在适当的框架,并启动一个数据库表 - 如果表没有被发现。
图片
你会发现,cassandra_url 当它被声明为环境变量来运行应用程序服务器容器,你可以。

使用Liquibase Bean来初始化连接MySQL,PostgreSQL和Oracle数据库

我们通常建议初始化数据库架构作为Java应用程序部署的一部分。通过这种方式,你不必担心坚持,就需要单独的SQL数据库一个​​单独的文件的执行情况。
但是,如果你已经有了这些SQL文件,你还是喜欢在一个单独的数据库中执行他们-然后DCHQ可以帮助您自动通过其插件框架这一进程。您可以参考本以获取更多信息。
初始化蒙戈和卡桑德拉数据库覆盖MongoConfig.java和CassandraConfig.java文件。
对于MySQL,PostgreSQL和甲骨文,LiquiBase 豆DatabaseConfig.java文件是用来检查数据源和运行upgrade.sql SQL语句。更新日志报告Liquibase跟踪每个数据库的操作。
图片
下面是在SQL语句和初始化upgrade.sql文件MySQL和PostgreSQL或Oracle数据库架构的实际连接。
图片

建立任何地方任何Linux主机上运行,​​你可以根据YAML重复使用的应用程序模板

一旦登录到DCHQ(无论是在现场还是托管DCHQ.io版),用户可以浏览到应用程序和设备,然后点击+ 按钮来创建一个新的码头工人写作模板。
我们已经创建了24应用程序模板使用的官方图片泊坞窗中心为同一个“名称目录”的Java应用程序-但对于不同的应用服务器和数据库。
的模板包括以下应用栈(对于相同的Java应用程序)的例子:
  • Apache的HTTP服务器(httpd的公司)的Nginx的-为了实现负载均衡
  • Solr的-全文检索
  • Tomcat的,码头和JBoss -应用服务器
  • 蒙哥,在卡珊德拉,XE的MySQL和Oracle -数据库

插件请求和岗位安排,配置Web服务器和应用服务器

在所有这些应用模板,你会发现一些配置容器调用bash脚本插件所需时间的容器。这些插件可以提供如同考试之后公布执行。

这些插件可以通过导航要创建 插件一旦提供bash脚本,DCHQ代理将执行该脚本的容器内。用户可以指定一个参数可以在请求和供应被覆盖。任何前由$ 它被认为是一个符号的参数-例如,$ FILE_URL 可能是一个参数,它允许开发人员指定WAR文件的下载网址。它可以请求和当用户想要以刷新一个运行的Java WAR文件容器,规定覆盖交叉。
必须提供当你需要定义基于YAML的应用程序模板插件ID。例如,要调用一个bash脚本插件Nginx的,我们将把插件ID如下:
图片
在本实施例中,模板,我们称之为4 bash脚本插件。
Nginx的是调用bash脚本插件default.conf文件注入IP应用服务器容器公司动态(或要求)。窗口小部件ID是0H1Nk
Apache的HTTP服务器(httpd的的)的IP容器在httpd.conf文件调用bash脚本插件,注塑应用服务器动态(或要求)。窗口小部件ID是uazUi
nginx的和Apache HTTP服务器(httpd的)是,他们可以在簇的大小,或传播的应用服务器的一部分之后进行该规定的插件美感。这使得有可能以限定自动策略更新自动网络服务器(或负载平衡器)的大小。这是DCHQ的一部分服务发现框架。

搜索工具服务生命周期阶段

生命周期中的插件参数允许您指定确切的阶段或事件来执行插件。如果没有指定的生命周期,因此默认情况下,该插件将执行on_create 。下面是支持生命周期阶段:
  • on_create -当你创建一个容器控件执行
  • on_start -插件的执行开始后的容器
  • on_stop -容器控件之前停止执行
  • on_destroy 破坏之前执行部件的集装箱-
  • post_create 执行插件创建并运行一个容器-
  • post_start [:节点] -又一个容器组件启动
  • post_stop [:节点] -停止后,另一个容器插件的执行
  • post_destroy [:节点] -另一个容器被销毁后执行部件
  • post_scale_out [:节点] -插上执行后,另一个群集向外扩展的容器
  • post_scale_in [:节点] -另一个群集容器后,执行插件缩放
要访问Nginx的和Apache HTTP服务器(httpd的公司)下插EULA许可证,请确保您可以:
应用程序服务器(Tomcat的,码头和JBoss)还列举了bash脚本部署从Java中WAR文件的访问URL GitHub的插头。
在Tomcat,JBoss和终端是相同的bash脚本调用插件(ID:oncXN)-除了增加在不同的目录WAR文件部署:
  • Tomcat的 - DIR =一个在/ usr /本地/ Tomcat的/ webapps /下ROOT.war下
  • 码头 - DIR =在/ var / lib中的/码头/ webapps /目录下ROOT.war
  • JBoss的公司 - DIR = /选择/ JBoss的公司/ wildfly /独立/部署/ ROOT.war
Solr的调用不同的bash脚本插件(ID:doX8s ),将获得names.zip文件位于/ opt解压/ Solr的/服务器/ Solr的/

在多个主机和主机参数HA部署CLUSTER_SIZE

你会发现,在CLUSTER_SIZE 参数允许你指定容器释放的数量(与依赖于相同的应用程序)。
主机参数允许您指定容器用于部署主机。如果你选择这是可能的编织作为网络层来创建集群。这种方式可以确保不同的主机(或地区)的应用服务器集群的高可用性,您可以使用关联性规则,如确保数据库的独立主机上运行。这里是主机支持的参数:

  • 主机1,主机2,在host3上,等等-随机选择的数据中心或主机群集部署容器
  • IP地址1,IP地址2,等等-允许用户指定实际使用的容器部署的IP地址
  • 主机1,主机2,等等-允许用户为容器的部署指定实际的主机名
  • 通配符(例如,“DB- ” 或“应用-srv- ”) -指定使用通配符的主机名

在图像的环境变量绑定

此外,用户可以参考环境变量的另一图像在整个环境变量绑定创建一个图像。在这种情况下,我们做了几绑定 - 包括database_url =的jdbc:mysql的:// {{MySQL的| container_hostname}}:3306 / {{MySQL的| MYSQL_DATABASE}} - 数据库容器的名称解析动态,以确保应用服务器可以建立与数据库的连接请求。
这里是支持的值的环境变量的列表:
  • {{字母|}}。8  -创建八个随机字符的字母数字字符串。这是最有用的创建一个随机密码。
  • {{图片名称| IP}}  -允许你输入一个集装箱的主机IP地址作为环境变量。此中间件层用于建立到最有用的数据库的连接。
  • {{图片名称| container_ip}}  -允许你输入容器作为环境变量的值的名称。此中间件层用于建立与数据库(数据库端口不露出)的最有用的安全连接。
  • {{图片名称| container_private_ip}}  -允许你作为一个环境变量IP的容器内进入。此中间件层用于建立与数据库(数据库端口不露出)的最有用的安全连接。
  • {{图片名称| port_Port号}}  -允许你输入一个集装箱端口号的环境变量。此中间件层用于建立到最有用的数据库的连接。在这种情况下,指定的端口号必须是一个内部端口号-未分配到容器口的外部。例如,{{PostgreSQL的| port_5432}}将被转换为实际的外部端口,将允许中间件层建立到数据库的连接。
  • {{图片名称| 环境变量名}}  -允许您图像的输入值的环境变量环境变量的另一种形象。在这里,我们使用例是无止境的-因为大多数应用将有图像的多层互相关。
这里有四个例子。你可以找到自定义模板24和运行所有自己。
图片

多层的Java(Solr中的-Tomcat的Nginx的 - 蒙戈)

图片
图片


多层的Java(-xe的-JBoss的Solr的甲骨文Nginx的)

图片
图片

多层的Java(ApacheLB-Tomcat的Solr的 - 卡桑德拉)

图片
图片

多层的Java(ApacheLB-码头 - Solr的 - 蒙戈)

图片
图片

配置和自动缩放任何云基础设施

一旦应用程序会自动保存,用户可以注册一个云提供商自动配置和12个不同的云终端包括VMware的vSphere中,OpenStack的和的CloudStack,亚马逊网络服务,Rackspace公司,微软Azure,DigitalOcean,IBM集群变焦的SoftLayer中,计算引擎谷歌和其他许多人。

首先,用户可以通过云服务供应商Rackspace公司注册的公司(例如)导航   云提供商,然后单击+ 按钮选择Rackspace公司需要Rackspace的API密钥提供公司-这可以从您帐户的设置部分进行检索,Rackspace的云控制面板。

然后,用户可以创建自动缩放策略的集群自动旋转了一个新的云服务器。这可以通过导航做 集群  ,然后单击+ 按钮,你可以选择基于容量的放置策略,然后编织为了促进跨多个主机安全跨容器通信,密码保护的集群网络层英寸 的自动缩放的策略,例如,一个虚拟机(或云服务器)被设置为10的最大数量。
现在,用户可以提供或基于UI的工作流程,也可以通过定义一个简单的基于YAML的机器就一些云服务器的写模板可供自助图书馆要求新建群集。

基于UI的工作流程-用户可以通过Rackspace的云服务器的请求导航 ,然后单击+ 按钮选择Rackspace公司一旦云服务提供商的选择,用户可以选择的区域,大小和图像要求。默认情况下,端口,Rackspace的云服务器开放的端口,以满足一定的要求(如:32000-59000的码头工人,编织6783,和5672的RabbitMQ的)。然后,集群被选中,您可以指定云服务器的数量。




写模板基于YAML机-用户可以浏览通过创建一个公司Rackspace公司书面机模板 ,并选择Rackspace公司通过单击+按钮  ,然后选择并购achine撰写 
这里是云服务器的请求模板4GB。
图片
写支持如下机器参数的模板:

  • 说明:蓝图/模板描述
  • instanceType :具体价值的云服务提供商(如general1-4)
  • 区域:特定值的云服务提供商(如IAD)
  • 图片:力-完全合格的映像ID /名称(如IAD / 5ed162cc-b4eb-4371- b24a-a0ae73376c73或vSphere虚拟机模板名称)
  • 用户名:可选-仅针对vSphere虚拟机模板的用户名
  • 密码:可选-仅针对vSphere虚拟机模板加密的密码。您可以使用终端加密密码https://www.dchq.io/#/encrypt
  • 网络:可选-云提供商(如默认)的具体数值
  • SecurityGroup :具体价值的云服务提供商(如dchq安全组)
  • 重点:云服务提供商的特定值(如私钥)
  • openPorts :可选-端口逗号分隔值
  • 统计:总没有虚拟机,则默认为1。
一旦写模板机器被保存时,用户可以从自助服务请求单元。用户可以点击自定义,然后选择云服务提供商聚集这些Rackspace公司部署云服务器。

Rackspace公司部署在该公司的多集群的Java应用程序


一旦云服务器配置的,用户可以部署一个多层次,新的基于云计算的服务器泊坞窗Java应用程序。这是通过导航到自助图书馆完成,然后点击了多层应用程序来完成要求定制。


用户可以选择一个环境变量(如DEV或QE)和点击Rackspace公司公司之前创建集群创建机器

集装箱终端来访问该浏览器运行

在旁边的容器在页面上实时应用名称的命令提示符图标应该的。这允许用户通过代理使用安全通信协议,消息队列到容器中。白名单命令可以由管理员的租户被定义为确保用户不运行任何不利变动的船只。

为Tomcat部署作为一个例子,我们使用命令提示符来确保Java WAR在/ usr /本地/ Tomcat的/ webapps /目录部署文件。

监控CPU,内存和容器运行I / O利用率

一旦应用程序运行起来,我们的开发人员能够监控CPU,内存和I运行容器/ O接收警报,当这些指标超过预定阈值。当我们的开发者执行功能测试和负载测试尤其有用。

用户可以更新历史监控分析和集装箱相关的问题或为部署。这可以通过点击来执行的操作的应用程序菜单运行和监视。自定义日期范围,你可以选择查看CPU,内存和I / O的历史。

当启用了持续交付WAR文件更新工作流程与詹金斯建设运行的应用程序被触发

对于那些谁想要重建应用程序代码中包含泊坞窗和图像的每一个新的应用程序更新纺容器跟随发展的“不可改变的”容器模型,DCHQ提供自动生成功能,使开发人员能够自动创建一个包含图片或私有的GitHub泊坞窗项目Dockerfiles Dockerfiles。

然而,许多开发人员可能需要使用Java WAR文件服务器上运行容器的最新应用来代替。为此,DCHQ允许工作流开发詹金斯和持续交付。这可以通过点击进行操作的应用程序菜单中的运行,然后选择持续交付。用户可以选择注册DCHQ一个詹金斯例如,在詹金斯实际工作中,会产生一个新的WAR文件,然后bash脚本抓住这个小部件和应用程序服务器和在部署中运行。一旦这一政策被保存,DCHQ会抓住最新一代詹金斯WAR文件触发的任何时间和运行部署的应用程序服务器。

开发人员,因此总会在运行最新的Java WAR文件容器中的开发/测试环境部署。

图片

向外延伸的Tomcat应用服务器集群,并采取服务发现框架更新负载均衡的优势

如果应用程序正在运行变得有限的资源,用户可以扩展应用程序,以满足日益增长的负荷。此外,用户还可以,例如,对外在工作时间和周末调度规模的扩大。

扩展1-2向外Tomcat服务器集群,用户可以在点击运行,在菜单中运行的应用程序,然后选择向外扩展。然后,用户可以指定一个新的簇大小,然后单击立即运行

执行向外扩张时,服务发现框架将被用于更新负载平衡器。一个插件将Apache HTTP服务器的Apache HTTP服务器上,以便它知道添加新的应用程序服务器执行自动更新httpd.conf文件。这是因为我们已经指定post_scale_out:应用服务器作为插件生命周期事件。
图片
申请时间表可以用来追踪到每个审计和诊断应用所做的更改。这可以从页面底部中展开的菜单运行该应用程序进行访问。在这种情况下,实施的Apache HTTP服务器插件的服务发现框架将自动应用程序服务器的规模仅次于集群。
图片
警报和通知,可当容器或主机关闭或当主机或容器的CPU和内存使用率超过定义的阈值。

结论

集装箱企业Java应用程序仍然是主要是由于现有的应用程序框架的组成不涉及复杂的依赖关系,外部整合或工作流后会自动调整以提供一个挑战。此外,该容器设计简要意味着新容器的开发者必须旋转和重新创建与每一个版本更新复杂的依赖关系和外部结合。

DCHQ,在托管和内部部署版本,解决了所有这些挑战,并提前通过应用程序框架的组合在图像有利的环境变量绑定,可以延长bash脚本调用插件简化了企业Java应用程序容器应用程序或时间后搁置和应用集群和自动缩放,支持多个主机或高可用性区域。

免费登记http://DCHQ.io或下载DCHQ场所
到可以访问多设备的Java应用程序模板,如监视应用程序生命周期管理功能,集装箱更新,沿着输入/输出和持续的交付规模。

No comments:

Post a Comment