关灯
开启左侧

[数据库] 使用DNS的服务发现及内部负载均衡

[复制链接]
Vecloud 发表于 2022-6-1 10:28:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
下文给大家带来使用DNS的服务发现及内部负载均衡,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用Vecloud在行业内累计的经验来做一个解答。
1.使用DNS进行服务
docker引擎据由内部的DNS云服务器,可以为用户定义的网桥(network)、覆盖网络igressoverla(ovelay)、macvlan网络中主机上的所有容器提供名称解析。
每个容器内都有一个NDS解析器,将dns查询结果转发到docker引擎(docker守护程序),该引擎充当dns服务器。docker引擎检查dns查询是属于容器还是属于集群service的请求,如果是容器
则docker引擎会查找与容器名称相匹配的ip,或者service在其键值存储中查找并将ip或者service虚拟ip返回给请求者。

服务发现是网络范围的,这意味着只有位于同一网络上的容器或任务才能使用嵌入式DNS功能。如果容器或者service不在同一网络中,则docker引擎会将dns查询转发到默认DNS服务器解析。

2.内部负载均衡
在docker swarm集群创建服务时,会自动为他们分配一个虚拟ip,该虚拟IP是服务网络的一部分。解析服务名称时返回vip。通过覆盖网络(overlay)自动将vip的流量发送到服务的所有的健康任务中。
docker负责路由并在健康的服务中平均分配流量。

创建overlay网络
docker network create -d overlay mylay

查看swarm创建服务时分配的vip

docker service inspect 服务名 | grep Addr

DNS循环(DNS RR)负载平衡是服务的另一个负载平衡选项(配置为--endpoint-mode)。
在DNS RR模式下,不会为每个服务创建VIP。Docker DNS服务器以循环方式将服务名称解析为单个容器IP

3.swarm集群路由网

路由网的原理:集群中所有的节点都对外公布tcp/udp端口,接收来自外部的请求连接流量,之后通过内核的IPVS负载均衡器将ingress覆盖网络上的流量重定向到健康的服务副本。

路由网是由docker engine 1.12中引入的,它组合ipvs和iptable创建了一个集群范围内的传输层L4负载均衡。它允许集群中所有节点接收已发布端口上的请求连接。
当任何集群节点接收到tcp/upd端口service的流量的,就会使用服务创建时指定的覆盖网络将请求流量分发到服务的vip igress。

启动服务后,您可以为应用程序创建外部DNS记录(对外公布端口 --public 80:80),并将其映射到任何或所有Docker swarm节点。

4.swarm第7层路由(互锁代理)
群集模式路由网络非常适合传输层路由。它使用服务的已发布端口路由到服务。互锁是一种新功能,可在应用层(L7)上启用服务发现。
此第7层路由通过添加应用层功能(例如检查HTTP标头)扩展到群集模式路由网格。互锁和群集模式路由网络一起使用,以提供灵活和强大的服务交付。
 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


0关注

0粉丝

107帖子

热门图文
热门帖子
排行榜
作者专栏

关注我们:微信订阅号

官方微信

APP下载

全国服务Q Q:

956130084

中国·湖北

Email:956130084@qq.com

Copyright   ©2015-2022  站长技术交流论坛|互联网技术交流平台Powered by©Discuz!技术支持:得知网络  

鄂公网安备 42018502006730号

  ( 鄂ICP备15006301号-5 )