问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Docker Swarm集群搭建:轻松打造高可用、可扩展的分布式应用

创作时间:
作者:
@小白创作中心

Docker Swarm集群搭建:轻松打造高可用、可扩展的分布式应用

引用
CSDN
1.
https://m.blog.csdn.net/weixin_50680035/article/details/139032491

在现代微服务架构中,容器化技术已经成为不可或缺的一部分,而Docker Swarm则是Docker提供的原生集群管理工具。本文将详细介绍如何在CentOS环境下从零开始搭建一个高可用的Docker Swarm集群。

前置条件

在开始之前,请确保你有以下环境准备:

  • 三台CentOS 7或8的服务器
  • 每台服务器至少2GB内存
  • 每台服务器上已经安装Docker

Docker Swarm简介

Docker Swarm是一个原生的Docker容器编排工具,它可以将多个Docker主机组成一个虚拟的Docker主机,称为Swarm。Swarm中的每个节点可以是工作节点(worker node)或管理节点(manager node)。管理节点负责集群的管理和调度,而工作节点负责运行容器。

配置Docker Swarm集群

初始化Swarm管理节点

在一台主服务器上初始化Swarm集群。

sudo docker swarm init

也可以指定主服务器IP,执行如下命令

sudo docker swarm init --advertise-addr 198.19.249.166

执行命令后,会输出类似以下内容:

Swarm initialized: current node (qwertyuiop) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxx 198.19.249.166:2377

记录下docker swarm join --token ...命令,稍后在其他节点上使用。

添加Worker节点

在其他两台服务器上执行以下命令,将它们加入Swarm集群。假设其中一台服务器的IP地址为198.19.249.159,另一台为198.19.249.160。

sudo docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxx 198.19.249.166:2377

成功后,输出类似以下内容:

This node joined a swarm as a worker.

验证节点状态

回到管理节点服务器上,验证所有节点的状态:

sudo docker node ls

输出结果应类似于:

ID                            HOSTNAME        STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
tb3qi5uh3ww9qjxjki2ccozoe *   centos-master   Ready     Active         Leader           26.1.2
omd2zw1146g7bos2ymvriyi1z     centos-slave1   Ready     Active                          26.1.2
bgmg5o1rkd1ajztduw5g41bt4     centos-slave2   Ready     Active                          26.1.2

部署服务

现在你已经有了一个基本的Swarm集群,可以开始部署服务了。我们以部署Portainer作为示例,这是一款流行的Docker容器管理工具。

部署Nginx

在管理节点上执行以下命令:

sudo docker service create --name nginx --replicas 3 --publish -p 80:80 nginx:latest

[root@centos-master docker]# sudo docker service ps nginx
ID             NAME      IMAGE          NODE            DESIRED STATE   CURRENT STATE          ERROR     PORTS
izgt5ffflddt   nginx.1   nginx:latest   centos-master   Running         Running 18 hours ago
dyibrokyc8ag   nginx.2   nginx:latest   centos-slave1   Running         Running 18 hours ago
li69fui5z3xu   nginx.3   nginx:latest   centos-slave2   Running         Running 18 hours ago

部署Portainer

在管理节点上执行以下命令:

sudo docker service create \
    --name portainer \
    --publish 9000:9000 \
    --replicas=1 \
    --constraint 'node.role == manager' \
    --mount type=volume,src=portainer_data,dst=/data \
    --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
    portainer/portainer

代码解释:

  • --name portainer: 指定服务名称为“portainer”。
  • --publish 9000:9000: 将容器的9000端口映射到主机的9000端口。
  • --replicas=1: 仅运行一个Portainer实例。
  • --constraint 'node.role == manager': 将服务限定在Manager节点上运行。
  • --mount type=volume,src=portainer_data,dst=/data: 挂载Docker卷用于数据持久化。
  • --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock: 绑定Docker套接字以便Portainer管理Docker实例。

验证服务状态

查看服务状态:

sudo docker service ls

输出结果应显示Nginx, Portainer服务正在运行:

ID             NAME        MODE         REPLICAS   IMAGE                        PORTS
8l5r0u9wpd2e   nginx       replicated   3/3        nginx:latest                 *:80->80/tcp
b8sjpg4ideuq   portainer   replicated   1/1        portainer/portainer:latest   *:9000->9000/tcp

管理Swarm集群

扩展服务

你可以根据需要扩展服务的副本数。例如,将Nginx服务扩展为5个副本:

sudo docker service scale nginx=5

更新服务

更新服务的镜像或其他属性:

sudo docker service update --image nginx:latest nginx

删除服务

如果不再需要某个服务,可以将其删除:

sudo docker service rm nginx

清理环境

在调试或测试完成后,你可能需要清理Swarm环境。首先,移除所有节点:

在Worker节点上执行:

sudo docker swarm leave

在Manager节点上执行:

sudo docker swarm leave --force

结语

通过以上步骤,你已经成功在CentOS上搭建了一个Docker Swarm集群,并部署了一个简单的服务。Docker Swarm提供了强大的原生集群管理能力,适用于多种应用场景。无论是开发环境还是生产环境,合理配置和管理Swarm都能显著提升容器化应用的部署和管理效率。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
Docker Swarm集群搭建:轻松打造高可用、可扩展的分布式应用