高可用性 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の機能に影響を与えません。 |
前提条件¶
- Kubernetes がデプロイ済みであること
- (オプション)パブリッククラウドストレージブロックコンポーネント(パブリッククラウド)
- (オプション)OpenEBS ストレージプラグイン
基本情報と互換性¶
注意
以下の設定情報は、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
ラベルを確認します。
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 パッケージをダウンロード¶
5. values 設定を変更¶
opensearch-cluster ディレクトリ内の values.yaml を修正します。
各ロールの opensearchJavaOpts、nodeSelector、tolerations、storageClass パラメータを修正します。
実際の状況に応じて設定してください。ファイル形式に注意し、各ロールの
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 ディレクトリ内で実行してください。
出力結果:
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 コンテナステータスの確認¶
出力結果:
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"]}'
出力結果:
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