【问题标题】:Elasticsearch: Several independent nodes in the same machineElasticsearch:同一台机器上的几个独立节点
【发布时间】:2019-07-15 08:37:01
【问题描述】:

我们当前的软件解决方案使用本地 ES 安装(1 个集群和 1 个节点)来存储文档,以便以后用户能够搜索它们。节点的摄取不是连续完成的,但假设每月一次使用批量。文档集不是很大,文档的大小很小。该解决方案在普通笔记本电脑(配备 8Gb RAM 的 i5)中正常运行,没有问题,因为该用例不需要很高的性能。

现在我们的软件解决方案面临两个新要求:

  1. 应该为其他客户打上品牌
  2. 同一最终用户(使用同一台机器)应该能够处理我们解决方案的多个实例(来自不同客户)

由于这两个新要求,当前的解决方案无法使用,因为所有文档都将使用相同的索引在同一节点中进行索引。进一步搜索将显示来自不同客户的文档。

解决此问题的第一种方法是根据客户对文档进行索引,即为每个客户创建索引并在相应索引上创建索引/搜索文档。但是,我们正在考虑另一种解决方案,以实现以下目标:

  • ES 索引信息必须从系统中轻松删除(即通过删除数据文件夹)
  • 每个客户都可能希望使用我们解决方案的更新版本(即使用 ES 7),而其他客户将继续使用旧版本(即 ES 6)

基于此,我认为解决方案是在同一台 PC 上安装多个 ES,每个都具有其客户相关配置:

  • 不同的集群
  • 不同的节点名称和端口
  • 不同的 ES 版本

那么我的问题是,有没有人遇到过类似的用例?安装几个 ES 让他们的服务同时连续运行会不会是性能问题?使用此配置可​​能会出现哪些问题?

任何帮助将不胜感激。


更新

根据收到的答案以及未来可能的答案,我想进一步澄清一下我们的解决方案 + ES 的架构:

  • 我们的解决方案是在普通笔记本电脑上执行的桌面应用程序
  • 单用户
  • 即使在 PC 中安装了多个客户特定的解决方案,一次也只有一个处于活动状态
  • 当用户想要搜索特定文档时会偶尔执行搜索(就像有人打开 Wikipedia 搜索文章一样)

所以主题...

  • 基础设施故障
  • 数据复制
  • 高搜索需求下的性能

... 不重要

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以在生产中的同一台机器上运行多个 ES 安装,但它有很多缺点。

    1. 理想情况下,您应该至少有 1 个分片副本,并且它应该存在于另一台物理机(节点)中,以便在基础设施出现故障的情况下可以恢复,这样做是为了提高您的弹性系统。

    2. 在生产中,经常会遇到这样一个用例,其中只有一个分片是不够的,您需要将索引分成多个主分片以使其水平可扩展,但如果您只使用 1 台物理服务器,那么拥有多个分片将无济于事。

    3. 在一个安装中存在大量流量并且消耗所有物理资源(如 RAM、CPU、磁盘)并导致所有安装在生产中停止的情况下,多个安装也无济于事.它也变得难以隔离根本原因并快速解决问题,因为 ES 安装不是无状态的,您不能在另一台机器上启动相同的安装,而不移动其所有数据和配置。

    基本上,您的系统是真正基于租户的 SAAS 应用程序,通过研究您的需求,您应该在设计系统时考虑以下因素:

    1. 升级 ES 版本有时不是很简单,它还涉及对应用程序代码的大量重大更改,仅使用最新版本运行的集群无法解决问题。因此,您的应用程序应该公开租户(您的客户)注册 API,该 API 还接受客户想要使用的 ES 版本,并相应地由您的代码处理。
    2. ES 索引信息必须从系统中轻松删除 :- 我没有得到这里的问题,您可以使用 ES API 删除它,这是推荐的方法,而不是手动完成。

    希望我的回答对您来说很清楚,如果我错过了您的任何要求并且您需要进一步澄清,请告诉我。

    根据我在以下几点添加的问题的更新:

    1. 正如 OP 提到的它是一个非常小的桌面应用程序而不是服务器端应用程序,因此不要混合和存储每个客户的内容是非常重要的。任何人都可以像https://github.com/lmenezes/cerebro一样安装ES web admin插件并读取其他客户的数据。

    2. 在您的情况下,最好的解决方案是根据客户指定的版本安装 ES,并且只有 1 个与运行桌面应用程序的客户相关的索引。您可以轻松地使用我之前提到的删除 API。

    根本不需要进行多次安装,即使它们不会处于活动状态,但它们仍然会消耗本地磁盘空间(这在桌面应用程序的情况下更为重要)并可能导致@ 987654323@ 和 this 问题,它的设计一点也不干净,无法在桌面应用程序上存储不必要的信息,还会导致安全问题,这通常是更大的问题。

    【讨论】:

    • 非常感谢您花时间回答。我理解你所说的关于可扩展性的缺点。但是,我们的用例非常“简单”,这些主题对我们来说并不重要。我更新了这个问题,澄清了架构的外观。
    • @AlejandroGonzález,感谢您的澄清,但除了 ES 版本,您还有哪些设计选择可以不考虑客户的不同指标
    • 另一个原因是能够通过直接删除数据文件夹的内容而不使用任何 API 从 ES 中删除信息。 AFAIK,在信息混杂的情况下,很难知道要删除什么。
    • @AlejandroGonzález,很抱歉延迟响应,但是当您为每个客户都有单独的索引时,您可以使用我之前提到的删除 API 轻松删除客户索引,ES 创建单独的分片(每个索引物理存储在不同的文件中),因此您的信息不会混合。
    • @AlejandroGonzález 另外,我根据您的更新更新了我的答案,请随时提出任何问题,如果您喜欢我的答案,请不要忘记投票并接受它
    猜你喜欢
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多