我正在使用 net_adm:world() 连接到其他主机上的节点,但我让它工作的唯一方法是手动创建一个主机文件并在文件中列出其他主机的名称。如果我有 10 台主机,我必须将这个文件放在所有 10 台机器上,并在每次将新主机添加到集群时更新列表十次。
每次与新主机上的节点建立连接时,是否无法自动更新此文件?
我正在使用 net_adm:world() 连接到其他主机上的节点,但我让它工作的唯一方法是手动创建一个主机文件并在文件中列出其他主机的名称。如果我有 10 台主机,我必须将这个文件放在所有 10 台机器上,并在每次将新主机添加到集群时更新列表十次。
每次与新主机上的节点建立连接时,是否无法自动更新此文件?
您的 .hosts.erlang 文件不需要完整或 100% 正确。一个节点只需要相互连接就可以了解集群中的每个其他节点。
您可以跳过维护 .hosts.erlang 文件并使用多播 UDP 动态发现节点。有关示例代码,请参见节点查找器。
我们开始关闭多播 UDP 路由,但后来决定只维护一个中央主机文件并使用 rsync 将其分发给所有主机。我们不经常重启节点,所以这不是一个大问题。
我们使用chef.hosts.erlang
为属于集群的节点预填充文件。该函数net_adm:world()
可用于确定当前属于集群的节点,这些节点不一定匹配所包含的内容.hosts.erlang
,例如,当其中一个节点关闭时。使用的替代方法net_adm:world()
是net_adm:world_list(Hosts)
获取主机列表(而不是从 读取.hosts.erlang
)并执行相同操作net_adm:world()
以确定当前连接的节点。