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 | クライアントリクエストをデータノード上のシャードに委任し、結果を収集して集約し、最終結果をクライアントに返します。 | 一対の専用コーディネーティングノードを用意することで、検索負荷の高いワークロードにおけるボトルネックを防ぐことができます。可能な限り多くのコアを搭載したCPUを推奨します。 |
| Dynamic | 特定のノードを機械学習(ML)タスクなどのカスタムワークに委任することで、データノードからのリソース消費を防ぎ、OpenSearchの機能に影響を与えません。 |
前提条件¶
- Kubernetes クラスターがデプロイされていること
- ストレージコンポーネントの決定(環境に応じて)
- パブリッククラウドストレージブロックコンポーネント(パブリッククラウド)
- OpenEBS ストレージプラグイン
リソース一覧¶
| ホスト名 | 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 | openes, master, client | 4 CPU, 16G MEM, 100G DISK | /data:200G |
| K8s-node05 | 192.168.100.106 | openes, master, client | 4 CPU, 16G MEM, 100G DISK | /data:200G |
| K8s-node06 | 192.168.100.107 | openes, master, client | 4 CPU, 16G MEM, 100G DISK | /data:200G |
| K8s-node07 | 192.168.100.108 | openes, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
| K8s-node08 | 192.168.100.109 | openes, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
| K8s-node09 | 192.168.100.110 | openes, data | 8CPU, 32G MEM, 100G DISK | /data:1T |
デフォルト設定¶
| OpenSearch URL | opensearch-cluster-client.middleware |
|---|---|
| OpenSearch ポート番号 | 9200 |
| OpenSearch アカウント | openes/kJMerxk3PwqQ |
| master JVM サイズ | 2G |
| client JVM サイズ | 4G |
| data JVM サイズ | 20G |
デプロイアーキテクチャ図¶
インストール準備¶
OpenSearch はリソースを多く消費し、クラスターリソースを専有する必要があるため、事前にクラスターのスケジューリングを設定する必要があります。
クラスターラベル設定¶
以下のコマンドを実行してクラスターをラベル付けします。
kubectl label node 192.168.100.105 192.168.100.106 192.168.100.107 openes=master-client
kubectl label node 192.168.100.108 192.168.100.109 192.168.100.110 openes=data
ラベルの確認:
クラスターTaint設定¶
以下のコマンドを実行してクラスターにTaintを設定します。
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
OpenEBS StorageClass の設定¶
パブリッククラウドを使用する場合は、パブリッククラウドのストレージブロックコンポーネントを参照してください。
以下のYAML設定をデプロイします。
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
annotations:
cas.openebs.io/config: |
- name: StorageType
value: "hostpath"
- name: BasePath
value: "/data/opensearch"
name: openebs-opensearch
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
/dataディレクトリのディスク容量が十分であることを確認してください。
インストール¶
設定の変更¶
インフラ関連のチャートは /etc/kubeasz/guance/infrastructure/charts ディレクトリにあります。このディレクトリに移動して操作します。
$ cd /etc/kubeasz/guance/infrastructure/charts
$ ls
localpv-provisioner-3.3.0.tgz opensearch-cluster-0.0.1.tgz tdengine-0.4.0.tgz
チャートからデフォルト設定を展開し、カスタマイズします。
opensearch-clusterディレクトリ内のvalues.yamlを編集します。各ノードタイプのopensearchJavaOpts、nodeSelector、tolerations、storageClassパラメータに注意してください。resourcesとopensearchJavaOptsは実際の環境に応じて設定します。Kubernetes が割り当てるメモリは JVM ヒープメモリを下回らないようにしてください。replicasは奇数が推奨で、クラスターのスプリットブレインを防ぎます。
opensearch-master:
...
replicas: 3
# sysctlInit:
# enabled: true
opensearchJavaOpts: "-Xmx2g -Xms2g"
nodeSelector:
openes: master-client
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-opensearch
opensearch-client:
...
replicas: 3
# sysctlInit:
# enabled: true
opensearchJavaOpts: "-Xmx2g -Xms2g"
nodeSelector:
openes: master-client
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-opensearch
opensearch-data:
...
replicas: 3
# sysctlInit:
# enabled: true
opensearchJavaOpts: "-Xmx20g -Xms20g"
nodeSelector:
openes: data
tolerations:
- effect: NoExecute
key: app
operator: Equal
value: openes
persistence:
...
storageClass: openebs-opensearch
ホスト上で手動でカーネルパラメータ
vm.max_map_countを設定したくない場合は、sysctlInit設定を有効にして init コンテナで設定することができます。 init コンテナでこのパラメータを設定した後は、マシンが再起動されるかsysctl -pで設定がリフレッシュされない限り、カーネルパラメータはコンテナのライフサイクルとは独立して保持されます。vm.max_map_countは namespace で隔離されないカーネルパラメータです。影響範囲を最小限にするため、OpenSearch を専用のマシンに隔離してデプロイすることを推奨します。
インストールの実行¶
/etc/kubeasz/guance/infrastructure/charts ディレクトリで以下のコマンドを実行します。
$ helm install opensearch-cluster -n middleware --create-namespace -f opensearch-cluster/values.yaml opensearch-cluster-0.0.1.tgz
出力結果:
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
デプロイと設定の確認¶
コンテナステータスの確認¶
出力結果:
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 はデプロイ成功を示します。
アカウントの設定¶
ユーザーの作成¶
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"]}'
出力結果:
ユーザーの確認¶
ユーザー作成時にデフォルトのパスワードを変更した場合は、コマンドを修正してください。
以下のコマンドを実行します。
kubectl exec -ti -n middleware opensearch-cluster-client-0 -c opensearch-client -- curl -u openes:kJMerxk3PwqQ http://127.0.0.1:9200/_cat/indices
出力結果:
