1.概述:
目前marathon主要支持两种autoscaling:1.基于cpu、内存使用率的autoscaling;2.基于服务请求频率的autoscaling。下面将就这两种autoscaling的原理和用法进行详述。
2.基于CPU和内存使用率的autoscaling
2.1原理
app autoscaling的实现主要依靠一个运行在主机上名为marathon-autoscale.py的Python脚本,不断监测app中cpu和内存的使用率,当使用率达到阈值时自动扩展app中instance的数量。这个脚本启动时主要配置好几个参数:Marathon的地址、要监测并自动扩展的app名字、这个app所有instance中平均内存使用率的上限、这个app所有instance中平均CPU使用率的上限、自动扩展的Instance数量的上限。
通过看脚本的代码可以看到脚本中有一个marathon的class,通过传入marathon的url来初始化它,如下图所示:
在main函数中可以看到使用marathon类创建了一个aws_marathon的对象,然后调用这个对象的get_app_detail函数返回一个所有APP的task和所在host的信息。之后主要就是通过这个两个信息来调用get_task_agentstatistics(task,host)函数从http://'+host +':5051/monitor/statistics.json获取每个instance上cpu和内存的使用情况。
以上分析得出结论,其实最终是调用mesos的监控机制,从mesos-slave上获取app中各instance上cpu和内存的使用率的。想了解Mesos的monitoring机制请看:http://mesos.apache.org/documentation/latest/monitoring/
2.2使用
1.创建app
on 10.134.29.141
• 1.编辑.json文件
vim nginx-autoscaling.json
{
"id": "nginx-autoscaling”,
"Container": {
"type": "Docker",
"docker": {
"image":"10.133.19.25:5000/library/nginx:latest",
"network": "BRIDGE",
"portMappings": [
{ "hostPort": 0,"containerPort": 80, "servicePort": 10002 }
],
"forcePullImage":true
}
},
"instances": 1,
"cpus": 0.1,
"mem": 65,
"healthChecks": [{
"protocol": "HTTP",
"path": "/",
"portIndex": 0,
"timeoutSeconds": 10,
"gracePeriodSeconds": 10,
"intervalSeconds": 2,
"maxConsecutiveFailures": 10
}],
"labels":{
"HAPROXY_GROUP":"external,internal"
}
}
• 2.启动app
dcosmarathon app add nginx-autoscaling.json
2.启动autoscaler,on 10.134.29.134:
• 1.获取源码
Git clonehttps://github.com/mesosphere/marathon-autoscale.git
cdmarathon-autoscale
• 2.运行autoscale脚本
pythonmarathon-autoscale.py
Enter the DNS hostname or IP of yourMarathon Instance : 10.134.29.134
Enter the Marathon Application Name toConfigure Autoscale for from the Marathon UI : nginx-autoscaling
Enter the Max percent of Mem Usageaveraged across all Application Instances to trigger Autoscale (ie. 80) : 5
Enter the Max percent of CPU Usageaveraged across all Application Instances to trigger Autoscale (ie. 80) : 5
Enter which metric(s) to triggerAutoscale ('and', 'or') : or
Enter Autoscale multiplier for triggeredAutoscale (ie 1.5) : 2
Enter the Max instances that should everexist for this application (ie. 20) : 10
3.验证:
• 1.进入docker
docker exec-it fb700c6045ad /bin/bash
• 2.加压
ddif=/dev/zero of=test bs=1M count=1000
此时查看会发现多了instance
3. 基于服务请求频率的autoscaling
3.1原理
这个的原理是启动一个marathon-lb-autoscale的app来查看Haproxy监测到的对某一app的请求频率。请求频率超过阈值便自动扩展。详细了解请见:
3.2使用
1.创建测试扩展的nginx app
2.创建marathon-lb-autoscaleapp
on 10.134.29.141:
• 1.编辑app配置文件.json
vimmarathon-lb-autoscale.json
{
"id":"marathon-lb-autoscale",
"args":[
"--marathon","http://10.134.29.134:8080",
"--haproxy","http://marathon-lb.marathon.mesos:9090",
"--target-rps", "100",
"--apps", "nginx_10002"
],
"cpus": 0.1,
"mem": 16.0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image":"docker.io/mesosphere/marathon-lb-autoscale",
"network": "HOST",
"forcePullImage": true
}
}
}
• 2.启动app
dcosmarathon app add marathon-lb-autoscale.json
3.验证
先将siege镜像用docker pull下载并上传到私有仓库中:
docker pull yokogawa/siege
docker tag docker.io/yokogawa/siege:latest10.133.19.25:5000/siege:latest
docker push10.133.19.25:5000/siege:latest(如果上传不成功的话需要上传的主机的docker启动参数加上--insecure-registry=10.133.19.25:5000)
• 1.创建一个siege app用来发送http请求进行测试:
vim siege.json
{
"id": "siege",
"args":[
"-d1",
"-r1000",
"-c100",
"http://10.134.29.142:10000/"
],
"cpus": 0.5,
"mem": 16.0,
"instances": 1,
"container": {
"type": "DOCKER",
"volumes": [],
"docker": {
"image": "10.133.19.25:5000/siege:latest",
"network": "HOST",
"privileged": false,
"parameters": [],
"forcePullImage": false
}
}
}
dcos marathon app add siege.json
• 2.加大request数量:
dcos marathon app update /siege instances=15
此时查看会发现多了nginxinstance
http://blog.csdn.net/liukuan73/article/details/50769790
相关推荐
在分析`marathon-lb-1.4.3.tar.gz`这个压缩包时,我们可以深入探讨Marathon-LB的核心功能、工作原理以及如何部署和配置。 1. **Marathon-LB简介** Marathon-LB基于HAProxy,它是一个开源的高性能四层负载均衡器。...
marathon-autoscale, 基于利用率的扩展应用在马拉松应用中的简单概念 马拉松自动缩放可以在马拉松管理下运行以动态扩展运行在 dc/os上的服务的Dockerized容器 autoscaler 。先决条件正在运行的DCOS群集。如果在 dc/...
马拉松磅 Marathon-lb是通过使用应用程序状态来管理HAProxy的工具。 HAProxy是一种快速,高效,经过考验的高可用性负载均衡器,具有许多高级功能,可为许多备受瞩目的网站提供支持。特征无状态设计:不直接依赖任何...
marathon-consul, 桥马拉松信息到 Consul 马拉松领事 马拉松到领事桥的元数据发现。marathon-consul 获取由马拉松事件总线提供的信息并将它的转发到 consul tree 。 启动时,它还将所有来自马拉松的信息同步到 ...
这个“marathon-0.8.2.tgz”文件是一个压缩包,包含了 Marathon 的 0.8.2 版本,该版本发布于2014年左右。本文将详细讲解 Marathon 的核心功能、架构、配置以及如何部署和管理服务。 Marathon 的主要功能: 1. **高...
资源分类:Python库 所属语言:Python 资源全名:marathon-0.7.7.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 资源全名:marathon-cli-1.1.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
在`marathon-0.8.11.tar.gz`这个压缩包中,包含的是`marathon`库的0.8.11版本。这个版本可能包含了该库的源代码、文档、示例以及必要的构建工具。安装和使用这个库通常需要对Python开发有一定的了解,同时也需要...
Python 2.7+ 用于使用marathon-client 。 安装 git clone https://github.com/Wizcorp/marathon-client.py.git cd marathon-client.py 您可以使用以下命令全局安装marathon-client.py : sudo easy_install . 或...
marathon-ruby是 Marathon API 的 Ruby 客户端。 到目前为止,它还没有完成,但包括启动/更新/删除应用程序的基本功能。 安装 将此行添加到应用程序的 Gemfile 中: gem 'marathon-ruby' 然后执行: $ bundle ...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
F5马拉松BIG-IP控制器 该GitHub存储库已归档且为只读。...官方f5networks/marathon-bigip-ctlr映像为f5networks/marathon-bigip-ctlr 。 通常,控制器部署在Marathon中。 但是,控制器可以在本地运行以进行开发测试。
马拉松代理经理用于马拉松 mesos 环境的 Nginx ...安装在终端中安装类型pip install marathon-proxy-manager 执行安装后,您可以使用以下命令启动它: python -m marathon_proxy_manager --marathon-url http://some
此应用程序允许您自动生成和更新Marathon-lb的“让我们加密”证书。 它必须作为马拉松应用程序运行。 应用程序在启动时会生成或更新证书,并每隔24小时检查一次是否需要更新证书。 如果您需要新域或其他域的证书,则...
马拉松蟒 这是一个Python库,用于通过Marathon的与服务器进行。 兼容性 对于Marathon 1.9.x和1.10.x,至少使用0.13.0 对于Marathon 1.6.x,至少使用...pip install -e git+git@github.com:thefactory/marathon-pyth
用法usage: Bridge.groovy [options] -i,--Interval <INTERVAL> Interval in seconds at which the bridge syncs Hipache with Marathon -m,--MarathonUrl <URL> Marathon url -P,--AppsPath <PATH> Example: /v2/...
总的来说,“Ucode-Half-Marathon-Web”项目提供了一个全面学习和提升HTML技能的机会,通过参与,你将能够创建出功能丰富、结构清晰的网页。记得实践中不断尝试和迭代,这是成为优秀Web开发者的关键步骤。
在提供的压缩包`marathon-demo-master`中,我们可以找到Marathon演示的资源。这个项目可能包含了以下内容: 1. **README.md** - 这是一个Markdown格式的文档,通常会包含演示的介绍、如何运行演示、预期结果以及...
marathon-docker-search npm install node app.js <image> search term <ip> search term -h, --help show help -m marathron IP -p docker remote API port (default:4243)
将marathon-shiro-authentication-plugin.jar放在您的插件目录中,并使用--plugin_dir标志提供此目录的路径为Marathon创建配置JSON(例如,在/etc/marathon/plugin_conf.json ){ " plugins " : [ { " plugin " : ...