门户网站前台页面,缩短链接网站,网站title如何修改,相城区网络营销公司dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现#xff1f; 应用程序通常由多个组件组成#xff0c;例如应用程序服务器#xff0c;数据库#xff0c;Web服务器#xff0c;缓存和消息传递服务器。 通常 应用程序通常由多个组件组成例如应用程序服务器数据库Web服务器缓存和消息传递服务器。 通常每个组件的多个副本将根据您的应用程序的需求运行。 使用容器编排框架部署此应用程序意味着每个副本都将作为容器运行。 因此通常将应用程序部署为多容器应用程序。 每个容器在其生命周期内都分配有唯一的IP地址。 但是容器是短暂的可以通过业务流程框架终止并重新安排在其他主机上。 在这种情况下通常会为容器分配一个不同的IP地址。 这意味着部署在应用程序服务器中的应用程序不能依赖数据库的IP地址。 这是需要服务发现的地方。 因此将为组件的多个副本分配一个逻辑名称。 例如对于所有应用程序服务器容器为web 对于所有数据库容器为db 。 现在应用程序可以使用逻辑服务名称与数据库容器进行对话。 这使数据库容器可以在群集中的任何位置进行重新调度也可以动态扩展和缩减。 让我们看看如何在DC / OS中使用单个应用程序服务器和数据库服务器实例来完成此任务。 该博客将使用WildFly作为应用程序服务器并使用Couchbase作为数据库。 具有DC / OS的Mesos上的Couchbase群集提供了有关如何在DC / OS上设置Couchbase群集的更多详细信息。 该博客将使用以下主要步骤 设置DC / OS群集 马拉松比赛的定义 部署应用 本博客中使用的完整源代码位于github.com/arun-gupta/dcos-java-database 。 非常感谢unterstein创建了Maven插件并帮助我了解了DC / OS的内部工作原理。 设置DC / OS群集 使用CloudFormation模板可以轻松创建DC / OS集群。 可在AWS上安装DC / OS上获得详细的说明包括系统要求以及屏幕截图和设置。 CloudFormation输出看起来如下所示 记下为键DnsAddress和PublicSlaveDnsAddress显示的值。 第一个键的值可用于访问DC / OS GUI 如下所示 按照CLI中的说明配置DC / OS CLI 。 简而言之使用以下命令 dcos config set core.dcos_url http://${DnsAddress}将${DnsAddress}替换${DnsAddress}输出中的相应值。 dcos auth login dcos config show core.dcos_acs_token 。 如果尚未完成请从github.com/arun-gupta/dcos-java-database克隆存储库 。 创建一个新文件.dcos-token并将命令的输出复制到此文件中。 dcos package install marathon-lb 马拉松应用定义 Marathon框架用于调度DC / OS中的容器。 可以通过提供应用程序定义来定义马拉松应用程序 。 如前所述该博客将展示一个简单的Java应用程序如何与数据库对话。 我们将使用WildFly中部署的Java EE应用程序并将Couchbase用作数据库。 应用程序定义如下 { id:/webapp,apps:[ { id:database,cpus:4,mem:4096,instances:1,container:{ type:DOCKER,docker:{ image:arungupta/couchbase:travel,network:USER}},ipAddress:{ networkName:dcos}},{ id:web,dependencies:[ /webapp/database],cpus:2,mem:4096,instances:1,container:{ type:DOCKER,docker:{ image:arungupta/wildfly-couchbase-javaee:travel,network:USER,portMappings:[ { hostPort:0,containerPort:8080,protocol:tcp}]}},ipAddress:{ networkName:dcos},env:{ COUCHBASE_URI:database-webapp.marathon.containerip.dcos.thisdcos.directory},labels:{ HAPROXY_0_VHOST:DCOS-PublicSlaveLo-DD2EGGFVCJA0-1604955948.us-west-1.elb.amazonaws.com,HAPROXY_GROUP:external}}]
} 此应用程序定义中的关键点是什么 应用程序具有两个容器 database和web 。 Web容器对使用dependencies属性定义的数据库容器具有dependencies 。 database容器使用arungupta/couchbase:travel Docker映像。 该图像是从github.com/arun-gupta/couchbase-javaee/tree/master/couchbase创建的。 它使用Couchbase基本映像并使用Couchbase REST API来预配置数据库。 样本存储桶也被加载到数据库中。 web容器使用arungupta/wildfly-couchbase-javaee:travel图片。 该图像是从github.com/arun-gupta/couchbase-javaee/blob/master/Dockerfile创建的。 这是WildFly中捆绑的Java EE 7应用程序。 该应用程序使用COUCHBASE_URI作为环境变量来连接到Couchbase数据库。 该环境变量的值配置为使用DNS服务发现并按照“ 虚拟网络”中的说明派生。 确保更改HAPROXY_0_VHOST的值以匹配${PublicSlaveDnsAddress}输出中的${PublicSlaveDnsAddress}的值。 标签HAPROXY_0_VHOST指示Marathon-LB在具有虚拟主机的外部负载均衡器上公开Docker容器在我们的情况下为WildFly应用服务器。 标签键中的0对应于servicePort索引从0开始。如果您有多个servicePort定义则将其迭代为0、1、2依此类推。 使用marathon-lb部署内部和外部负载平衡的应用程序将提供有关如何配置marathon-lb的更多详细信息。 服务发现和负载平衡提供了有关DC / OS中服务发现和负载平衡的更多详细信息。 使用Maven部署应用程序 可以使用dcos-maven-plugin部署该应用程序。 插件看起来像 plugingroupIddcos/groupIdartifactIddcos-maven-plugin/artifactIdversion0.2/versionconfigurationdcosUrlhttp://DCOS-ElasticLoadBa-1TH4TXIU5P783-1163025470.us-west-1.elb.amazonaws.com//dcosUrldeployablegroup/deployableignoreSslCertificatetrue/ignoreSslCertificate/configurationexecutionsexecutioniddcos:deploy/idphaseinstall/phasegoalsgoaldeploy/goal/goals/execution/executions
/plugin 该片段的要点是 插件版本为0.2。 这表明该插件仍处于开发的早期阶段。 dcosUrl是${DnsAddress}输出中${DnsAddress}键的值。 该地址用于部署应用程序。 deployable元素支持不同类型的部署-应用程序组或Pod。 该元素是对插件的提示随着Marathon API的整合在以后的版本中可能会消失。 遵循11了解更多详细信息。 有关该插件的其他详细信息和配置请参见dcos-maven-plugin 。 部署应用程序 mvn install 显示以下输出 [INFO] --- dcos-maven-plugin:0.2:deploy (dcos:deploy) dcos-java-database ---
[INFO] About to execute DC/OS deploy
[INFO] app definition: /Users/arungupta/workspaces/dcos-java-database/app-definition.json
[INFO] dcos token: /Users/arungupta/workspaces/dcos-java-database/.dcos-token
[INFO] dcos url: http://DCOS-ElasticLoadBa-1TH4TXIU5P783-1163025470.us-west-1.elb.amazonaws.com/
[INFO] ignore ssl certificate: true
[INFO] deployable: group
[INFO] Response from DC/OS [200] {version:2017-03-07T13:27:49.970Z,deploymentId:dbc80f96-28cb-4040-8d0d-78452e461ec1} 这是DC / OS控制台的一些更新输出。 首次更新的“服务”选项卡 服务中的两个应用程序 数据库应用程序具有一项任务 数据库任务的状态 来自数据库任务的日志 它显示了来自Couchbase REST API的用于配置服务器的输出。 网络任务状态 来自Web任务的日志 它显示Java EE应用程序已成功部署。 访问应用程序 curl http://DCOS-PublicSlaveLo-DD2EGGFVCJA0-1604955948.us-west-1.elb.amazonaws.com/airlines/resources/airline 该地址是${PublicSlaveDnsAddress}输出中键${PublicSlaveDnsAddress}的值。 格式化的输出例如jq 如下所示 [{travel-sample: {country: United States,iata: Q5,callsign: MILE-AIR,name: 40-Mile Air,icao: MLA,id: 10,type: airline}},{travel-sample: {country: United States,. . .icao: RLA,id: 1203,type: airline}}
] 而已 如前所述此博客中使用的完整源代码位于github.com/arun-gupta/dcos-java-database 。 该博客显示了一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 有关更多信息请查看 DC / OS文件 容器上的Couchbase Couchbase 开发人员门户 在Couchbase论坛或堆栈溢出中提问 下载Couchbase 翻译自: https://www.javacodegeeks.com/2017/03/service-discovery-java-database-application-dcos.htmldc/os