如何从RabbitMQ集群中删除未运行的节点

bfhwhh0e  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(2)|浏览(251)

我需要通过命令行删除RabbitMQ群集中所有未运行的节点。
我已经尝试了rabbitmqctl forget_cluster_node,但我不确定如何获得未运行节点的列表。
我在rabbitmqctl cluster_status的输出中看到了所有的节点和running_nodes。有人能帮我解析一下吗?让我知道是否有其他的解决方案可以轻松地从集群中删除节点?

1wnzp6jl

1wnzp6jl1#

我自己想出来的


# Remove nodes that are not running from the cluster

nodes=($(egrep -o '[a-z0-9@-]+' <<< $(sudo rabbitmqctl cluster_status --formatter json | jq .nodes.disc)))
running_nodes=($(egrep -o '[a-z0-9@-]+' <<< $(sudo rabbitmqctl cluster_status --formatter json | jq .running_nodes)))

for node in ${nodes[@]}
do
  match_count=0
  for rnode in ${running_nodes[@]}
  do
    if [ "${node}" == "${rnode}" ]
    then
        match_count=1
        break
    fi
  done
  if [ $match_count == 1 ]
    then
        continue
    else
      sudo rabbitmqctl forget_cluster_node $node
    fi
done
bmvo0sr5

bmvo0sr52#

在我的例子中,建议的脚本没有工作,可能是因为RabbitMQ版本输出与我使用的版本(3.9.13)不同。


# !/bin/bash

offline_nodes=$(rabbitmqctl --quiet --formatter json cluster_status \
  | jq -r '.disk_nodes-.running_nodes | .[]')

for node in ${offline_nodes[@]}; do
  rabbitmqctl forget_cluster_node "$node"
done

相关问题