『中级篇』集群服务间通信之RoutingMesh(47)

栏目: 编程工具 · 发布时间: 6年前

内容简介:原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!原文链接地址:上次讲了通过service create 部署了wordpress,我们的这个wordpress有2个service组成一个wordpress,一个mysql。这2个service运行在不同的机器上边,并且他们之前是可以进行通信的,可以通过servicename的方式通信。先创建mysql,wordpress查找mysql就是通过servicename这种方式。懂网络的老铁应该就知道了,这里面肯定有DNS的功劳在里面。

原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!

原文链接地址: 『中级篇』集群服务间通信之RoutingMesh(47)

上次讲了通过service create 部署了wordpress,我们的这个wordpress有2个service组成一个wordpress,一个mysql。这2个service运行在不同的机器上边,并且他们之前是可以进行通信的,可以通过servicename的方式通信。先创建mysql,wordpress查找 mysql 就是通过servicename这种方式。懂网络的老铁应该就知道了,这里面肯定有DNS的功劳在里面。

『中级篇』集群服务间通信之RoutingMesh(47)

实验的方式了解这个网络

  • 必须创建overlay的network
sudo docker network create -d overlay demo
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)
  • 创建一个service,这个service 使用whoami,这个image,这个image的作用,就是访问后,返回当前访问的主机名称
docker service create --name whoami -p 8000:8000 --network demo jwilder/whoami
#查看service 里面的服务
docker service ls
#查看whoami的信息
docker service ps whoami
#因为service ps whoami 在manager上运行,直接在manager查看ps下
docker ps 
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)
『中级篇』集群服务间通信之RoutingMesh(47)
#访问下本地manager的whoami
curl 127.0.0.1:8000
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)
  • 创建一个service,这个service 使用busybox,之前创建过是一个比较简单的image,这个是为了当客户端service之间的访问。
docker service create --name client -d --network demo busybox sh -c "while true;do sleep 3600;done"
docker service ls
#运行在swam-worker1机器上
docker service ps client
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)
#在swam-work1上进行运行 172.28.128.4 
docker exec -it busybox的容器ID sh
ping whoami
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)
『中级篇』集群服务间通信之RoutingMesh(47)

ping whoami ip地址是10.0.0.247

  • 测试whoami的ip是否发生变化

在manager下进行scale 扩展为2个,查看到一个在worker2上边,并在worker2的ps上可以查看到whoami的运行,尝试继续ping whoami,结果ip不发生变化。

#manager机器上进行扩展
docker service scale whoami=2
#worker2 上运行 查看whoami 是否存在
docker ps
#worker1 上ping whoami发现ip没有发生变化10.0.0.247
ping whoami
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)

为什么呢 ip不发生变化,其实我们ping的地址是一个虚拟的ip,docker 集群默认使用 Overlay 网络驱动,Overlay 驱动实现了跨主机集群内部虚拟网络。它的作用:将运行的多个容器(不同主机),附加(attach to)到一个网络默认情况下,服务发现为群集中的每个服务分配虚拟IP地址(VIP)和 动态 DNS,使其可以通过服务名称将其提供给同一网络上的容器。即在一个 Overlay 虚拟网络内,使用服务名称访问,将实现任务级别的负载均衡在群集中使用覆盖网络,需要在群集节点之间打开以下端口:

端口7946 TCP / UDP用于容器网络发现。

端口4789 UDP用于容器覆盖网络。

机器进行迁移的时候有一套map<k,v>关系,虚拟ip 和实际的ip 有个对应的关系,

  • 轮训的负载机制
wget whoami:8000
more index.html
#因为目前就有2个whoami,
#所以可以看到第三次执行wget获取的时候发现id重复了也变成了65beb6796165
复制代码
『中级篇』集群服务间通信之RoutingMesh(47)

Routing Mesh的体验

  1. Internal --- Container 和Container 之间的访问通过overlay网络(通过VIP虚拟IP)
  2. Ingress---- 如果服务有绑定接口,则此服务可以通过任意swarm节点的响应接口访问

Load Balancing

现在有3台机器1个client,2个web,他们3个连通在同一个swam下,当client访问web的时候其实,其实是访问10.0.9.4,然后通过负载的方式映射到10.0.9.5或者10.0.9.6上面。

『中级篇』集群服务间通信之RoutingMesh(47)
『中级篇』集群服务间通信之RoutingMesh(47)

PS:内部负载均衡

当在docker swarm集群模式下创建一个服务时,会自动在服务所属的网络上给服务额外的分配一个虚拟IP,当解析服务名字时就会返回这个虚拟IP。对虚拟IP的请求会通过overlay网络自动的负载到这个服务所有的健康任务上。这个方式也避免了客户端的负载均衡,因为只有单独的一个虚拟IP会返回到客户端,docker会处理虚拟IP到具体任务的路由,并把请求平均的分配给所有的健康任务。 『中级篇』集群服务间通信之RoutingMesh(47)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

SCWCD Exam Study Kit Second Edition

SCWCD Exam Study Kit Second Edition

Hanumant Deshmukh、Jignesh Malavia、Matthew Scarpino / Manning Publications / 2005-05-20 / USD 49.95

Aimed at helping Java developers, Servlet/JSP developers, and J2EE developers pass the Sun Certified Web Component Developer Exam (SCWCD 310-081), this study guide covers all aspects of the Servlet an......一起来看看 《SCWCD Exam Study Kit Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具