Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署

简介: Docker六脉神剑 (五) Docker Swarm集群搭建及基础服务部署

集群是什么?

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

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

例如:小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群。

为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群

分布式及优点:

分布式是将一个应用程序拆分成多个模块来工作,这些模块所负责的功能部分都不相同,并且缺一不可。它存在的主要作用是大幅度的提高工作效率,缓解服务器的访问和存储压力。这么做的优点是它非常细节的划分出了应用程序的各个功能板块,避免了把一个完整的应用程序全部都给到一台服务器去工作的损耗。从一个应用程序分配到多个服务器上,大大的使每台不同的服务器都尽到职责。

集群及优点:

而集群则是将一个应用程序集中到多个服务器上,每一台做的都是相同的事情,但是它和分布式不同的是,缺一台,其他的服务器还可以补位。集群的优点就是当其中的一个服务器宕机了,其他相同的服务器可以代替其继续工作;将应用程序部署在多台服务器时,也提供了数据的吞吐量。

它们二者明显的区别有两个点:

第一:虽然表面上看服务器的数量是一样的,可是分布式是每台的任务都不同,而集群则是相同的。

第二:分布式中的服务器少一台可能会丢失功能且不能运行,但是集群少一台依旧可以正常工作。

首先, 玩docker里面的集群要对docker有一定了解。docker集群有两种 docker swarmdocker Kubernetes

swarm是官方提供的集群,Kubernetes是谷歌提供的。两个集群都是非常不错的, 我们这边先介绍swarm,随后再写关于Kubernetes的文章

Swarm环境搭建

环境提要

节点全部使用ubuntu 18.04 server版, 这边准备了两个node节点和一个master节点

  • IP:192.168.1.17 主机名:master17 担任角色:swarm manager
  • IP:192.168.1.15 主机名:node15 担任角色:swarm node
  • IP:192.168.1.16 主机名:node16 担任角色:swarm node

然后每个主机之间都能相互ping通, 每个节点都安装了docker

  • ubuntu安装
sudo apt install docker.io

初始化集群

  • master17
sudo docker swarm init --advertise-addr 192.168.1.17
# 出现如下信息
Swarm initialized: current node (0zzr236y761v6ojezxtndavft) is now a manager.
# 这里是跟你说 如何添加一个work节点
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5ytayrb0qmb010qnmz9ws6s9dpvpkez1rmov6xjeskcj0gw39q-5rr7x8ryzcbdc7tvxs0t9q11x 192.168.1.17:2377
# 如何添加manager节点
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
# 查看节点。 这样就可以看到我们的master节点了
sudo docker node ls

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的 token,作为集群唯一标识。后续将其他节点加入集群都会用到这个token值。

其中,--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

将node节点加入集群

  • node15 、 node16
# 加入集群成为work节点
sudo docker swarm join --token SWMTKN-1-5ytayrb0qmb010qnmz9ws6s9dpvpkez1rmov6xjeskcj0gw39q-5rr7x8ryzcbdc7tvxs0t9q11x 192.168.1.17:2377

然后到master节点上面去查看集群节点

集群常用命令

  • sudo docker swarm leave 离开集群, 如果是master节点加上--force参数
  • sudo docker node 查看集群节点
  • sudo docker swarm init 初始化集群  --advertise-addr 192.168.1.17加上这个参数可以绑定ip

集群已经准备好了, 接下来就要将我们的服务部署到集群上面

nginx服务部署+服务伸缩

需要创建服务, 调度集群等都需要到master节点上操作。

创建nginx服务 并且将端口映射

sudo docker service create --replicas 3 -p 80:80 --name nginx nginx:1.13.7-alpine
# 该docker service create命令创建服务。
# 该--name标志为服务命名nginx。
# 该--replicas标志指定3个运行实例的所需状态。
# 参数nginx:1.13.7-alpine 是以这个镜像来创建服务

现在我们使用浏览器,输入任意节点 IP ,即可看到 nginx 默认页面。

查看服务

# 查看所有服务
sudo docker service ls
# 查看服务信息
sudo docker service inspect nginx
# 查看哪些节点正在运行服务
sudo docker service ps nginx
# 同时 也可以看见在本机上的容器
sudo docker ps
# 查看服务标准输出日志
sudo docker service logs nginx

服务伸缩

我们可以使用 docker service scale 对一个服务运行的容器数量进行伸缩。当业务处于高峰期时,我们需要扩展服务运行的容器数量。当业务平稳时,我们需要减少服务运行的容器数量。

# 指定伸缩数量
sudo docker service scale nginx=5
  • 删除服务
sudo docker service rm nginx

服务滚动升级

我们基于nginx:1.13.7-alpine镜像部署了一个名为 nginx 的服务。

现在我们想要将 NGINX 版本升级到 1.13.12,那么在 Swarm mode 中如何升级服务呢?

你可能会想到,先停止原来的服务,再使用新镜像部署一个服务,不就完成服务的 “升级” 了吗。

这样做的弊端很明显,如果新部署的服务出现问题,原来的服务删除之后,很难恢复,那么在 Swarm mode 中到底该如何对服务进行滚动升级呢?

答案就是使用 docker service update 命令。

  • 服务升级
docker service update --image nginx:1.13.12-alpine nginx

以上命令使用 --image 选项更新了服务的镜像。当然我们也可以使用 docker service update 更新任意的配置。

  • 服务回退

现在假设我们发现 nginx 服务的镜像升级到 nginx:1.13.12-alpine 出现了一些问题,我们可以使用命令一键回退。

docker service rollback nginx

结束语

本篇属于对刚了解集群的做了个基础讲解,那么博主还会出一篇使用swarm部署lnmp应用的文章,正常我们部署集群肯定不是使用命令部署,我们都是声明式的, 所以它会和compose一样, 编写yml配置。这里还要对刚刚玩swarm的新手说一下,网上很多教程都是使用docker-machine + virtualbox快速搭建集群, 但其实都是一样, 但是这种搭建集群的方式很快速, 适合玩过集群的人, 希望小伙伴们还是手动实践, 毕竟集群还是比较重要的知识点

博主保证, 文章中设计的东西都是亲自尝试过的, 所以大家可以去试试, 不会浪费大家时间的, 有疑问可以评论, 看到一定会及时回复的。

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

目录
相关文章
|
3天前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
41 25
|
15天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
4天前
|
SQL 关系型数据库 MySQL
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
|
1月前
|
Prometheus 监控 Cloud Native
如何使用Prometheus监控Docker Swarm集群的资源使用情况?
还可以根据实际需求进行进一步的配置和优化,如设置告警规则,当资源使用超出阈值时及时发出警报。通过这些步骤,能够有效地使用 Prometheus 对 Docker Swarm 集群的资源进行监控和管理。
68 8
|
1月前
|
Prometheus 监控 Cloud Native
如何监控Docker Swarm集群的性能?
如何监控Docker Swarm集群的性能?
122 8
|
1月前
|
调度 开发者 Docker
Docker Swarm
Docker Swarm 为容器化应用的部署和管理提供了一种高效、可靠的方式,使开发者能够更轻松地构建和运行分布式应用。随着容器技术的不断发展,Docker Swarm 在企业级应用中的应用也将越来越广泛。
58 8
|
1月前
|
监控 Docker 容器
Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项
本文深入探讨了Docker Swarm集群的扩展与缩容策略,涵盖其意义、方法、步骤及注意事项,旨在帮助用户高效管理集群资源,适应业务变化,确保服务稳定性和资源优化。
58 6
|
1月前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
41 2
|
2天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
138 93
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
236 77