INFINI Easysearchの簡易導入と実験

INFINI Easysearchは、Apache Luceneをベースにした分散型の近似リアルタイム検索および分析エンジンです。この製品は、Elasticsearchの代替として軽量で自主制御可能なソリューションを提供することを目的としており、企業向けの機能をさらに拡充し続けることを目指しています。Elasticsearchとの比較において、Easysearchは検索業務の最適化に重点を置き、シンプルで使いやすい製品設計を維持しています。

EasysearchはElasticsearchのDSLクエリ構文をネイティブにサポートしており、既存のコードを変更することなくシームレスな移行が可能です。また、SQLクエリもサポートしており、SQLに慣れた開発者にとってデータ分析がより簡単になります。さらに、ElasticsearchのSDKや既存のインデックスストレージ形式にも互換性があり、冷熱アーキテクチャやインデックスライフサイクル管理をサポートし、データのスムーズな連携が可能になります。

インストール

インストールスクリプト

LinuxまたはMacでは、1つのスクリプトでインストールできます。

curl -sSL http://get.infini.cloud | bash -s -- -p easysearch

また、バイナリ形式のインストーラーも用意されています。

Java環境の設定を避けたい場合に利用できるものもあります。 https://release.infinilabs.com/easysearch/stable/bundle/

Dockerによる展開

公式にはDocker Composeの例が用意されており、3つのサービスがあります。

  • easysearch-node1
  • easysearch-node2
  • console

以下に詳細を示します。

バージョン制御:

  • version: '3' は、Docker Composeファイルのバージョン3を使用するという意味です。

サービス定義:

  • easysearch-node1とeasysearch-node2:

    • これらのサービスは、同じDockerイメージinfinitlabs/easysearch:latestを使用して2ノードのクラスターを構成します。
    • コンテナーランタイムではユーザーIDとグループID602:602を使用します。
    • Java仮想マシンのメモリを構成するES_JAVA_OPTS環境変数を設定します。
    • ulimitsオプションによりメモリロックとファイルディスクリプタの制限を設定し、パフォーマンスを向上させます。
    • コンテナ内のコンフィギュレーション、データ、ログディレクトリはホストディレクトリにマウントされ、データの永続化が可能になります。
    • 特定のポートが公開され、外部からコンテナ内のサービスにアクセスできます。
    • 2つのノードはesnetというカスタムネットワークに参加します。
  • console:

    • このサービスは、画像infinilabs/console:1.26.0-1552を使用します(latestがないため、手動で特定のバージョン番号に変更する必要があります)。
    • 同様に、データとログディレクトリをホストにマウントします。
    • Webインターフェースへのアクセスに9000ポートが公開されます。
    • easysearch-node1とeasysearch-node2への通信を簡略化するためにlinks機能を使用します。
    • TZ環境変数をAsia/Shanghaiに設定します。

ネットワーク構成:

  • esnetネットワークはbridgeドライバを使用し、隔離されたネットワーク環境を提供します。サブネット172.24.0.0/16を設定し、サービス間のネットワーク通信を確保します。
version: '3'
  services:
    easysearch-node1:
      user: "602:602"
      image: infinilabs/easysearch:latest
      container_name: easysearch-node1
      hostname: easysearch-node1
      environment:
        - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      ulimits:
        memlock:
          soft: -1
          hard: -1
        nofile:
          soft: 65536
          hard: 65536
      volumes:
        - $PWD/ezs1/config:/app/easysearch/config
        - $PWD/ezs1/data:/app/easysearch/data
        - $PWD/ezs1/logs:/app/easysearch/logs
      ports:
        - 9201:9200
        - 9301:9300
      networks:
        - esnet
    easysearch-node2:
      user: "602:602"
      image: infinilabs/easysearch:latest
      container_name: easysearch-node2
      hostname: easysearch-node2
      environment:
        - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      ulimits:
        memlock:
          soft: -1
          hard: -1
        nofile:
          soft: 65536
          hard: 65536
      volumes:
        - $PWD/ezs2/config:/app/easysearch/config
        - $PWD/ezs2/data:/app/easysearch/data
        - $PWD/ezs2/logs:/app/easysearch/logs
      ports:
        - 9202:9200
        - 9302:9300
      networks:
        - esnet
    console:
      image: infinilabs/console:1.26.0-1552
      container_name: console
      hostname: console
      volumes:
        - $PWD/console/data:/data
        - $PWD/console/log:/log
      networks:
        - esnet
      ports:
        - 9000:9000
      links:
        - easysearch-node1:es1
        - easysearch-node2:es2
      environment:
        - TZ=Asia/Shanghai

  networks:
    esnet:
      driver: bridge
      ipam:
        config:
          - subnet: 172.24.0.0/16

公式には詳細なコマンドが提示されているため、docker-compose upコマンドで簡単に代替可能です。他のスクリプトについては以下の通りです:

init.sh

#!/bin/bash

# 現在のスクリプトの絶対パスを取得

CUR_DIR=$(cd $(dirname $0); pwd)

# 必要なディレクトリ構造を作成

mkdir -p $CUR_DIR/console/{data,log}
mkdir -p $CUR_DIR/{ezs1,ezs2}/{data,logs}

# ディレクトリの所有者と権限を設定

chown -R 1000:1000 $CUR_DIR/console
chown -R 602:602 $CUR_DIR/{ezs1,ezs2}
chmod -R 0600 $CUR_DIR/{ezs1,ezs2}/config

# configディレクトリのサブディレクトリの権限を設定

find $CUR_DIR/{ezs1,ezs2}/config -type d -print0 | xargs -0 chmod 750

reset.sh

#!/bin/bash

# 現在のスクリプトの絶対パスを取得

CUR_DIR=$(cd $(dirname $0); pwd)

# 確認関数の定義
function confirm() {
  display_str=$1
  default_ans=$2
  if [[ $default_ans == 'y/N' ]]; then
     must_match='[yY]'
  else
     must_match='[nN]'
  fi
  read -p"${display_str} [${default_ans}]:" ans
  [[ $ans == $must_match ]]
}

# 全てのデータを削除するか確認
confirm "危険警告:すべてのデータを削除します!!" 'y/N' && echo || exit

# console、ezs1、ezs2のデータとログファイルを削除
rm -rvf $CUR_DIR/console/{data,log}/*
rm -rvf $CUR_DIR/{ezs1,ezs2}/{data,logs}/*

start.sh

#!/bin/bash

# Docker Composeでezs2プロジェクトのサービスを起動
docker-compose -p ezs2 up

stop.sh

#!/bin/bash

# Docker Composeでezs2プロジェクトのすべてのサービスを停止し削除
docker-compose -p ezs2 down

自分のパソコンでコンテナが正常に起動していることが確認できました。

https://infinilabs.cn/docs/latest/easysearch/getting-started/install/docker-compose/

コンソール接続

クラスター接続パラメータを設定し、例えばドメインとポート、ユーザー名とパスワードを指定します。

初期化を行い、インデックスを作成し、サンプルデータを書き込みます。

バックエンド管理のパスワードを設定し、後ほどこのパスワードでコンソールにログインします。

設定を確認し、クラスターの関連付けを行います。

これはバックエンド管理画面であり、ユーザー名とパスワードだけでなく、シングルサインオンもサポートしています。

エンジン間、バージョン間、クラスター間での一括処理!

ポータルを使ってノード数を確認できます。

RESTスタイルのAPIもサポートしており、クエリが可能です。

続いて、コンソールでAmazon OpenSearchに接続します。

クラスターのURL、ユーザー名、パスワードを入力します。

これにより、クラスターの情報、例えばアドレス、バージョン、クラスター状態、ノード数などを取得できます。

最後に接続成功のメッセージを見ることができます。

クラスター管理では、Easysearchのクラスターと先ほど追加したOpenSearchのクラスターが表示されます。

オープンソースですか?現在はソースコードは公開されていません。

作者:韓旭、アマゾンクラウド技術サポート、アマゾンクラウドテクノロジー技領雲ブロガー、現在はクラウドコンピューティング開発とビッグデータ分野に注力しています。

Easysearchに関する投稿キャンペーン

あなたがEasysearchの古いユーザーであっても、初めて聞いたことであっても、INFINI LabsのEasysearch製品に興味がある人、またはEasysearchについて知りたい人は、このイベントに参加できます。

詳細は:Easysearch投稿キャンペーン

タグ: INFINI Easysearch Docker Search Engine Cluster Setup Data Analysis

6月27日 17:37 投稿