Elasticsearch:同一台计算机中的多个独立节点

时间:2019-07-15 08:37:01

标签: elasticsearch

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

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

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

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

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

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

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

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

那么我的问题是,有人遇到过类似的用例吗?通过安装多个ES并同时使其服务连续运行会导致性能问题吗?使用此配置可​​能会出现哪些问题?

任何帮助将不胜感激。


更新

根据收到的答案以及未来可能的答案,我想进一步说明我们的解决方案+ ES的体系结构:

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

主题是...

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

...不是很关键

1 个答案:

答案 0 :(得分:3)

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

  1. 理想情况下,您应该至少有一个碎片副本,并且该碎片应该存在于另一台物理计算机(节点)中,以便在基础结构发生故障的情况下可以恢复,这是为了提高您的弹性系统。

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

  3. 在一个安装中有大量流量的情况下,进行多个安装也无济于事,它会消耗所有物理资源(如RAM,CPU,磁盘),并使所有安装也停止生产。由于ES安装不是无状态的,而且您不能仅在另一台计算机上开始同一安装,而又不移动其所有数据和配置,因此很难找出根本原因并迅速解决问题。

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

  1. 有时升级ES版本不是一件容易的事,而且您的应用程序代码也涉及许多重大更改,仅运行最新版本的集群无法解决问题。因此,您的应用程序应公开承租人(您的客户)注册API,该API还可以获取要使用的ES客户版本,并由您的代码进行相应处理。
  2. 已建立索引的ES信息必须从系统中轻松删除:-我在这里没有得到什么问题,您可以使用ES API删除它,这是推荐的方式这样做,而不是手动进行。

希望您的回答很清楚,如果我错过了您的要求,请告诉我。

基于我要添加的问题的最新信息:

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

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

根本不需要进行多次安装,即使它们不会处于活动状态,但仍然会占用本地磁盘空间(对于台式机应用程序,这尤其重要),并且可能导致{ {3}}和this问题,并且根本没有更干净的设计来将不必要的信息存储在桌面应用程序上,并且还引起了一个安全问题,这通常是一个更大的问题。