成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于Docker搭建多節(jié)點(diǎn)Mesos/Marathon

ConardLi / 2240人閱讀

摘要:摘要在之前的一篇博客中,我介紹了基于搭建單機(jī)版,但是僅僅使用了單個(gè)節(jié)點(diǎn)。具有容錯(cuò)功能當(dāng)容器由于節(jié)點(diǎn)崩潰等原因意外停止運(yùn)行時(shí),會(huì)自動(dòng)將容器調(diào)度到其他節(jié)點(diǎn)。因此,目前僅適合運(yùn)行無狀態(tài)的服務(wù),而數(shù)據(jù)庫等有狀態(tài)服務(wù)應(yīng)該多帶帶部署。

摘要: 在之前的一篇博客中,我介紹了基于Docker搭建單機(jī)版Mesos/Marathon,但是僅僅使用了單個(gè)節(jié)點(diǎn)。而在這篇博客中,我將介紹基于Docker搭建多節(jié)點(diǎn)Mesos/Marathon,開發(fā)者可以使用3個(gè)節(jié)點(diǎn)快速地搭建一個(gè)真正的分布式容器集群系統(tǒng)。服務(wù)發(fā)現(xiàn)負(fù)載均衡是容器集群必不可少的功能,我選擇了Marathon LB來實(shí)現(xiàn)。

GitHub地址: kiwenlau/mesos-marathon-platform

作者: KiwenLau

日期: 2016-07-10

一. Mesos/Marathon簡(jiǎn)介 1. Mesos

Mesos是分布式集群資源管理系統(tǒng),負(fù)責(zé)調(diào)度集群內(nèi)的CPU,內(nèi)存以及磁盤等資源。Hadoop MapReduce, Spark以及Storm等分布式計(jì)算框架很流行,但是為每一個(gè)計(jì)算框架搭建多帶帶的集群非常地浪費(fèi)資源,也無法實(shí)現(xiàn)數(shù)據(jù)共享,而Mesos的設(shè)計(jì)初衷就是讓不同的分布式計(jì)算框架能夠共享一個(gè)集群。

Mesos資源調(diào)度算法分為兩個(gè)層次: Mesos監(jiān)控集群的空余資源,并將空余資源按照一定規(guī)則分配給各個(gè)計(jì)算框架;而各個(gè)計(jì)算框架會(huì)根據(jù)需要選擇接受或者拒絕所分配的資源。這時(shí),Mesos與各個(gè)計(jì)算框架都參與了資源的調(diào)度: Mesos負(fù)責(zé)分配資源; 而計(jì)算框架接受或者拒絕資源。因此,Mesos的責(zé)任非常清晰而且簡(jiǎn)單:分配集群資源。Mesos的雙層調(diào)度算法提高了可擴(kuò)展性,并且可以更方便地支持不同的計(jì)算框架。

目前主流的集群資源管理系統(tǒng)還有Hadoop YARN,Kubernetes以及Swarm。Hadoop YARN目前僅適合運(yùn)行分布式計(jì)算框架例如Spark;Kubernetes與Swarm僅適合運(yùn)行容器應(yīng)用;而Mesos對(duì)分布式計(jì)算框架以及容器應(yīng)用的支持都很成熟。并且,Kubernetes與Swarm可以作為計(jì)算框架運(yùn)行在Mesos之上。Kubernetes的功能強(qiáng)大,但是有些過度設(shè)計(jì)導(dǎo)致復(fù)雜度很高,而Swarm的設(shè)計(jì)簡(jiǎn)單很多但是功能相對(duì)缺乏,大家可以根據(jù)需要選擇。個(gè)人認(rèn)為,使用Mesos的話,最好選擇Marathon作為容器編排系統(tǒng),架構(gòu)非常簡(jiǎn)單,且功能豐富。

2. Marathon

Marathon是容器編排系統(tǒng),是運(yùn)行于Mesos之上的眾多計(jì)算框架之一。用戶可以通過Marathon提交,監(jiān)控并調(diào)度容器應(yīng)用,然后Mesos負(fù)責(zé)運(yùn)行容器。另外,Aurora與Marathon功能一致,同為容器編排系統(tǒng)。相比而言,Marathon的架構(gòu)比Aurora更簡(jiǎn)單,沒有從節(jié)點(diǎn),且對(duì)Docker的支持更為完善。Marathon由Mesosphere公司負(fù)責(zé)開發(fā),社區(qū)很活躍,文檔也很完善。

Marathon具有容錯(cuò)功能:當(dāng)容器由于節(jié)點(diǎn)崩潰等原因意外停止運(yùn)行時(shí),Marathon會(huì)自動(dòng)將容器調(diào)度到其他節(jié)點(diǎn)。這一點(diǎn)類似進(jìn)程管理工具例如Supervisor:當(dāng)進(jìn)程意外退出時(shí),Supervisor會(huì)重啟進(jìn)程。然而,自動(dòng)容錯(cuò)功能并不適合有狀態(tài)服務(wù),即帶有數(shù)據(jù)卷(volume)的容器,例如MongoDB與MySQL。因?yàn)閿?shù)據(jù)很難跨節(jié)點(diǎn)移動(dòng),目前的技術(shù)還不夠成熟。因此,Marathon目前僅適合運(yùn)行無狀態(tài)的服務(wù),而數(shù)據(jù)庫等有狀態(tài)服務(wù)應(yīng)該多帶帶部署。這樣做也可以提高數(shù)據(jù)的安全性。

3. Marathon LB

Marathon LB是Marathon的服務(wù)發(fā)現(xiàn)負(fù)載均衡系統(tǒng)。Marathon LB通過使用Haproxy實(shí)現(xiàn)了代理服務(wù)器的功能。

當(dāng)使用Marathon部署容器時(shí),容器運(yùn)行的節(jié)點(diǎn)(IP)與使用的端口(PORT)是Mesos/Marathon平臺(tái)負(fù)責(zé)調(diào)度的,無法事先確定。這樣的話,每次訪問服務(wù)時(shí),需要手動(dòng)去查詢?nèi)萜鬟\(yùn)行的IP與PORT。并且,容器出錯(cuò)時(shí)會(huì)發(fā)生重新調(diào)度,IP與PORT會(huì)變化。因此,訪問服務(wù)會(huì)非常不方便。通過使用Marathon LB可以配置服務(wù)的固定端口,而服務(wù)的IP就是運(yùn)行Marathon LB的節(jié)點(diǎn)IP,這樣每次部署服務(wù)時(shí),IP與PORT是固定的,就方便很多了。Marathon LB會(huì)監(jiān)聽Marathon的調(diào)度事件,獲取容器運(yùn)行的IP與PORT,然后更新代理服務(wù)器Haproxy的配置文件。因此,當(dāng)部署新的容器或者容器發(fā)生變化時(shí),仍然可以通過固定的IP與PORT訪問該容器。這就是所謂的服務(wù)發(fā)現(xiàn)。

同一個(gè)服務(wù)往往對(duì)應(yīng)著多個(gè)容器副本,Marathon LB作為代理服務(wù)器,同時(shí)實(shí)現(xiàn)了負(fù)載均衡的功能。服務(wù)請(qǐng)求能夠使用Round Robin方式發(fā)送給各個(gè)容器。

二. 搭建步驟 1. 創(chuàng)建虛擬機(jī)

按照使用Vagrant創(chuàng)建多節(jié)點(diǎn)虛擬機(jī)集群,可以快速地在單個(gè)機(jī)器上創(chuàng)建Mesos/Marathon平臺(tái)運(yùn)行所需要的3個(gè)虛擬機(jī)節(jié)點(diǎn)。

其中,node1為主機(jī)點(diǎn)(Master),運(yùn)行zookeeper, mesos_master, marathon以及marathon-lb容器; node2與node3為從節(jié)點(diǎn)(Slave),運(yùn)行mesos_slave容器;使用marathon部署nginx時(shí),nginx容器運(yùn)行在從節(jié)點(diǎn)上。如下表所示:

節(jié)點(diǎn) IP 運(yùn)行的容器
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
2. 開啟Docker daemon的監(jiān)聽端口

因?yàn)?strong>start-containers.sh使用了遠(yuǎn)程啟動(dòng)容器的方式,因此需要開啟Docker daemon的TCP監(jiān)聽端口。提醒一下,開啟Docker daemon端口是不安全的,生產(chǎn)環(huán)境中不能打開,或者做好防火墻配置。不希望開啟Docker daemon的監(jiān)聽端口的話,可以使用start-containers.sh中的命令直接運(yùn)行容器,只是稍微麻煩一點(diǎn)。

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 docker
3. 下載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.0
4. 下載GitHub倉庫

Master:

git clone https://github.com/kiwenlau/mesos-marathon-platform
5. 運(yùn)行容器

Master:

cd mesos-marathon-platform
sudo ./start-containers.sh

網(wǎng)頁管理:

Mesos: http://192.168.59.1:5050/

Marathon: http://192.168.59.1:8080/

如果需要增加Slave節(jié)點(diǎn),或者配置不同的節(jié)點(diǎn)IP,僅需修改start-contaniers.sh腳本中以下內(nèi)容:

MASTER_IP=192.168.59.1
SLAVE_IP=(192.168.59.2 192.168.59.3)
6. 運(yùn)行Nginx:

下載nginx鏡像(Slave1和Slave2):

sudo docker pull nginx:1.10

運(yùn)行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容器運(yùn)行的節(jié)點(diǎn)IP為192.168.59.1。因此nginx的訪問地址為:

http://192.168.59.1:10000/

而實(shí)際上,兩個(gè)nginx容器運(yùn)行在Slave節(jié)點(diǎn)上,且端口是隨機(jī)分配的。

三. 參考

Mesos: A Platform for Fine-Grained Resource Sharing in the Data Center

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26636.html

相關(guān)文章

  • 關(guān)于 Mesos,你知道少?

    摘要:是一個(gè)集群管理器,提供了有效的跨分布式應(yīng)用或框架的資源隔離和共享,可以運(yùn)行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統(tǒng)。你在這里可以看到使用的列表和有什么關(guān)聯(lián)嗎是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,而是一個(gè)分布式應(yīng)用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...

    cartoon 評(píng)論0 收藏0
  • 關(guān)于 Mesos,你知道少?

    摘要:是一個(gè)集群管理器,提供了有效的跨分布式應(yīng)用或框架的資源隔離和共享,可以運(yùn)行。更貼近于層,而在之上。所以有人稱其為,或者分布式操作系統(tǒng)。你在這里可以看到使用的列表和有什么關(guān)聯(lián)嗎是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,而是一個(gè)分布式應(yīng)用。 showImg(https://segmentfault.com/img/bVrBZJ); 聽過不少人在討論 Mesos,然而并不是很明白 Mesos ...

    xietao3 評(píng)論0 收藏0
  • 使用 Docker, 7 個(gè)命令部署一個(gè) Mesos 集群

    本文原文是 Deploy a Mesos Cluster with 7 Commands Using Docker 這個(gè)教程將給你展示怎樣使用 Docker 容器提供一個(gè)單節(jié)點(diǎn)的 Mesos 集群(未來的一篇文章將展示怎樣很容易的擴(kuò)展這個(gè)到多個(gè)節(jié)點(diǎn)或者是見底部更新)。這意味著你可以使用 7 個(gè)命令啟動(dòng)整個(gè)集群!不需要安裝任何東西除了一個(gè)正在運(yùn)行的 Docker 服務(wù)器。 將啟動(dòng) 4 個(gè)容器:...

    dadong 評(píng)論0 收藏0
  • 基于 Docker 1.12 Swarm 的集群管理開發(fā)實(shí)踐

    摘要:由于沒有了中心化的負(fù)載均衡器,集群不會(huì)因某臺(tái)機(jī)器異常而導(dǎo)致整個(gè)服務(wù)對(duì)外不可用,很好的避免了單點(diǎn)問題,同時(shí)也帶了可擴(kuò)展性。 Mesos/Marathon 折騰久了,我們一直希望有機(jī)會(huì)深入到 Swarm 內(nèi)部一探究竟。 另外, Mesos 這一套東西雖然是久經(jīng)企業(yè)級(jí)考驗(yàn)的, 但是安裝、部署和使用相對(duì)復(fù)雜,上手有門檻。同時(shí),在今年的 DockerCon 上,內(nèi)置了Swarm 功能的 Dock...

    My_Oh_My 評(píng)論0 收藏0
  • 應(yīng)用容器env化實(shí)戰(zhàn)

    摘要:本文是數(shù)人云工程師方志浩在微信群分享的實(shí)錄,與大家聊一聊應(yīng)用容器在配置管理中遇到的問題以及解決方法。數(shù)人云分測(cè)試演示生產(chǎn)三種環(huán)境進(jìn)行持續(xù)集成發(fā)布,同時(shí)數(shù)人云組件通過進(jìn)行應(yīng)用容器的封裝下發(fā)和管理。 本文是數(shù)人云工程師方志浩在DockOne微信群分享的實(shí)錄,與大家聊一聊應(yīng)用容器在配置管理中遇到的問題以及解決方法。 隨著Docker技術(shù)的火熱發(fā)展, Docker在代碼構(gòu)建發(fā)布中扮演著越來越重...

    kid143 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<