继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

PIPIONE
关注TA
已关注
手记 1120
粉丝 150
获赞 704


实现目的:

因为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

[root@master-1 ~]# 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

[root@master-1 ~]# 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

[root@master-2 ~]# 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

 [root@master-2 ~]# 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

[root@master-2 ~]# 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

[root@master-3 ~]# 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

[root@master-3 ~]# 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源

[root@slave-1 ~]# rpm -ivh /mesosphere-el-repo-7-1.noarch.rpm

安装mesos

[root@slave-1 ~]# yum -y install  mesos

配置mesos

[root@slave-1 ~]# echo zk://192.168.0.149:2181,192.168.0.161:2181,192.168.0.174:2181/mesos > /etc/mesos/zk

[root@slave-1 ~]# echo 192.168.0.239 | sudo tee /etc/mesos-slave/hostname

[root@slave-1 ~]# echo 'docker,mesos' > /etc/mesos-slave/containerizers 

启动mesos-slave

[root@slave-1 ~]# systemctl start   mesos-slave  && systemctl enable  mesos-slave

[root@slave-1 ~]# systemctl disable mesos-master

启动Consul-server

[root@slave-1 ~]# docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap -bind=192.168.0.239

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

测试consul-server

 [root@slave-1 ~]# curl 192.168.0.239:8500/v1/catalog/services

{"consul":[]}

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

启动Registrator

[root@consul-1 ~]# 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容器测试

[root@consul-1 ~]# docker run -d -P --name=redis redis

[root@consul-1 ~]# curl 192.168.0.239:8500/v1/catalog/services

{"consul":[],"redis":[]}

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

[root@consul-1 ~]# 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中看到

wKioL1b7WefRHu-yAACDvhkeDvI099.png

也可以用DNS API测试

[root@slave-1 ~]# 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/

©著作权归作者所有:来自51CTO博客作者翟军铭的原创作品,如需转载,请注明出处,否则将追究法律责任

leader云计算

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

翟军铭0人评论1515人阅读2016-03-30 12:41:37

实现目的:

因为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

[root@master-1 ~]# 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

[root@master-1 ~]# 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

[root@master-2 ~]# 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

 [root@master-2 ~]# 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

[root@master-2 ~]# 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

[root@master-3 ~]# 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

[root@master-3 ~]# 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源

[root@slave-1 ~]# rpm -ivh /mesosphere-el-repo-7-1.noarch.rpm

安装mesos

[root@slave-1 ~]# yum -y install  mesos

配置mesos

[root@slave-1 ~]# echo zk://192.168.0.149:2181,192.168.0.161:2181,192.168.0.174:2181/mesos > /etc/mesos/zk

[root@slave-1 ~]# echo 192.168.0.239 | sudo tee /etc/mesos-slave/hostname

[root@slave-1 ~]# echo 'docker,mesos' > /etc/mesos-slave/containerizers 

启动mesos-slave

[root@slave-1 ~]# systemctl start   mesos-slave  && systemctl enable  mesos-slave

[root@slave-1 ~]# systemctl disable mesos-master

启动Consul-server

[root@slave-1 ~]# docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap -bind=192.168.0.239

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

测试consul-server

 [root@slave-1 ~]# curl 192.168.0.239:8500/v1/catalog/services

{"consul":[]}

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

启动Registrator

[root@consul-1 ~]# 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容器测试

[root@consul-1 ~]# docker run -d -P --name=redis redis

[root@consul-1 ~]# curl 192.168.0.239:8500/v1/catalog/services

{"consul":[],"redis":[]}

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

[root@consul-1 ~]# 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中看到

wKioL1b7WefRHu-yAACDvhkeDvI099.png

也可以用DNS API测试

[root@slave-1 ~]# 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/

©著作权归作者所有:来自51CTO博客作者翟军铭的原创作品,如需转载,请注明出处,否则将追究法律责任

leader云计算


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP