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