【Docker系列】Swarm Internal Load Balancing 内部负载均衡

2023-05-16

Internal Load Balancing 内部负载均衡

在这里插入图片描述

创建一个mynet的overlay网络,创建一个service

vagrant@swarm-manager:~$ docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
afc8f54c1d07   bridge            bridge    local
128fd1cb0fae   docker_gwbridge   bridge    local
0ea68b0d28b9   host              host      local
14fy2l7a4mci   ingress           overlay   swarm
lpirdge00y3j   mynet             overlay   swarm
a8edf1804fb6   none              null      local
vagrant@swarm-manager:~$ docker service create --name web --network mynet --replicas 2 containous/whoami
jozc1x1c1zpyjl9b5j5abzm0g
overall progress: 2 out of 2 tasks
1/2: running   [==================================================>]
2/2: running   [==================================================>]
verify: Service converged
vagrant@swarm-manager:~$ docker service ls
ID             NAME      MODE         REPLICAS   IMAGE                      PORTS
jozc1x1c1zpy   web       replicated   2/2        containous/whoami:latest
vagrant@swarm-manager:~$ docker service ps web
ID             NAME      IMAGE                      NODE            DESIRED STATE   CURRENT STATE            ERROR     PORTS
pwi87g86kbxd   web.1     containous/whoami:latest   swarm-worker1   Running         Running 47 seconds ago
xbri2akxy2e8   web.2     containous/whoami:latest   swarm-worker2   Running         Running 44 seconds ago
vagrant@swarm-manager:~$

创建一个client

vagrant@swarm-manager:~$ docker service create --name client --network mynet xiaopeng163/net-box:latest ping 8.8.8.8
skbcdfvgidwafbm4nciq82env
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged
vagrant@swarm-manager:~$ docker service ls
ID             NAME      MODE         REPLICAS   IMAGE                        PORTS
skbcdfvgidwa   client    replicated   1/1        xiaopeng163/net-box:latest
jozc1x1c1zpy   web       replicated   2/2        containous/whoami:latest
vagrant@swarm-manager:~$ docker service ps client
ID             NAME       IMAGE                        NODE            DESIRED STATE   CURRENT STATE            ERROR     PORTS
sg9b3dqrgru4   client.1   xiaopeng163/net-box:latest   swarm-manager   Running         Running 28 seconds ago
vagrant@swarm-manager:~$

尝试进入client这个容器,去ping web这个service name, 获取到的IP 10.0.1.30,称之为**VIP(虚拟IP)**

vagrant@swarm-manager:~$ docker container ls
CONTAINER ID   IMAGE                        COMMAND          CREATED          STATUS          PORTS     NAMES
36dce35d56e8   xiaopeng163/net-box:latest   "ping 8.8.8.8"   19 minutes ago   Up 19 minutes             client.1.sg9b3dqrgru4f14k2tpxzg2ei
vagrant@swarm-manager:~$ docker container exec -it 36dc sh
/omd # curl web
Hostname: 6039865a1e5d
IP: 127.0.0.1
IP: 10.0.1.32
IP: 172.18.0.3
RemoteAddr: 10.0.1.37:40972
GET / HTTP/1.1
Host: web
User-Agent: curl/7.69.1
Accept: */*

/omd # curl web
Hostname: c3b3e99b9bb1
IP: 127.0.0.1
IP: 10.0.1.31
IP: 172.18.0.3
RemoteAddr: 10.0.1.37:40974
GET / HTTP/1.1
Host: web
User-Agent: curl/7.69.1
Accept: */*

/omd # curl web
Hostname: 6039865a1e5d
IP: 127.0.0.1
IP: 10.0.1.32
IP: 172.18.0.3
RemoteAddr: 10.0.1.37:40976
GET / HTTP/1.1
Host: web
User-Agent: curl/7.69.1
Accept: */*

/omd #
/omd # ping web -c 2
PING web (10.0.1.30): 56 data bytes
64 bytes from 10.0.1.30: seq=0 ttl=64 time=0.044 ms
64 bytes from 10.0.1.30: seq=1 ttl=64 time=0.071 ms

--- web ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.044/0.057/0.071 ms
/omd #

这个虚拟IP在一个特殊的网络命令空间里,这个空间连接在我们的mynet这个overlay的网络上

通过 docker network inspect mynet 可以看到这个命名空间,叫lb-mynet

"Containers": {
"36dce35d56e87d43d08c5b9a94678fe789659cb3b1a5c9ddccd7de4b26e8d588": {
    "Name": "client.1.sg9b3dqrgru4f14k2tpxzg2ei",
    "EndpointID": "e8972d0091afaaa091886799aca164b742ca93408377d9ee599bdf91188416c1",
    "MacAddress": "02:42:0a:00:01:24",
    "IPv4Address": "10.0.1.36/24",
    "IPv6Address": ""
},
"lb-mynet": { 
    "Name": "mynet-endpoint",
    "EndpointID": "e299d083b25a1942f6e0f7989436c3c3e8d79c7395a80dd50b7709825022bfac",
    "MacAddress": "02:42:0a:00:01:25",
    "IPv4Address": "10.0.1.37/24",
    "IPv6Address": ""
}

通过下面的命令,找到这个命名空间的名字

vagrant@swarm-manager:~$ sudo ls /var/run/docker/netns/
1-14fy2l7a4m  1-lpirdge00y  dfb766d83076  ingress_sbox  lb_lpirdge00
vagrant@swarm-manager:~$

名字叫 lb_lpirdge00

通过nsenter进入到这个命名空间的sh里, 可以看到刚才的VIP地址10.0.1.30

vagrant@swarm-manager:~$ sudo nsenter --net=/var/run/docker/netns/lb_lpirdge00 sh
#
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
50: eth0@if51: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
    link/ether 02:42:0a:00:01:25 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.1.37/24 brd 10.0.1.255 scope global eth0
    valid_lft forever preferred_lft forever
    inet 10.0.1.30/32 scope global eth0
    valid_lft forever preferred_lft forever
    inet 10.0.1.35/32 scope global eth0
    valid_lft forever preferred_lft forever
#

和ingress网络一样,可以查看iptables,ipvs的负载均衡, 基本就可以理解负载均衡是怎么一回事了。 Mark=0x106, 也就是262(十进制),会轮询把请求发给10.0.1.31 和 10.0.1.32

# iptables -nvL -t mangle
Chain PREROUTING (policy ACCEPT 128 packets, 11198 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 92 packets, 6743 bytes)
pkts bytes target     prot opt in     out     source               destination
72  4995 MARK       all  --  *      *       0.0.0.0/0            10.0.1.30            MARK set 0x106
    0     0 MARK       all  --  *      *       0.0.0.0/0            10.0.1.35            MARK set 0x107

Chain FORWARD (policy ACCEPT 36 packets, 4455 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 101 packets, 7535 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 128 packets, 11198 bytes)
pkts bytes target     prot opt in     out     source               destination
# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  262 rr
-> 10.0.1.31:0                  Masq    1      0          0
-> 10.0.1.32:0                  Masq    1      0          0
FWM  263 rr
-> 10.0.1.36:0                  Masq    1      0          0
#

这个流量会走我们的mynet这个overlay网络。

过程图

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Docker系列】Swarm Internal Load Balancing 内部负载均衡 的相关文章

随机推荐

  • 链家深圳二手房房价数据分析

    文章目录 链家深圳二手房房价数据分析1 链家数据爬取源码2 雷达图的绘制2 1 源码2 2 雷达图效果图 3 饼状图的绘制3 1 源代码3 2 饼状图效果图 4 多维散点图4 1 源码4 2 多维散点图效果图 5 玫瑰图5 1 源码5 2
  • UNIX基础知识

    文章目录 UNIX基础知识1 1 引言1 2 UNIX体系结构1 3 登录1 4 文件和目录1 5 输入和输出1 6 程序和进程1 程序2 进程和进程ID3 进程控制4 线程和线程ID 1 7 出错处理出错恢复 1 8 用户标识1 用户ID
  • 栈和队列——小猫钓鱼

    星期天A和B在一起玩扑克牌 xff0c 他们在玩一个古怪的扑克牌游戏 小猫钓鱼 游戏的规则是这样的 xff0c 将一副扑克牌平均分成两份 xff0c 每人拿一份 A先拿出手中的第一章牌放在桌上 xff0c 然后B也从手里拿出一张牌放在桌上
  • 二叉树与二叉树遍历

    树的介绍 你可能回文树和图有什么区别 xff1f 这个称之为树的东西和无向图差不多嘛 树其实就是不包含回路的连通无向图 图画的不好啊 xff0c 把箭头忽略一下将就看一下 xff0c 上面这个图左边就是一棵树 xff0c 而右边就是一个图
  • 广度优先搜索

    在前面的迷宫中 xff0c 我们使用了深度优先搜索的方法 xff0c 这里介绍一个新的方法来解决这个问题 广度优先搜索 xff0c 也称为宽度优先搜索 这里还是用一个二维数组来存储迷宫 xff0c 最开始的时候A也是在迷宫 0 0 处 xf
  • 图的遍历--深度优先搜索

    深度优先搜索和广度优先搜索 xff0c 其实都是针对图的变量而言的 简单来说 xff0c 图就是一些圆点和连接这些圆点的直线组成 例如上图的这五个定点和四条边 我们现在从1号顶点开始遍历整个图 xff0c 遍历指的就是把图的每一个顶点都访问
  • 暴力的枚举

    枚举算法又叫穷举算法 xff0c 光听名字就是能知道这个很暴力 有一个题 xff1a 3 6528 61 3 8256 xff0c 在两个方框里面填入相同的数字使得等式成立 你可能会觉得这个很简单 xff0c 3行代码就可以搞定 xff1a
  • 虚拟机的使用及基本命令

    虚拟机的使用 kiosk 64 foundation0 Desktop rht vmctl view desktop 显示虚拟机 kiosk 64 foundation0 Desktop rht vmctl start desktop 打开
  • 【虚拟机网络问题】关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总

    虚拟机网络问题 关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总 PS xff1a 本文仅是针对个人使用基于Ubuntu18 04上的Linux系统问题相关记录 xff0c 便于遇到此类问题快速解决 前言 本篇文章在参
  • sublime text 3+mingw搭建C++编译环境

    sublime text 3 43 mingw搭建C 43 43 编译环境 附上Sublime Text下载地址和MinGW下载链接 目录 sublime text 3mingw搭建C编译环境 目录安装MinGW系统配置环境 配置参数简单测
  • React 属性验证 propTypes

    React 组件可以根据预先设置进行属性验证 React prop验证使用 propTypes xff0c 它可以保证我们的应用组件被正确使用 xff0c React PropTypes 提供很多验证器 validator 来验证传入数据是
  • 【2023年最新版】Kali安装详细教程

    一 前期准备 kali镜像下载地址 前排提醒 xff1a 文末有绿色安装包领取 xff01 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0c 点击下一步 3 继续下一步
  • 七段码 蓝桥杯 python

    这题我是跟着别人的写出来的 xff0c 也就是暴力出来的 xff0c 真不清楚别人怎么将dfs bfs应用进去的 记得7根一根根亮的7中情况 xff0c 和7根都亮的1种情况 整题非常暴力 xff0c 即将2到6的所有组合写出来 xff0c
  • 矩池云上使用nohup和&让任务后台运行

    1 nohup 用途 xff1a 不挂断地运行命令 语法 xff1a nohup Command Arg amp 无论是否将 nohup 命令的输出重定向到终端 xff0c 输出都将附加到当前目录的 nohup out 文件中 如果当前目录
  • Ubuntu系统安装完nvidia显卡驱动后黑屏,不能进入系统

    昨天想看显卡 xff0c 更新了下驱动 xff0c 发现服务器重启进不去 步骤 1 开机按esc 进入 选项界面 2 进去以后选择一个括号里面带recovery mode的选项 3 然后它自动黑屏出现代码 xff0c 然后弹出一个选择框 x
  • 基于gazebo实现多机器人编队仿真(三)

    基于gazebo实现多机器人编队仿真 xff08 三 xff09 三角编队与一字编队的实现 前言原理简图代码实现虚拟坐标的发布跟随者消息接收 总结 前言 前文已经阐述了多机器人的编队模型实现与多辆小车跟随的实现 xff0c 本文以通过tf通
  • 10章 面向对象分析

    第10章 面向对象分析 10 1 面向对象分析的基本过程10 1 1 概述10 1 2 3个模型与5个层次 10 2 需求陈述10 2 1 书写要点10 2 2 例子1 储户和柜员交互2 储户和ATM交互 10 3 建立对象模型10 3 1
  • 音频文件格式转换wav->pcm

    一 启动Coolpro软件 二 将wav拖放到coolpro中 xff0c 如下图 xff0c 将左侧mono wav拖放到右侧coolpro 工作区 三 菜单打开 gt 另存为 xff0c 打开另存波形为 四 更改保存类型为pcm 五 点
  • 基于C++实现各种系统仿真模拟

    本文主要介绍各种有关动画模拟的模型 xff0c 直接进入正题 骨骼动画模拟 概念引入 对于网格体而言有不少实现动画的方式 直接对顶点进行操作也就是顶点动画 xff0c 适用于一些比较简单的植物摆动 水面波动效果 此外 xff0c 还有在两个
  • 【Docker系列】Swarm Internal Load Balancing 内部负载均衡

    Internal Load Balancing 内部负载均衡 创建一个mynet的overlay网络 xff0c 创建一个service vagrant 64 swarm manager docker network span class