就像Framework一樣,Executor也是通過protocol buffer協(xié)議和Mesos-Agent進(jìn)行溝通,通過MesosExecutorDriver,你不需要關(guān)心協(xié)議的事情,僅僅需要實(shí)現(xiàn)接口即可。
三、DC/OS的核心模塊
下面的圖描述了DC/OS的部署架構(gòu)圖:

在DC/OS看來,所有的節(jié)點(diǎn)分為三個(gè)區(qū)域,一個(gè)是管理區(qū)域,主要處理對(duì)于服務(wù)的管理方面的操作,如增刪查改,啟停擴(kuò)縮等。為了高可用,Master節(jié)點(diǎn)可以是多個(gè),在多個(gè)Master節(jié)點(diǎn)之前,需要有一個(gè)負(fù)載均衡器。第二個(gè)是對(duì)外服務(wù)區(qū)域,也即外界能夠訪問DC/OS內(nèi)部的服務(wù)的區(qū)域,這個(gè)區(qū)域里面的服務(wù)多為對(duì)外的Nginx之類的,也會(huì)有marathon-lb來做外部的負(fù)載均衡器,所有對(duì)外服務(wù)區(qū)域的節(jié)點(diǎn)之外還需要一個(gè)負(fù)載均衡器。第三個(gè)區(qū)域是內(nèi)部服務(wù)區(qū)域,用于部署內(nèi)部服務(wù),如數(shù)據(jù)庫,消息總線等,這些內(nèi)部節(jié)點(diǎn)不能對(duì)外訪問。
第一、Admin Router
AdminRouter是一個(gè)反向代理,正是它將對(duì)外的區(qū)域和對(duì)內(nèi)的區(qū)域完全隔離開來,在admin router之外,可以通過公網(wǎng)訪問,在admin router之內(nèi)全部是私網(wǎng)地址,這樣提供了安全的統(tǒng)一訪問機(jī)制。
安裝完畢Open DC/OS之后,安裝一個(gè)dcos的命令行工具,通過這個(gè)工具可以ssh到master的節(jié)點(diǎn)上。
eval ssh-agent -s
ssh-add .ssh/aws01.pem
dcos node ssh --master-proxy --leader
在這個(gè)節(jié)點(diǎn)上/etc/systemd/system路徑下面有三個(gè)systemd的service,Open DC/OS的所有組件都是用systemd進(jìn)行管理的。
ip-10-0-7-1 system # ls -l | grep adminrouter
lrwxrwxrwx. 1 root root 135 Oct 3 08:00 dcos-adminrouter-reload.service -> /opt/mesosphere/packages/adminrouter--cee9a2abb16c28d1ca6c74af1aff6bc4aac3f134/dcos.target.wants_master/dcos-adminrouter-reload.service
lrwxrwxrwx. 1 root root 133 Oct 3 08:00 dcos-adminrouter-reload.timer -> /opt/mesosphere/packages/adminrouter--cee9a2abb16c28d1ca6c74af1aff6bc4aac3f134/dcos.target.wants_master/dcos-adminrouter-reload.timer
lrwxrwxrwx. 1 root root 128 Oct 3 08:00 dcos-adminrouter.service -> /opt/mesosphere/packages/adminrouter--cee9a2abb16c28d1ca6c74af1aff6bc4aac3f134/dcos.target.wants_master/dcos-adminrouter.service
可以看到dcos-adminrouter.service是指向/opt/mesosphere/packages下面的一個(gè)路徑,Open DC/OS的所有組件都是安裝在這個(gè)路徑下面的。
在/opt/mesosphere/packages/adminrouter--cee9a2abb16c28d1ca6c74af1aff6bc4aac3f134/nginx/conf這個(gè)路徑下面,有一個(gè)文件nginx.master.conf,打開這個(gè)文件,就能看到熟悉的對(duì)于nginx的配置。
upstream mesos {
server leader.mesos:5050;
}
upstream marathon {
server master.mesos:8080;
}
location /mesos/ {
access_by_lua 'auth.validate_jwt_or_exit()';
proxy_set_header Host $http_host;
proxy_pass http://mesos/;
}
location /marathon/ {
# Enforce access restriction. Auth-wise, treat /marathon*
# equivalently to /service/marathon*.
access_by_lua 'auth.validate_jwt_or_exit()';
proxy_set_header Host $http_host;
proxy_pass http://marathon/;
}
從這個(gè)配置文件可以看出,所有對(duì)內(nèi)的訪問marathon的頁面,訪問mesos的頁面,都是通過leader.mesos進(jìn)行,這個(gè)域名是mesos-dns給出的,對(duì)應(yīng)的是內(nèi)部的IP地址,如果從外部訪問marathon或者mesos的頁面,則必須通過admin router,通過 http://admin-router-external-ip/marathon 或者 http://admin-router-external-ip/mesos來訪問。
第二、Mesos-DNS
對(duì)于數(shù)據(jù)中心操作系統(tǒng)來講,服務(wù)發(fā)現(xiàn)和負(fù)載均衡是最最核心的功能,只有有了這些功能,才能使得服務(wù)的物理布局,服務(wù)之間的依賴關(guān)系,服務(wù)掛掉之后的自動(dòng)修復(fù)不需要用戶關(guān)心,才能使得用戶像用一臺(tái)電腦一樣使用整個(gè)數(shù)據(jù)中心。
如果服務(wù)之間的相互調(diào)用不使用IP地址,而使用域名的話,問題會(huì)簡(jiǎn)單很多。

如圖所示,對(duì)于Mesos上運(yùn)行的每一個(gè)Task,Mesos-DNS都可以通過調(diào)用Mesos-Master的API得到,并且為每個(gè)Task分配一個(gè)域名和IP的對(duì)應(yīng)項(xiàng)。如果一個(gè)Task需要訪問另一個(gè)Task,則需要配置域名即可,無論Task如何掛掉,如何分配到其他的節(jié)點(diǎn)上運(yùn)行,域名都不會(huì)變,當(dāng)然Task的IP可能會(huì)變,但是不用擔(dān)心,Mesos-DNS會(huì)更新它。每個(gè)Mesos-Agent只需要配置/etc/resolv.conf指向mesos-dns就可以了。