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设置为不同的值?
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设置为不同的值?
可以将它们设置为不同的值,在某些情况下非常有用。以下是我的用法:
我在数据中心拥有一个本地网络,其中运行着由不同节点组成的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与集群通信。
network.bind_host: "0.0.0.0"
network.publish_host: _non_loopback:ipv4_
要查看更多选项,请查看文档。
据我所知,并且使用电话呼叫类比:
publish_host
的意思是:“用这个号码给我打电话”bind_host
的意思是:“我会在这个号码上接听电话”而 publish_host: _non_loopback:ipv4_
可以理解为:“用我正在拨打你的任何号码给我打电话”
bind_host设置控制Elasticsearch监听的网络接口。因此,在具有多个NIC的计算机上,这将允许您控制ES将绑定到哪个接口。默认值0.0.0.0基本上意味着“绑定到所有”。
publish_host设置控制Elasticsearch向其他成员公布的IP地址。这必须是实际的IP地址,是其他集群成员用来与ES节点通信的地址。
如果您需要在多主机服务器上执行特殊操作,则可以将bind_host和publish_host设置为不同的值。大多数用例不需要这样做,因此network.host设置同时控制两者。
通过API检查此值:
curl http://ES:9200/_cat/master