当前位置:网站首页>7.Swarm搭建集群
7.Swarm搭建集群
2020-11-06 22:38:00 【太猪-YJ】
使用dokcer会遇到的问题:
- 怎么去管理这么多容器?
- 怎么能方便的横向扩展
- 如果容器down了,怎么能恢复启动?
- 如何去更新容器而不影响业务?
- 如何去监控追踪这些容器?
- 怎么去调度容器的创建?
- 保护隐私数据?
Docker自带了容器编排工具:Swarm Mode

Manager节点作为管理者,为了维持高可用,不能只部署一个,如果部署多个又存在状态如何同步的问题。docker内置了分布式数据库,通过raft协议确保Manager信息是同步的,不会出现脑裂这种现象。
Worker节点是工作节点,它也需要和其他Worker节点数据同步,使用Gossip协议进行信息的同步。

我们通过swarm manager节点去部署一个service,我们是不知道这个service最终会运行在哪些容器节点上的。swarm manager会根据一些策略,比如内存,硬盘资源等,将service部署在某些container node中。

3 nodes swarm cluster setup
1.在第一台机器上,创建docker swarm manager命令
docker swarm init --advertise-addr=192.168.8.117 本机IP
创建成功,会返回 docker swarm join --token SWMTKN-1-1aud6ztpiwgujisqn20gb9lfldziidj0dz7lww3puod36t5j5d-c6azyl8d0rhhzd8c25u9laxxp 192.168.8.117:2377 用于其他docker swarm join本机,建立集群。

2.在第二台机器上,创建docker swarm并加入第一台机器,命令
docker swarm join --token SWMTKN-1-1aud6ztpiwgujisqn20gb9lfldziidj0dz7lww3puod36t5j5d-c6azyl8d0rhhzd8c25u9laxxp 192.168.8.117:2377
发生异常
Error response from daemon: rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial tcp 192.168.8.117:2377: connect: no route to host"
原因
如果要使用swarm功能,需要在所有manager node节点上开启2377端口。
解决办法
开放指定端口 firewall-cmd --zone=public --add-port=2377/tcp --permanent
重启防火墙才生效 systemctl restart firewalld
查看swarm node
docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
5xeakkex0klrezwb1p5y0pcja localhost.localdomain Ready Active 19.03.13
rk1pu6zgxkh278262d5yprzqi localhost.localdomain Ready Active 19.03.13
ulms2qb8gvnehsmgx7d7dcx9a * localhost.localdomain Ready Active Leader 19.03.13
搭建步骤:
1、环境准备:
1.1、准备三台已近安装docker engine的centos/Ubuntu系统主机(docker版本必须在
1.12以上的版本,老版本不支持swarm)
1.2、docker容器主机的ip地址固定,集群中所有工作节点必须能访问该管理节点
1.3、集群管理节点必须使用相应的协议并且保证端口可用
集群管理通信:TCP,端口2377
节点通信:TCP和UDP,端口7946
覆盖型网络(docker网络):UDP,端口4789 overlay驱动
说明:三台容器主机的ip地址分别为:
192.168.200.162(管理节点)
192.168.200.163(工作节点)
192.168.200.158(工作节点)
主机名称分别为:manager1、work1以及work2
vim /etc/hostname (修改完成后需要重启)
2、创建docker swarm
2.1、在manager1机器上创建docker swarm集群
docker swarm init ‐‐advertise‐addr 192.168.200.162
(‐‐advertise‐addr将该IP地址的机器设置为集群管理节点;如果是单节点,无需该参
数)
2.2、查看管理节点集群信息:
docker node ls
3、向docker swarm中添加工作节点:在两个工作节点中分别执行如下命令,ip地址是
manager节点的
3.1、添加两个work节点
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker1)
docker swarm join ‐‐token xxx 192.168.200.138:2377 (worker2)
(‐‐token xxx:向指定集群中加入工作节点的认证信息,xxx认证信息是在创建docker
swarm时产生的)
3.2、继续查看管理节点集群信息与之前的区别
docker node ls
4、在docker swarm中部署服务
在Docker Swarm集群中部署服务时,既可以使用Docker Hub上自带的镜像来启动服务,也
可以使用自己通Dockerfile构建的镜像来启动服务。如果使用自己通过Dockerfile构建的
镜像来启动服务那么必须先将镜像推送到Docker Hub中心仓库。为了方便读者的学习,这里
以使用Docker Hub上自带的alpine镜像为例来部署集群服务
4.1、部署服务
docker service create ‐‐replicas 1 ‐‐name helloworld alpine ping
docker.com
docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务
‐‐replicas参数:指定了该服务只有一个副本实例
‐‐name参数:指定创建成功后的服务名称为helloworld
ping docker.com指令:表示服务启动后执行的命令
5.查看docker swarm集群中的服务
查看服务列表:docker service ls
查看部署具体服务的详细信息:docker service inspect 服务名称
查看服务在集群节点上的分配以及运行情况:docker service ps 服务名称
6、修改副本数量
在manager1上,更改服务副本的数量(创建的副本会随机分配到不同的节点)
docker service scale helloworld=5
7、删除服务(在管理节点)
docker service rm 服务名称
8、访问服务
8.1、查看集群环境下的网络列表:docker network ls
8.2、在manager1上创建一overlay为驱动的网络(默认使用的网络连接ingress)
docker network create ‐d=overlay my‐multi‐host‐network
8.3、在集群管理节点manager1上部署一个nginx服务
docker service create \
‐‐network my‐multi‐host‐network \
‐‐name my‐web \
‐p 8080:80 \
‐‐replicas 2 \
nginx
8.3、在管理节点查看服务的运行情况:
docker service ps my‐web
8.4、访问测试
版权声明
本文为[太猪-YJ]所创,转载请带上原文链接,感谢
https://my.oschina.net/xiaoyoung/blog/4699871
边栏推荐
- ImageMagick - 添加水印
- How does varhart xgantt represent working days on a calendar
- 细数软件工程----各阶段必不可少的那些图
- Nonvolatile MRAM memory used in all levels of cache
- The essence of transaction and the principle of deadlock
- Epu360: all the H5 templates you want are here, e-book, big turntable, red envelope rain, questionnaire survey
- 2020-08-14:数据任务的执行引擎用的哪些?
- Qt音视频开发46-视频传输UDP版
- 插件Bilibili新版0.5.5
- [byte jumps, autumn recruitment Posts open] ohayoo! Don't leave after school, I want to ask you to play games!!!
猜你喜欢

Method of code refactoring -- Analysis of method refactoring

2020年新规,微信封号怎么快速解除?

STM32F030K6T6兼容替换灵动MM32F031K6T6

Reserved battery interface, built-in charge and discharge circuit and electricity meter, quickly help easily handle hand-held applications

In 2020, how can wechat seal numbers be quickly lifted?

Characteristics of magnetic memory chip STT-MRAM

#JVM 类加载机制

如何使用甘特图图层和筛选器

Stm32f030c6t6 compatible to replace mm32spin05pf

The role of theme music in games
随机推荐
The advantages and functions of psychological counseling app
轻量型 GPU 应用首选 京东智联云推出 NVIDIA vGPU 实例
高速公路二维码定位报警系统
What are the highlights of Huawei mate 40 series with HMS?
Exclusive interview of guests at | 2020 PostgreSQL Asia Conference: Wang Tao
打工人好物——磨炼钢铁意志就要这样高效的电脑
心理咨询app开发所具备的优点与功能
In 2020, how can wechat seal numbers be quickly lifted?
Event monitoring problem
迅为-iMX6ULL开发板上配置AP热点
Utility class functions (continuous update)
[byte jumps, autumn recruitment Posts open] ohayoo! Don't leave after school, I want to ask you to play games!!!
Reserved battery interface, built-in charge and discharge circuit and electricity meter, quickly help easily handle hand-held applications
Novice guidance and event management system in game development
消防器材RFID固定资产管理系统
Big data processing black Technology: revealing the parallel computing technology of Pb level data warehouse gaussdb (DWS)
C language I blog assignment 03
QT audio and video development 46 video transmission UDP version
[forward] how to view UserData in Lua
Two dimensional code location and alarm system of Expressway