验证 Docker Swarm 集群的负载均衡

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Docker Swarm 集群的内部会为容器的各个节点之间负责负载均衡的管理,现在我们来验证一下 Docker Swarm 的负载均衡特性。

Docker Swarm 集群的内部会为容器的各个节点之间负责负载均衡的管理,现在我们来验证一下 Docker Swarm 的负载均衡特性。


创建测试项目


  • 编写测试程序:
func main() {
  resp, _ := http.Get("http://myexternalip.com/raw")
  defer resp.Body.Close()
  content, _ := ioutil.ReadAll(resp.Body)
  r := gin.Default()
  r.GET("/addr", func(c *gin.Context) {
    c.JSON(200, gin.H{
      "addr": string(content),
    })
  })
  r.Run(":8081")
}


  • 编写 Dockerfile:
FROM golang:latest
WORKDIR $GOPATH/src/go-gin-demo
COPY . $GOPATH/src/go-gin-demo
RUN go get github.com/gin-gonic/gin && go build .
EXPOSE 8081
ENTRYPOINT ["./go-gin-demo"]


  • 打包镜像并上传到 docker hub:
$ docker build -t chenghuizhang/go-gin-demo:v3 .
$ docker push chenghuizhang/go-gin-demo:v3


创建集群



首先初始化一个管理节点:

$ docker swarm init --advertise-addr 193.xxx.61.178


这里需要说明一下,由于我的两台服务器都同于一个内网环境,所以这里需要指定外网 ip,得到以下命令:

$ docker swarm join --token xxxxxxxxxxxxxxxx 193.xxx.61.178:2377


另一台服务器加入,现在得到了拥有两个节点的 swarm 集群:

640.pngdocker swarm


这里特别注意一下,由于是加入管理节点需要通过外网,所以docker swarm join加个地址参数:

$ docker swarm join --token xxxxxxxxxxxxxxxx 193.xxx.61.178:2377 --advertise-addr 111.xxx.254.127


部署测试



  • 创建集群网络驱动:
$ docker network create -d overlay mynet


  • 部署 go-gin-demo 到其中一个节点,另外一个节点是否可通过 docker 的 overlay 跨主机网路驱动访问:
$ docker service create -p 8081:8081 --network mynet --replicas 1 --name go-gin-demo chenghuizhang/go-gin-demo:v3


查看服务:

$ docker service ps go-gin-demo


发现 go-gin-demo 部署到工作节点了,这时我们通过管理节点 ip 访问,结果如下:

640.pngdocker swarm


说明即使管理节点没有部署该服务,仍然是可以通过 overlay 跨主机网络进行调用的。

同时我们查看管理节点的 8081 是否有被监听:

$ lsof -i:8081

640.pngdocker swarm


发现 go-gin-demo 虽然没有部署到管理节点上,但其端口在其他节点上面依然被监听着,所以我们得出,整个 overlay 网络中,每个服务都可以通过任意一台集群内服务器访问。


这里需要注意一下,服务器防火墙需要开通 docker 相关的端口,这里为了方便,就把服务器的防火墙关闭了:


$ systemctl stop firewalld.service # centos 7 关闭防火墙


  • 部署 go-gin-demo 到两个节点上,访问其中一台服务器,验证 swarm 集群是否具备负载均衡:
$ docker service scale go-gin-demo=2

640.pngdocker swarm


这时我们随意访问一台服务器,多访问几次,会出现返回来的是另一台服务器的地址,说明 swarm 集群具备负载均衡的特性。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8天前
|
应用服务中间件 nginx Docker
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
18 5
|
24天前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
19 6
|
24天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
21 5
|
9天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
9天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
22天前
|
负载均衡 安全 调度
深入调查研究Docker Swarm
【10月更文挑战第19天】
28 0
|
7天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
30 2
|
负载均衡 网络协议 应用服务中间件
基于Docker的负载均衡和服务发现
Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用。 随着系统规模扩大,单一Docker容器不能应对压力,需要横向扩展到多个容器,我们需要考虑负载均衡的问题;单一职责的Docker容器之间需要相互通信,而容器在每一次重启之后,它的IP都可
11006 0
|
负载均衡 应用服务中间件 nginx
基于Docker的应用负载均衡与服务发现
现在微服务架构越来越流行,阿里云容器服务对于微服务架构提供了很好的支撑,平台提供了便利的服务注册与发现机制,内置的服务负载均衡与路由功能,以及灵活的模板编排、全生命周期管理。
18313 0
|
负载均衡 网络协议 测试技术
DockOne微信分享(七十一):基于Docker的负载均衡和服务发现
本文讲的是DockOne微信分享(七十一):基于Docker的负载均衡和服务发现【编者的话】Docker已经成为时下热门的容器技术,各大公司,中小创业者,都选择采用Docker技术架构其下一代的系统和应用。
2367 0