CHAPTER 16 Mesos(二)

Mesos配置包括通用项、master和slave专属配置,涉及服务地址、日志存储、高可用设置、资源管理等。日志和监控接口提供状态统计信息,应用框架如Aurora、Marathon支持长期运行任务,而Chronos、Jenkins则用于批量调度。
摘要由CSDN通过智能技术生成

16.1 Mesos 配置项解析

Mesos 支持在运行时通过命令行参数形式提供的配置项。如果是通过系统服务方式启动,也支持以配置文件或环境变量方式给出。当然,实际上最终是提取为命令行参数传递给启动命令。

Mesos 的配置项分为三种类型:通用项(master 和 slave 都支持),只有 master 支持的,以及只有 slave 支持的。

Mesos 配置项比较多,下面对一些重点配置进行描述。少数为必备项,意味着必须给出配置值;另外一些是可选配置,自己带有默认值

1. 通用项

通用项数量不多,主要涉及到服务绑定地址和日志信息等,包括:

配置项说明
--advertise_ip=VALUE可以通过该地址访问到服务,比如应用框架访问到 master 节点;
--advertise_port=VALUE可以通过该端口访问到服务;
--external_log_file=VALUE指定存储日志的外部文件,可通过 Web 界面查看;
--firewall_rules=VALUE endpoint防火墙规则,VALUE 可以是 JSON 格式或者存有 JSON 格式的文件路径;
--ip=VALUE服务绑定到的IP 地址,用来监听外面过来的请求;
--log_dir=VALUE日志文件路径,如果为空(默认值)则不存储日志到本地;
--logbufsecs=VALUE buffer多少秒的日志,然后写入本地;
--logging_level=VALUE日志记录的最低级别;
--port=VALUE绑定监听的端口,master 默认是 5050,slave 默认是 5051。

2. master 专属配置项

这些配置项是针对主节点上的 Mesos master 服务的,围绕高可用、注册信息、对应用框架的资源管理等。用户应该根据本地主节点资源情况来合理的配置这些选项。

用户可以通过 mesos-master --help 命令来获取所有支持的配置项信息。

必备配置项有三个:

配置项说明
--quorum = VALUE必备项,使用基于 replicated-Log 的注册表(即利用 ZooKeeper 实现 HA)时,参与投票时的最少节点个数;
--work_dir = VALUE必备项,注册表持久化信息存储位置;
--zk = VALUE如果主节点为 HA 模式,此为必备项,指定 ZooKeepr 的服务地址,支持多个地址,之间用逗号隔离,例如 zk://username:password@host1:port1,host2:port2,…/path。还可以为存有路径信息的文件路径。

可选的配置项有:

配置项说明
--acls=VALUEACL 规则或所在文件;
--allocation_interval=VALUE执行 allocation 的间隔,默认为 1sec;
--allocator=VALUE分配机制,默认为 HierarchicalDRF;
--[no-]authenticate是否允许非认证过的 framework 注册;
--[no-]authenticate_slaves是否允许非认证过的 slaves 注册;
--authenticators=VALUE对 framework 或 salves 进行认证时的实现机制;
--cluster=VALUE集群别名,显示在 Web 界面上供用户识别的;
--credentials=VALUE存储加密后凭证的文件的路径;
--external_log_file=VALUE采用外部的日志文件;
--framework_sorter=VALUE给定 framework 之间的资源分配策略;
--hooks=VALUEmaster 中安装的 hook 模块;
--hostname=VALUEmaster 节点使用的主机名,不配置则从系统中获取;
--[no-]log_auto_initialize是否自动初始化注册表需要的 replicated 日志;
--modules=VALUE要加载的模块,支持文件路径或者 JSON;
--offer_timeout=VALUE offer撤销的超时;
--rate_limits=VALUEframework的速率限制,即 query per second (qps);
--recovery_slave_removal_limit=VALUE限制注册表恢复后可以移除或停止的 slave 数目,超出后 master 会失败,默认是 100%;
--slave_removal_rate_limit=VALUEslave 没有完成健康度检查时候被移除的速率上限,例如 1/10mins 代表每十分钟最多有一个;
--registry=VALUE注册表信息的持久化策略,默认为 replicated_log 存放本地,还可以为 in_memory 放在内存中;
--registry_fetch_timeout=VALUE访问注册表失败超时;
--registry_store_timeout=VALUE存储注册表失败超时;
--[no-]registry_strict是否按照注册表中持久化信息执行操作,默认为 false;
--roles=VALUE集群中 framework 可以所属的分配角色;
--[no-]root_submissions root是否可以提交 framework,默认为 true;
--slave_reregister_timeout=VALUE新的 lead master 节点选举出来后,多久之内所有的 slave 需要注册,超时的 salve 将被移除并关闭,默认为 10mins;
--user_sorter=VALUE在用户之间分配资源的策略,默认为 drf;
--webui_dir=VALUE webui实现的文件目录所在,默认为 /usr/local/share/mesos/webui;
--weights=VALUE各个角色的权重;
--whitelist=VALUE文件路径,包括发送 offer 的 slave 名单,默认为 None;
--zk_session_timeout=VALUEsession 超时,默认为 10secs;
--max_executors_per_slave=VALUE配置了 --with-network-isolator 时可用,限制每个 slave 同时执行任务个数。

下面给出一个由三个节点组成的 master 集群典型配置,工作目录指定为 /tmp/mesos,集群名称为 mesos_cluster。

    mesos-master \
    --zk=zk://10.0.0.2:2181,10.0.0.3:2181,10.0.0.4:2181/mesos \
    --quorum=2 \
    --work_dir=/tmp/mesos \
    --cluster=mesos_cluster

3. slave 专属配置项

slave 节点支持的配置项是最多的,因为它所完成的事情也最复杂。这些配置项既包括跟主节点打交道的一些参数,也包括对本地资源的配置,包括隔离机制、本地任务的资源限制等。

用户可以通过 mesos-slave --help 命令来获取所有支持的配置项信息。

必备项就一个:

配置项说明
--master=VALUE必备项,master 所在地址,或对应 ZooKeeper 服务地址,或文件路径,可以是列表。

以下为可选配置项:

配置项说明
--attributes=VALUE机器属性;
--authenticatee=VALUE跟 master 进行认证时候的认证机制;
--[no-]cgroups_enable_cfs采用 CFS 进行带宽限制时候对 CPU 资源进行限制,默认为 false;
--cgroups_hierarchy=VALUEcgroups 的目录根位置,默认为 /sys/fs/cgroup;
--[no-]cgroups_limit_swap限制内存和 swap,默认为 false,只限制内存;
--cgroups_root=VALUE根 cgroups 的名称,默认为 mesos;
--container_disk_watch_interval=VALUE为容器进行硬盘配额查询的时间间隔;
--containerizer_path=VALUE采用外部隔离机制(–isolation=external)时候,外部容器机制执行文件路径;
--containerizers=VALUE可用的容器实现机制,包括 mesos、external、docker;
--credential=VALUE加密后凭证,或者所在文件路径;
--default_container_image=VALUE采用外部容器机制时,任务缺省使用的镜像;
--default_container_info=VALUE容器信息的缺省值;
--default_role=VALUE资源缺省分配的角色;
--disk_watch_interval=VALUE硬盘使用情况的周期性检查间隔,默认为 1mins;
--docker=VALUEdocker 执行文件的路径;
--docker_remove_delay=VALUE删除容器之前的等待时间,默认为 6hrs;
--[no-]docker_kill_orphans清除孤儿容器,默认为 true;
--docker_sock=VALUEdocker sock 地址,默认为 /var/run/docker.sock;
--docker_mesos_image=VALUE运行 slave 的 docker 镜像,如果被配置,docker 会假定 slave 运行在一个 docker 容器里;
--docker_sandbox_directory=VALUEsandbox 映射到容器里的哪个路径;
--docker_stop_timeout=VALUE停止实例后等待多久执行 kill 操作,默认为 0secs;
--[no-]enforce_container_disk_quota是否启用容器配额限制,默认为 false;
--executor_registration_timeout=VALUE执行应用最多可以等多久再注册到 slave,否则停止它,默认为 1mins;
--executor_shutdown_grace_period=VALUE执行应用停止后,等待多久,默认为 5secs;
--external_log_file=VALUE外部日志文件;
--fetcher_cache_size=VALUEfetcher 的 cache 大小,默认为 2 GB;
--fetcher_cache_dir=VALUEfetcher cache 文件存放目录,默认为 /tmp/mesos/fetch;
--frameworks_home=VALUE执行应用前添加的相对路径,默认为空;
--gc_delay=VALUE多久清理一次执行应用目录,默认为 1weeks;
--gc_disk_headroom=VALUE调整计算最大执行应用目录年龄的硬盘留空量,默认为 0.1;
--hadoop_home=VALUEhadoop 安装目录,默认为空,会自动查找 HADOOP_HOME 或者从系统路径中查找;
--hooks=VALUE安装在 master 中的 hook 模块列表;
--hostname=VALUEslave 节点使用的主机名;
--isolation=VALUE隔离机制,例如 posix/cpu,posix/mem(默认)或者 cgroups/cpu,cgroups/mem、external 等;
--launcher_dir=VALUEmesos 可执行文件的路径,默认为 /usr/local/lib/mesos;
--image_providers=VALUE支持的容器镜像机制,例如 ‘APPC,DOCKER’;
--oversubscribed_resources_interval=VALUEslave 节点定期汇报超配资源状态的周期;
--modules=VALUE要加载的模块,支持文件路径或者 JSON;
--perf_duration=VALUEperf 采样时长,必须小于 perf_interval,默认为 10secs;
--perf_events=VALUEperf 采样的事件;
--perf_interval=VALUEperf 采样的时间间隔;
--qos_controller=VALUE超配机制中保障 QoS 的控制器名;
--qos_correction_interval_min=VALUEQos 控制器纠正超配资源的最小间隔,默认为 0secs;
--recover=VALUE回复后是否重连旧的执行应用,reconnect(默认值)是重连,cleanup 清除旧的执行器并退出;
--recovery_timeout=VALUEslave 恢复时的超时,太久则所有相关的执行应用将自行退出,默认为 15mins;
--registration_backoff_factor=VALUE跟 master 进行注册时候的重试时间间隔算法的因子,默认为 1secs,采用随机指数算法,最长 1mins;
--resource_monitoring_interval=VALUE周期性监测执行应用资源使用情况的间隔,默认为 1secs;
--resources=VALUE每个 slave 可用的资源,比如主机端口默认为 [31000, 32000];
--[no-]revocable_cpu_low_priority运行在可撤销 CPU 上容器将拥有较低优先级,默认为 true。
--slave_subsystems=VALUEslave 运行在哪些 cgroup 子系统中,包括 memory,cpuacct 等,缺省为空;
--[no-]strict是否认为所有错误都不可忽略,默认为 true;
--[no-]switch_user用提交任务的用户身份来运行,默认为 true;
--work_dir=VALUEframework 的工作目录,默认为 /tmp/mesos。

下面这些选项需要配置 --with-network-isolator 一起使用(编译时需要启用 --with-network-isolator 参数)。

配置项说明
--ephemeral_ports_per_container=VALUE分配给一个容器的临时端口的最大数目,需要为 2 的整数幂(默认为 1024);
--eth0_name=VALUEpublic 网络的接口名称,如果不指定,根据主机路由进行猜测;
--lo_name=VALUEloopback 网卡名称;
--egress_rate_limit_per_container=VALUE每个容器的输出流量限制速率限制(采用 fq_codel 算法来限速),单位是字节每秒;
--[no-]-egress_unique_flow_per_container是否把不同容器的流量当作彼此不同的流,避免彼此影响(默认为 false);
--[no-]network_enable_socket_statistics是否采集每个容器的 socket 统计信息,默认为 false。

下面给出一个典型的 slave 配置,容器为 Docker,监听在 10.0.0.10 地址;节点上限制 16 个 CPU、64 GB 内存,容器的非临时端口范围指定为 [31000-32000],临时端口范围指定为 [32768-57344];每个容器临时端口最多为 512 个,并且外出流量限速为 50 MB/s。

    mesos-slave \
    --master=zk://10.0.0.2:2181,10.0.0.3:2181,10.0.0.4:2181/mesos \
    --containerizers=docker \
    --ip=10.0.0.10 \
    --isolation=cgroups/cpu,cgroups/mem,network/port_mapping \
    --resources=cpus:16;mem:64000;ports:[31000-32000];ephemeral_ports:[32768-57344] \
    --ephemeral_ports_per_container=512 \
    --egress_rate_limit_per_container=50000KB \
    --egress_unique_flow_per_container

为了避免主机分配的临时端口跟我们指定的临时端口范围冲突,需要在主机节点上进行配置。

echo "57345 61000" > /proc/sys/net/ipv4/ip_local_port_range

注:非临时端口是 Mesos 分配给框架,绑定到任务使用的,端口号往往有明确意义;临时端口是系统分配的,往往不太关心具体端口号。

16.2 日志与监控

Mesos 自身提供了强大的日志和监控功能,某些应用框架也提供了针对框架中任务的监控能力。通过这些接口,用户可以实时获知集群的各种状态。

1. 日志配置

日志文件默认在 /var/log/mesos 目录下,根据日志等级带有不同后缀。用户可以通过日志来调试使用中碰到的问题。

一般的,推荐使用 --log_dir 选项来指定日志存放路径,并通过日志分析引擎来进行监控。

2. 监控

Mesos 提供了方便的监控接口,供用户查看集群中各个节点的状态。

2.1 主节点

通过 http://MASTER_NODE:5050/metrics/snapshot 地址可以获取到 Mesos 主节点的各种状态统计信息,包括资源(CPU、硬盘、内存)使用、系统状态、从节点、应用框架、任务状态等。

例如查看主节点 10.0.0.2 的状态信息,并用 jq 来解析返回的 json 对象。

    $ curl -s http://10.0.0.2:5050/metrics/snapshot |jq .
    {
      "system/mem_total_bytes": 4144713728,
      "system/mem_free_bytes": 153071616,
      "system/load_5min": 0.37,
      "system/load_1min": 0.6,
      "system/load_15min": 0.29,
      "system/cpus_total": 4,
      "registrar/state_store_ms/p9999": 45.4096616192,
      "registrar/state_store_ms/p999": 45.399272192,
      "registrar/state_store_ms/p99": 45.29537792,
      "registrar/state_store_ms/p95": 44.8336256,
      "registrar/state_store_ms/p90": 44.2564352,
      "registrar/state_store_ms/p50": 34.362368,
      ...
      "master/recovery_slave_removals": 1,
      "master/slave_registrations": 0,
      "master/slave_removals": 0,
      "master/slave_removals/reason_registered": 0,
      "master/slave_removals/reason_unhealthy": 0,
      "master/slave_removals/reason_unregistered": 0,
      "master/slave_reregistrations": 2,
      "master/slave_shutdowns_canceled": 0,
      "master/slave_shutdowns_completed": 1,
      "master/slave_shutdowns_scheduled": 1
    }
2.2 从节点

通过 http://SLAVE_NODE:5051/metrics/snapshot 地址可以获取到 Mesos 从节点的各种状态统计信息,包括资源、系统状态、各种消息状态等。

例如查看从节点 10.0.0.10 的状态信息。

    $ curl -s http://10.0.0.10:5051/metrics/snapshot |jq .
    {
      "system/mem_total_bytes": 16827785216,
      "system/mem_free_bytes": 3377315840,
      "system/load_5min": 0.11,
      "system/load_1min": 0.16,
      "system/load_15min": 0.13,
      "system/cpus_total": 8,
      "slave/valid_status_updates": 11,
      "slave/valid_framework_messages": 0,
      "slave/uptime_secs": 954125.458927872,
      ...
      "slave/invalid_status_updates": 0,
      "slave/mem_percent": 0.00279552715654952,
      "slave/mem_revocable_percent": 0,
      "slave/mem_revocable_total": 0,
      "slave/mem_revocable_used": 0,
      "slave/mem_total": 15024,
      "slave/mem_used": 42,
      "slave/recovery_errors": 0,
      "slave/registered": 1,
      "slave/tasks_failed": 6
    }

另外,通过 http://MASTER_NODE:5050/monitor/statistics.json 地址可以看到该从节点上容器网络相关的统计数据,包括进出流量、丢包数、队列情况等。获取方法同上,在此不再演示。

16.3 常见应用框架

应用框架是实际干活的,可以理解为 Mesos 之上跑的应用。应用框架注册到Mesos master 服务上即可使用。用户大部分时候,只需要跟应用框架打交道。因此,选择合适的应用框架十分关键。

Mesos 目前支持的应用框架分为四大类:长期运行任务(以及 PaaS)、大数据处理、批量调度、数据存储。随着 Mesos 自身的发展,越来越多的框架开始支持 Mesos,下面总结了目前常用的一些框架。

分类框架说明
长期运行的服务Aurora利用 Mesos 调度安排的任务,保证任务一直在运行。提供 REST 接口,客户端和 webUI(8081 端口)
长期运行的服务Marathon一个私有 PaaS 平台,保证运行的应用不被中断。如果任务停止了,会自动重启一个新的相同任务。支持任务为任意 bash 命令,以及容器。提供 REST 接口,客户端和 webUI(8080 端口)
长期运行的服务Singularity一个私有 PaaS 平台。调度器,运行长期的任务和一次性任务。提供 REST 接口,客户端和 webUI(7099、8080 端口),支持容器。
大数据处理Cray Chapel支持 Chapel 并行编程语言的运行框架。
大数据处理DparkSpark 的 Python 实现。
大数据处理Hadoop经典的 map-reduce 模型的实现。
大数据处理Spark跟 Hadoop 类似,但处理迭代类型任务会更好的使用内存做中间状态缓存,速度要快一些。
大数据处理Storm分布式流计算,可以实时处理数据流。
批量调度ChronosCron 的分布式实现,负责任务调度,支持容错。
批量调度Jenkins大名鼎鼎的 CI 引擎。使用 mesos-jenkins 插件,可以将 jenkins 的任务被 Mesos 集群来动态调度执行。
批量调度JobServer基于 Java 的调度任务和数据处理引擎。
批量调度GoDocker基于 Docker 容器的集群维护工具。提供用户接口,除了支持 Mesos,还支持 Kubernetes、Swarm 等。
数据存储ElasticSearch功能十分强大的分布式数据搜索引擎。一方面通过分布式集群实现可靠的数据库,一方面提供灵活的 API,对数据进行整合和分析。ElasticSearch + LogStash + Kibana 目前合成为 ELK 工具栈。
数据存储Hypertable高性能的分布式数据库,支持结构化或者非结构化的数据存储。
数据存储Tachyon内存为中心的分布式存储系统,利用内存访问的高速提供高性能。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值