搭建docker swarm高可用集群以及常用命令

迷南。 2022-12-27 01:22 273阅读 0赞

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUzMzg1Ng_size_16_color_FFFFFF_t_70

如上图,通过Manager 对外提供服务,管理集群容器,利用swarm的容错机制实现高可用,利用docker多个工作节点,多个副本实现负载均衡,上层可以使用Happroxy实现对多个Manager的访问。

为了利用swarm模式的容错功能,应保持集群中奇数管理员来支持manager节点故障。当leader故障时,会选举新的leader。

3a834af5f5f70e9257d63c5ecfe4b9f6.png

注意:三个manage只允许一个manage故障,如果swarm失去法定人数,swarm不能自动恢复,工作节点上的任务继续运行,不受影响,但无法执行管理任务,包括扩展或更新服务,加入或删除节点。恢复的最佳方式是将丢失的leader节点重新联机。如果不可能,唯一方法是使用—force-newcluster管理节点的操作,这将去除本机之外的所有管理器身份,命令如下:

去除本地之外的管理员:docker swarm init —force-new-cluster

failed to create network auth_test: Error response from daemon: This node is not a swarm manager. Use “docker swarm init” or “docker swarm join” to connect this node to swarm and try again. 管理节点出现这种情况,重启服务:service docker restart

一,下面我们搭建上图的高可用的docker swarm 集群以及一些命令使用

1,准备八台服务器,三台作为manage管理节点,向外提供接口服务,五台作为worker节点,运行我们项目

manage:管理节点(dokcer swarm命令只能再管理节点执行,管理节点状态有两种:Leader,Reachable)

worker:工作节点

2,初始化docker swarm

docker swarm init —force-new-cluster —advertise-addr (本机ip)

3,生成token让其他manage和worker加入集群

生成一个work节点加入的token : docker swarm join-token worker
生成一个manger节点加入的token:docker swarm join-token manager

" class="reference-link">20201207001346554.png

把上图的红框内容复制到将要加入集群的机器执行即可

4,通过命令查看集群各个节点的情况

管理节点执行:docker nodel ls

  1. AVAILABILITY 列可能出现的状态:
  2. Active :意味着调度程序可以向节点分配任务
  3. Pause:意味着调度程序不向节点分配新任务,但现有任务仍在运行。
  4. Drain :意味着调度程序不向节点分配新任务。调度程序关闭所有现有任务,并在可用节点上调度它们。
  5. MANAGER STATUS列状态:
  6. Leader :意味着该节点是主要的管理器节点,负责为群进行所有群管理和编排决策。
  7. Reachable :表示该节点是参与Raft共识仲裁的管理器节点。如果领导节点变得不可用,则该节点有资格被选举为新的领导人。
  8. Unavailable :表示节点是无法与其他管理器通信的管理器。如果管理器节点变得不可用,则应将新的管理器节点加入群或将工作节点提升为管理器。

如下图:三个manage,其中一台已经模拟宕机,自动切换了leader, 四台正常的work,

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUzMzg1Ng_size_16_color_FFFFFF_t_70 1

到此已经完成了第一个图的docker swarm 集群搭建了 ,下面介绍一些常用的命令

5,创建网络:

在一台manage主机中创建overlay网络

docker network create -d overlay —attachable cloud_desktop_network

6,升级与降级

可以将工作节点提升为管理器角色。当管理器节点变得不可用或要使管理器脱机进行维护时,这很有用。类似地,可以将管理器节点降级为辅助角色。
降级:docker node demote 名称
升级:docker node promote 名称

7,节点移除

docker node rm

8, 动态修改服务的数量

docker service scale my-service=5

9,刷新各个节点

刷新各个节点:docker swarm update

10,强制离开集群

强制离开节点:docker swarm leave —force

二,讲述一些同个服务service的负载均衡访问原理

例子:启动了mongo服务,数量为两个,但是项目中访问使用的是 mongo的容器名字,那docker它怎么通过容器名称动态实现负载均衡的呢?

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjUzMzg1Ng_size_16_color_FFFFFF_t_70 2

如上图,访问ManagerX:80端口,自动映射到worker工作节点,而网络内部通过VIP自动分配给负载较少的mongo容器, 从而达到访问容器名称实现负载均衡。

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读

    相关 docker-swarm

    最近一直在忙公司应用docker化部署,所以很久没发博文了。今天刚好有空,就来介绍下swarm集群,在部署swarm集群之前我一直在考虑用那种集群方式,k8s还是swarm,最