繁体   English   中英

ansible playbook 的动态组分配

[英]Dynamic group assignment for ansible playbook

我正在编写一个可配置 redis 集群的 ansible playbook。 我的剧本查看了 3 个组,但我不知道如何正确地将节点分配给一个组。

出现问题是因为我有一个动态数量的节点。 如果请求 2 个节点,我希望有如下所示的组:

[redis_master]
node1
[redis_slave]
node2

在 3 的情况下:

[redis_master]
node1
[redis_slave]
node2
[redis_sentinel]
node3

在 4 等情况下:

[redis_master]
node1
node4
[redis_slave]
node2
[redis_sentinel]
node3

有没有我在这里缺少的范例?

我不确定我是否完全了解情况。 通常您预先定义所有涉及的主机并将它们分组。 playbook 可能处理的所有主机都需要在清单中定义。 哪些主机由剧本处理然后或多或少是固定的。 你到底是什么意思:

如果请求X 个节点...

我知道您可以使用--limit将剧本限制为最初定义的主机的子集。 您也可以使用--extra-vars定义的参数来选择特定组或一组主机。 但是它们仍然需要在清单中预先定义,并且依赖组和角色(redis master、slave 等)依赖于所涉及的主机数量对我来说似乎很奇怪(并且容易出错)。

话虽这么说...我认为库存脚本可能是你正在寻找的。 使用这些脚本,您可以生成库存动态。 我认为您不能传递参数,但您可以导出变量并稍后从脚本中读取它们。

嗯,使用 Redis Sentinel,库存本质上是动态的。 您可以在[redis_master]组中定义某个主机,但集群主机可以自动重新分配主机角色。 Redis Sentinel 重写了 Sentinel 配置文件。

所以你可能会惊讶地登录到你认为是主人的机器并发现这一点!!

redis-cli info replication
...
role:slave
master_host:10.1.1.20
...

因此,要为集群扮演幂等角色,您需要通过探测[redis_sentinel]组中的主机(假设您在每个主机上运行哨兵)来发现谁是主[redis_sentinel] 然后用这样的东西组成组:

 - name: get master_host
   run_once: true
   shell: "redis-cli info replication|grep -A1 role|tail -1|cut -d: -f2"
   register: master_host

 - name: add master_host
   add_host:
     name: "{{ master_host.stdout }}"
     groups: redis_master

如果您在 Centos/RHEL 上工作,请考虑在此处提出拉取请求: https : //github.com/dockpack/base_redis

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM