Apache Mesos + Marathon和Java EE
Apache Mesos是一個開放源代碼群集管理器,可在分布式應用程序或框架之間提供有效的資源隔離和共享。
Apache Mesos從計算機(物理或虛擬)上提取CPU,內存,存儲和其他計算資源,從而使容錯和彈性的分布式系統易于構建和有效運行。 它在計算機內部使用應用程序的動態分配。
總之, Apache Mesos由主服務器和從服務器組成。 主機負責將工作分配給多個從屬,并了解每個從屬的狀態。 對于容錯,您可能擁有多個主機。
然后,我們有負責執行應用程序的從站。 從站通過容器(cgroup)隔離執行程序和任務(應用程序)。
因此,每個從站都提供其資源,而Apache Mesos負責調度哪個從站將執行它。 請注意,如果每個從站都具有足夠的資源來執行它,那么它可以執行多個任務。
例如,假設一個從站具有4個CPU(為簡化起見,我將不考慮其他參數),那么它可以執行1個任務(4個CPU),2個任務(2個CPU)……
但是Apache Mesos僅管理資源,但是要構建PaaS,我們需要更多類似服務發現或擴展功能的東西。 這就是馬拉松比賽的目的 。
Marathon是在A pache Mesos之上運行的框架,并提供:
- 運行Linux二進制文件
- 集群范圍的流程主管
- 服務發現和負載平衡(HAProxy)
- 自動化的軟件和硬件故障處理
- 部署和擴展
- REST友好
但是使用Marathon的主要優點之一是它可以簡化并自動執行所有常見任務。
因此, Marathon的主要任務是將應用程序部署到不同的組件,因此,如果一個組件失敗,則將有其他從屬服務傳入的通信。 但是,此外, Marathon將負責將應用程序重新分配給另一個從站,以便每個應用程序的從站數量保持恒定。
在開發人員機器上安裝Apache Mesos和Marathon就像安裝VirtualBox , Vagrant和git一樣容易。
克隆下一個倉庫:
git clone https://github.com/mesosphere/playa-mesos.git只需從目錄運行vagrant-up命令:
cd playa-mesos vagrant up第一次需要一些時間,因為它需要下載幾個組件。
之后,您可以通過連接到Mesos和Marathon Web Console來檢查它是否已正確安裝。 http://10.141.141.10:5050和http://10.141.141.10:8080
下一步是安裝HAProxy 。 盡管不是必需的,但是如果要執行服務發現和負載平衡,則“需要” HAProxy 。
運行vagrant ssh 。
安裝HAProxy
sudo apt-get install haproxy下載haproxy-marathon-bridge腳本:
wget https://raw.githubusercontent.com/mesosphere/marathon/master/bin/haproxy-marathon-bridge chmod 755 haproxy-marathon-bridge./haproxy_marathon_bridge localhost:8080 > haproxy.cfg haproxy -f haproxy.cfg -p haproxy.pid -sf $(cat haproxy.pid)并配置HAproxy 。 為了避免每次拓撲更改時都必須手動運行此命令,可以運行:
./haproxy_marathon_bridge install_haproxy_system localhost:8080它會安裝腳本本身, HAProxy和一個cronjob ,它每分鐘一次ping指定的Marathon服務器之一,并在發生任何更改時刷新HAProxy 。
僅此而已 ,現在我們安裝了帶有Mesosphere和HAProxy的 Apache Mesos 。 現在該部署Java EE應用程序服務器了。 在這種情況下,我們將使用Apache TomEE 。
我們唯一需要做的就是將JSON文檔作為POST發送到http://10.141.141.10:8080/v2/apps
{"id": "projectdemo","cmd": "cd apache-tomee-plus* && sed \"s/8080/$PORT/g\" < ./conf/server.xml > ./conf/server-mesos.xml && ./bin/catalina.sh run -config ./conf/server-mesos.xml","mem": 256,"cpus": 0.5,"instances": 1,"ports":[10000],"constraints": [["hostname", "UNIQUE"]],"uris": ["http://ftp.cixug.es/apache/tomee/tomee-1.7.1/apache-tomee-1.7.1-plus.tar.gz"] }該JSON文檔將使Marathon在一個節點上部署該應用程序。 讓我們解釋每個屬性:
id:是應用程序的id,這里沒有太多秘密。
cmd :選擇節點就緒時將執行的命令。 在這種情況下,請注意,我們正在創建server-mesos.xml文件,它是server.xml文件的修改版本,但將8080端口替換為$ PORT var。 現在就足夠了。 最后,它使用server-mesos.xml配置文件啟動TomEE 。
mem :節點中將需要的內存。
cpus :節點中將需要的Cpu資源。
instance :我們要復制此應用程序的節點數。 在這種情況下,只有一個,因為我們在本地運行。
ports :哪個端口將所有應用程序實例分組。 基本上,此端口由
HAProxy路由到正確的實例。 我們將在下一段中深入解釋。
約束 :約束控制應用程序的運行位置,以優化容錯能力或位置。 在這種情況下,我們設置每個應用程序應該在不同的從屬設備中。 使用這種方法可以避免端口沖突。
uris :設置要在執行cmd部分之前執行的URI 。 在已知壓縮算法的情況下,它會自動解壓縮。 因此,您可以直接在cmd中執行cd命令,而不必手動將其解壓縮。
因此,讓我解釋一下這里發生的事情或Mesosphere的作用:
首先,讀取JSON文檔并檢查哪個從站具有可以處理此服務的節點。 在這種情況下,只需找到一個即可。 (實例= 1)。
找到后,將下載uri元素,將其解壓縮,然后執行在中指定的命令
當前目錄中的cmd屬性。
就這樣。 但是,等待什么是端口和$ PORT呢?
$ PORT是Mesosphere將分配給要與之通信的節點的隨機端口。 此端口用于確保使用重疊的端口分配的Marathon不能運行兩個應用程序。
而且通過在群集中的每個主機上運行一個TCP代理,并將其在localhost上的靜態端口透明地轉發到運行該應用程序的主機,它還用于服務發現和負載平衡。 這樣,客戶端只需連接到該端口,發現的實現細節就被完全抽象掉了。
因此,我們要做的第一件事是修改TomEE的配置以從Marathon分配的隨機端口開始,因此,我們創建了一個新的server.xml文件并將偵聽端口設置為$ PORT 。
因此,如果端口是隨機的,那么如果客戶端不知道從哪個端口啟動,該如何連接? 這是端口屬性的目的。 在此屬性中,我們設置為:當我連接到端口10000時,我想連接到已定義并部署到任何從站的應用程序,而與實例數無關。
是的,它可能有點復雜,但讓我用一個簡單的示例進行說明:
假設我有一個與以前相同的示例,但是有兩個實例(instances = 2)。 兩個TomEE實例都將在兩個不同的從屬設備(因此在不同的節點)和不同的端口中啟動。 假設31456和31457 。 那么我們如何連接到他們呢?
簡單。 您可以使用Marathon的IP和將要訪問該特定服務器的隨機端口( http://10.141.141.10:31456/ ),也可以使用全局定義的端口( http://10.141.141.10:10000 / ),在這種情況下, HAProxy將路由到一個實例(取決于負載平衡規則)。
請注意,這對我們如何在Marathon內的應用程序之間進行通信有很大的影響,因為如果需要在Marathon內部署的應用程序之間進行內部通信,則只需知道該全局端口,因為可以將主機設置為HAProxy來設置localhost將解決它。 因此,從Marathon應用程序中,我們可以簡單地使用http:// localhost:10000 /與TomEE通信,因為HAProxy隨后會將請求路由到實際運行該服務實例的主機和端口。 在下一張圖片中,您可以看到Marathon的儀表板以及如何部署應用程序。 請注意,您可以看到已部署應用程序的IP和端口。 您可以通過單擊它或使用Marathon IP (與該鏈接中提供的相同)但使用端口10000進行訪問 。 請記住, HAProxy每分鐘都會更新一次,因此,如果它通過使用隨機端口而不是使用端口10000起作用,則可能需要等待一段時間才能刷新HAProxy數據庫。
這就是全部,正如您可能會看到的, Apache Mesos和Marathon并不像您最初想象的那么難。
還要注意,這是一篇有關Mesos和Java EE的“ Hello World”文章,但是Mesos和Mesosphere不僅限于服務的健康檢查,運行Docker容器,Artifact Storage或定義依賴項,但我發現運行此功能一個簡單的例子,幫助我在很大程度上闡明了中間層概念,這對于更復雜的場景是一個很好的起點。
翻譯自: https://www.javacodegeeks.com/2015/04/apache-mesos-marathon-and-java-ee.html
總結
以上是生活随笔為你收集整理的Apache Mesos + Marathon和Java EE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软发布 Win11 Build 235
- 下一篇: B 社回复网友:英特尔旗舰显卡 Arc