Rabbitmq 加入最新的集群
Rabbitmq join an up to date cluster
我有一个由两个节点 A(主节点)和 B(从节点)组成的集群。 A节点为主,B节点成功加入A节点。然后 A 节点实例关闭,B 节点实例现在队列中的消息多于 A 节点。我重新启动了 A 节点实例,现在我正尝试将 B 节点作为从节点加入,因为它是最新的。但是,我在尝试加入 B 节点时收到以下消息:
sudo rabbitmqctl join_cluster rabbit@bnode
{:badrpc_multi, {:EXIT, {{:function_clause, [{:gen, :do_for_proc, [{:rex, {:error, {:node_name, :short}}}, #Function<0.9801092/1 in :gen.call/4>], [file: 'gen.erl', line: 220]}, {:gen_server, :call, 3, [file: 'gen_server.erl', line: 219]}, {:rpc, :do_call, 3, [file: 'rpc.erl', line: 327]}, {:lists, :foldl, 3, [file: 'lists.erl', line: 1263]}, {:rabbit_mnesia, :discover_cluster, 1, [file: 'src/rabbit_mnesia.erl', line: 779]}, {:rabbit_mnesia, :join_cluster, 2, [file: 'src/rabbit_mnesia.erl', line: 212]}, {:rpc, :"-handle_call_call/6-fun-0-", 5, [file: 'rpc.erl', line: 197]}]}, {:gen_server, :call, [{:rex, {:error, {:node_name, :short}}}, {:call, :rabbit_mnesia, :cluster_status_from_mnesia, [], #PID<0.62.0>}, :infinity]}}}, [error: {:node_name, :short}]}
这是正确的方法吗?
正如我在其他一些帖子中读到的那样,我试图从 A 节点删除现有的 mnesia 数据:sudo rm -rf /var/lib/rabbitmq/mnesia/*
甚至尝试使用重置命令(尽管这不是我想要的)sudo rabbitmqctl reset
还是无法加入B节点
a) 我假设两个节点共享相同的 elrang.cookie:https://www.rabbitmq.com/clustering.html。您可以在节点 A 上尝试:
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@bnode
sudo rabbitmqctl start_app
b) 另一种选择是从集群中忘记节点 A。
node A: sudo rabbitmqctl stop_app
node B: sudo rabbitmqctl forget_cluster_node rabbit@Anode
在节点 A 上启动应用程序:sudo rabbitmqctl start_app
。
如果出现错误(集群不一致),请重置节点:sudo rabbitmqctl reset; sudo rabbitmqctl start_app
.
我找到了答案。与其尝试保存引发该错误的未同步节点,不如启动另一个实例(例如使用来自 AWS 的自动缩放组),该实例将加入该节点 B(最新节点)。
基于另一个答案:
我有一个由两个节点 A(主节点)和 B(从节点)组成的集群。 A节点为主,B节点成功加入A节点。然后 A 节点实例关闭,B 节点实例现在队列中的消息多于 A 节点。我重新启动了 A 节点实例,现在我正尝试将 B 节点作为从节点加入,因为它是最新的。但是,我在尝试加入 B 节点时收到以下消息:
sudo rabbitmqctl join_cluster rabbit@bnode
{:badrpc_multi, {:EXIT, {{:function_clause, [{:gen, :do_for_proc, [{:rex, {:error, {:node_name, :short}}}, #Function<0.9801092/1 in :gen.call/4>], [file: 'gen.erl', line: 220]}, {:gen_server, :call, 3, [file: 'gen_server.erl', line: 219]}, {:rpc, :do_call, 3, [file: 'rpc.erl', line: 327]}, {:lists, :foldl, 3, [file: 'lists.erl', line: 1263]}, {:rabbit_mnesia, :discover_cluster, 1, [file: 'src/rabbit_mnesia.erl', line: 779]}, {:rabbit_mnesia, :join_cluster, 2, [file: 'src/rabbit_mnesia.erl', line: 212]}, {:rpc, :"-handle_call_call/6-fun-0-", 5, [file: 'rpc.erl', line: 197]}]}, {:gen_server, :call, [{:rex, {:error, {:node_name, :short}}}, {:call, :rabbit_mnesia, :cluster_status_from_mnesia, [], #PID<0.62.0>}, :infinity]}}}, [error: {:node_name, :short}]}
这是正确的方法吗?
正如我在其他一些帖子中读到的那样,我试图从 A 节点删除现有的 mnesia 数据:sudo rm -rf /var/lib/rabbitmq/mnesia/*
甚至尝试使用重置命令(尽管这不是我想要的)sudo rabbitmqctl reset
还是无法加入B节点
a) 我假设两个节点共享相同的 elrang.cookie:https://www.rabbitmq.com/clustering.html。您可以在节点 A 上尝试:
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@bnode
sudo rabbitmqctl start_app
b) 另一种选择是从集群中忘记节点 A。
node A: sudo rabbitmqctl stop_app
node B: sudo rabbitmqctl forget_cluster_node rabbit@Anode
在节点 A 上启动应用程序:sudo rabbitmqctl start_app
。
如果出现错误(集群不一致),请重置节点:sudo rabbitmqctl reset; sudo rabbitmqctl start_app
.
我找到了答案。与其尝试保存引发该错误的未同步节点,不如启动另一个实例(例如使用来自 AWS 的自动缩放组),该实例将加入该节点 B(最新节点)。
基于另一个答案: