如何安裝與使用docker Mesos,一步步教你

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2020/05/15/12897275.html
-Advertisement-
Play Games

mesos,節點,master,Mesos,marathon Mesos 安裝與使用 以 Mesos 結合 Marathon 應用框架為例,來看下如何快速搭建一套 Mesos 平臺。 Marathon 是可以跟 Mesos 一起協作的一個 framework,基於 Scala 實現,可以實現保持應用 ...


 

dockerMesos 安裝與使用[docker中文手冊]

mesos,節點,master,Mesos,marathon

Mesos 安裝與使用

以 Mesos 結合 Marathon 應用框架為例,來看下如何快速搭建一套 Mesos 平臺。

Marathon 是可以跟 Mesos 一起協作的一個 framework,基於 Scala 實現,可以實現保持應用的持續運行。

另外,Mesos 預設利用 ZooKeeper 來進行多個主節點之間的選舉,以及從節點發現主節點的過程。一般在生產環境中,需要啟動多個 Mesos master 服務(推薦 3 或 5 個),並且推薦使用 supervisord 等進程管理器來自動保持服務的運行。

ZooKeeper 是一個分散式集群中信息同步的工具,通過自動在多個節點中選舉 leader,保障多個節點之間的某些信息保持一致性。
這裡還要註意:光理論是不夠的。在此順便送大家十套2020最新JAVA架構項目實戰教程及大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,還可以跟老架構師交流

安裝

安裝主要需要 mesos、zookeeper 和 marathon 三個軟體包。

Mesos 也採用了經典的主-從結構,一般包括若幹主節點和大量從節點。其中,mesos master 服務和 zookeeper 需要部署到所有的主節點,mesos slave 服務需要部署到所有從節點。marathon 可以部署到主節點。

安裝可以通過源碼編譯、軟體源或者 Docker 鏡像方式進行,下麵分別進行介紹。

源碼編譯

源碼編譯方式可以保障獲取到最新版本,但編譯過程比較費時間。

首先,從 apache.org 開源網站下載最新的源碼。

1
$ git clone https://git-wip-us.apache.org/repos/asf/mesos.git

其中,主要代碼在 src 目錄下,應用框架代碼在 frameworks 目錄下,文檔在 docs 目錄下,include 中包括了跟 Mesos 打交道使用的一些 API 定義頭文件。

安裝依賴,主要包括 Java 運行環境、Linux 上的自動編譯環境等。

1
2
3
4
$ sudo apt-get update
$ sudo apt-get install -y openjdk-8-jdk autoconf libtool
build-essential python-dev python-boto libcurl4-nss-dev
libsasl2-dev maven libapr1-dev libsvn-dev

後面就是常規 C++ 項目的方法,configure 之後利用 Makefile 進行編譯和安裝。

1
2
3
4
5
6
$ cd mesos
$ ./bootstrap
$ mkdir build
$ cd build && ../configure --with-network-isolator
$ make
$ make check && sudo make install

軟體源安裝

通過軟體源方式進行安裝相對會省時間,但往往不是最新版本。

這裡以 Ubuntu 系統為例,首先添加軟體源地址。

1
2
3
4
5
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
$ DISTRO=$(lsb_release -is | tr "[:upper:]" "[:lower:]")
$ CODENAME=$(lsb_release -cs)
$ echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" |
sudo tee /etc/apt/sources.list.d/mesosphere.list

刷新本地軟體倉庫信息並安裝 zookeeper、mesos、marathon 三個軟體包。

1
$ sudo apt-get -y update && sudo apt-get -y install zookeeper mesos marathon

註意,Marathon 最新版本需要 jdk 1.8+ 的支持。如果系統中有多個 Java 版本,需要檢查配置預設的 JDK 版本符合要求。

1
$ sudo update-alternatives --config java

安裝 Mesos 成功後,會在 /usr/sbin/ 下麵發現 mesos-master 和 mesos-slave 兩個二進位文件,分別對應主節點上需要運行的管理服務和從節點上需要運行的任務服務。

用戶可以手動運行二進位文件啟動服務,也可以通過 service 命令來方便進行管理。

例如,在主節點上重啟 Mesos 管理服務:

1
$ sudo service mesos-master restart

通過 service 命令來管理,實際上是通過調用 /usr/bin/mesos-init-wrapper 腳本文件進行處理。

基於 Docker

需要如下三個鏡像。

  • ZooKeeper:https://registry.hub.docker.com/u/garland/zookeeper/
  • Mesos:https://registry.hub.docker.com/u/garland/mesosphere-docker-mesos-master/
  • Marathon:https://registry.hub.docker.com/u/garland/mesosphere-docker-marathon/

其中 mesos-master 鏡像在後面將分別作為 master 和 slave 角色進行使用。

首先,拉取三個鏡像。

1
2
3
$ docker pull garland/zookeeper
$ docker pull garland/mesosphere-docker-mesos-master
$ docker pull garland/mesosphere-docker-marathon

導出主節點機器的地址到環境變數。

1
$ HOST_IP=10.0.0.2

在主節點上啟動 Zookeepr 容器。

1
2
3
4
5
docker run -d 
-p 2181:2181
-p 2888:2888
-p 3888:3888
garland/zookeeper

在主節點上啟動 Mesos Master 服務容器。

1
2
3
4
5
6
7
8
9
10
11
12
docker run --net="host" 
-p 5050:5050
-e "MESOS_HOSTNAME=${HOST_IP}"
-e "MESOS_IP=${HOST_IP}"
-e "MESOS_ZK=zk://${HOST_IP}:2181/mesos"
-e "MESOS_PORT=5050"
-e "MESOS_LOG_DIR=/var/log/mesos"
-e "MESOS_QUORUM=1"
-e "MESOS_REGISTRY=in_memory"
-e "MESOS_WORK_DIR=/var/lib/mesos"
-d
garland/mesosphere-docker-mesos-master

在主節點上啟動 Marathon。

1
2
3
4
docker run 
-d
-p 8080:8080
garland/mesosphere-docker-marathon --master zk://${HOST_IP}:2181/mesos --zk zk://${HOST_IP}:2181/marathon

在從節點上啟動 Mesos slave 容器。

1
2
3
4
5
6
7
docker run -d 
--name mesos_slave_1
--entrypoint="mesos-slave"
-e "MESOS_MASTER=zk://${HOST_IP}:2181/mesos"
-e "MESOS_LOG_DIR=/var/log/mesos"
-e "MESOS_LOGGING_LEVEL=INFO"
garland/mesosphere-docker-mesos-master:latest

接下來,可以通過訪問本地 8080 埠來使用 Marathon 啟動任務了。

配置說明

下麵以本地通過軟體源方式安裝為例,解釋如何修改各個配置文件。

ZooKeepr

ZooKeepr 是一個分散式應用的協調工具,用來管理多個主節點的選舉和冗餘,監聽在 2181 埠。推薦至少佈置三個主節點來被 ZooKeeper 維護。

配置文件預設都在 /etc/zookeeper/conf/ 目錄下。比較關鍵的配置文件有兩個:myid 和 zoo.cfg

myid 文件會記錄加入 ZooKeeper 集群的節點的序號(1-255之間)。/var/lib/zookeeper/myid 文件其實也是軟連接到了該文件。

比如配置某節點序號為 1,則需要在該節點上執行:

1
$ echo 1 | sudo dd of=/etc/zookeeper/conf/myid

節點序號在 ZooKeeper 集群中必須唯一,不能出現多個擁有相同序號的節點。

另外,需要修改 zoo.cfg 文件,該文件是主配置文件,主要需要添加上加入 ZooKeeper 集群的機器的序號和對應監聽地址。

例如,現在 ZooKeeper 集群中有三個節點,地址分別為 10.0.0.210.0.0.310.0.0.4,序號分別配置為 234

則配置如下的三行:

1
2
3
server.2=10.0.0.2:2888:3888
server.3=10.0.0.3:2888:3888
server.4=10.0.0.4:2888:3888

其中第一個埠 2888 負責從節點連接到主節點的;第二個埠 3888 則負責主節點進行選舉時候通信。

也可以用主機名形式,則需要各個節點 /etc/hosts 文件中都記錄地址到主機名對應的映射關係。

完成配置後,啟動 ZooKeeper 服務。

1
$ sudo service zookeeper start

Mesos

Mesos 的預設配置目錄有三個:

  • /etc/mesos/:主節點和從節點都會讀取的配置文件,最關鍵的是 zk 文件存放主節點的信息;
  • /etc/mesos-master/:只有主節點會讀取的配置,等價於啟動 mesos-master 命令時候的預設選項;
  • /etc/mesos-slave/:只有從節點會讀取的配置,等價於啟動 mesos-master 命令時候的預設選項。

最關鍵的是需要在所有節點上修改 /etc/mesos/zk,寫入主節點集群的 ZooKeeper 地址列表,例如:

1
zk://10.0.0.2:2181,10.0.0.3:2181,10.0.0.4:2181/mesos

此外,/etc/default/mesos/etc/default/mesos-master/etc/default/mesos-slave 這三個文件中可以存放一些環境變數定義,Mesos 服務啟動之前,會將這些環境變數導入進來作為啟動參數。格式為 MESOS_OPTION_NAME

下麵分別說明在主節點和從節點上的配置。

主節點

一般只需要關註 /etc/mesos-master/ 目錄下的文件。預設情況下目錄下為空。

該目錄下文件命名和內容需要跟 mesos-master 支持的命令行選項一一對應。可以通過 mesos-master --help 命令查看支持的選項。

例如某個文件 key 中內容為 value,則在 mesos-master 服務啟動的時候,會自動添加參數 --key=value 給二進位命令。

例如,mesos-master 服務預設監聽在 loopback 埠,即 127.0.0.1:5050,我們需要修改主節點監聽的地址,則可以創建 /etc/mesos-master/ip 文件,在其中寫入主節點監聽的外部地址。

為了正常啟動 mesos-master 服務,還需要指定 work_dir 參數(表示應用框架的工作目錄)的值,可以通過創建 /etc/mesos-master/work_dir 文件,在其中寫入目錄,例如 /var/lib/mesos。工作目錄下會生成一個 replicated_log 目錄,會存有各種同步狀態的持久化信息。

以及指定 quorum 參數的值,該參數用來表示 ZooKeeper 集群中要求最少參加表決的節點數目。一般設置為比 ZooKeeper 集群中節點個數的半數多一些(比如三個節點的話,可以配置為 2)。

此外,要修改 Mesos 集群的名稱,可以創建 /etc/mesos-master/cluster 文件,在其中寫入集群的別名,例如 MesosCluster

總結下,建議在 /etc/mesos-master 目錄下,配置至少四個參數文件:ipquorumwork_dircluster

修改配置之後,需要啟動服務即可生效。

1
$ sudo service mesos-master start

 

更多選項可以參考後面的配置項解析章節。

主節點服務啟動後,則可以在從節點上啟動 mesos-slave 服務來加入主節點的管理。

從節點

一般只需要關註 /etc/mesos-slave/ 目錄下的文件。預設情況下目錄下為空。

文件命名和內容也是跟主節點類似,對應二進位文件支持的命令行參數。

建議在從節點上,創建 /etc/mesos-slave/ip 文件,在其中寫入跟主節點通信的地址。

修改配置之後,也需要重新啟動服務。

1
$ sudo service mesos-slave start

更多選項可以參考後面的配置項解析章節。

Marathon

Marathon 作為 Mesos 的一個應用框架,配置要更為簡單,必需的配置項有 --master 和 --zk

安裝完成後,會在 /usr/bin 下多一個 marathon shell 腳本,為啟動 marathon 時候執行的命令。

配置目錄為 /etc/marathon/conf(需要手動創建),此外預設配置文件在 /etc/default/marathon

我們手動創建配置目錄,並添加配置項(文件命名和內容跟 Mesos 風格一致),讓 Marathon 能連接到已創建的 Mesos 集群中。

1
2
$ sudo mkdir -p /etc/marathon/conf
$ sudo cp /etc/mesos/zk /etc/marathon/conf/master

同時,讓 Marathon 也將自身的狀態信息保存到 ZooKeeper 中。創建 /etc/marathon/conf/zk 文件,添加 ZooKeeper 地址和路徑。

1
zk://10.0.0.2:2181,10.0.0.2:2181,10.0.0.2:2181/marathon

啟動 marathon 服務。

1
$ sudo service marathon start

訪問 Mesos 圖形界面

Mesos 自帶了 Web 圖形界面,可以方便用戶查看集群狀態。

用戶在 Mesos 主節點服務和從節點服務都啟動後,可以通過瀏覽器訪問主節點 5050 埠,看到類似如下界面,已經有兩個 slave 節點加入了。

mesos 界面查看加入的 slave 節點

通過 Slaves 標簽頁能看到加入集群的從節點的信息。

如果沒有啟動 Marathon 服務,在 Frameworks 標簽頁下將看不到任何內容。

訪問 Marathon 圖形界面

Marathon 服務啟動成功後,在 Mesos 的 web 界面的 Frameworks 標簽頁下麵將能看到名稱為 marathon 的框架出現。

同時可以通過瀏覽器訪問 8080 埠,看到 Marathon 自己的管理界面。

marathon 圖形管理界面

此時,可以通過界面或者 REST API 來創建一個應用,Marathon 會保持該應用的持續運行。

marathon 查看任務支持的參數

通過界面方式可以看到各任務支持的參數(包括資源、命令、環境變數、健康檢查等),同時可以很容易地修改任務運行實例數進行擴展,非常適合進行測試。

如果要更自動化地使用 Marathon,則需要通過它的 REST API 進行操作。

一般的,啟動新任務需要先創建一個定義模板(JSON 格式),然後發到指定的 API。

例如,示例任務 basic-0 的定義模板為:

1
2
3
4
5
6
7
{
"id": "basic-0",
"cmd": "while [ true ] ; do echo "Hello Marathon" ; sleep 5 ; done",
"cpus": 0.1,
"mem": 10.0,
"instances": 1
}

該任務申請資源為 0.1 個單核 CPU 資源和 10 MB 的記憶體資源,具體命令為每隔五秒鐘用 shell 列印一句 Hello Marathon

可以通過如下命令發出 basic-0 任務到 Marathon 框架,框架會分配任務到某個滿足條件的從節點上,成功會返回一個 json 對象,描述任務的詳細信息。

1
2
$ curl -X POST http://marathon_host:8080/v2/apps -d @basic-0.json -H "Content-type: application/json"
{"id":"/basic-0","cmd":"while [ true ] ; do echo "Hello Marathon" ; sleep 5 ; done","args":null,"user":null,"env":{},"instances":1,"cpus":0.1,"mem":10,"disk":0,"executor":"","constraints":[],"uris":[],"storeUrls":[],"ports":[0],"requirePorts":false,"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":null,"healthChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1,"maximumOverCapacity":1},"labels":{},"acceptedResourceRoles":null,"version":"2015-12-28T05:33:05.805Z","tasksStaged":0,"tasksRunning":0,"tasksHealthy":0,"tasksUnhealthy":0,"deployments":[{"id":"3ec3fbd5-11e4-479f-bd17-813d33e43e0c"}],"tasks":[]}%

Marathon 的更多 REST API 可以參考本地自帶的文檔:http://marathon_host:8080/api-console/index.html

此時,如果運行任務的從節點出現故障,任務會自動在其它可用的從節點上啟動。

此外,目前也已經支持基於 Docker 容器的任務。需要先在 Mesos slave 節點上為 slave 服務配置 --containerizers=docker,mesos 參數。

例如如下麵的示例任務:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"id": "basic-3",
"cmd": "python3 -m http.server 8080",
"cpus": 0.5,
"mem": 32.0,
"container": {
"type": "DOCKER",
"volumes": [],
"docker": {
"image": "python:3",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 8080,
"hostPort": 31000,
"servicePort": 0,
"protocol": "tcp"
}
],
"privileged": false,
"parameters": [],
"forcePullImage": true
}
}
}

該任務啟動一個 python:3 容器,執行 python3 -m http.server 8080 命令,作為一個簡單的 web 服務,實際埠會映射到宿主機的 31000 埠。

註意區分 hostPort 和 servicePort,前者代表任務映射到的本地可用埠(可用範圍由 Mesos slave 彙報,預設為 31000 ~ 32000);後者作為服務管理的埠,可以被用作一些服務發行機制使用進行轉發,在整個 Marathon 集群中是唯一的。

任務執行後,也可以在對應 slave 節點上通過 Docker 命令查看容器運行情況,容器將以 mesos-SLAVE_ID 開頭。

1
2
3
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1226b4ec8d7d python:3 "/bin/sh -c "python3 " 3 days ago Up 3 days 0.0.0.

最後註意:光理論是不夠的。在此順便送大家十套2020最新JAVA架構項目實戰教程及大廠面試題庫,進我扣裙 :七吧傘吧零而衣零傘 (數字的諧音)轉換下可以找到了,還可以跟老架構師交流
本文的文字及圖片來源於網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 面試題63. 股票的最大利潤 與以下題目相同 前往:LeetC ...
  • 我的LeetCode:https://leetcode cn.com/u/ituring/ 我的LeetCode刷題源碼[GitHub]:https://github.com/izhoujie/Algorithmcii LeetCode 121. 買賣股票的最佳時機 題目 給定一個數組,它的第 i ...
  • 在使用Python時,需要使用各種各樣的庫,通常會使用pip直接安裝,這樣最為簡單也最方便。但最為崩潰的地方在於有時候速度出奇的慢,因為pip預設使用的源為官方源,而官方源在國外。通常的解決方法是更換源,常見的國內源如下所示: Windows下永久更換源 1.在運行視窗或資源管理器中輸入 %APPD ...
  • 這有一個專註Gopher技術成長的開源項目 "「go home」" 背景 作為一名程式員,家裡多多少少會有一些落了灰的電腦,如果把閑置的電腦變成伺服器,不僅有良好的配置,還能用來做各種測試,那就再好不過了。但是區域網的設備怎麼被外網訪問呢?這就靠內網穿透來實現了。 內網穿透又叫 "NAT" 穿透,常 ...
  • ReentrantLock完美實現了互斥,完美解決了併發問題。但是卻意外發現它對於讀多寫少的場景效率實在不行。此時ReentrantReadWriteLock來救場了!一種適用於讀多寫少場景的鎖,可以大幅度提升併發效率,你必須會哦! 序幕 為何引入讀寫鎖? ReentrantReadWriteLoc ...
  • 接上一章, "Windows玩轉Kubernetes系列1 VirtualBox安裝Centos" ,我們開始學習如何在Centos中安裝Docker 準備 關閉防火牆 防火牆一定要提前關閉,否則在後續安裝K8S集群的時候,會有一些問題,執行下麵語句: 關閉Swap 註掉swap 關閉SeLinux ...
  • 開源項目CRI-O(https://github.com/kubernetes-incubator/cri-o),即之前的OCID,旨在不依賴傳統容器引擎的前提下,使開源Kubernetes調度框架可以管理和啟動容器化的工作負載。 使用Google發起、Kubernetes工程師開發的容器運行時介面 ...
  • 在聚合的分組統計中我們會面臨兩種分組元素類型:連續型如時間,自然數等、離散型如地點、產品等。離散型數據本身就代表不同的組別,但連續型數據則需要手工按等長間隔進行切分了。下麵是一個按價錢段聚合的例子: POST /cartxns/_search { "size" : 1, "aggs": { "sal ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...