Docker swarm 集群搭建

简介:

SwarmDocker公司在201412月初发布的一套较为简单的工具,用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker)均可以直接与Swarm通信。Swarm几乎全部用go语言来完成开发,上周五,417号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。

Swarmdeamon只是一个调度器(Scheduler)加路由器(router)Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图

环境部署

 

实验环境


操作系统: Centos 7.2  

操作系统内核版本:3.10.0-327.36.1.el7.x86_64

Docker 版本:Docker version1.12.6

dtest01  10.139.12.49   swarm manager
dtest02  10.139.11.109  swarm node
dtest03  10.139.12.5    swarm mode

 

 wKiom1mtIcDjd3ECAAJALfiKskA819.png-wh_50

 

 

 

 

 

环境准备

 

关闭seliunx dtest01 为例, dtest02dtest03 按照同样的方法操作

 

sed -i 's/SELINUX=enabled /SELINUX= disabled/g' /etc/selinux/config

 

重启服务器reboot

 

关闭防火墙以dtest01 为例, dtest02dtest03 按照同样的方法操作

 

   systemctl stop firewalld

systemctl disable firewalld

 

配置hostsdtest01 为例, dtest02dtest03 按照同样的方法操作

 

[root@dtest01 ~]#  cat /etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4

::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

10.139.12.49  dtest01

10.139.11.109 dtest02

10.139.12.5 dtest03

 

配置ssh 免登陆

使用ssh-keygen 命令生成一路回车键

[root@dtest01 ~]#  ssh-keygen

配置所有节点密钥登录.

配置所下节点密钥互信node1可以免密码登录各节点,只在dtest01上执行:

 

分发sshkey到各个节点

[root@node1 ~]# ssh-copy-id  dtest01

[root@node1 ~]# ssh-copy-id  dtest02

[root@node1 ~]# ssh-copy-id  dtest03

 

安装docker

 

dtest01 为例, dtest02 dtest03 按照此方法操作

 

yum install docker –y

 

查看 docker -v

Docker version 1.12.6, build 88a4867/1.12.6

 

启动docker  systemctl start docker

 

开机自启动  systemctl enable docker

 

 

 

创建 Swarm集群

dtest01 上初始化swram集群:

docker swarm init  --advertise-addr 10.139.12.49

Swarm initialized: current node(1ov1r9l904zhvs4uoygt0tmi3) is now a manager.

 

To add a worker to this swarm, run thefollowing command:

 

   docker swarm join \

   --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t\

   10.139.12.49:2377

 

查看docker swarm 是否创建成功

 

[root@dtest01 ~]#  netstat -tnlp | grep docker

tcp6       0     0 :::7946                :::*                   LISTEN      4646/dockerd-curren

tcp6      0      0 :::2377                 :::*                    LISTEN      4646/dockerd-curren

 

检查 docker swarm mode信息:

 

Swarm:active

 NodeID: 1ov1r9l904zhvs4uoygt0tmi3

 Is Manager: true

 ClusterID: br2kb43qhxea1vl2zgygmfq0c

 Managers: 2

 Nodes: 3

 Orchestration:

 Task History Retention Limit: 5

 Raft:

 Snapshot Interval: 10000

 Heartbeat Tick: 1

 Election Tick: 3

 

 

 

 

 

查看swarm集群列表

[root@dtest01 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3 *  dtest01.novalocal  Ready  Active        Leader

 

 

dtest02dtest03使用worker节点方式加入swarm集群

 

首先在node1上面查询集群的命令和密钥,在dtest0dtest0分别执行下面红色区域的命令

 

[root@ dtest01 ~]# docker swarm  join-token  worker

 

To add a worker to this swarm, run thefollowing command:

 

    docker swarm join \

   --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t\

10.139.12.49:2377

 

 

[root@dtest02 ~]# docker swarm join --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t10.139.12.49:2377

This node joined a swarm as a worker.

 

[root@dtest02 ~]# docker swarm join --tokenSWMTKN-1-4qu7h72chrzlycoltrfu9aitp3omoju46nxey73bjjjf69co4h-4c6benvo38h8wyhiti8j9xd1t10.139.12.49:2377

This node joined a swarm as a worker.

 

查看集群节点

[root@dtest01 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY  MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3 *  dtest01  Ready   Active       Leader

4v1mjgrvpdba9uxmv9riti96n    dtest02  Ready   Active      

9cd5n3rgd6n5ids6mxuqcfd3c    dtest03   Ready   Active

 

为了swarm集群的高可用,和避免单点故障我们希望建立多个manager节点集群.dtest02提升为manager节点

 

docker node promote dtest02

 

 

[root@dtest01 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3 *  dtest01  Ready  Active        Leader

4v1mjgrvpdba9uxmv9riti96n    dtest02  Ready  Active        Reachable

9cd5n3rgd6n5ids6mxuqcfd3c    dtest03 Ready   Active

 

现在我们可以看到已经有2manager节点了, 一个Leader节点, 一个Reachable节点. 现在你也可以在dtest02上面管理整个swarm集群.

 

[root@dtest02 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3 *  dtest01  Ready  Active        Leader

4v1mjgrvpdba9uxmv9riti96n    dtest02  Ready  Active        Reachable

9cd5n3rgd6n5ids6mxuqcfd3c    dtest03 Ready   Active

 

备注:查看命令帮助  docker node –help

 

使用dtest02dtest03下线

 

docker node update  --availability drain9cd5n3rgd6n5ids6mxuqcfd3c

 

[root@dtest02 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3    dtest01  Ready   Active        Leader

4v1mjgrvpdba9uxmv9riti96n *  dtest02 Ready   Active        Reachable

9cd5n3rgd6n5ids6mxuqcfd3c    dtest03 Ready   Drain

 

使用dtest02dtest03上线

 

docker node update  --availability active 9cd5n3rgd6n5ids6mxuqcfd3c

[root@dtest02 ~]#  docker node ls

ID                           HOSTNAME           STATUS  AVAILABILITY MANAGER STATUS

1ov1r9l904zhvs4uoygt0tmi3    dtest01 Ready   Active        Leader

4v1mjgrvpdba9uxmv9riti96n *  dtest02 Ready   Active        Reachable

9cd5n3rgd6n5ids6mxuqcfd3c   dtest03  Ready  Active





本文转自 水滴石川1 51CTO博客,原文链接:http://blog.51cto.com/sdsca/1962601,如需转载请自行联系原作者

相关文章
|
Kubernetes Docker Python
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
《Docker 简易速速上手小册》第10章 朝着 Docker Swarm 和 Kubernetes 迈进(2024 最新版)
35 0
|
14天前
|
存储 Kubernetes C++
【专栏】Kubernetes VS Docker Swarm了解两者特点,助力选取合适容器编排工具
【4月更文挑战第27天】对比Kubernetes和Docker Swarm:K8s在可扩展性和自动化方面出色,有强大社区支持;Swarm以简易用著称,适合初学者。选择取决于项目需求、团队技能和预期收益。高度复杂项目推荐Kubernetes,快速上手小项目则选Docker Swarm。了解两者特点,助力选取合适容器编排工具。
|
3天前
|
监控 Docker 容器
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
【5月更文挑战第8天】本文探讨了Docker Swarm集群的扩展与缩容策略。集群扩展可提高性能、增强可用性和适应业务发展,可通过手动或自动方式实现。缩容则需考虑业务需求、资源利用率和节点状态,可手动或按策略执行。关键步骤包括添加/移除节点及任务迁移。注意数据同步、监控评估和测试验证。案例分析和总结强调了灵活管理对保持集群最佳状态的重要性。
【Docker 专栏】Docker Swarm 集群的扩展与缩容策略
|
3天前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
4天前
|
负载均衡 安全 数据安全/隐私保护
【Docker专栏】Docker Swarm集群管理详解
【5月更文挑战第7天】Docker Swarm是Docker的原生集群管理工具,用于将多个Docker主机整合为虚拟主机。其主要特点是服务发现、负载均衡、自动恢复和扩展性。Swarm由Manager(负责管理与控制)和Worker(运行服务)节点组成。创建Swarm集群涉及初始化、添加Worker节点及查看集群状态。服务部署包括创建、更新、扩展和缩减。Swarm还支持滚动更新、健康检查、网络管理和安全加密。本文概述了Swarm的基本功能,鼓励读者进一步探索其高级特性。
【Docker专栏】Docker Swarm集群管理详解
|
16天前
|
算法 Nacos Docker
docker部署nacos集群
docker部署nacos集群
25 0
|
16天前
|
NoSQL Redis Docker
使用Docker搭建Redis主从集群
使用Docker搭建Redis主从集群
32 1
|
22天前
|
存储 Kubernetes Docker
构建高效稳定的Docker容器集群:从原理到实践
【4月更文挑战第19天】 在当今微服务架构盛行的时代,容器化技术已经成为了软件开发和部署的标准实践。本文深入探讨了如何利用Docker容器技术,结合Kubernetes集群管理工具,构建一个高效、稳定且可扩展的容器化环境。文章首先简述了Docker的核心原理及其优势,接着详细阐述了Kubernetes的基本概念与组件,最后通过一个实际案例来指导读者如何从零开始搭建并优化一个基于Docker和Kubernetes的容器集群系统。
23 1
|
1月前
|
NoSQL Redis Docker
Docker Compose、Swarm、Stack、Secret、Config
Docker Compose、Swarm、Stack、Secret、Config
|
2月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
58 0