メインコンテンツまでスキップ

ステップ 2: データサービスを準備する

インストールがデータサービスに依存する前に、SQL データベースを作成し、Pod からすべてのデータサービスに到達できることを確認します。OpenLM Platform は、すべてのデータを、お客様が用意する 4 つのサービスに保存します。

このページのコマンドは、インストールワークシート から作成したファイル openlm-install.env から変数を読み込みます。

source ./openlm-install.env

2.1 4 つの SQL Server データベースを作成する​

OpenLM Platform は、次の 4 つの SQL Server データベースを使用します。

データベース既定のプレフィックスでの名前格納するデータテーブルを作成するもの
IDopenlm_identityユーザー、サインインクライアント、トークンID サービス(初回起動時)
運用openlm_operational_noneライセンス、サーバー、使用状況などの主要データ各サービス(初回起動時)
レポートopenlm_reportingレポートと Power BI 用に準備されたデータテーブルはデータ処理ジョブ、ビューは レポートスクリプト
DSSopenlm_dssディレクトリ同期DSS サービス(初回起動時)
なぜ「_none」なのか

運用データベースの名前は、プレフィックスとテナント名から作られます。セルフホストのインストールにはテナントが 1 つだけあり、その名前は none です。そのため、名前は _none で終わります。このサフィックスを省略しないでください。

管理者としてサインインしてデータベースを作成します。CREATE DATABASE ステートメントは、SQL Server Management Studio (SSMS) などの SQL Server クライアントで実行するか、次のように sqlcmd で実行します。

for db in identity operational_none reporting dss; do
sqlcmd -S "$SQL_HOST,$SQL_PORT" -U "<admin-login>" -C -Q "CREATE DATABASE [${DB_PREFIX}_${db}]"
done

次に、アプリケーション用のログイン($SQL_USER)を作成し、4 つのデータベースすべての所有権を付与します。SQL Server では、master でログインを一度だけ作成します。

CREATE LOGIN [openlm_app] WITH PASSWORD = '<your SQL_PASSWORD>'; -- your SQL_USER

次に、<db> をデータベース名に置き換えて、データベースごとに一度ずつ次を実行します。

USE [<db>];
CREATE USER [openlm_app] FOR LOGIN [openlm_app]; -- your SQL_USER
ALTER ROLE db_owner ADD MEMBER [openlm_app];

Azure SQL Database と Amazon RDS では、代わりにクラウドコンソールまたは master データベースからデータベースを作成し、同じ方法で db_owner を付与します。詳細はご利用の プラットフォームのページ に記載されています。

SQL の確認

クラスター内部から、アプリケーション用のログインで次を実行します。

kubectl -n "$NS" run sqltest --rm -it --restart=Never \
--image=mcr.microsoft.com/mssql/server:2022-latest -- \
/opt/mssql-tools18/bin/sqlcmd -S "$SQL_HOST,$SQL_PORT" -U "$SQL_USER" -P "$SQL_PASSWORD" -C \
-Q "SELECT name FROM sys.databases WHERE name LIKE '${DB_PREFIX}_%'"

4 つのデータベースがすべて一覧に表示される必要があります。イメージが大きい(約 1.5 GB)ため、初回は起動まで数分かかることがあります。Login failed は、ユーザーまたはパスワードの誤りを示します。timeout は、クラスターと SQL Server の間のネットワークがブロックされていることを示します。ネットワーク を参照してください。

Pod が ImagePullBackOff のままの場合、クラスターはそのレジストリからプルできません。イメージをミラーするか、データベースに到達できる任意のマシンから同じコマンドを実行してください。

2.2 MongoDB​

MongoDB では何も作成する必要はありません。各サービスが初回起動時に自身のデータベースを作成します。MONGO_URI のユーザーには、そのための権限(readWriteAnyDatabase と dbAdminAnyDatabase、または root)が必要です。

接続文字列については、次の 2 つのルールに従ってください。

  • 末尾に / を付けない: mongodb://u:p@host:27017 は正しい形式です。mongodb://u:p@host:27017/ では、一部のサービスが警告なしに動作しなくなります。
  • パスワード内の特殊文字: @ : / ? # % は URL エンコードします。例: @ は %40 になります。
MongoDB の確認
kubectl -n "$NS" run mongotest --rm -it --restart=Never \
--image=public.ecr.aws/docker/library/mongo:7.0 -- \
mongosh "$MONGO_URI" --quiet --eval "db.adminCommand({listDatabases:1}).ok"

1 と表示される必要があります。

2.3 Kafka​

Kafka では何も作成する必要はありません。インストール中に、OpenLM Platform が約 130 個のトピックを自ら作成するため、Kafka ユーザーにはトピックを作成する権限が必要です。ブローカーの auto.create.topics.enable の設定は必要ありません。

次の Kafka の設定を確認します。

  • 平文のリスナー(ポート 9092)が標準の構成です。Kafka が TLS または SASL のリスナーのみを提供している場合は、インストール前に OpenLM にお知らせください。
  • シングルブローカーの Kafka では、既定のレプリケーション係数と offsets.topic.replication.factor を 1 に設定してください。設定しないと、コンシューマーグループが起動しません。
  • ブローカーのメッセージ保持期間を 14 日に設定します: log.retention.hours=336。このリリースでは、OpenLM Platform がインストールとアップグレードのたびに一部のトピックに独自の保持期間を設定し、ブローカーの設定はこれらのトピックには適用されません。データパイプラインのトピック broker-messages と incoming-brokers-messages を含む 22 個のトピックに、3 日とパーティションあたり 1 GiB が設定されます。
  • ブートストラップアドレスは、Pod から到達できるアドバタイズされたアドレスである必要があります。localhost や別のネットワークのプライベート IP をアドバタイズするブローカーでは、最初の接続は成功しますが、その後失敗します。
Kafka の確認
kubectl -n "$NS" run kafkatest --rm -it --restart=Never \
--image=apache/kafka:3.7.0 -- \
/opt/kafka/bin/kafka-topics.sh --bootstrap-server "$KAFKA_BOOTSTRAP" --list

エラーなしで完了する必要があります。一覧が空でも問題ありません。応答が止まった後にタイムアウトする場合は、アドバタイズされたアドレスに Pod から到達できません。

Pod が ImagePullBackOff のままの場合、クラスターはそのレジストリからプルできません。イメージをミラーするか、Kafka に到達できる任意のマシンから同じコマンドを実行してください。

2.4 Redis​

Redis では何も作成する必要はありません。OpenLM Platform と API ゲートウェイは、異なるキーで 1 つの Redis を共有します。

Redis の確認
kubectl -n "$NS" run redistest --rm -it --restart=Never \
--image=public.ecr.aws/docker/library/redis:7.2-alpine -- \
sh -c "redis-cli -h $REDIS_HOST -p $REDIS_PORT -a '$REDIS_PASSWORD' $( [ "$REDIS_TLS" = true ] && echo --tls ) PING"

PONG と表示される必要があります。

確認

このステップの 4 つの確認がすべて合格しています。SQL Server は 4 つのデータベースを一覧表示し、MongoDB は 1 を表示し、Kafka はエラーなしでトピックを一覧表示し、Redis は PONG を表示します。

ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。