摘要:摘要在之前的一篇博客中,我介紹了基于搭建單機版,但是僅僅使用了單個節點。具有容錯功能當容器由于節點崩潰等原因意外停止運行時,會自動將容器調度到其他節點。因此,目前僅適合運行無狀態的服務,而數據庫等有狀態服務應該多帶帶部署。
摘要: 在之前的一篇博客中,我介紹了基于Docker搭建單機版Mesos/Marathon,但是僅僅使用了單個節點。而在這篇博客中,我將介紹基于Docker搭建多節點Mesos/Marathon,開發者可以使用3個節點快速地搭建一個真正的分布式容器集群系統。服務發現和負載均衡是容器集群必不可少的功能,我選擇了Marathon LB來實現。
GitHub地址: kiwenlau/mesos-marathon-platform
作者: KiwenLau
日期: 2016-07-10
一. Mesos/Marathon簡介 1. MesosMesos是分布式集群資源管理系統,負責調度集群內的CPU,內存以及磁盤等資源。Hadoop MapReduce, Spark以及Storm等分布式計算框架很流行,但是為每一個計算框架搭建多帶帶的集群非常地浪費資源,也無法實現數據共享,而Mesos的設計初衷就是讓不同的分布式計算框架能夠共享一個集群。
Mesos資源調度算法分為兩個層次: Mesos監控集群的空余資源,并將空余資源按照一定規則分配給各個計算框架;而各個計算框架會根據需要選擇接受或者拒絕所分配的資源。這時,Mesos與各個計算框架都參與了資源的調度: Mesos負責分配資源; 而計算框架接受或者拒絕資源。因此,Mesos的責任非常清晰而且簡單:分配集群資源。Mesos的雙層調度算法提高了可擴展性,并且可以更方便地支持不同的計算框架。
目前主流的集群資源管理系統還有Hadoop YARN,Kubernetes以及Swarm。Hadoop YARN目前僅適合運行分布式計算框架例如Spark;Kubernetes與Swarm僅適合運行容器應用;而Mesos對分布式計算框架以及容器應用的支持都很成熟。并且,Kubernetes與Swarm可以作為計算框架運行在Mesos之上。Kubernetes的功能強大,但是有些過度設計導致復雜度很高,而Swarm的設計簡單很多但是功能相對缺乏,大家可以根據需要選擇。個人認為,使用Mesos的話,最好選擇Marathon作為容器編排系統,架構非常簡單,且功能豐富。
2. MarathonMarathon是容器編排系統,是運行于Mesos之上的眾多計算框架之一。用戶可以通過Marathon提交,監控并調度容器應用,然后Mesos負責運行容器。另外,Aurora與Marathon功能一致,同為容器編排系統。相比而言,Marathon的架構比Aurora更簡單,沒有從節點,且對Docker的支持更為完善。Marathon由Mesosphere公司負責開發,社區很活躍,文檔也很完善。
Marathon具有容錯功能:當容器由于節點崩潰等原因意外停止運行時,Marathon會自動將容器調度到其他節點。這一點類似進程管理工具例如Supervisor:當進程意外退出時,Supervisor會重啟進程。然而,自動容錯功能并不適合有狀態服務,即帶有數據卷(volume)的容器,例如MongoDB與MySQL。因為數據很難跨節點移動,目前的技術還不夠成熟。因此,Marathon目前僅適合運行無狀態的服務,而數據庫等有狀態服務應該多帶帶部署。這樣做也可以提高數據的安全性。
3. Marathon LBMarathon LB是Marathon的服務發現與負載均衡系統。Marathon LB通過使用Haproxy實現了代理服務器的功能。
當使用Marathon部署容器時,容器運行的節點(IP)與使用的端口(PORT)是Mesos/Marathon平臺負責調度的,無法事先確定。這樣的話,每次訪問服務時,需要手動去查詢容器運行的IP與PORT。并且,容器出錯時會發生重新調度,IP與PORT會變化。因此,訪問服務會非常不方便。通過使用Marathon LB可以配置服務的固定端口,而服務的IP就是運行Marathon LB的節點IP,這樣每次部署服務時,IP與PORT是固定的,就方便很多了。Marathon LB會監聽Marathon的調度事件,獲取容器運行的IP與PORT,然后更新代理服務器Haproxy的配置文件。因此,當部署新的容器或者容器發生變化時,仍然可以通過固定的IP與PORT訪問該容器。這就是所謂的服務發現。
同一個服務往往對應著多個容器副本,Marathon LB作為代理服務器,同時實現了負載均衡的功能。服務請求能夠使用Round Robin方式發送給各個容器。
二. 搭建步驟 1. 創建虛擬機按照使用Vagrant創建多節點虛擬機集群,可以快速地在單個機器上創建Mesos/Marathon平臺運行所需要的3個虛擬機節點。
其中,node1為主機點(Master),運行zookeeper, mesos_master, marathon以及marathon-lb容器; node2與node3為從節點(Slave),運行mesos_slave容器;使用marathon部署nginx時,nginx容器運行在從節點上。如下表所示:
節點 | IP | 運行的容器 |
---|---|---|
node1 | 192.168.59.1 | zookeeper, mesos_master, marathon, marathon-lb |
node2 | 192.168.59.2 | mesos_slave1, nginx |
node3 | 192.168.59.3 | mesos_slave2, nginx |
因為start-containers.sh使用了遠程啟動容器的方式,因此需要開啟Docker daemon的TCP監聽端口。提醒一下,開啟Docker daemon端口是不安全的,生產環境中不能打開,或者做好防火墻配置。不希望開啟Docker daemon的監聽端口的話,可以使用start-containers.sh中的命令直接運行容器,只是稍微麻煩一點。
Master, Slave1和Slave2:
sudo vim /etc/default/docker
修改DOCKER_OPTS
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
重啟Docker
sudo restart docker3. 下載Docker鏡像
Master:
sudo docker pull kiwenlau/zookeeper:3.4.8 sudo docker pull kiwenlau/mesos:0.26.0 sudo docker pull kiwenlau/marathon:1.1.1 sudo docker pull kiwenlau/marathonlb:1.3.0
Slave1 和 Slave2:
sudo docker pull kiwenlau/mesos:0.26.04. 下載GitHub倉庫
Master:
git clone https://github.com/kiwenlau/mesos-marathon-platform5. 運行容器
Master:
cd mesos-marathon-platform sudo ./start-containers.sh
網頁管理:
Mesos: http://192.168.59.1:5050/
Marathon: http://192.168.59.1:8080/
如果需要增加Slave節點,或者配置不同的節點IP,僅需修改start-contaniers.sh腳本中以下內容:
MASTER_IP=192.168.59.1 SLAVE_IP=(192.168.59.2 192.168.59.3)6. 運行Nginx:
下載nginx鏡像(Slave1和Slave2):
sudo docker pull nginx:1.10
運行Nginx(Master):
sudo ./run-nginx.sh
Nginx的的定義如下(nginx.json):
{ "id": "nginx", "labels": { "HAPROXY_GROUP": "external" }, "cpus": 0.2, "mem": 20.0, "instances": 2, "healthChecks": [{ "path": "/" }], "container": { "type": "DOCKER", "docker": { "image": "nginx:1.10", "network": "BRIDGE", "portMappings": [{ "containerPort": 80, "hostPort": 0, "servicePort": 10000, "protocol": "tcp" }] } } }
其中,servicePort表示nginx綁定的端口為10000,而marathon-lb容器運行的節點IP為192.168.59.1。因此nginx的訪問地址為:
http://192.168.59.1:10000/
而實際上,兩個nginx容器運行在Slave節點上,且端口是隨機分配的。
三. 參考Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26636.html
摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統。你在這里可以看到使用的列表和有什么關聯嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...
摘要:是一個集群管理器,提供了有效的跨分布式應用或框架的資源隔離和共享,可以運行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統。你在這里可以看到使用的列表和有什么關聯嗎是一個為分布式應用提供一致性服務的軟件,而是一個分布式應用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...
本文原文是 Deploy a Mesos Cluster with 7 Commands Using Docker 這個教程將給你展示怎樣使用 Docker 容器提供一個單節點的 Mesos 集群(未來的一篇文章將展示怎樣很容易的擴展這個到多個節點或者是見底部更新)。這意味著你可以使用 7 個命令啟動整個集群!不需要安裝任何東西除了一個正在運行的 Docker 服務器。 將啟動 4 個容器:...
摘要:由于沒有了中心化的負載均衡器,集群不會因某臺機器異常而導致整個服務對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內部一探究竟。 另外, Mesos 這一套東西雖然是久經企業級考驗的, 但是安裝、部署和使用相對復雜,上手有門檻。同時,在今年的 DockerCon 上,內置了Swarm 功能的 Dock...
摘要:本文是數人云工程師方志浩在微信群分享的實錄,與大家聊一聊應用容器在配置管理中遇到的問題以及解決方法。數人云分測試演示生產三種環境進行持續集成發布,同時數人云組件通過進行應用容器的封裝下發和管理。 本文是數人云工程師方志浩在DockOne微信群分享的實錄,與大家聊一聊應用容器在配置管理中遇到的問題以及解決方法。 隨著Docker技術的火熱發展, Docker在代碼構建發布中扮演著越來越重...
閱讀 3720·2023-04-25 17:45
閱讀 3431·2021-09-04 16:40
閱讀 1002·2019-08-30 13:54
閱讀 2131·2019-08-29 12:59
閱讀 1400·2019-08-26 12:11
閱讀 3280·2019-08-23 15:17
閱讀 1523·2019-08-23 12:07
閱讀 3882·2019-08-22 18:00