コンテンツにスキップ

高可用性 OpenSearch

概要

OpenSearch は、Elasticsearch OSS 7.10.2 をベースとしたオープンソースの分散型検索・分析スイートです。インタラクティブなログ分析、リアルタイムアプリケーションモニタリング、データ分析などの基本機能を容易に実行できます。

ノードタイプ 説明 本番環境のベストプラクティス
Cluster manager クラスタ全体の操作を管理し、クラスタの状態を追跡します。これには、インデックスの作成・削除、クラスタに参加・離脱するノードの追跡、各ノードのヘルスチェック(pingリクエストの実行)、ノードへのシャード割り当てが含まれます。 3つの異なるアベイラビリティゾーンに3つの専用クラスタマネージャーノードを配置することは、ほぼすべての本番ユースケースで適切な方法です。この構成により、クラスタがクォーラムを失うことを防ぎます。2つのノードは、障害やメンテナンス時を除き、ほとんどの時間はアイドル状態です。
Cluster manager eligible 投票プロセスにより、そのうちの1つがクラスタマネージャーノードとして選出されます。 本番クラスタでは、専用のクラスタマネージャーノードを用意してください。専用ノードタイプを実現するには、他のすべてのノードタイプをfalseに設定します。この場合、他のすべてのノードをクラスタマネージャー非対象ノードとしてマークする必要があります。
Data データの保存と検索を実行します。ローカルシャード上でデータ関連の操作(インデックス作成、検索、集計)をすべて実行します。これらはクラスタのワーカーノードであり、他のノードタイプより多くのディスク容量を必要とします。 データノードを追加する際は、ゾーン間でバランスを保ってください。例えば、3つのゾーンがある場合、データノードは3の倍数で追加し、各ゾーンに1つずつ配置します。ストレージとRAMが大きいノードを推奨します。
Ingest データをクラスタに保存する前に前処理を実行します。インジェストパイプラインを実行し、データをインデックスに追加する前に変換します。 大量のデータを受信し、複雑なインジェストパイプラインを実行する場合は、専用のインジェストノードを推奨します。また、データノードからインデックス作成をオフロードして、データノードを検索と集計に特化させることもできます。
Coordinating クライアントリクエストをデータノード上のシャードに委任し、結果を収集・集約して最終結果をクライアントに返します。 専用のコーディネート専用ノードを1~2台用意することで、検索負荷の高いワークロードにおけるボトルネックを防ぐことができます。CPUコア数が多いノードを推奨します。
Dynamic 特定のノードを機械学習(ML)タスクなどのカスタムワークに委任することで、データノードからのリソース消費を防ぎ、OpenSearchの機能に影響を与えません。

前提条件

基本情報と互換性

注意

以下の設定情報は、Guance と高可用性 OpenSearch のデプロイシナリオの設定です。

ホスト名 IPアドレス ロール K8s設定 データディスクストレージ
k8s-master 192.168.100.101 k8s,master 4 CPU, 16G MEM, 100G DISK
K8s-node01 192.168.100.102 k8s,node01 4 CPU, 16G MEM, 100G DISK
K8s-node02 192.168.100.103 k8s,node02 4 CPU, 16G MEM, 100G DISK
K8s-node03 192.168.100.104 k8s,node03 4 CPU, 16G MEM, 100G DISK
K8s-node04 192.168.100.105 opensearch,master,coordinating 4 CPU, 16G MEM, 100G DISK /data:20G
K8s-node05 192.168.100.106 opensearch,master,coordinating 4 CPU, 16G MEM, 100G DISK /data:20G
K8s-node06 192.168.100.107 opensearch,master,coordinating 4 CPU, 16G MEM, 100G DISK /data:20G
K8s-node07 192.168.100.108 opensearch,data 8CPU, 32G MEM, 100G DISK /data:1T
K8s-node08 192.168.100.109 opensearch,data 8CPU, 32G MEM, 100G DISK /data:1T
K8s-node09 192.168.100.110 opensearch,data 8CPU, 32G MEM, 100G DISK /data:1T
名称 説明
OpenSearch バージョン 2.4.1
オフラインインストール対応 はい
サポートアーキテクチャ amd64/arm64

デフォルト設定

OpenSearch URL opensearch-cluster-client.middleware
OpenSearch ポート番号 9200
OpenSearch アカウント openes/kJMerxk3PwqQ
master JVM サイズ 2G
client JVM サイズ 4G
data JVM サイズ 20G

インストール手順

OpenSearch はリソースを多く消費するため、クラスタリソースを専有する必要があるため、事前にクラスタのスケジューリングを設定する必要があります。

1. クラスタラベル設定

以下のコマンドを実行してクラスタにラベルを設定します。

kubectl label node 192.168.100.105 192.168.100.106  192.168.100.107 openes=masts-client
kubectl label node 192.168.100.108 192.168.100.109 192.168.100.110  openes=data

ラベルを確認します。

kubectl get nodes --show-labels  | grep 'openes'

2. クラスタテイント設定

以下のコマンドを実行してクラスタにテイントを設定します。

kubectl taint node 192.168.100.105 192.168.100.106  192.168.100.107 192.168.100.108 192.168.100.109 192.168.100.110 app=openes:NoExecute

3. OpenEBS StorageClass の設定(オプション)

OpenEBS の参考ドキュメント:OpenEBS デプロイ

パブリッククラウドを使用する場合は、パブリッククラウドのストレージブロックコンポーネントを参照してください。

以下の YAML 設定をデプロイします。

apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
  annotations:
    cas.openebs.io/config: |
      - name: StorageType
        value: "hostpath"
      - name: BasePath
        value: "/data"
  name: openebs-data
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

/data ディレクトリのディスク容量が十分であることを確認してください。

4. Charts パッケージをダウンロード

helm pull opensearch-cluster --repo https://pubrepo.guance.com/chartrepo/dataflux-chart  --untar

5. values 設定を変更

opensearch-cluster ディレクトリ内の values.yaml を修正します。

各ロールの opensearchJavaOptsnodeSelectortolerationsstorageClass パラメータを修正します。

実際の状況に応じて設定してください。ファイル形式に注意し、各ロールの resource 制限は実際の状況に応じて設定できます。replicas は奇数が推奨されます。スプリットブレインを防止するためです。

opensearch-master:
...
  replicas: 3
  opensearchJavaOpts: "-Xmx2g -Xms2g" 
  nodeSelector:
    openes: masts-client # client と master は同じマシン上に配置
  tolerations:
  - effect: NoExecute
    key: app
    operator: Equal
    value: openes  
  persistence:
    ...
    storageClass: openebs-data 

opensearch-client:
...
  replicas: 3
  opensearchJavaOpts: "-Xmx2g -Xms2g" 
  nodeSelector:
    openes: masts-client # client と master は同じマシン上に配置
  tolerations:
  - effect: NoExecute
    key: app
    operator: Equal
    value: openes  
  persistence:
    ...
    storageClass: openebs-data 

opensearch-data:
...
  replicas: 3
  opensearchJavaOpts: "-Xmx20g -Xms20g" 
  nodeSelector:
    openes: data
  tolerations:
  - effect: NoExecute
    key: app
    operator: Equal
    value: openes    
  persistence:
    ...
    storageClass: openebs-data     

6. helm インストール

opensearch-cluster ディレクトリ内で実行してください。

helm install opensearch-cluster -n middleware ./ --create-namespace

出力結果:

Release "opensearch-cluster" has been isntalld. Happy Helming!
NAME: opensearch-cluster
LAST DEPLOYED: Wed Nov  2 20:26:16 2022
NAMESPACE: middleware
STATUS: deployed
REVISION: 1
TEST SUITE: None

7. デプロイメントと設定の確認

7.1 コンテナステータスの確認

kubectl get pods -A -l     app.kubernetes.io/instance=opensearch-cluster

出力結果:

NAMESPACE    NAME                          READY   STATUS    RESTARTS   AGE
middleware   opensearch-cluster-client-0   1/1     Running   0          63m
middleware   opensearch-cluster-client-1   1/1     Running   0          4m52s
middleware   opensearch-cluster-client-2   1/1     Running   0          4m47s
middleware   opensearch-cluster-data-0     1/1     Running   0          63m
middleware   opensearch-cluster-data-1     1/1     Running   0          63m
middleware   opensearch-cluster-data-2     1/1     Running   0          63m
middleware   opensearch-cluster-master-0   1/1     Running   0          63m
middleware   opensearch-cluster-master-1   1/1     Running   0          63m
middleware   opensearch-cluster-master-2   1/1     Running   0          4m31s

Running はデプロイ成功を示します。

7.2 ユーザーの作成

kJMerxk3PwqQ は設定するパスワードです。必要に応じて変更できます。

kubectl exec -ti -n middleware opensearch-cluster-client-0 -c opensearch-client \
    -- curl -X PUT -u admin:admin  http://127.0.0.1:9200/_plugins/_security/api/internalusers/openes \
    -H  'Content-Type: application/json' \
    -d '{"password": "kJMerxk3PwqQ","opendistro_security_roles": ["all_access"]}'

出力結果:

{"status":"CREATED","message":"'openes' created."}

7.3 ユーザーの確認

ユーザー作成時にデフォルトのパスワードを変更した場合は、コマンドを修正してください。

以下のコマンドを実行します。

kubectl exec -ti -n middleware opensearch-cluster-client-0 -c opensearch-client -- curl -u openes:kJMerxk3PwqQ  http://127.0.0.1:9200/_cat/indices

出力結果:

green open security-auditlog-2022.11.02 bwpC6JXiTzeqcC9YT8vksg 1 1  3 0  87.7kb 43.8kb
green open .kibana_1                    D_GsZGbKT0aIGEGkhnTajg 1 1  0 0    416b   208b
green open .opendistro_security         _723x9PCQZO8BosxrG_2cg 1 2 10 0 182.1kb 78.7kb

アンインストール

helm uninstall opensearch-cluster -n middleware 

フィードバック

このページは役に立ちましたか?