【问题标题】:Multiple nodes in ElasticSearchElasticSearch 中的多个节点
【发布时间】:2019-12-19 16:01:58
【问题描述】:

如何在我的 ElasticSearch 中拥有多个节点?我在 elasticsearch.yml 中使用以下内容,但只有最后一个节点启动,浏览器抱怨:The page at file://localhost/ says: undefined

node.name: "No Data"
node.master: true
node.data: false

node.name: "Data One"
node.master: false
node.data: true

node.name: "Data Two"
node.master: false
node.data: true

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    我认为最简单的方法是在命令行中指定这些参数。要启动三个节点,您只需要在 elasticsearch 主目录中运行以下三个命令:

    $ bin/elasticsearch -Des.node.data=false -Des.node.master=true -Des.node.name=NoData
    $ bin/elasticsearch -Des.node.data=true -Des.node.master=false -Des.node.name=DataOne
    $ bin/elasticsearch -Des.node.data=true -Des.node.master=false -Des.node.name=DataTwo
    

    另一种解决方案是创建3个不同的配置文件并使用-Des.config=path-to-config-file参数启动三个节点。

    【讨论】:

    • 太好了,我能够以这种方式启动它们,并且“概述”页面显示了所有三个节点。但是集群健康是红色的,我的索引都是未分配的。
    • 抱歉,没有意识到它是在现有集群上完成的。发生这种情况是因为您之前已经将数据节点作为第一个节点启动。因此,您的所有数据都存储在目录data/elasticsearch/0 中。现在您首先启动了 master,它“占用”了这个目录,但是因为它是非数据节点,所以它不能使用那里的数据。您可以关闭所有节点,将目录0 重命名为1,将1 重命名为0,然后以相同的顺序重新启动所有节点。这样,您的数据将位于开始第二个的节点中。如果数据很重要,最好在开始之前制作目录 0 的额外副本。
    • 感谢您的解释。我按照你说的重新启动它,所有节点都加载正常,但它们没有加载数据,所以我删除了索引目录(数据并不重要),重新启动,现在当我再次加载数据时,它正在两个数据节点之间分布.正是我想要的。再次感谢!
    • 那么您将如何从您的 elasticsearch 客户端访问不同的节点?它们只是在不同的端口上吗?
    • 抱歉,这可能是一个愚蠢的问题。我认为对于我想要完成的事情,我只需要按照他们在这里所说的创建单独的索引:stackoverflow.com/questions/11404637/…
    【解决方案2】:

    首先,您应该尝试使用 [http://localhost:9200/][1],如果您使用的是默认端口绑定。

    我会将您的主节点设置为数据节点,没有理由不这样做。如果您尝试在一台机器上启动 3 个节点。但是,在同一台机器上启动 3 个节点除了实验之外没有任何意义。你想完成什么?

    【讨论】:

    • 只是在本地尝试一下,看看它是如何工作的。稍后我将在一些服务器上对其进行测试,看看是否有没有数据主节点“将成为集群的“协调者””的任何好处
    • 好的,很酷。根据我的经验,拥有“无数据”主节点的唯一优势是您将为协调器的机器提供一致的 ip/dns。因为如果您将所有数据节点都运行为也可成为主节点,那么显然它们中的任何一个都可以随时成为主节点,您需要弄清楚当前是哪个节点:)。
    • 感谢您的评论。我确实测试了新设置(1 个没有数据节点作为主节点,2 个数据节点禁用了 http)并将其性能与我当前的设置(3 个数据节点)进行了比较,它在读取和写入方面的表现都更差。我的猜测是让一个节点充当“负载均衡器”是一种浪费——它作为另一个数据节点更有用。
    • “我会将您的主节点设置为数据节点,没有理由不这样做” - 如果您正在运行一个非常大的索引(数十亿条记录),那么有充分的理由不将主节点用作数据节点。请参阅speakerdeck.com/player/dbd4429ac6f446fd9a67781df52b7300?# 上的幻灯片 9
    【解决方案3】:

    在 windows 6.x 版本中,命令属性更改为

    elasticsearch -EsomeYamlPropety=someValue
    

    首先您需要将 elasticsearch.yml 属性更改为:

    http.port: 9200-9299
    transport.tcp.port: 9300-9399
    node.max_local_storage_nodes: 2
    

    因为您无法在单个端口上运行节点,并且当我尝试使用带有参数 -Ehttp.port=9201 的命令时,节点彼此无法看到,它们创建了两个具有相同名称的不同集群.

    通过标准命令运行第一个节点:

    .\bin\elasticsearch
    

    通过带有属性的命令运行第二个节点:

    .\bin\elasticsearch -Enode.name=NodeTwo -Enode.master=false
    

    【讨论】:

      【解决方案4】:

      要在一台机器上运行 3 个 elasticsearch 节点,您应该在每个节点的 elasticsearch.yml 文件中使用这些配置:

      对于主节点:

      cluster.name: mycluster
      node.name: "node1"
      node.master: true
      node.data: true
      network.host: 127.0.0.1
      http.port: 9200-9299
      transport.tcp.port: 9300-9399
      discovery.zen.minimum_master_nodes: 2
      

      对于数据节点:

      cluster.name: mycluster
      node.name: "data-node-name"
      node.master: false
      node.data: true
      network.host: 127.0.0.1
      http.port: 9200-9299
      transport.tcp.port: 9300-9399
      discovery.zen.minimum_master_nodes: 2
      

      然后你应该运行每个节点:

      cd path/to/elasticsearch/bin
      path\bin>elasticsearch.bat
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 2020-09-12
        • 1970-01-01
        • 2016-07-01
        • 2018-10-29
        • 1970-01-01
        相关资源
        最近更新 更多