什么时候启动其他Elasticsearch节点?

gdm*_*gdm 35 sharding bigdata elasticsearch

我正在尝试用Elasticsearch替换Solr设置.这是一个新的设置,还没有看到生产,所以我有很多空间摆弄东西,让他们运作良好.

我有非常非常大量的数据.我正在索引一些实时数据并持续7天(通过使用_ttl字段).我不在索引中存储任何数据(并禁用_source字段).我希望我的指数稳定在200亿左右.我将把这些数据放入2-3个命名索引中.到目前为止,搜索性能高达几十亿行是完全可以接受的,但索引性能是一个问题.

我对ES如何在内部使用分片感​​到有些困惑.我创建了两个ES节点,每个节点都有一个单独的数据目录,每个节点有8个索引和1个副本.当我查看群集状态时,我只看到每个节点有一个分片和一个副本.每个节点是否保持内部运行多个索引?(检查磁盘存储位置显示肯定只有一个Lucene索引存在). - 已解决,因为我的索引设置未从配置中正确选取.使用API​​创建索引并指定分片和副本的数量现在已经产生了我期望看到的内容.

此外,我尝试运行相同ES节点的多个副本(来自相同的配置),并且它识别出已经存在副本并且创建其自己的工作区域.这些新的节点实例似乎也只有一个索引在磁盘上. - 既然每个节点实际上都在使用多个索引,那么具有多个索引的单个节点就足以限制整个系统,因此这不是问题.

何时启动其他Elasticsearch节点,以获得最大的索引性能?我应该有多个节点,每个节点运行1个索引1副本,或更少的节点有多吨索引?为了让单个节点做更多的工作,我的配置是否缺少一些东西?

另外:是否有任何指标可用于了解何时仅HTTP节点过载?现在我只有一个节点专门用于HTTP,但除了CPU使用情况之外,我无法判断它是否正常.什么时候启动其他HTTP节点并将索引软件拆分为指向各个节点?

jav*_*nna 79

让我们首先澄清术语:

  • 节点:运行的Elasticsearch实例(java进程).通常每个节点都在自己的机器上运行.
  • 群集:具有相同群集名称的一个或多个节点.
  • 索引:或多或少像数据库.
  • 类型:或多或少像数据库表.
  • 碎片:实际上是一个lucene指数.每个索引都由一个或多个分片组成.分片可以是主分片(或简称分片)或副本.

创建索引时,可以指定每个分片的分片数和副本数.默认值为每个分片5个主分片和1个副本.分片自动均匀分布在群集上.永远不会在相关主分片所在的同一台机器上分配副本分片.

您在群集状态中看到的内容很奇怪,我建议您使用get settings API检查索引设置.看起来您只配置了一个分片,但无论如何,如果您有多个索引,您应该会看到更多分片.如果您需要更多帮助,可以发布从elasticsearch获得的输出.

您使用多少个分片和副本实际上取决于您的数据,访问方式以及可用节点/服务器的数量.最好的做法是稍微分配一些分片,以便在您向群集中添加更多节点时重新分配它们,因为一旦创建索引,您就不能(现在)更改分片数.否则,如果您愿意对数据进行完整的重新索引,则可以随时更改分片数.

每个额外的分片都带有成本,因为每个分片实际上是一个Lucene实例.每台机器可以拥有的最大分片数实际上取决于可用的硬件和数据.很高兴知道每个分片有100个索引或100个分片有一个索引真的是相同的,因为在这两种情况下你都有100个lucene实例.

当然,在查询时,如果要查询由100个分片组成的单个elasticsearch索引,弹性搜索将需要查询它们以获得正确的结果(除非您使用特定的文档路由,然后仅查询特定的分片).这会产生性能成本.

您可以使用群集节点信息API轻松检查群集和节点的状态,通过它可以检查大量有用信息,以便了解节点是否正常运行.更简单的是,有一些插件可以通过一个漂亮的用户界面检查这些信息(无论如何内部使用elasticsearch API):paramedicbigdesk.

  • 除了上面提到的ElastiSearch工具,我还可以推荐:http://mobz.github.com/elasticsearch-head/.在我的案例中仍在不断发展但经过生产测试. (4认同)