利用Registrator和Consul实现mesos task的服务发现

实现目的:

因为mesos中实际的工作节点是slave,框架marathon启动的任务(容器)都是在随机的slave上执行,所以在每台slave上启动Registrator,用来发现本机上的容器,它会把当前宿主机上的容器自动注册到consul.但是consul找一台salve启动就行,它会把自己选为leader,其他slave上启动Registrator的时候指定此leader就行

环境:

192.168.0.149 Mesos-master、Zookeeper
192.168.0.161 Mesos-master、Zookeeper、Marathon
192.168.0.174 Mesos-master、Zookeeper
192.168.0.239 Mesos-slave、Consul-server、Registrator
192.168.0.236 Mesos-slave、Registrator

部署:

定义IP

HOST_IP_1=192.168.0.149
HOST_IP_2=192.168.0.161
HOST_IP_3=192.168.0.174

192.168.0.149

启动Zookeeper

[[email protected] ~]# docker run -d --net="host" -e SERVER_ID=1 -e ADDITIONAL_ZOOKEEPER_1=server.1=${HOST_IP_1}:2888:3888 -e ADDITIONAL_ZOOKEEPER_2=server.2=${HOST_IP_2}:2888:3888 -e ADDITIONAL_ZOOKEEPER_3=server.3=${HOST_IP_3}:2888:3888 garland/zookeeper

启动Mesos-master

[[email protected] ~]# docker run --net="host" -p 5050:5050  -e "MESOS_HOSTNAME=${HOST_IP_1}"   -e "MESOS_IP=${HOST_IP_1}" -e "MESOS_ZK=zk://${HOST_IP_1}:2181,${HOST_IP_2}:2181,${HOST_IP_3}:2181/mesos"  -e "MESOS_PORT=5050"  -e "MESOS_LOG_DIR=/var/log/mesos"  -e "MESOS_QUORUM=2"  -e "MESOS_REGISTRY=in_memory"  -e "MESOS_WORK_DIR=/var/lib/mesos"  -d garland/mesosphere-docker-mesos-master

192.168.0.161

启动Zookeeper

[[email protected] ~]# docker run -d  --net="host"   -e SERVER_ID=2  -e ADDITIONAL_ZOOKEEPER_1=server.1=${HOST_IP_1}:2888:3888   -e ADDITIONAL_ZOOKEEPER_2=server.2=${HOST_IP_2}:2888:3888   -e ADDITIONAL_ZOOKEEPER_3=server.3=${HOST_IP_3}:2888:3888   garland/zookeeper

启动Mesos-master

 [[email protected] ~]# docker run --net="host"  -p 5050:5050  -e "MESOS_HOSTNAME=${HOST_IP_2}"   -e "MESOS_IP=${HOST_IP_2}"    -e "MESOS_ZK=zk://${HOST_IP_1}:2181,${HOST_IP_2}:2181,${HOST_IP_3}:2181/mesos"   -e "MESOS_PORT=5050"  -e "MESOS_LOG_DIR=/var/log/mesos" -e "MESOS_QUORUM=2"  -e "MESOS_REGISTRY=in_memory" -e "MESOS_WORK_DIR=/var/lib/mesos"  -d  garland/mesosphere-docker-mesos-master

启动Marathon

[[email protected] ~]# docker run  -d -p  8080:8080  mesosphere/marathonv0.14.0  --master zk://${HOST_IP_1}:2181,${HOST_IP_2}:2181,${HOST_IP_3}:2181/mesos --zk zk://${HOST_IP_1}:2181,${HOST_IP_2}:2181,${HOST_IP_3}:2181/marathon

192.168.0.174

启动Zookeeper

[[email protected] ~]# docker run -d  --net="host"   -e SERVER_ID=3  -e ADDITIONAL_ZOOKEEPER_1=server.1=${HOST_IP_1}:2888:3888   -e ADDITIONAL_ZOOKEEPER_2=server.2=${HOST_IP_2}:2888:3888   -e ADDITIONAL_ZOOKEEPER_3=server.3=${HOST_IP_3}:2888:3888   garland/zookeeper

启动Mesos-master

[[email protected] ~]# docker run --net="host"  -p 5050:5050  -e "MESOS_HOSTNAME=${HOST_IP_3}"   -e "MESOS_IP=${HOST_IP_3}"    -e "MESOS_ZK=zk://${HOST_IP_1}:2181,${HOST_IP_2}:2181,${HOST_IP_3}:2181/mesos"   -e "MESOS_PORT=5050"  -e "MESOS_LOG_DIR=/var/log/mesos" -e "MESOS_QUORUM=2"  -e "MESOS_REGISTRY=in_memory" -e "MESOS_WORK_DIR=/var/lib/mesos"  -d  garland/mesosphere-docker-mesos-master

192.168.0.239

安装Mesos-slave

安装mesosphere源
[[email protected] ~]# rpm -ivh /mesosphere-el-repo-7-1.noarch.rpm
安装mesos
[[email protected] ~]# yum -y install  mesos
配置mesos
[[email protected] ~]# echo zk://192.168.0.149:2181,192.168.0.161:2181,192.168.0.174:2181/mesos > /etc/mesos/zk
[[email protected] ~]# echo 192.168.0.239 | sudo tee /etc/mesos-slave/hostname
[[email protected] ~]# echo ‘docker,mesos‘ > /etc/mesos-slave/containerizers 
启动mesos-slave
[[email protected] ~]# systemctl start   mesos-slave  && systemctl enable  mesos-slave
[[email protected] ~]# systemctl disable mesos-master

启动Consul-server

[[email protected] ~]# docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap -bind=192.168.0.239

NOTE:一个节点启动就行,它会自己把自己选为leader

测试consul-server

 [[email protected] ~]# curl 192.168.0.239:8500/v1/catalog/services
{"consul":[]}

NOTE:也可以浏览器访问:http://192.168.0.239:8500/ui/

启动Registrator

[[email protected] ~]# docker run -d   --name=registrator \    
 --net=host \    
 --volume=/var/run/docker.sock:/tmp/docker.sock \    
 gliderlabs/registrator:latest  consul://192.168.0.239:8500

测试Registrator是否跟consul结合把服务自动注册到里面,启动一个redis容器测试

[[email protected] ~]# docker run -d -P --name=redis redis
[[email protected] ~]# curl 192.168.0.239:8500/v1/catalog/services
{"consul":[],"redis":[]}

consul现在有个服务叫做redis,我们能看到更多关于这个服务的,比如端口、IP

[[email protected] ~]# curl $(boot2docker ip):8500/v1/catalog/service/redis[{"Node":"boot2docker","Address":"10.0.2.15","ServiceID":"boot2docker:redis:6379","ServiceName":"redis","ServiceTags":null,"ServiceAddress":"","ServicePort":32768}]

所有slave的容器注册信息都可以在consul中看到

也可以用DNS API测试

[[email protected] ~]# dig @127.0.0.1 -p 8600 redis.service.consul

; <<>> DiG 9.9.4-RedHat-9.9.4-18.el7 <<>> @127.0.0.1 -p 8600 redis.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 937
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;redis.service.consul.		IN	A

;; ANSWER SECTION:
redis.service.consul.	0	IN	A	192.168.0.239

;; Query time: 1 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Wed Mar 30 12:43:34 CST 2016
;; MSG SIZE  rcvd: 74

参考文章:

·https://github.com/sekka1/mesosphere-docker

·http://gliderlabs.com/registrator/latest/user/quickstart/

时间: 2024-08-02 11:02:42

利用Registrator和Consul实现mesos task的服务发现的相关文章

服务发现:Zookeeper vs etcd vs Consul

摘自:http://dockone.io/article/667 [编者的话]本文对比了Zookeeper.etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考. 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口.管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多.因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口.唯一的问题

实战中的asp.net core结合Consul集群&amp;Docker实现服务治理

0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群,一旦把命令工具关掉,则consul无法再后台启动,尤其是在linux系统中. 如果在window系统中,采用bat文件到时可以做成开机自启,或者在linux中把命令做成一个service 服务文件来启动就可以实现后台运

基于docker服务配置Consul+registrator实时服务发现

Consul是用于服务发现和配置的工具.Consul是分布式的,高度可用的,并且具有极高的可伸缩性. Consul服务提供以下关键特性: 服务发现:Consul 的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用 Consul 去发现一个指定服务的提供者.通过 DNS 或者 HTTP 应用程序可用很容易的找到他所依赖的服务: 健康检查:Consul 客户端可用提供任意数量的健康检查,指定一个服务(比如: webserver 是否返回了200 OK 状态码)或者使用本

Consul+Registrator+Docker实现服务发现(nginx反向代理)

环境准备: consul:高可用,分布式的服务发现的工具 master主机-docker01:172.16.1.30 node01主机-docker02:172.16.1.31node02主机-docker03:172.16.1.32 注意:因为是测试环境,所以暂时关闭防火墙,禁用selinux,如果是对外网发布的服务器,是不可以关闭防火墙,可以设置iptables规则. 项目操作: (1)docker01上部署consul:下载或上传consul_1.5.1_linux_amd64软件包: [

Docker + Consul + registrator实现服务发现及nginx反向代理

一. 架构设计 在现实中,我们一直渴望着追求提供高质量.高可用的服务架构体系,同时减少不必要的部署和维护代价,减少容错率.面对如此高的要求,可以有两种架构方案:Docker+Etcd+Confd+NginxDocker+Consul+Nginx本文中我们主要来介绍 Docker+Etcd+Confd+Nginx方案,此方案更加高效.快捷,并且维护代价和容错率更低,分布式支持力度更强,如下图所示: 上面示意图的大概流程如下:1.docker01主机上以二进制包的方式部署consul服务并后台运行,

服务发现之 Etcd VS Consul

抄自这里 ************************************************************************************************ 网上找来找去都是zk和etcd的比较,和consul的比较很少,这个感觉还算靠谱,也在别的地方看到过对consul的吐槽,记录下 ***********************************************************************************

50篇经典珍藏 | Docker、Mesos、微服务、云原生技术干货

概念篇 全方位探(tian)索(keng)Mesos各种存储处理方式 老肖有话说@Mesos User Group第四次约会 技术实践 | Mesos 全方位“烹饪”指南 回顾 JAVA 发展轨迹,看 Docker 与 Mesos Docker 与 Mesos 的前生今世 | 数人云CTO肖德时@KVM分享实录 如何利用 Mesos 持久化存储方案部署 ArangoDB 集群 数据处理平台架构中的SMACK组合:Spark.Mesos.Akka.Cassandra以及Kafka 畅谈 Mesos

Spring Cloud Consul—服务发现与Consul

服务发现是基于微服务架构的关键原则之一.尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱.Consul通过HTTP API和DNS提供服务发现服务.Spring Cloud Consul利用HTTP API进行服务注册和发现.这不会阻止非Spring Cloud应用程序利用DNS界面.Consul代理服务器在通过八卦协议进行通信的集群中运行,并使用Raft协议协议. 如何激活 要激活Consul服务发现,请使用组org.springframework.cloud和artifact i

ASP.NET Core 微服务初探[1]:服务发现之Consul

在传统单体架构中,由于应用动态性不强,不会频繁的更新和发布,也不会进行自动伸缩,我们通常将所有的服务地址都直接写在项目的配置文件中,发生变化时,手动改一下配置文件,也不会觉得有什么问题.但是在微服务模式下,服务会更细的拆分解耦,微服务会被频繁的更新和发布,根据负载情况进行动态伸缩,以及受资源调度影响而从一台服务器迁移到另一台服务器等等.总而言之,在微服务架构中,微服务实例的网络位置变化是一种常态,服务发现也就成了微服务中的一个至关重要的环节. 服务发现是什么 其实,服务发现可以说自古有之,我们每