开发者社区 问答 正文

Swarm 集群 如何高可用性调度


为了使应用有更高的可用性,容器服务支持将同一个服务的容器调度在不同的可用区(zone)里。当某个可用区发生故障时,应用依然能够提供服务。
您可以在编排文件中通过环境变量指定对可用区的选择,有以下两种格式。

  • availability:az==3:服务至少分布在三个可用区中;如果当前集群没有三个可用区,或机器资源不够导致无法分布在三个可用区,容器创建会失败。
  • availability:az==~3:服务尽可能分布在三个可用区中;无法满足时依然可以成功创建。

[backcolor=transparent]注意:部署约束只对新创建容器生效,对老容器变更配置时不起作用。
在下面的示例中,服务至少要部署在两个可用区中。
  1. [backcolor=transparent]nnn[backcolor=transparent]:
  2. [backcolor=transparent]  expose[backcolor=transparent]:
  3. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]443[backcolor=transparent]/[backcolor=transparent]tcp
  4. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]80[backcolor=transparent]/[backcolor=transparent]tcp
  5. [backcolor=transparent]  image[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'nginx:latest'
  6. [backcolor=transparent]  environment[backcolor=transparent]:
  7. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]'availability:az==2'
  8. [backcolor=transparent]  labels[backcolor=transparent]:
  9. [backcolor=transparent]    aliyun[backcolor=transparent].[backcolor=transparent]scale[backcolor=transparent]:[backcolor=transparent] [backcolor=transparent]'8'
  10. [backcolor=transparent]  restart[backcolor=transparent]:[backcolor=transparent] always
  11. [backcolor=transparent]  volumes[backcolor=transparent]:
  12. [backcolor=transparent]    [backcolor=transparent]-[backcolor=transparent] [backcolor=transparent]/var/[backcolor=transparent]cache[backcolor=transparent]/[backcolor=transparent]nginx

展开
收起
反向一觉 2017-10-30 09:37:09 3059 分享 版权
阿里云 AI 助理回答

在您提供的示例中,要确保服务至少部署在两个可用区(AZ)中,您已经在环境变量部分正确设置了约束条件。下面是您的配置的一个小总结和解释:

version: '2'
services:
  nnn:
    expose:
      - "443/tcp"
      - "80/tcp"
    image: 'nginx:latest'
    environment:
      - 'availability:az==2' # 这一行确保服务至少分布在两个可用区
    labels:
      aliyun.scale: '8' # 服务实例数量为8
    restart: always
    volumes:
      - /var/cache/nginx

这段YAML配置定义了一个名为nnn的服务,使用的是最新版本的Nginx镜像。通过expose指令指定了容器需要暴露的端口(443和80),并且通过environment中的availability:az==2设置,确保了该服务的实例会被调度到至少两个不同的可用区里。这意味着当一个可用区发生故障时,另一个可用区的服务实例仍可以继续提供服务,从而提高了应用的高可用性。

此外,labels部分的aliyun.scale: '8'意味着您希望运行8个该服务的副本以进一步增强服务的健壮性和负载能力。restart: always策略保证了无论容器因何种原因退出,都会自动重启,确保服务持续运行。最后,通过volumes挂载了本地的/var/cache/nginx目录,这通常用于持久化Nginx的缓存数据或配置文件。

请记得,这些配置是在假设您使用的是支持阿里云容器服务(如ACK, Container Service for Kubernetes, or ACS)的环境下有效。如果您需要在实际环境中应用此配置,请确保您的集群横跨至少两个可用区,并且有足够资源来满足部署需求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答