Helm Charts をはじめよう (ScalarDB Analytics with PostgreSQL)
このページは英語版のページが機械翻訳されたものです。英語版との間に矛盾または不一致がある場合は、英語版を正としてください。
このガイドでは、Kubernetes クラスターの Helm Chart をテスト環境として使用して、ScalarDB Analytics with PostgreSQL を開始する方法について説明します。さらに、このガイドの内容は、テスト用に Mac または Linux 環境がすでにセットアップされていることを前提としています。minikube について言及していますが、説明されている手順はどの Kubernetes クラスターでも機能するはずです。
あなたが作成するもの
次のコンポーネントを Kubernetes クラスターにデプロイします。
+-------------------------------------------------------------------------------------------------------------------------------------------+
| [Kubernetes クラスター] |
| |
| [ポッド] [ポッド] [ポッド] |
| |
| +------------------------------------+ |
| +---> | ScalarDB Analytics with PostgreSQL | ---+ +-----------------------------+ |
| | +------------------------------------+ | +---> | MySQL (「顧客」スキーマ) | <---+ |
| | | | +-----------------------------+ | |
| +-------------+ +---------+ | +------------------------------------+ | | | |
| | OLAP クライアント | ---> | サービス | ---+---> | ScalarDB Analytics with PostgreSQL | ---+---+ +---+ |
| +-------------+ +---------+ | +------------------------------------+ | | | | |
| | | | +-----------------------------+ | | |
| | +------------------------------------+ | +---> | PostgreSQL (「順序」スキーマ) | <---+ | |
| +---> | ScalarDB Analytics with PostgreSQL | ---+ +-----------------------------+ | |
| +------------------------------------+ | |
| | |
| +-------------+ | |
| | OLTP クライアント | ---(テスト OLTP ワークロードでサンプルデータをロードする)-----------------------------------------------------------------------+ |
| +-------------+ |
| |
+-------------------------------------------------------------------------------------------------------------------------------------------+
ステップ1. Kubernetes クラスターを開始する
まず、Kubernetes クラスターを準備する必要があります。minikube 環境を使用している場合は、Scalar Helm Charts をはじめようを参照してください。すでに Kubernetes クラスターを開始している場合は、この手順をスキップできます。
ステップ2. MySQL および PostgreSQL ポッドを開始する
ScalarDB Analytics with PostgreSQL を含むScalarDBは、バックエンドデータベースとして数種類のデータベースシステムを利用できます。このガイドでは、MySQL と PostgreSQL を使用します。
次のようにして、Kubernetes クラスターに MySQL と PostgreSQL をデプロイできます。
-
Bitnami Helm リポジトリを追加します。
helm repo add bitnami https://charts.bitnami.com/bitnami
-
Helm リポジトリを更新します。
helm repo update bitnami
-
MySQLをデプロイします。
helm install mysql-scalardb bitnami/mysql \
--set auth.rootPassword=mysql \
--set primary.persistence.enabled=false -
PostgreSQLをデプロイします。
helm install postgresql-scalardb bitnami/postgresql \
--set auth.postgresPassword=postgres \
--set primary.persistence.enabled=false -
MySQL および PostgreSQL ポッドが実行されているかどうかを確認します。
kubectl get pod
次の出力が表示されるはずです。
kubectl get pod
次のような結果が表示されます:
NAME READY STATUS RESTARTS AGE
mysql-scalardb-0 1/1 Running 0 3m17s
postgresql-scalardb-0 1/1 Running 0 3m12s
ステップ3. 作業ディレクトリを作成する
いくつかの構成ファイルをローカルに作成するので、それらのファイル用の作業ディレクトリを作成します。
mkdir -p ~/scalardb-analytics-postgresql-test/
ステップ4. ScalarDB、ScalarDB Analytics with PostgreSQL、およびチャートのバージョンを設定します
以下の3つの環境変数を設定します。別のバージョンの ScalarDB および ScalarDB Analytics with PostgreSQL を使用する場合は、必ず使用するバージョンに設定してください。
ScalarDB Analytics with PostgreSQL のマイナーバージョン (例: 3.10.x) を ScalarDB と同じにする必要がありますが、パッチのバージョンを一致させる必要はありません。たとえば、ScalarDB 3.10.1と ScalarDB Analytics with PostgreSQL 3.10.3を併用できます。
SCALARDB_VERSION=3.10.1
SCALARDB_ANALYTICS_WITH_POSTGRESQL_VERSION=3.10.3
CHART_VERSION=$(helm search repo scalar-labs/scalardb-analytics-postgresql -l | grep -e ${SCALARDB_ANALYTICS_WITH_POSTGRESQL_VERSION} | awk '{print $2}' | sort --version-sort -r | head -n 1)
ステップ5. OLTP トランザクションを実行して、サンプルデータを MySQL および PostgreSQL にロードします
ScalarDB Analytics with PostgreSQL を導入する前に、OLTPトランザクションを実行してサンプルデータを作成しま す。
-
Kubernetes クラスターで OLTP クライアントポッドを開始します。
kubectl run oltp-client --image eclipse-temurin:8-jdk-jammy --env SCALARDB_VERSION=${SCALARDB_VERSION} -- sleep inf
-
OLTP クライアントポッドが実行されているかどうかを確認します。
kubectl get pod oltp-client
次の出力が表示されるはずです。
kubectl get pod oltp-client
次のような結果が表示されます:
NAME READY STATUS RESTARTS AGE
oltp-client 1/1 Running 0 17s -
OLTP クライアントポッドで bash を実行します。
kubectl exec -it oltp-client -- bash
この手順の後、OLTP クライアントポッドで各コマンドを実行します。
-
git および curl コマンドを OLTP クライアントポッドにインストールします。
apt update && apt install -y curl git
-
ScalarDB サンプルリポジトリのクローンを作成します。
git clone https://github.com/scalar-labs/scalardb-samples.git
-
ディレクトリ
scalardb-samples/multi-storage-transaction-sample/
に移動します。cd scalardb-samples/multi-storage-transaction-sample/
pwd
次の出力が表示されるはずです。
# pwd
/scalardb-samples/multi-storage-transaction-sample -
Kubernetes クラスター内の MySQL および PostgreSQL にアクセスするための構成ファイル (
database.properties
) を作成します。cat << 'EOF' > database.properties
scalar.db.storage=multi-storage
scalar.db.multi_storage.storages=storage0,storage1
# Storage 0
scalar.db.multi_storage.storages.storage0.storage=jdbc
scalar.db.multi_storage.storages.storage0.contact_points=jdbc:mysql://mysql-scalardb.default.svc.cluster.local:3306/
scalar.db.multi_storage.storages.storage0.username=root
scalar.db.multi_storage.storages.storage0.password=mysql
# Storage 1
scalar.db.multi_storage.storages.storage1.storage=jdbc
scalar.db.multi_storage.storages.storage1.contact_points=jdbc:postgresql://postgresql-scalardb.default.svc.cluster.local:5432/postgres
scalar.db.multi_storage.storages.storage1.username=postgres
scalar.db.multi_storage.storages.storage1.password=postgres
scalar.db.multi_storage.namespace_mapping=customer:storage0,order:storage1
scalar.db.multi_storage.default_storage=storage1
EOF -
ScalarDB Releases から Schema Loader をダウンロードします。
curl -OL https://github.com/scalar-labs/scalardb/releases/download/v${SCALARDB_VERSION}/scalardb-schema-loader-${SCALARDB_VERSION}.jar
-
Schema Loader を実行してサンプルテーブルを作成します。
java -jar scalardb-schema-loader-${SCALARDB_VERSION}.jar --config database.properties --schema-file schema.json --coordinator
-
サンプルワークロードの初期データをロードします。
./gradlew run --args="LoadInitialData"
-
OLTP トランザクションのサンプルワークロードを実行します。これらのコマンドを実行すると、サンプルデータとしていくつかの
order
エントリが作成されます。./gradlew run --args="PlaceOrder 1 1:3,2:2"
./gradlew run --args="PlaceOrder 1 5:1"
./gradlew run --args="PlaceOrder 2 3:1,4:1"
./gradlew run --args="PlaceOrder 2 2:1"
./gradlew run --args="PlaceOrder 3 1:1"
./gradlew run --args="PlaceOrder 3 2:1"
./gradlew run --args="PlaceOrder 3 3:1"
./gradlew run --args="PlaceOrder 3 5:1"
-
OLTPクライアントを終了します。
exit
ステップ6. ScalarDB Analytics with PostgreSQL のデプロイ
バックエンドデータベースにScalarDB経由でサンプルデータを作成した後、ScalarDB Analytics with PostgreSQL をデプロイします。
-
ScalarDB Analytics with PostgreSQL のカスタム値ファイル (
scalardb-analytics-postgresql-custom-values.yaml
) を作成します。cat << 'EOF' > ~/scalardb-analytics-postgresql-test/scalardb-analytics-postgresql-custom-values.yaml
scalardbAnalyticsPostgreSQL:
databaseProperties: |
scalar.db.storage=multi-storage
scalar.db.multi_storage.storages=storage0,storage1
# Storage 0
scalar.db.multi_storage.storages.storage0.storage=jdbc
scalar.db.multi_storage.storages.storage0.contact_points=jdbc:mysql://mysql-scalardb.default.svc.cluster.local:3306/
scalar.db.multi_storage.storages.storage0.username=root
scalar.db.multi_storage.storages.storage0.password=mysql
# Storage 1
scalar.db.multi_storage.storages.storage1.storage=jdbc
scalar.db.multi_storage.storages.storage1.contact_points=jdbc:postgresql://postgresql-scalardb.default.svc.cluster.local:5432/postgres
scalar.db.multi_storage.storages.storage1.username=postgres
scalar.db.multi_storage.storages.storage1.password=postgres
scalar.db.multi_storage.namespace_mapping=customer:storage0,order:storage1
scalar.db.multi_storage.default_storage=storage1
schemaImporter:
namespaces:
- customer
- order
EOF -
PostgreSQL のスーパーユーザーパスワードを設定するためのシークレットリソースを作成します。
kubectl create secret generic scalardb-analytics-postgresql-superuser-password --from-literal=superuser-password=scalardb-analytics
-
ScalarDB Analytics with PostgreSQL を導入します。
helm install scalardb-analytics-postgresql scalar-labs/scalardb-analytics-postgresql -n default -f ~/scalardb-analytics-postgresql-test/scalardb-analytics-postgresql-custom-values.yaml --version ${CHART_VERSION}
ステップ7. OLAP クライアントポッドを実行する
ScalarDB Analytics with PostgreSQL を介して一部のクエリを実行するには、OLAP クライアントポッドを実行します。
-
Kubernetes クラスターで OLAP クライアントポッドを開始します。
kubectl run olap-client --image postgres:latest -- sleep inf
-
OLAP クライアントポッドが実行されているかどうかを確認します。
kubectl get pod olap-client
次の出力が表示されるはずです。
kubectl get pod olap-client
次のような結果が表示されます:
NAME READY STATUS RESTARTS AGE
olap-client 1/1 Running 0 10s
ステップ8. ScalarDB Analytics with PostgreSQL を介してサンプルクエリを実行する
OLAP クライアントポッドを実行した後、ScalarDB Analytics with PostgreSQL を介していくつかのクエリを実行できます。
-
OLAP クライアントポッドで bash を実行します。
kubectl exec -it olap-client -- bash
この手順の後、OLAP クライアントポッドで各コマンドを実行します。
-
psqlコマンドを実行して ScalarDB Analytics with PostgreSQL にアクセスします。
psql -h scalardb-analytics-postgresql -p 5432 -U postgres -d scalardb
パスワードは
scalardb-analytics
です。 -
customer.customers
テーブルのサンプルデータを読み取ります。SELECT * FROM customer.customers;
次の出力が表示されるはずです。
customer_id | name | credit_limit | credit_total
-------------+---------------+--------------+--------------
1 | Yamada Taro | 10000 | 10000
2 | Yamada Hanako | 10000 | 9500
3 | Suzuki Ichiro | 10000 | 8500
(3 rows) -
order.orders
テーブルのサンプルデータを読み取ります。SELECT * FROM "order".orders;
次の出力が表示されるはずです。
scalardb=# SELECT * FROM "order".orders;
customer_id | timestamp | order_id
-------------+---------------+--------------------------------------
1 | 1700124015601 | 5ae2a41b-990d-4a16-9700-39355e29adf8
1 | 1700124021273 | f3f23d93-3862-48be-8a57-8368b7c8689e
2 | 1700124028182 | 696a895a-8998-4c3b-b112-4d5763bfcfd8
2 | 1700124036158 | 9215d63a-a9a2-4471-a990-45897f091ca5
3 | 1700124043744 | 9be70cd4-4f93-4753-9d89-68e250b2ac51
3 | 1700124051162 | 4e8ce2d2-488c-40d6-aa52-d9ecabfc68a8
3 | 1700124058096 | 658b6682-2819-41f2-91ee-2802a1f02857
3 | 1700124071240 | 4e2f94f4-53ec-4570-af98-7c648d8ed80f
(8 rows) -
order.statements
テーブルのサンプルデータを読み取ります。SELECT * FROM "order".statements;
次の出力が表示されるはずです。
scalardb=# SELECT * FROM "order".statements;
order_id | item_id | count
--------------------------------------+---------+-------
5ae2a41b-990d-4a16-9700-39355e29adf8 | 2 | 2
5ae2a41b-990d-4a16-9700-39355e29adf8 | 1 | 3
f3f23d93-3862-48be-8a57-8368b7c8689e | 5 | 1
696a895a-8998-4c3b-b112-4d5763bfcfd8 | 4 | 1
696a895a-8998-4c3b-b112-4d5763bfcfd8 | 3 | 1
9215d63a-a9a2-4471-a990-45897f091ca5 | 2 | 1
9be70cd4-4f93-4753-9d89-68e250b2ac51 | 1 | 1
4e8ce2d2-488c-40d6-aa52-d9ecabfc68a8 | 2 | 1
658b6682-2819-41f2-91ee-2802a1f02857 | 3 | 1
4e2f94f4-53ec-4570-af98-7c648d8ed80f | 5 | 1
(10 rows) -
order.items
テーブルのサンプルデータを読み取ります。SELECT * FROM "order".items;
次の出力が表示されるはずです。
scalardb=# SELECT * FROM "order".items;
item_id | name | price
---------+--------+-------
5 | Melon | 3000
2 | Orange | 2000
4 | Mango | 5000
1 | Apple | 1000
3 | Grape | 2500
(5 rows) -
JOIN
クエリを実行します。例えば以下のように各ユーザーのクレジット残高情報を確認できます。SELECT * FROM (
SELECT c.name, c.credit_limit - c.credit_total AS remaining, array_agg(i.name) OVER (PARTITION BY c.name) AS items
FROM "order".orders o
JOIN customer.customers c ON o.customer_id = c.customer_id
JOIN "order".statements s ON o.order_id = s.order_id
JOIN "order".items i ON s.item_id = i.item_id
) AS remaining_info GROUP BY name, remaining, items;次の出力が表示されるはずです。
scalardb=# SELECT * FROM (
scalardb(# SELECT c.name, c.credit_limit - c.credit_total AS remaining, array_agg(i.name) OVER (PARTITION BY c.name) AS items
scalardb(# FROM "order".orders o
scalardb(# JOIN customer.customers c ON o.customer_id = c.customer_id
scalardb(# JOIN "order".statements s ON o.order_id = s.order_id
scalardb(# JOIN "order".items i ON s.item_id = i.item_id
scalardb(# ) AS remaining_info GROUP BY name, remaining, items;
name | remaining | items
---------------+-----------+----------------------------
Suzuki Ichiro | 1500 | {Grape,Orange,Apple,Melon}
Yamada Hanako | 500 | {Orange,Grape,Mango}
Yamada Taro | 0 | {Orange,Melon,Apple}
(3 rows) -
psql コマンドを終了します。
\q
-
OLAP クライアントポッドを終了します。
exit
ステップ9. すべてのリソースを削除する
Kubernetes クラスターで ScalarDB Analytics with PostgreSQL テストを完了したら、すべてのリソースを削除します。
-
MySQL、PostgreSQL、および ScalarDB Analytics with PostgreSQL をアンインストールします。
helm uninstall mysql-scalardb postgresql-scalardb scalardb-analytics-postgresql
-
クライアントポッドを削除します。
kubectl delete pod oltp-client olap-client --grace-period 0
-
シークレットリソースを削除します。
kubectl delete secrets scalardb-analytics-postgresql-superuser-password
-
作業ディレクトリとサンプルファイルを削除します。
cd ~
rm -rf ~/scalardb-analytics-postgresql-test/