我正在研究 RabbitMQ 分布式 POC,但我一直停留在集群节点的基础知识上。
我正在尝试遵循兔子的集群教程,所以这是我的参考。
安装 erlang (R14B04) 和 rabbit (2.8.2-1) 后,我将.erlang.cookie
文件内容从一个节点复制到另外两个节点。
我不确定如何让 erlang 注意到这种变化,因为我必须自己重新启动机器(相当蛮力,但我根本不知道 erlang)。
此外,我在 iptables 4369 和 5 个额外的通信端口中打开
/usr/lib64/erlang/bin/sys.config
了以下配置:
{kernel,[{inet_dist_listen_min, XX00},{inet_dist_listen_max,XX05}]}]
然后再次重新启动(我知道愚蠢)以验证 erlang 将这些考虑在内,但仍然在我运行时:
rabbitmqctl cluster rabbit@HostName1
我得到:
Clustering node rabbit@HostName2 with [rabbit@HostName1] ...
Error: {no_running_cluster_nodes,[rabbit@HostName1],
[rabbit@HostName1]}
我对 erlang.cookie 或端口的摆弄有可能没有成功,但我不知道如何检查它们。我尝试输入erl
cmd 然后erl_epmd:names()
或其他命令来获取更多信息,但我可能在 erlang 领域还很遥远。
真的很感激任何帮助
更新:
我尝试手动 ping 两个 erlang 节点并pang
返回。
我做了以下事情:
连接到两个节点,停止rabbitmq(不确定是否需要,但可以肯定),当erlang命令行启动时像这样(erl -sname dilbert
和)启动erlang,我在每个节点上运行并分别得到和。然后,我尝试使用单引号运行并在两个节点中不使用它们(当然更改了名称)并得到了所有 8 个案例。
当我在其中一台机器上运行时,我得到了一个空数组。
我还尝试允许防火墙中的所有流量(脚本erl -sname dilbert2
node().
dilbert@HostName1
dilbert2@HostName2
net_adm:ping('dilbert').
net_adm:ping('dilbert@HostName1').
pang
nodes().
) 然后尝试运行上面的命令(不用担心它们现在又回来了)并且仍然返回pang
.
Update2:
由于某种原因,我需要解决 cookie 不匹配问题(感谢@kjw0188 的建议 [我erlang:get_cookie().
在 erlang 命令行中运行])。
这没有帮助,我需要完全停止 iptables(不知道为什么,但我很快就会弄清楚)并加载 erlang 节点,-name dilbert@my-ip
因为我的机架空间服务器没有 dns 名称。这最终使我能够得到一个 pong 并看到节点互相看到(nodes().
在 ping 之后返回一个非空数组)。
我现在面临的问题是如何指示 RabbitMQ 在启动 erlang 时使用 -name 而不是 -sname。