Docker Swarm 负载均衡详解

  • Swarm模式内置DNS组件,可以自动为集群中的每个服务分配DNS记录。
  • Swarm manager使用内部负载均衡,根据服务的DNS名称在集群内的服务之间分发请求。
  • Swarm manager使用 ingress load blancing暴露你想从外部访问集群提供的服务。
  • Swarm manager自动为服务分配一个范围30000-32767端口的Published Port,也可以为该服务指定一个Published Port。

ingress network是一个特殊的overlay网络,便于服务的节点直接负载均衡。当任何swarm节点在已发布的端口上接收到请求时,它将该请求转发给调用的IPVS模块,IPVS跟踪参与该服务的所有容器IP地址,选择其中一个,并通过ingress network将请求路由给它。


Docker Swarm 负载均衡试验测试

1、管理节点:创建一个测试容器my_web

docker service create --replicas 3 --network my-network --name my_web nginx

2、管理节点:添加暴露端口

docker service update --publish-add 8080:80 my_web

3、管理节点:获取虚拟IP

docker service inspect -f '{{json .Endpoint.VirtualIPs}}' my_web

[{"NetworkID":"3d1ut7rm89tvqvhh98wl3bxtx","Addr":"10.0.0.2/24"}]

注:可用虚拟VIP或者服务名称去访问。

测试负载均衡:192.168.1.79:8080

注:在每个不同副本中访问。


Docker Swarm 负载均衡模式选择

负载均衡有两种模式:VIP、DNSRR

  • VIP:分配独立的虚拟IP,DNS记录解析到服务名中作为代理IP。
  • dnsrr:DNS记录不解析VIP,而去解析每个容器内的IP。dnsrr模式不支持端口对外暴露。

1、管理节点:通过查看服务详细信息筛选当前模式负载均衡模式

docker service inspect my_web
[
"EndpointSpec": {
"Mode": "vip"
}
},
"Endpoint": {
"Spec": {
"Mode": "vip",
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 80,
"PublishedPort": 8080,
"PublishMode": "ingress"
}
]
},
]

注:当前模式为VIP模式。

2、管理节点:设置DNS轮询模式

docker service create \
--replicas 3 \
--name my-web \
--network my-network \
--endpoint-mode dnsrr \
nginx
# 创建服务
docker service create \
# 创建副本数
--replicas 3 \
# 服务名
--name my-web \
# 添加网络
--network my-network \
# 添加负载均衡模式
--endpoint-mode dnsrr \
# 镜像
nginx

命令解析

3、管理节点:创建一个测试容器my_web2

docker service create --replicas 3 --network my-network --name my_web2 nginx 

4、管理节点:添加dnsrr模式

docker service update --endpoint-mode dnsrr my_web2 

5、工作节点:进入容器测试

docker exec -it 06a5a7ae6e7e sh
# 测试进入容器查看解析记录
/ # nslookup my_web2
Server: 127.0.0.11
Address: 127.0.0.11:53
Non-authoritative answer:
Name: my_web2
Address: 10.0.0.13
Name: my_web2
Address: 10.0.0.4
Name: my_web2
Address: 10.0.0.12 # 工作节点:测试进入容器多次ping服务名
/ # ping my_web2
PING my_web2 (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.116 ms
/ # ping my_web2
PING my_web2 (10.0.0.12): 56 data bytes
64 bytes from 10.0.0.12: seq=0 ttl=64 time=0.745 ms
/ # ping my_web2
PING my_web2 (10.0.0.13): 56 data bytes
64 bytes from 10.0.0.13: seq=0 ttl=64 time=0.546 ms

Docker Swarm 负载均衡模扩展知识

可在容器Swarm负载均衡之上在建立一层负载均衡。HAProxy可代理工作节点端暴露的端口进行再次代理,做到双层负载均衡的作用。保证高可用与大规模的应用。

Docker Swarm 负载均衡详解 or 模式选择的更多相关文章

  1. Docker Swarm 高可用详解

    Docker Swarm 高可用详解 Manager管理节点宕机后其他管理节点仍然可以使用管理 intermal distributed state store:内部分布式状态存储同步共享到每个节点. ...

  2. Nginx代理功能与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...

  3. Nginx 反向代理与负载均衡详解

    序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在Nginx 配置详解中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Ngin ...

  4. Spring Cloud:使用Ribbon实现负载均衡详解(下)

    在上一篇文章(Spring Cloud:使用Ribbon实现负载均衡详解(上))中,我对 Ribbon 做了一个介绍,Ribbon 可以实现直接通过服务名称对服务进行访问.这一篇文章我详细分析一下如何 ...

  5. 项目详解2—LVS负载均衡详解

    一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...

  6. Tomcat安装、配置、优化及负载均衡详解

    一.常见JavaWeb服务器      1.WebLogic:是BEA公司的产品.WebSphereAS:是IBM公司的产品.JBossAS:红帽公司的产品,可以自行了解      2.Tomcat服 ...

  7. Nginx的upstream反向代理、负载均衡详解

    这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了. 说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式. 正向代理最大的特点是客户端非常明 ...

  8. heartbeat负载均衡详解

    heartbeat高可用软件http://www.linux-ha.org/wiki/Main_Page 1 heartbeat作用通过heartbeat将资源(IP)从一台已经故障的计算机快速转移到 ...

  9. RocketMQ之八:水平扩展及负载均衡详解

    RocketMQ是一个分布式具有高度可扩展性的消息中间件.本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的. NameServer集群 提供轻量级的服务发现和路由.每个 ...

随机推荐

  1. Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网

    问题描述: 环境:Thinkpad L440,不知道是什么版本的,找朋友买的,买的时候连系统都没有,自己装的Win7系统,驱动均为官方网站下载安装.电脑在使用过程中一直带着电池,连接电源使用. 问题: ...

  2. C# TreeView 拖拽节点到另一个容器Panel中简单实现

    C# TreeView 拖拽节点到另一个容器Panel中简单实现 用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊.特地写一篇博 ...

  3. maven 中的mirror详解

    一.前言 今天同事遇到个问题,本来公司是有maven私服的,但同事觉得上面有些东西下载不到,于是在自己本地的maven配置中加了: <mirrors> <mirror> < ...

  4. ThinkPHP3.2.3框架下where的组合查询and、or方法

    在项目开发中,查询数据时经常用到where条件查询来过滤数据: 有时就需要一个input输入框判断多个字段查询,这时候我们就需要使用组合查询方法来实现: 说明:组合查询的主体还是采用数组方式查询,只是 ...

  5. iOS - UITableView reloadData滚动到顶部无效问题解决

    //tableView:动态cell的高度不固定,滑动不到最顶部 //if (self.sensorDate.count > 0) { // [self.tableView scrollToRo ...

  6. 使用nginx运行thinkphp的nginx配置

    location / { index index.php; #如果文件不存在则尝试TP解析 if (!-e $request_filename) { rewrite ^(.*)$ /index.php ...

  7. 【漏洞复现】Tomcat CVE-2017-12615 远程代码执行漏洞

    漏洞描述 [漏洞预警]Tomcat CVE-2017-12615远程代码执行漏洞/CVE-2017-12616信息泄漏 https://www.secfree.com/article-395.html ...

  8. Oracle课程档案,第十二天

    死锁是由于两个对象在拥有一份资源的情况下申请另一份资源, 而另一份资源恰好又是这两对象正持有的,导致两对象无法完成操作,且所持资源无法释放. 阻塞是由于资源不足引起的排队等待现象. unso:撤销 c ...

  9. DataGrid表格某单元格数据填入是否正确的验证---MiniUI使用

    示例: <div id="datagrid1" class="mini-datagrid" oncellvalidation="onCellVa ...

  10. linux_vim_emmet插件的安装配置

    首先要去如下网址下载一个安装包(英文基础好的同学可以去github上搜他的开源,写的更加详细) https://www.vim.org/scripts/script.php?script_id=298 ...