elasticsearch:在多个磁盘卷上分配索引

car*_*arl 7 elasticsearch

我有一个非常大的索引(大约100Gb),所以我不得不通过添加另一个卷来扩展我的数字海洋调查中的磁盘空间(我只在一个节点上运行所有内容).我告诉elasticsearch它现在必须考虑两个磁盘位置

/usr/share/elasticsearch/bin/elasticsearch -Epath.data=/var/lib/elasticsearch,/mnt/volume-sfo2-01/es_data
Run Code Online (Sandbox Code Playgroud)

elasticsearch确实注意到了这一点,因为它写了一些东西到新的位置

/mnt/volume-sfo2-01/es_data# cd nodes/
/mnt/volume-sfo2-01/es_data/nodes# ls
0
/mnt/volume-sfo2-01/es_data/nodes# cd 0/
/mnt/volume-sfo2-01/es_data/nodes/0# ls
indices  node.lock  _state
/mnt/volume-sfo2-01/es_data/nodes/0# cd indices
/mnt/volume-sfo2-01/es_data/nodes/0/indices# ls
DixLGLrJRXm1gSYcFzkzzw  nmZbce8wTayJC2s_eMC0-g  Qd-9ZnFIRoSM2z7AohKm-w  Sm_tyYTJTty0ImvDamFaQw
/mnt/volume-sfo2-01/es_data/nodes/0/indices# cd DixLGLrJRXm1gSYcFzkzzw/
/mnt/volume-sfo2-01/es_data/nodes/0/indices/DixLGLrJRXm1gSYcFzkzzw# ls
_state
Run Code Online (Sandbox Code Playgroud)

这与我在/ var/lib/elasticsearch/data中找到的内容完全相同,除了最低级别的实际索引信息.

阅读elasticsearch纪录片我得到的印象是elasticsearch正在两个磁盘位置上安排新索引,但不会在两个位置之间拆分碎片.因此,我使用5个分片初始化索引,以便它可以在卷之间分割数据.

自日志文件显示以来,调查似乎确实检测到了两条数据路径

[2017-06-17T19:16:57,079][INFO ][o.e.e.NodeEnvironment    ] [WU6cQ-o] using [2] data paths, mounts [[/ (/dev/vda1), /mnt/volume-sfo2-01 (/dev/sda)]], net usable_space [29.6gb], net total_space [98.1gb], spins? [possibly], types [ext4]
Run Code Online (Sandbox Code Playgroud)

但是,当我索引新索引时,不断使用原始磁盘上的所有磁盘空间并最终耗尽磁盘空间并出现错误

raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
elasticsearch.exceptions.TransportError: TransportError(500, u'index_failed_engine_exception', u'Index failed for [pubmed_paper#25949809]')
Run Code Online (Sandbox Code Playgroud)

它永远不会将其中一个分片移动到第二个卷?我想念什么吗?我可以手动指导磁盘空间使用吗?

以下是elasticsearch版本的详细信息:

# curl -XGET 'localhost:9200'
{
  "name" : "WU6cQ-o",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hKc147QfQqCefLliStLNtw",
  "version" : {
    "number" : "5.1.1",
    "build_hash" : "5395e21",
    "build_date" : "2016-12-06T12:36:15.409Z",
    "build_snapshot" : false,
    "lucene_version" : "6.3.0"
  },
  "tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)

这里是默认路径文件结构,其中ekasticsearch存储所有信息(而不是与第二条路径共享)

/var/lib/elasticsearch/elasticsearch/nodes/0/indices/DixLGLrJRXm1gSYcFzkzzw# ls
0  1  2  3  4  _state
Run Code Online (Sandbox Code Playgroud)

一个问题可能是我是否可以采取其中一个碎片并将其移动到另一个位置?

Bha*_*oya 0

您可以做的是,向您的系统添加一个 1TB 大小的硬盘并将 100GB 的数据复制到新硬盘并更新您的数据目录位置以指向新硬盘,不要给出两个路径,否则它将尝试将数据写入也是旧路