我正在开发一个可以配置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
我在这里缺少一个范例吗?
答案 0 :(得分:0)
我不确定我是否完全理解这种情况。通常,您预先定义所有涉及的主机并将它们分组排列。一个剧本可能处理的所有主持人都需要在清单中定义。哪个主机由剧本处理然后或多或少是固定的。你究竟是什么意思:
如果X节点请求 ...
我知道您可以使用--limit
将playbook限制为最初定义的主机的子集。您还可以使用--extra-vars
中定义的参数来选择特定组或一组主机。但是它们仍然需要在清单中预先定义,对我来说,依赖于组以及角色(redis master,slave等)对所涉及的主机数量的依赖似乎很奇怪(并且容易出错)。
话虽如此......我认为库存脚本可能就是您正在寻找的东西。使用这些脚本,您可以生成库存动态。我认为你不能通过参数,但你可以导出变量并稍后从脚本中读取它们。
答案 1 :(得分:0)
嗯,使用 Redis Sentinel,库存本质上是动态的。您可以在 [redis_master]
组中定义某个主机,但集群主机可以自动重新分配主角色。 Redis Sentinel 重写了 Sentinel 配置文件。
所以你可能会惊讶地登录到你认为是 master 的机器并发现这个!!
redis-cli info replication
...
role:slave
master_host:10.1.1.20
...
因此,要为集群设置幂等角色,您需要通过探测 [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