40

我在本地机器上安装了弹性搜索,我想将它配置为集群中唯一的一个节点(独立服务器)。这意味着每当我创建一个新索引时,它只对我的服务器可用。其他服务器将无法访问它。

我目前的场景是这些索引可供其他服务器使用(这些服务器在集群中形成),并且它们可以对我的索引进行任何更改。但我不想要它。

我浏览了其他一些博客,但没有得到最佳解决方案。那么你能告诉我同样的步骤吗?

4

9 回答 9

66

我从http://elasticsearch-users.115913.n3.nabble.com/How-to-isolate-elastic-search-node-from-other-nodes-td3977389.html得到了答案。

Kimchy :您将节点设置为 local(true),这意味着它不会发现使用网络的其他节点,仅在同一个 JVM 中。

在 elasticsearch/bin/elasticsearch.yml 文件中

node.local: true # disable network

为 ES 7.x 更新

在弹性搜索.yml

network.host: 0.0.0.0
discovery.type: single-node

并确保您已关闭cluster.initial_master_nodes

# cluster.initial_master_nodes: ["node-1", "node-2"]

归功于@Chandan。

于 2013-05-08T04:36:46.110 回答
25

elasticsearch.yml

# Note, that for development on a local machine, with small indices, it usually
# makes sense to "disable" the distributed features:
#
index.number_of_shards: 1
index.number_of_replicas: 0

在您的代码中使用相同的配置。

还要隔离节点使用node.local: truediscovery.zen.ping.multicast: false

于 2015-04-29T16:26:53.787 回答
23

以下是 ElasticSearch 5 的相关信息:

根据更改日志,要在 ES 5 上启用本地模式,您需要添加transport.type: local到您的elasticsearch.yml而不是node.local: true.

于 2017-07-23T09:00:55.510 回答
20

如果您打算在单个节点上运行 Elasticseach 并能够将其绑定到公共 IP,则两个重要设置是:

network.host: <PRIVATE IP OF HOST>
discovery.type: single-node
于 2018-08-05T14:27:16.527 回答
14

如果您在代码中使用网络传输,这将不起作用,因为node.local只为您提供 LocalTransport:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-transport.html#_local_transport

诀窍是设置

discovery.zen.ping.multicast: false

在您的elasticsearch.ymlwhich 将停止您的节点寻找任何其他节点。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html#multicast

我不确定这是否会阻止其他节点发现您的节点;我只需要它来影响同一网络上具有相同设置的一组节点。

于 2014-08-15T03:57:51.640 回答
11

我想这样做,而不必在我的容器中写入/覆盖 elasticsearch.yml。这里没有配置文件

在启动 elasticsearch 之前设置环境变量:

discovery.type=single-node

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

于 2018-03-14T20:15:47.553 回答
5

配置文件中,添加:

  • network.host: 0.0.0.0[在网络设置中]
  • discovery.type: single-node[在发现和集群形成设置中]
于 2020-04-27T03:58:44.447 回答
3

这解决了你的问题:

PUT /_all/_settings
{"index.number_of_replicas":0}

使用 ES 版本 5 进行测试。

于 2018-06-04T13:30:57.863 回答
1

所有这些都没有帮助我(遗憾的是我没有阅读 bhdrkn 的答案)。对我有用的是每次我需要一个单独的实例时更改elasticsearch的集群名称,其中新节点不会通过多播自动添加。

只需在 elasticsearch.yml 中更改 cluster.name: {{ elasticsearch.clustername }},例如通过 Ansible。这在构建单独的阶段(如开发、QA 和生产)(这是企业环境中的标准用例)时特别有用。

如果您使用 logstash 将数据输入到 elasticsearch 中,请不要忘记将相同的集群名称放入输出部分,例如:

output {
    elasticsearch {
        cluster => "{{ elasticsearch.clustername }}"
    }
}

否则,您的“logstash-*”-index 将无法正确构建...

于 2015-11-05T13:02:53.703 回答