ElasticSearch中bind_host和publish_host有什么区别?

28
从这份网络设置文档中,我了解到publish_host是集群中其他节点通信的主机。但我不理解bind_host的功能,它是指:

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

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

所以我想知道为什么需要设置network.bind_host,是否可能将network.bind_hostnetwork.publish_host设置为不同的值?

5个回答

14

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

我在数据中心拥有一个本地网络,其中运行着由不同节点组成的Elasticsearch集群。这意味着每台Elasticsearch机器都有两个IP地址,一个用于从外部机器访问它,另一个用于在同一网络中本地连接其他机器。

内部IP(eth1)用于让Elasticsearch的不同节点互相通信、发现等等,而外部IP地址(eth0)则是我的Web应用程序所在的另一个网络向其发出请求的地址。

因此简单来说,bind_host(两个IP都是我的情况下的默认值0.0.0.0,即绑定所有接口)是Elasticsearch侦听和发布的位置,而publish_host(我的情况下是内部IP)则是Elasticsearch与其他集群组件进行通信的位置。

这样,我的Web应用程序在另一个网络中,可以通过bind_host地址访问ES集群,而Elasticsearch则使用publish_host与集群通信。


12
以下设置应该能起到作用。它接受来自任何IP的连接(绑定),并将其自身IP配置为第一个可用网络接口中第一个非环回地址。
network.bind_host: "0.0.0.0"
network.publish_host: _non_loopback:ipv4_

要查看更多选项,请查看文档


我无法找到存放network.bind_host的文件? - Rizwan Patel
请查看“高级网络设置”部分。 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#advanced-network-settings - mvallebr
当我尝试访问http:// localhost:9200 /时,elasticsearch(5.6.9)服务停止运行。 - valijon

12

据我所知,并且使用电话呼叫类比:

  • publish_host 的意思是:“用这个号码给我打电话”
  • bind_host 的意思是:“我会在这个号码上接听电话”

publish_host: _non_loopback:ipv4_ 可以理解为:“用我正在拨打你的任何号码给我打电话”


7

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

publish_host设置控制Elasticsearch向其他成员公布的IP地址。这必须是实际的IP地址,是其他集群成员用来与ES节点通信的地址。

如果您需要在多主机服务器上执行特殊操作,则可以将bind_host和publish_host设置为不同的值。大多数用例不需要这样做,因此network.host设置同时控制两者。


1

通过API检查此值:

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

请注意主机名将被解析(因此永远不会公开)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接