当前位置: 首页 > news >正文

docker swarm如何让两个副本分别跑在两台不同的主机上

虽然 docker swarm 支持自动扩容部署,但是为了服务的稳定性、可靠性,有的时候甲方巴巴会要求一定要服务分散部署在不同的服务器上。
使用默认的部署方式,虽然副本为 N,但是部署的 N 个服务可能落在同一台服务器上。
在 Docker Swarm中,要让服务(service)的两个副本(replica)分别运行在不同的主机上,你需要做的是在部署服务时,使用 --constraint 标志来指定资源限制,例如主机的标签(labels)等都是可以的。

首先,确保你的两台主机已经加入到Docker Swarm集群中,并且每台主机有一个独特的标签来区分。可以通过以下命令给主机添加标签:

docker node update --label-add <key>=<value> <node-id>

然后,当你部署服务时,可以使用 --constraint 标志来指定副本运行的主机标签。例如,如果你有两台主机,一台标签为 host=node1,另一台标签为 host=node2,你可以这样部署服务。

docker service create --replicas 2 --name my-service --constraint 'node.labels.host==node1' my-image
docker service create --replicas 2 --name my-service --constraint 'node.labels.host==node2' my-image

如果使用的yml文件来编排的服务,则修改文件内容如下:

version: '3.8'services:my-service:image: my-imagedeploy:mode: replicatedreplicas: 2placement:constraints:- "node.labels.host == node1"- "node.labels.host == node2"

在部署服务前,确保已经标记了相应的节点:

docker node update --label-add host=node1 <NODE1_ID>
docker node update --label-add host=node2 <NODE2_ID>

这样,每个副本都会被调度到一个符合指定标签的节点上。如果你有多于两台主机,并且每个副本都需要在不同的主机上运行,你可能需要为每个副本指定不同的标签约束。

请注意,如果没有足够的节点来满足所有约束条件,服务可能会创建失败或者只能运行在部分节点上。因此,集群中节点的数量和资源容量至关重要。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu 24.04 软件源配置,替换为国内源
  • 【GitLab】使用 Docker 安装 GitLab:配置 SSH 端口
  • 数据守护者:SQL一致性检查的艺术与实践
  • dev c++中,在C++11模式下编译带M_PI宏的文件报错的解决办法
  • es查看与删除索引
  • LVGL在方形屏幕上的参考案例
  • Python爬虫——爬取某网站的视频
  • 【python学习】如何利用threading 库提升性能:深入解析与实战应用 模拟温格高的环法冠军之路
  • 数据维度的魔法:SQL多维数据模型的构建与操作
  • CI/CD 自动化:最大限度地提高极狐GitLab 群组的“部署冻结”影响
  • JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车系统源码
  • AOP实战
  • 【学习日记】【第五十一章 Linux中断实验】【流程图】——正点原子I.MX6U嵌入式Linux驱动开发
  • centos系统配置转发和iptables使之成为网关
  • 网络安全实训第一天(dami靶场搭建,XSS、CSRF、模板、任意文件删除添加、框架、密码爆破漏洞)
  • ----------
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Android优雅地处理按钮重复点击
  • ECMAScript入门(七)--Module语法
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • LeetCode18.四数之和 JavaScript
  • Phpstorm怎样批量删除空行?
  • Vue学习第二天
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 力扣(LeetCode)21
  • 前端面试之闭包
  • 入门级的git使用指北
  • 听说你叫Java(二)–Servlet请求
  • 学习ES6 变量的解构赋值
  • 云大使推广中的常见热门问题
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​Spring Boot 分片上传文件
  • ​数据结构之初始二叉树(3)
  • # dbt source dbt source freshness命令详解
  • # Redis 入门到精通(七)-- redis 删除策略
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)Android开发优化---------UI优化
  • (3)选择元素——(17)练习(Exercises)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (void) (_x == _y)的作用
  • (windows2012共享文件夹和防火墙设置
  • (附源码)ssm码农论坛 毕业设计 231126
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • ***通过什么方式***网吧
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *1 计算机基础和操作系统基础及几大协议