解决 Windows SMB 和 Windows 上 Java 的 Bug

编辑

解决 Windows SMB 和 Windows 上 Java 的 Bug

编辑

当使用基于 SMB 协议(例如 Azure 文件服务)的共享文件系统来存储索引时,Lucene 打开索引段文件的方式是使用只写标志。这是打开文件的正确方式,因为这些文件只会用于写入操作,并且允许不同的文件系统实现对其进行优化。遗憾的是,在 Windows 上使用 SMB 时,这会禁用缓存管理器,导致写入速度变慢。这已经在 LUCENE-6176 中进行了描述,但它会影响那里每一个 Java 程序!这个问题需要在 ES 和/或 Lucene 之外解决,要么在 Windows 中,要么在 OpenJDK 中。目前,我们正在提供实验性支持,以读取标志打开文件,但这应被视为实验性的,正确的修复方式是在 OpenJDK 或 Windows 中。

Store SMB 插件提供了两种针对 SMB 优化的存储类型

smb_mmap_fs
默认 mmap fs 的 SMB 特定实现
smb_simple_fs
deprecated::[7.15,"smb_simple_fs 已弃用,将在 8.0 中移除。请改用 smb_nio_fs 或其他文件系统。"]
smb_nio_fs
默认 nio fs 的 SMB 特定实现

要使用这些特定的存储类型之一,您需要安装 Store SMB 插件并重启节点。然后配置 Elasticsearch 以设置您想要的存储类型。

可以通过在 elasticsearch.yml 文件中添加以下内容来为所有索引配置此项

index.store.type: smb_nio_fs

请注意,设置将应用于新创建的索引。

也可以在索引创建时为每个索引设置

PUT my-index-000001
{
   "settings": {
       "index.store.type": "smb_mmap_fs"
   }
}