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

在现代微服务架构中,容器化技术已经成为不可或缺的一部分,而 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 集群,可以开始部署服务了。我们以部署 Nginx ,Portainer 作为示例,这是一款流行的 Docker 容器管理工具。

部署 Nginx

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

sudo docker service create --name nginx --replicas 3 --publish -p 80:80 nginx:latest
Docker Swarm 集群搭建:轻松打造高可用、可扩展的分布式应用
[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 都能显著提升容器化应用的部署和管理效率。

个人观点,仅供参考。


原文始发于微信公众号(源梦倩影):Docker Swarm 集群搭建:轻松打造高可用、可扩展的分布式应用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/291736.html

(0)
Java朝阳的头像Java朝阳

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!