当前位置: 首页 > 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>

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

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


http://www.mrgr.cn/news/3449.html

相关文章:

  • Hyper-V 与 VMware 的区别
  • 8月21日CSPJxx模拟题 总结
  • C++设计原则
  • Docker-harbor 私有仓库部署和管理
  • GPS 和arduino 获取经纬度
  • 【Python系列】 并发编程在数据处理中的应用
  • 浮毛怎么去掉比较方便?最最高效解决办法宠物空气净化器分享
  • 为什么不用postman做自动化
  • 微信小程序--28(npm包)
  • PPP简介
  • STM32之点亮LED灯
  • 静态代理和动态代理
  • JAVA_7
  • MySQL读写分离
  • MyBatis源码系列1(使用JDBC查询数据)
  • 代码随想录跟练第六天——LeetCode
  • 网际报文协议ICMP及ICMP重定向实例详解7
  • 利用贝叶斯和决策树 来进行医疗诊断的
  • ORA-01110
  • 【ARM 芯片 安全与攻击 5.6 -- 侧信道与隐蔽信道的区别】