验证 Docker Swarm 集群的负载均衡

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
55 8
|
1月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
99 8
|
1月前
|
调度 开发者 Docker
Docker Swarm
Docker Swarm 为容器化应用的部署和管理提供了一种高效、可靠的方式,使开发者能够更轻松地构建和运行分布式应用。随着容器技术的不断发展,Docker Swarm 在企业级应用中的应用也将越来越广泛。
54 8
|
1月前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
52 6
|
1月前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
78 3
|
2月前
|
Kubernetes 负载均衡 调度
Docker Swarm 核心概念及详细使用
Docker Swarm 是 Docker 的原生集群管理工具,用于将多个 Docker 主机整合成一个虚拟主机,提供集群管理和调度功能。其核心特点包括集群管理、容错与高可用性、负载均衡、声明式服务模型、服务发现和安全性。本文档详细介绍了 Docker Swarm 的安装配置、服务部署、节点管理、网络配置及故障模拟等关键操作,适用于中小型项目或对 Kubernetes 复杂性有所顾虑的用户。
133 6
|
2月前
|
应用服务中间件 nginx Docker
Docker Swarm、Docker Stack和Portainer的使用
Docker Swarm、Docker Stack 和 Portainer 各有其独特的功能和优势。Docker Swarm 适用于分布式服务的管理和编排,Docker Stack 便于多容器应用的定义和部署,而 Portainer 提供了直观的 UI,简化了 Docker 环境的管理。结合使用这些工具,可以大大提高容器化应用的部署和管理效率。希望本文对您理解和应用这些工具有所帮助。
132 5
|
1月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
63 3
|
7月前
|
缓存 负载均衡 算法
解读 Nginx:构建高效反向代理和负载均衡的秘密
解读 Nginx:构建高效反向代理和负载均衡的秘密
139 2
|
6月前
|
负载均衡 算法 应用服务中间件
nginx自定义负载均衡及根据cpu运行自定义负载均衡
nginx自定义负载均衡及根据cpu运行自定义负载均衡
114 1

热门文章

最新文章