因marathon-lb的劳动从发现与负载均衡

参照文档:

同等、最新资讯

  1. Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/
  2. 参考:http://www.cnblogs.com/kevingrace/p/6845980.html
  3. 根据脚本实现劳务自发现和负载均衡(供参考,marathon-lb之前的方案):

    http://dockone.io/article/439

    https://github.com/draculavlad/SetUpMesosphereOnCentos7WithServiceDiscovery/

1.中共中央办公厅
国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》 

 本文主要根据marathon-lb实现mesos+marathon平台的之服务由发现与负载均衡。

2.国务院有关强化“互联网+先进制造业”发展工业互联网的指点意见

一.环境

3.关于制造业新想与工业互联网机理的少数想(上)

1. 环境认证

图片 1

因《基于zookeeper+mesos+marathon的docker集群管理平台》的条件,不同处:

  1. 自从发现与负载均衡服务由镜像marathon-lb生成的容器完成,下发到任意1贵salve节点;
  1. 具有salve节点安装keepalived服务做服务的大可用,vip:10.11.5.145。 

4.关于制造业新思考和工业互联网机理的某些琢磨(下)

二.部署marathon-lb

5.国务院决定进行“中国制造2025”国家级示范区创建工作

1. 准备marathon-lb镜像

#在3个slave节点提前准备镜像,以节省容器部署时间
[root@slave-node1 ~]# docker pull mesosphere/marathon-lb
[root@slave-node1 ~]# docker images

图片 2

6.《工业互联网平台白皮书》发布
注:修改部分错,修改后正式宣告

2. 拓扑编写marathon-lb的json文件

#在任意marathon master节点上编写关于marathon-lb的json文件
[root@master-node1 ~]# vim marathon-lb.json

#”network”采用HOST模式,与宿主机共享namespace;
#”args”参数将3个marathon master节点的ip:8080都带上,即marahon的api接口地址,因为不确定marathon下发marathon-lb容器时,会下发到哪一台宿主机;
#”group”参数为”external”,可以定义多个不同的”group”(即不同的marathon-lb),针对不同的应用可以绑定到不同的”group”;
#请注意json文件的格式,如标点符号等,marathon web下的”JSON Mode”框有检查语法正确与否的功能。
{
  "id":"marathon-lb",
  "cpus": 1,
  "mem": 128,
  "instances": 1,
  "constraints": [["hostname", "UNIQUE"]],
  "container": {
  "type":"DOCKER",
  "docker": {
     "image": "mesosphere/marathon-lb",
     "privileged": true,
     "network": "HOST"
    }
  },
   "args": ["sse", "-m", "http://10.11.4.156:8080", "-m", "http://10.11.4.157:8080", "-m", "http://10.11.4.158:8080", "--group", "external"]
}

 

3. 下发marathon-lb容器

图片 3

1)方式1:通过curl调用json配置

#调用保存有json文件的maste节点8080端口下的json文件,即调用marathon的api
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d@/root/marathon-lb.json -H "Content-type:application/json"

 

2)方式2:通过marathon web下发json配置

图片 4

亚、个人拉

4. 查看marathon-lb

     
 仪器仪表、调制解调、PC机软件、互联网、移动互联网、物联网和工业互联网……,本人到场工作之时光是调制解调(猫)时代,硬件传输数据的速好因个人清字节数码,随后一直当PC机软件领域精心耕耘。工作之间培训过Android框架、Hadoop大数量等科目,也都想过去互联网企业,感觉那个了不起上,赚钱同时大多。可能是个性使然,又与之前的行事领导者一般小管自己,不绝符合互联网公司工作环境,也即一拖再拖。这无异蘑菇就拖到了工业互联网时代,现在举行的工作呢同之类似。

1)marathon web

marathon-lb作为同一栽丰富服务,已经下发,运行如常,如下:

图片 5

marathon-lb已发出至slave节点10.11.4.146:31187,如下:

图片 6

     
 有时候思维工业猿们的确很麻烦,跑工业现场,环境恶劣;需要分析、软件开发、安装实施、商务三陪及回款…..一身扛,.这才是全栈人才吧;要说交回报,那尼麻才是我们痛心之地方,听到互联网商家的“人才”们讲薪水还是**K、**K……,感觉猿类里吗瓜分上下呀,那心情好于今京盖在冬天清理“低端人口”。可是回过头来想想,我们依靠付出的分神,不克有如此之悬殊的差距呀。拿到投资后(别人的钱)疯疯砸,砸出点火花后,又失去用投资,没有砸火花后,就倒呗!这是片条发展路径,两模拟发展想,没有针对性错的分。但是,确实存在价值取向的题目,诸如三色幼儿园不是第一蹩脚出现问题了,难道还有在的理嘛,还未是产生强有力的“资本”在支撑嘛,可是实在劳动的“低端人口”却吃清理。

2)mesos web

mesos
active tasks中展示marathon-lb任务下发成功,如下:

图片 7

     
 时代不会见辜负这个时期之人数,踏实实干呢,浮躁取巧也罢,皆以生存之道。改革改放后,经历了分田单工经济、下海经商经济、资源经济、互联网经济、房地产经济……社会主义国家补上了资本主义的征收,基本到位了血本的原始积累。可是我们国家与美国免均等,美国的危难可以输出为世界,可是咱们国家之危机只能内部转化、消化,还会因先的经济时支撑继续前行嘛,如此继往是不是诸如经济学家所说之陷落中等收入陷阱,可是我的确怀疑我们是中档收入嘛。

5. 查看haproxy

     
 基于上述之简约解析,发展制造业为是必然选择之一,所以近年来国级别连续发布信息,至少给从相关工作的工业猿们一些巴。工业互联网平台是大厂的标配,小厂没有实力干,但是不妨碍小厂思维转变和以工业互联网平台。但是也非是来了工业互联网平台就顺手了,这是一个体系化建设工程,有我们的国情,下回写文章分析。在变革之时代,任何节点都发出突破机会,总的需我们转变思想方式。

1)设置iptables

#marathon-lb生成的haproxy容器映射到宿主机的tcp 9090端口,可以在相应宿主机通过”netstat -tunlp | grep haproxy”查看;
#需要在所有的宿主机,即slave节点放行tcp 9090端口,因为在没有指定特定主机的时候(在slave启动参数中设置机器属性 --attributes=VALUE),通过marathon下发的marathon-lb容器是随机下发到任意slave节点的;
#不重启iptables,如果重启则docker daemon也需要重启,否则iptables相关的docker的forward规则会丢失;或者在没有容器的情况下提前放行相应端口再做容器相关操作
[root@slave-node1 ~]# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT

 图片 8

2)haproxy监控页面

浏览器查看:http://10.11.4.146:9090/haproxy?stats

图片 9

此外还有部分haproxy监控页面(ip地址是宿主机,即相应slave节点的ip),如下:

  • 监督页面:http://ip:9090/haproxy?stats

  • csv格式的状态监控:http://ip:9090/haproxy?stats;csv

  • 健康检查(注意下划线):http://ip:9090/_haproxy_health_check
  • haproxy配置获取(注意下划线):http://ip:9090/_haproxy_getconfig
  • haproxy的pid(注意下划线):http://ip:9090/_haproxy_getpids

三.验证自动发现同负载均衡

经部署nginx服务可以说明自动发现跟负载均衡两项意义。

1.[连载]《C#简报(串口和网)框架的设计以及贯彻》

1. 编制生成nginx服务的json文件

#在任意marathon master节点上编写json文件
[root@master-node1 ~]# vim marathon-nginx.json

#“labels”中的“HAPROXY_GROUP”,与相关的marathon-lb绑定即可,“group”在下发marathon-lb容器时已经定义;
#“labels”中"HAPROXY_0_VHOST"主要起标签作用;对于web服务可以加上VHOST标签,让marathon-lb设置WEB虚拟主机;标签名字自定义,目的是为了便于区别应用容器,一般可以用业务域名来描述标签;
#"instances",实例数;
#"healthChecks",对应示例健康状态检测点;
#"portMappings"中的"containerPort"是容器应用端口;"hostPort"是映射的宿主机的端口(设置为”0”即随机);"servicePort"是marathon-lb配置的haproxy代理端口(设置为”0”即随机),设置"servicePort"对一组实例服务非常有用;
{
  "id":"web",
  "labels": {
     "HAPROXY_GROUP":"external",
     "HAPROXY_0_VHOST":"web.nginx.com"
  },
  "cpus":0.2,
  "mem":20.0,
  "instances": 2,
  "healthChecks": [{ "path": "/" }],
  "container": {
    "type":"DOCKER",
    "docker": {
     "image": "nginx",
     "network": "BRIDGE",
     "portMappings":[{"containerPort":80,"hostPort":0,"servicePort":0,"protocol":"tcp"}]
    }
  }
}

2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍

2. 下发nginx服务

#采用上述方式1下发服务即可;
#nginx镜像已经提前准备
[root@master-node1 ~]# curl -X POST http://10.11.4.156:8080/v2/apps -d@/root/marathon-nginx.json -H "Content-type:application/json"

3.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的共同体方案

3. 验证

4.ServerSuperIO开源地址:https://github.com/wxzz/ServerSuperIO

1)查看marathon&mesoso ui

(1)marathon
ui显示web服务都是”Running”状态,且服务名后带标签;

图片 10

(2)点击查阅服务的求实信息,”Instances”标签中显了2单instance容器部署的slave节点与照的端口信息(可以于具体的slave节点通过”docker
ps”命令查看),同时健康检查状态正常;

图片 11

(3)
“Configuration”标签中发出显示服务之求实部署信息,同json文件,关注标红框的”servicePort”是10002,此服务端口是擅自分配的,可由此marathon-lb所于节点的ip+port的计访服务,而非是看单独的某某instance节点提供的劳动;

图片 12

(4)mesos
ui展示显示web服务之星星点点个instance任务现已下发。

图片 13

物联网&集成技术(.NET) QQ群:54256083 

2)访问容器instance提供的劳务

#可以先将2个nginx instance的web页面提前修改;
#如marathon ui展示,1个nginx容器在slave节点10.11.4.146:31005
#在10.11.4.146,即slave-node1节点编写index.html文件,使用”docker cp”将文件覆盖对应容器的默认web站点目录”/usr/share/nginx/html”下的index.html文件
[root@slave-node1 ~]# echo "This is Nginx Server: 10.11.4.146:31005" >> index.html
[root@slave-node1 ~]# docker cp /root/index.html 2c7448e2d185:/usr/share/nginx/html

图片 14

#如marathon ui展示,另1个nginx容器在slave节点10.11.4.147:31071;
#10.11.4.147,即slave-node2节点
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31071" >> index.html
[root@slave-node2 ~]# docker cp /root/index.html 11060abfad4f:/usr/share/nginx/html

图片 15

下载地址:http://www.bmpj.net/thread-14-1-1.html

3)访问haproxy提供的服务

(1)访marathon-lb所于slave节点的10002端口(在marathon
ui服务之configuration可以查询分配的servicePort);

URL:http://10.11.4.146:10002

图片 16

图片 17

PS:10002端口需要以对应节点不重复开iptables的状况下放行,可以尽iptables
-I INPUT -m state –state NEW -m tcp -p tcp –dport 10002 -j
ACCEPT

(2)查看marathon-lb
haproxy的配置;

URL:http://10.11.4.146:9090/_haproxy_getconfig

图片 18

PS:或者登陆到marathon-lb容器中查看haproxy.cfg文件(效果一样)。

(3)查marathon-lb
haproxy的状态页;

URL:http://10.11.4.146:9090/haproxy?stats

图片 19

四.keepalived高可用配置

于marathon-lb或者其后端的real-server来说,对外提供的服务都负marathon-lb容器所在slave节点本身的ip,虽然marathon能长期保持服务在线,但对外提供服务的ip的成形还是内需大可用的装,这里运用keepalived实现,vip:10.11.4.145。

Keepalived服务需装配置当富有marathon-lb可能发至之slave节点。

1. 安装keepalived

Keepalived服务用设置配备当有着marathon-lb可能发至的slave节点。

keepalived版本:keepalived-1.3.6

实际的装置步骤请见:http://www.cnblogs.com/netonline/p/7598744.html

PS:注意每keepalived节点之间打招呼采用组播,iptables需要放行组播或vrrp相关协商。

2. keepalived配置文件

#各slave节点的keepalived配置文件根据情况做微小调整
[root@slave-node1 ~]# vim /usr/local/keepalived/etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost.local
   }
   notification_email_from root@localhost.local
   smtp_server 10.11.4.146
   smtp_connect_timeout 30
   router_id MARATHON_DEVEL
}

vrrp_script chk_marathonlb {
    script "/usr/local/keepalived/etc/chk_marathonlb.sh"
    interval 1
    weight 2          //脚本检测返回值为”0”时,权重上升
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP
    interface br0
    virtual_router_id 201
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 987654
    }
    virtual_ipaddress {
        10.11.4.145
    }
    track_script {
        chk_marathonlb
    }
}

3. marathon-lb检测脚本

#根据配置文件中的配置设定检测脚本
[root@slave-node1 ~]# touch /usr/local/keepalived/etc/chk_marathonlb.sh
[root@slave-node1 ~]# chmod +x /usr/local/keepalived/etc/chk_marathonlb.sh
[root@slave-node1 ~]# vim /usr/local/keepalived/etc/chk_marathonlb.sh

#!/bin/bash
# check if thers is a matathon-lb container running, then this is a keepalived master.
# 2017-09-18 v0.1 

MARATHONLB_LOG="/tmp/marathon-lb.log"

MARATHONLB=`netstat -tunlp | grep "haproxy" | grep ":80" | awk '{print $4}' | awk  'BEGIN{FS=":"} {print $2}'`

#检测marathon-lb服务的80端口,若存在则返回”0”,不存在返回”1”;
#记录日志,非必须项
if [ ${MARATHONLB} -eq 80 ]; then
     echo -e "`date +%F\ %T`: Matathon-lb is here, exit!\n" >> $MARATHONLB_LOG
     exit 0

else
     echo -e "`date +%F\ %T`: Matathon-lb is not here, the keepalived weight will be downgraded." >> $MARATHONLB_LOG
     exit 1
fi

4. 验证

1)启动并查阅vip

#验证过程中,marathon-lb所在的slave1节点宕机,marathon为了保持服务,将marathon-lb重新下发到在salve2节点
[root@slave-node2 ~]# systemctl daemon-reload
[root@slave-node2 ~]# systemctl restart keepalived
[root@slave-node2 ~]# ip a show br0

图片 20

2)访问服务

#web服务下的两个instance都被重置过,这里修改新instance容器的index.html文件
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31288" > index.html
[root@slave-node2 ~]# docker cp /root/index.html 9489b51370fd:/usr/share/nginx/html
[root@slave-node2 ~]# echo "This is Nginx Server: 10.11.4.147:31646" > index.html
[root@slave-node2 ~]# docker cp /root/index.html 2aee995a6ce7:/usr/share/nginx/html

(1)访问vip的10002端口;

URL:http://10.11.4.145:10002

图片 21

图片 22

(2)通过vip访问marathon-lb状态页。

URL:http://10.11.4.145:9090/haproxy?stats

图片 23