DC / OS中具有Java和数据库应用程序的服务发现
該博客將展示一個簡單的Java應用程序如何使用DC / OS中的服務發現與數據庫進行對話。
為什么要進行服務發現?
應用程序通常由多個組件組成,例如應用程序服務器,數據庫,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部署該應用程序。
插件看起來像:
<plugin><groupId>dcos</groupId><artifactId>dcos-maven-plugin</artifactId><version>0.2</version><configuration><dcosUrl>http://DCOS-ElasticLoadBa-1TH4TXIU5P783-1163025470.us-west-1.elb.amazonaws.com/</dcosUrl><deployable>group</deployable><ignoreSslCertificate>true</ignoreSslCertificate></configuration><executions><execution><id>dcos:deploy</id><phase>install</phase><goals><goal>deploy</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.html
總結
以上是生活随笔為你收集整理的DC / OS中具有Java和数据库应用程序的服务发现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux目录创建文件(linux 目录
- 下一篇: ddos攻击犯罪(ddos攻击犯人)