t3g/elasticorn

基于 elastica 的 elasticsearch 管理器

7.0.2 2022-01-19 09:08 UTC

This package is auto-updated.

Last update: 2024-09-13 10:14:08 UTC


README

Scrutinizer Code Quality build Status

Elasticorn 是一个基于 elastica 的 elasticsearch 管理器。其主要功能是数据重映射的零停机时间。兼容性

  • 1.x 版本的发布与 elasticsearch 2.x 兼容。
  • 5.x 版本的发布与 elasticsearch 5.x 兼容。
  • 7.x 版本的发布与 elasticsearch 7.x 兼容。

特性

  • 索引的零停机时间重映射(包括数据传输)
  • 基于配置文件初始化索引
  • 显示和比较映射配置

零停机时间重映射 - 工作原理

Elasticorn 使用别名来允许索引的零停机时间重映射。对于每个配置的索引,Elasticorn 创建一个 index_a 和 index_b,并使用别名指向当前活动索引。在应用新映射时,当前不活动的索引将被删除并使用新映射重新创建。然后,数据从旧索引复制到新索引。数据传输成功完成后,别名指向新索引。

步骤分解

  • 您应用程序的索引名称与您的配置不同。
  • 您应用程序的索引实际上有两个独立的索引,您配置的索引名称只是指向当前活动索引的别名。我们称另一个索引为“备用索引”。
  • 当更改索引的映射时,该索引的所有数据都必须被删除,因为您的映射可能会影响之前分析数据的方式。
  • Elasticorn 将确定在运行之间您的映射是否已更改
  • Elasticorn 将确定当前活动索引并切换到备用索引
  • Elasticorn 然后将新映射应用到备用索引上
  • Elasticorn 将从活动索引复制所有数据到(新映射的)备用索引。这将按预期再次分析您的数据。
  • 完成后,Elasticorn 将将别名从“旧”活动索引更改为“旧”备用索引。这样,备用索引就成为了新的活动索引。
  • Elasticorn 将删除“旧”活动索引中的所有数据以释放资源。
  • 由于切换别名是一个原子操作,您的用户将不会经历任何停机时间。
  • 享受为您的用户提供出色的服务。

安装

基于 Composer

composer require t3g/elasticorn

Elasticsearch 客户端配置

Elasticorn 假设默认连接参数用于建立与 elasticsearch 的连接。如果您使用的是非默认设置,您可以在 .env 文件中配置这些连接设置。有关详细信息,请参阅以下内容。

索引和映射配置

为了使 Elasticorn 的工作,您的配置需要以下结构和定义 yaml。

- MAIN configuration directory
  - Elasticorn.yaml*
  - IndexName directory
    - IndexConfiguration.yaml (Containing index settings)
    - Mapping.yaml (Containing mapping configuration)

* 可选

示例

project
│   README.md    
└───Elasticorn
	└── t3_forger_issue
    		├── Mapping.yaml
    		└── IndexConfiguration.yaml
	└── t3_forger_review
    		├── Mapping.yaml
    		└── IndexConfiguration.yaml
    └── t3_forger_user
        ├── Mapping.yaml
        └── IndexConfiguration.yaml

在我们的案例中,Elasticorn 包含有关我们索引的所有信息。可以通过创建新文件夹来管理多个索引。

IndexConfiguration.yaml 文件指定索引的配置参数(例如分片或副本。)

名为 Mapping.yaml 的文件包含我们的类型映射。

语法是相当直接的 yaml 语法,然后将其解析为数组。

我们将在这里查看 Mapping.yaml

id:
  type: integer
username:
  type: string
  index: not_analyzed
  store: true
fullname:
  type: string
  index: not_analyzed
  store: true
email:
  type: integer
  index: not_analyzed
  store: true
avatar:
  type: string

有关配置应如何查看的示例,请参阅此项目 Tests/Fixtures/Configuration 文件夹。有关可用配置选项的列表,请参阅 elastica 文档。

您可以使用 .env 文件、命令行参数或交互式控制台来指定您的配置目录。

.env 配置

您可以在 .env/.env.dist 文件中指定您的配置目录以及特定的连接参数,这些文件应放置在 Elasticorn 运行的文件夹中。以下变量可以进行配置

configurationPath=
ELASTICA_HOST=
ELASTICA_PORT=
ELASTICA_PATH=
ELASTICA_URL=
ELASTICA_TRANSPORT=
ELASTICA_PERSISTENT=
ELASTICA_TIMEOUT=
ELASTICA_USERNAME=
ELASTICA_PASSWORD=

配置语言

如果您的设置符合以下基本条件,Elasticorn 可以自动为每种语言生成索引

  • 每种语言一个索引
  • 在您的配置中为每个字段配置了默认语言分析器
  • 文档只包含一种语言

如果这些条件匹配,请在每个索引目录中添加一个名为 "Elasticorn.yaml" 的配置文件,例如,使用以下配置

languages:
  - english
  - german
  - french

语言名称必须是 Elasticsearch 中可用的分析器的名称。在索引初始化时,将创建以下索引和别名

Indices:
  - indexname_english_a
  - indexname_english_b
  - indexname_german_a
  - indexname_german_b
  - indexname_french_a
  - indexname_french_b

Aliases:
  - indexname_english
  - indexname_german
  - indexname_french
  - indexname (pointing to first configured language)

初始化后,您可以调用 index:remap 添加更多语言

用法

基于 composer 的使用命令

./elasticorn.php -h

phar 使用命令

./elasticorn.phar -h

命令

  • index:init - 初始化所有配置的索引
  • index:remap - 将新的映射配置应用到现有索引
  • index:cornify - 将传统索引转换为 Elasticorn 索引
  • mapping:compare - 允许比较当前应用的映射和配置的映射
  • mapping:show - 显示当前应用的映射

贡献和问题

欢迎所有贡献。如果您发现任何错误,有问题或只是想请求新功能,请随时将其添加到问题跟踪器。

如果您想从代码方面进行贡献,请fork 存储库并创建一个 pull request。

运行测试

Elasticorn 附带单元测试和验收测试。

单元测试

您可以使用 bin/phpunit -c build/phpunit.xml 运行单元测试套件。

验收测试

注意:验收测试需要一个干净的本机 elasticsearch 实例(localhost:9200)- 如果您配置了其他索引并且还需要,请不要执行这些测试。这些测试在多个位置删除 所有 索引。您可以通过设置 ELASTICA_HOSTELASTICA_PORT 环境变量来配置测试中使用的宿主和端口。要快速启动一个新的 elasticsearch 实例,请使用 docker:docker run --rm -p 9200:9200 elasticsearch:5.6-alpine

您可以使用 bin/behat -c build/behat.yml 运行验收测试套件。

构建 phar