`
m635674608
  • 浏览: 5027000 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

mesos 单容器网络监控和隔离

 
阅读更多

 

 

单容器网络监控和隔离

Linux上的Mesos可支持 单容器网络监控和隔离,每个活动容器的网络统计信息会被写入slave节点的 /monitor/statistics.json

网络隔离 功能可避免 单个容器 占用过多可用端口,消耗过多带宽以及过分阻滞其他容器的信息传输等。 网络隔离功能对于大部分运行在slave节点的任务(端口绑定为0,且由内核分配端口)来说使透明的。

安装

容器网络监控和隔离在默认配置下是不开启的。需要在编译时,设置相关配置,并安装相关依赖,才可开启。

关联依赖

单容器网络监控和分隔 只能在 kernel版本大于3.6 的linux 里使用,另外,linux kernel必须包含以下补丁(kernel 3.15后,这些补丁已经包含进内核中)。

slave节点需要的依赖:

  • libnl3 >= 3.2.26
  • iproute >= 2.6.39 is advised for debugging purpose but not required.

若是从源码编译,则需要libnl3开发版:

编译

开启 单容器网络监控和隔离,需要在 编译配置中设定:

$ ./configure --with-network-isolator
$ make

配置

节点网络监控和隔离需要在slave节点,加入下面参数 设置:

--isolation="network/port_mapping"

若编译的时候没有开启 节点网络监控和隔离 支持,则会无法启动,并输出错误信息如下:

I0708 00:17:08.080271 44267 containerizer.cpp:111] Using isolation: network/port_mapping
Failed to create a containerizer: Could notcreate MesosContainerizer: Unknownor unsupported
    isolator: network/port_mapping

配置网络端口

在没有 网络隔离功能的时候,所有容器都将共用slave节点的IP地址,绑定操作系统允许的任意端口。

而当网络隔离启用的时候,slave节点上的每个容器将有单独的网络链路(基于Linux network namespaces),虽然仍然共用被控的对公IP(这样的好处是不用更改 服务发现机制)。slave节点会根据设定的可用端口范围给容器分配端口,只有端口内的网络链路才可用。

应用若向核心申请分配端口,则会在 容器所设的可用端口中选一个。应用虽然也可以在这个可用端口范围外绑定一个端口,但这样的结果是主机将无视其网络请求,网络链路不通。

Mesos给容器提供两个可用端口范围:

  • Mesos从系统分配到的临时端口ephemeral:用于容器。

  • Mesos分配的非临时端口:用于应用,和cpu、内存等资源类似,需要的时候申请。

另外,主机本身也会需要临时端口用于网络通讯,也就是总共有三个不重叠的端口范围需要在主机设置。

设置主机临时端口范围

用命令sysctl net.ipv4.ip_local_port_range可查看目前主机的临时端口范围。若需要更改,可在/etc/sysctl.conf里设置,注意不要设置其他进程使用的端口,设置完后重启,使其生效。

例子如下:把主机临时端口设置为57345到61000了。

# net.ipv4.ip_local_port_range defines the host ephemeral port range, by
# default 32768-61000.  We reduce this range to allow the Mesos slave to
# allocate ports 32768-57344
# net.ipv4.ip_local_port_range = 32768 61000
net.ipv4.ip_local_port_range = 57345 61000

设置容器端口范围

容器的临时和非临时端口,使用--resources 来设置。非临时端口是由master节点提供的,将会被分配给应用。

临时端口则会被 slave节点分配,使用 ephemeral_ports_per_container(默认 1024) 分配给容器。每个被控上的容器因为网络资源有限,其数量也是有限的:容器最大可用数量=可用临时端口量/每容器端口数。

number of ephemeral_ports / ephemeral_ports_per_container

master节点的 --max_executors_per_slave (每slave节点最大执行器数)设定用于避免给slave节点分配过多的执行器而致临时端口超额。

建议把ephemeral_ports_per_container 设为2的幂数,比如512,1024,临时端口则是ephemeral_ports_per_container 的倍数。这样可最小化CPU信息传输时的负载。示例:

--resources=ports:[31000-32000];ephemeral_ports:[32768-57344] \
--ephemeral_ports_per_container=512

容器网络限速

容器对外的网络连接需要限速,以免单个容器占用过多带宽。可在每个容器启动时带 --egress_rate_limit_per_container 参数(单位 bytes/秒)设置速度限制,高于此限速的传输将被延迟处理,TCP协议将会增加间隔时间,降低速度,以使不掉包。

示例如下:

--egress_rate_limit_per_container=100MB

由于只能在接收到传输后根据拥堵状况再处理限速,因此,Mesos只能限制出口带宽,无法限制入口带宽。

出口带宽流量隔离

如果所有容器都使用同一网络链路,单个容器的网络拥堵,将严重影响其他容器的网络传输。 Mesos里可以使用链路隔离来 让容器间网络传输相互间不受影响:根据容器端口范围来划定专属链路,使用FQ_Codel算法实现。使用 --egress_unique_flow_per_container 设置,示例如下:

--egress_unique_flow_per_container

综合设置(集合上述配置项)

下面综合网络设置命令包括:开启网络隔离,端口57345-61000给主机当临时端口,端口32768-57344给容器当临时端口,端口31000-32000给应用非临时分配,将容器出口链路设为专属,出口带宽限制为300 Mbits/second (37.5MBytes)

mesos-slave \
--isolation=network/port_mapping \
--resources=ports:[31000-32000];ephemeral_ports:[32768-57344] \
--ephemeral_ports_per_container=1024 \
--egress_rate_limit_per_container=37500KB \
--egress_unique_flow_per_container

监控容器网络统计数字

Mesos从linux网络监测里获得的每个容器的日志存放到slave节点的/monitor/statistics.json文件中。

容器中的网络工具里,在 statistics 下,可查看如下信息:

统计项 解释 类型
net_rx_bytes 收到的流量:单位 bytes 累计
net_rx_dropped 接收端的丢包数 累计
net_rx_errors 接收端的错误数 累计
net_rx_packets 收到的包数 累计
net_tx_bytes 发出的流量:单位 bytes 累计
net_tx_dropped 发出端的丢包数 累计
net_tx_errors 发送端的错误数 累计
net_tx_packets 发出的包数 累计

另外Linux Traffic Control 可在 statistics/net_traffic_control_statistics里采集如下信息:限速和过载。

统计项 解释 类型
backlog 排队待传输的字节数 [1] 计量
bytes 发出的字节数 累计
drops 发出端的丢包数 累计
overlimits 超限额次数,当超过限额时,每收到一包算一次。[2] 累计
packets 发出的包数 累计
qlen 排队待传输的包数 计量
ratebps 传输速度——每秒字节数:单位 bytes/second [3] 计量
ratepps 传输速度——每秒包数:单位 packets/second [3] 计量
requeues 因资源占用(比如 kernel locking)而导致的传输失败包数 [3] 累计

[1] Backlog只在 bloat_reduction接口列出。

[2] Overlimits只在 bw_limit 接口列出。

[3] 目前都报为0。

示例:可在slave节点中,输入下面命令,获得如下的结果:

$ curl -s http://localhost:5051/monitor/statistics | python2.6 -mjson.tool
[
    {
        "executor_id": "job.1436298853",
        "executor_name": "Command Executor (Task: job.1436298853) (Command: sh -c 'iperf ....')",
        "framework_id": "20150707-195256-1740121354-5150-29801-0000",
        "source": "job.1436298853",
        "statistics": {
            "cpus_limit": 1.1,
            "cpus_nr_periods": 16314,
            "cpus_nr_throttled": 16313,
            "cpus_system_time_secs": 2667.06,
            "cpus_throttled_time_secs": 8036.840845388,
            "cpus_user_time_secs": 123.49,
            "mem_anon_bytes": 8388608,
            "mem_cache_bytes": 16384,
            "mem_critical_pressure_counter": 0,
            "mem_file_bytes": 16384,
            "mem_limit_bytes": 167772160,
            "mem_low_pressure_counter": 0,
            "mem_mapped_file_bytes": 0,
            "mem_medium_pressure_counter": 0,
            "mem_rss_bytes": 8388608,
            "mem_total_bytes": 9945088,
            "net_rx_bytes": 10847,
            "net_rx_dropped": 0,
            "net_rx_errors": 0,
            "net_rx_packets": 143,
            "net_traffic_control_statistics": [
                {
                    "backlog": 0,
                    "bytes": 163206809152,
                    "drops": 77147,
                    "id": "bw_limit",
                    "overlimits": 210693719,
                    "packets": 107941027,
                    "qlen": 10236,
                    "ratebps": 0,
                    "ratepps": 0,
                    "requeues": 0
                },
                {
                    "backlog": 15481368,
                    "bytes": 163206874168,
                    "drops": 27081494,
                    "id": "bloat_reduction",
                    "overlimits": 0,
                    "packets": 107941070,
                    "qlen": 10239,
                    "ratebps": 0,
                    "ratepps": 0,
                    "requeues": 0
                }
            ],
            "net_tx_bytes": 163200529816,
            "net_tx_dropped": 0,
            "net_tx_errors": 0,
            "net_tx_packets": 107936874,
            "perf": {
                "duration": 0,
                "timestamp": 1436298855.82807
            },
            "timestamp": 1436300487.41595
        }
    }
]

 

http://www.phperz.com/article/15/1205/172984.html

 

http://mesos.apache.org/documentation/latest/monitoring/

 

http://www.mesoscn.cn/document/runing-Mesos/Mesos-Observability-Metrics.html

 

http://mesos.mydoc.io/

 

 

分享到:
评论

相关推荐

    Mesos.in.Action.2016.5.pdf

    本章详细介绍了如何使用Marathon来部署和管理容器化的应用程序,包括配置服务发现、负载均衡以及容错恢复等方面的内容。 **第8章:使用Chronos管理定时任务** Chronos是Mesos生态中的一个用于调度定时任务的工具。...

    云产品-云计算基础-容器服务CCS

    云计算基础中的容器服务CCS是基于Mesos、Marathon、CoreDNS的核心组件,提供了集群的细粒度资源管控、容器编排功能、虚拟私有云VPC、负载均衡器CLB、存储CBS、组件仓库CCD和镜像服务CCR等产品,为用户提供便捷的容器...

    基于Mesos Docker的Elasticsearch容器化私有云.pdf

    【基于Mesos Docker的Elasticsearch容器化私有云】是一种高效的解决方案,旨在解决传统Elasticsearch部署和管理中遇到的问题。在传统的Elasticsearch环境中,通常采用KVM虚拟机或物理机作为节点,这导致了申请过程...

    mesos-single:在单个容器中运行 Mesos + Marathon + Deimos + Zookeper 的容器

    虽然这样的单容器部署简化了环境设置,但请注意,它不适合大规模生产环境,因为它没有充分利用分布式系统的优点,例如容错性和资源隔离。在生产环境中,通常会将这些组件分布在多个物理或虚拟主机上,以提高系统的...

    领科云基于Mesos和Docker的企业级移动应用实践分享.zip

    5. **安全性**:Docker容器的安全性是不容忽视的,领科云可能会采取措施限制容器的权限,避免容器间的资源窃取或攻击,并通过网络策略隔离不同服务,提升整体安全性。 综上所述,领科云通过Mesos和Docker的组合,为...

    mesos-1.4.3.tar.gz

    1. **资源隔离**:Mesos 1.4.3 提供了多种资源隔离机制,如 Cgroups 和 Docker 容器,确保任务之间的资源竞争得到有效控制,提高集群稳定性。 2. **多框架支持**:Mesos 支持多种框架,如 Marathon (持续服务)、...

    藏经阁-Mesos,数据中心操作系统的核心.pdf

    Mesos的安全与隔离机制主要通过容器化和虚拟内存来实现。容器化可以提供操作系统级别的隔离,而虚拟内存可以提供进程级别的隔离。 在数据中心操作系统中,Mesos扮演着核心角色,提供了资源管理、编程抽象和安全与...

    藏经阁-Microservices on DC OS and Container Orchestration on Mesos.

    通过DC/OS,开发者可以轻松部署和管理容器化的微服务,同时利用Mesos的资源隔离和调度能力。 **Apache Mesos概述和基础** Mesos为分布式应用提供了一个统一的抽象层,将集群的计算和存储资源视为一个整体。它支持...

    Android容器和虚拟化.pdf

    例如,Apache Mesos可以用于管理和调度跨多个主机的容器,包括在Android集群中的容器。Apache Kubernetes是另一个流行的容器编排工具,它可以帮助自动化容器的部署、扩展和运行,虽然通常与Linux环境关联,但理论上...

    高洪涛:当当基于 Mesos 的 DevOps 实践.zip

    - Mesos 提供了一个统一的抽象层,将数据中心的硬件资源(如 CPU、内存、磁盘和网络)视为一个整体进行调度和分配。 - Mesos 支持多种框架,如 Marathon (用于持续服务)、Spark (用于大数据处理) 和 Chronos (用于...

    搜索容器云架构实践

    - **存储和网络方案**:选用适合的技术栈(如**Ceph**、**Flannel**等)来支持大规模数据存储和高效的数据传输。 #### 六、总结 综上所述,搜索容器云架构是一种高效且灵活的解决方案,它不仅能够帮助企业降低运营...

    1、CDN边缘节点容器调度的实践(又拍云-黄励博).pdf

    【CDN边缘节点容器调度的实践】 ...综上所述,CDN边缘节点的容器调度是复杂而关键的技术环节,涉及到资源管理、网络隔离、负载均衡等多个层面,其优化不仅提升了内容分发的速度,还增强了系统的稳定性和可扩展性。

    Docker容器弹性化应用实践.pptx

    综上所述,Docker容器弹性化应用实践涉及将传统应用进行微服务化改造,利用Docker实现轻量级部署和隔离,通过Mesos和Marathon实现资源的有效管理和弹性扩展,并借助一系列辅助工具确保服务的稳定性和监控。...

    互联网企业的容器实践.pptx

    然而,容器化也带来了一些挑战,比如安全性、网络隔离、监控和日志管理等,这些都是下半年工作中的重点改进方向。 总结来说,互联网企业的容器实践是解决业务复杂性和运维挑战的有效手段,通过Mesos、Docker等技术...

    容器微服务在流媒体实践.pptx

    同时,也会提出遇到的问题和挑战,比如容器安全、网络隔离和监控等问题,这些都是后续改进和优化的方向。 下半年的工作计划可能围绕进一步优化容器编排、引入更先进的服务网格技术、提升微服务治理能力以及加强容器...

    容器化并行编程范例.pptx

    2. **使用网络策略:** 应用容器网络策略来控制容器之间的流量,实现网络隔离和安全。 3. **优化 DNS 解析:** 使用自定义 DNS 服务器或缓存机制,优化容器 DNS 解析性能。 **存储优化** 1. **选择合适的存储类型...

    企业容器云平台性能分析.pptx

    因此,改进容器的隔离机制、优化健康检查机制、加强代码质量和上线流程的审查,以及建立更加详尽的监控指标,都是解决和预防性能问题的关键。 综上所述,企业容器云平台性能分析是一项复杂而重要的任务,涉及到资源...

Global site tag (gtag.js) - Google Analytics