ElasticSearch中bind_host和publish_host有什么区别?

时间:2014-06-05 15:01:05

标签: networking elasticsearch

在本文档network settings中,我知道 publish_host 是群集中其他节点将与之通信的主机。但我不明白 bind_host 的功能,这意味着:

  

network.bind_host设置允许控制主机将绑定的不同网络组件。默认情况下,绑定主机将是anyLocalAddress(通常为0.0.0.0或:: 0)。

network.host 会将 network.bind_host network.publish_host 设置为相同的值。

所以我想知道为什么需要设置 network.bind_host ,如果可以设置 network.bind_host network.publish_host 到不同的价值观?

5 个答案:

答案 0 :(得分:11)

可以将它们设置为不同的值,并且在某些情况下非常有用。这是我的用法:

我在数据中心有一个本地网络,我运行由不同节点组成的elasticsearch集群。这意味着每个弹性搜索机器都有两个IP地址,一个用于从外部计算机到达,另一个用于本地连接到同一网络中的其他计算机。

内部ip(eth1)用于让不同的elasticsearch节点相互通信,发现等,外部ip地址(eth0)是​​我的web应用程序(在另一个网络中)发出请求的地址至。

简单来说,bind_host(在我的情况下都是ip,与附加所有接口的默认值0.0.0相同)是elasticsearch侦听的地方,而publish_host(在我的情况下是内部ip)是elasticsearch与其他集群组件通信的地方

这样,我的Web应用程序位于另一个网络中,可以从bind_host地址访问ES群集,而elasticsearch与具有publish_host的群集通信。

答案 1 :(得分:11)

以下设置应该可以解决问题。它接受来自任何IP(绑定)的连接,并将其自身ip配置为第一个可用网络接口中的第一个non_loopback。

network.bind_host: "0.0.0.0"
network.publish_host: _non_loopback:ipv4_

要查看更多选项,请查看docs

答案 2 :(得分:10)

根据我的理解,并使用电话类比:

  • publish_host表示:"请拨打此电话号码"
  • bind_host表示:"我将回复此号码"

publish_host: _non_loopback:ipv4_可以被理解为:"如果我打电话给你,请拨打电话给我#34;

答案 3 :(得分:6)

bind_host设置控制Elasticsearch侦听的网络接口。因此,在具有多个NIC的计算机上,这将允许您控制将绑定到哪个ES。默认值0.0.0.0基本上意味着"绑定到所有"。

publish_host设置控制Elasticsearch向其他成员宣布的IP地址。这必须是实际的IP地址,并且是其他集群成员将用于与ES节点通信的内容。

如果需要在多宿主服务器上执行某些特殊操作,可以将bind_host和publish_host设置为不同的值。但是大多数用例都不需要,因此network.host设置控制两者。

答案 4 :(得分:0)

要通过API检查此值:

curl http://ES:9200/_cat/master

注意主机名将被解析(因此永远不会暴露)。