深入解析DC/OS 1.8 – 高可靠的微服务及大数据管理平台

  就像Framework一样,Executor也是通过protocol buffer协议和Mesos-Agent进行沟通,通过MesosExecutorDriver,你不需要关心协议的事情,仅仅需要实现接口即可。

  三、DC/OS的核心模块

  下面的图描述了DC/OS的部署架构图:

物联网

  在DC/OS看来,所有的节点分为三个区域,一个是管理区域,主要处理对于服务的管理方面的操作,如增删查改,启停扩缩等。为了高可用,Master节点可以是多个,在多个Master节点之前,需要有一个负载均衡器。第二个是对外服务区域,也即外界能够访问DC/OS内部的服务的区域,这个区域里面的服务多为对外的Nginx之类的,也会有marathon-lb来做外部的负载均衡器,所有对外服务区域的节点之外还需要一个负载均衡器。第三个区域是内部服务区域,用于部署内部服务,如数据库,消息总线等,这些内部节点不能对外访问。

  第一、Admin Router

  AdminRouter是一个反向代理,正是它将对外的区域和对内的区域完全隔离开来,在admin router之外,可以通过公网访问,在admin router之内全部是私网地址,这样提供了安全的统一访问机制。

  安装完毕Open DC/OS之后,安装一个dcos的命令行工具,通过这个工具可以ssh到master的节点上。

  eval ssh-agent -s

  ssh-add .ssh/aws01.pem

  dcos node ssh --master-proxy --leader

  在这个节点上/etc/systemd/system路径下面有三个systemd的service,Open DC/OS的所有组件都是用systemd进行管理的。

  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下面的一个路径,Open DC/OS的所有组件都是安装在这个路径下面的。

  在/opt/mesosphere/packages/adminrouter--cee9a2abb16c28d1ca6c74af1aff6bc4aac3f134/nginx/conf这个路径下面,有一个文件nginx.master.conf,打开这个文件,就能看到熟悉的对于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/;

  }

  从这个配置文件可以看出,所有对内的访问marathon的页面,访问mesos的页面,都是通过leader.mesos进行,这个域名是mesos-dns给出的,对应的是内部的IP地址,如果从外部访问marathon或者mesos的页面,则必须通过admin router,通过 http://admin-router-external-ip/marathon 或者 http://admin-router-external-ip/mesos来访问。

  第二、Mesos-DNS

  对于数据中心操作系统来讲,服务发现和负载均衡是最最核心的功能,只有有了这些功能,才能使得服务的物理布局,服务之间的依赖关系,服务挂掉之后的自动修复不需要用户关心,才能使得用户像用一台电脑一样使用整个数据中心。

  如果服务之间的相互调用不使用IP地址,而使用域名的话,问题会简单很多。

物联网

  如图所示,对于Mesos上运行的每一个Task,Mesos-DNS都可以通过调用Mesos-Master的API得到,并且为每个Task分配一个域名和IP的对应项。如果一个Task需要访问另一个Task,则需要配置域名即可,无论Task如何挂掉,如何分配到其他的节点上运行,域名都不会变,当然Task的IP可能会变,但是不用担心,Mesos-DNS会更新它。每个Mesos-Agent只需要配置/etc/resolv.conf指向mesos-dns就可以了。