You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中获取Redis Cluster特定主节点的槽位数

提取Redis Cluster特定主节点槽位数的Ansible Playbook实现

核心思路

先通过redis-cli --cluster check获取集群全量信息,再精准筛选目标IP对应的主节点行,最后从该行提取槽位数,避免全局替换的问题。

完整Playbook代码

---
- name: 获取指定Redis主节点的槽位数
  hosts: localhost  # 替换为实际运行redis-cli的节点(如管控节点或目标Redis所在节点)
  vars:
    target_redis_ip: "{{ input_target_ip }}"  # 通过ansible-playbook -e "input_target_ip=192.168.56.116"传入
    redis_port: 6379
    # 若集群需密码,添加redis_password变量,命令中加对应参数
    # redis_password: "your_redis_cluster_password"
  tasks:
    - name: 执行Redis集群检查命令
      command: >
        redis-cli 
        {% if redis_password is defined %}--cluster-password {{ redis_password }}{% endif %}
        --cluster check {{ target_redis_ip }}:{{ redis_port }}
      register: redis_cluster_output
      changed_when: false  # 标记任务无状态变更

    - name: 筛选目标主节点行并提取槽位数
      set_fact:
        target_slot_count: >-
          {{
            redis_cluster_output.stdout_lines |
            select('search', target_redis_ip) |  # 筛选包含目标IP的行
            select('search', 'slots') |          # 筛选主节点行(从节点无slots字段)
            first |                              # 取唯一匹配行
            regex_search('(\\d+) slots') |       # 匹配"数字 slots"片段
            regex_replace(' slots', '')          # 去除后缀,保留纯数字
          }}

    - name: 输出结果
      debug:
        msg: "目标节点{{ target_redis_ip }}的槽位数: {{ target_slot_count }}"

关键说明

  1. 精准筛选逻辑:通过两次select过滤,先锁定目标IP的行,再筛选带slots的主节点行,避免误匹配从节点或其他节点。
  2. 正则提取:用regex_search精准匹配目标行中的槽位数字片段,再用regex_replace清理无关字符,而非全局替换所有行。
  3. 密码适配:如果Redis集群启用认证,取消注释redis_password变量,并在命令中添加密码参数(不同Redis版本可能需用-a替代--cluster-password,按需调整)。
  4. 节点适配:hosts字段需替换为实际能运行redis-cli且能访问目标Redis集群的节点(如本地管控节点或目标Redis所在节点)。

内容的提问来源于stack exchange,提问作者Behnia FB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:52:26