我一直在运行一个单节点accumulo应用程序,只要客户端应用程序在同一台机器上运行,它就一直运行良好。现在,我需要将客户端迁移到另一台计算机,但运行应用程序会发出以下警告,不允许程序继续:
WARN [client.impl.ServerClient] Failed to find an available server in the list of servers: [localhost.localdomain:9997 (120000)]
我可以通过编辑 localhost.localdomain
进入 /etc/hosts
但还是想知道正确的解决方法。我可以从客户机连接到accumulo服务器,并验证它是否被称为 localhost.localdomain:9997
现在一切看起来都就绪了,如果我能找到一种从客户端引用tablet服务器的方法,而不调用它的话 localhost.localdomain
,我会重新上网。有什么建议吗?
1条答案
按热度按时间mwyxok5s1#
accumulo服务将在zookeeper中公布它们正在运行的服务器的地址。他们使用的服务地址通常是
InetAddress.getLocalHost().getHostName()
.最好的解决方案是确保在accumulo及其客户机运行的任何位置都正确配置了dns,以便accumulo能够检测并公布外部客户机也知道的主机名。您还可以使用另一个名称服务实现(通过配置
/etc/nsswitch.conf
适当地;看到了吗man nsswitch.conf
)所以InetAddress.getLocalHost().getHostName()
返回将由外部客户端识别的内容。例如,您可以依赖files
的选项hosts:
指令而不是dns
,但您需要确保/etc/hosts
在accumulo服务器和客户机上为任何ip地址提供一致的条目。而不是依赖
InetAddress.getLocalHost().getHostName()
当服务启动时,可以通过设置-a, --address
服务启动时的命令行选项。这也会影响服务侦听的地址(默认情况下,它侦听的地址)0.0.0.0
).在accumulo的某些版本提供的一些方便脚本中
-a
尝试根据从中返回的内容自动设置选项ifconfig
和/或conf/slaves
文件。在大多数场景中,这些脚本的行为与InetAddress.getLocalHost().getHostName()
,所以使用dns或/etc/hosts
因为你的名字服务将是最好的。