Runtime Fabric での永続性ゲートウェイの使用

Anypoint Runtime Fabric で提供される永続性ゲートウェイにより、Mule Runtime インスタンスにデプロイされた Mule アプリケーションではアプリケーションレプリカと再起動でデータを保存して共有できます。

Mule Maven プラグインバージョン 3.5.4 以降を使用して Runtime Fabric デプロイメント用の永続的なオブジェクトストアを有効にすることもできます。

Mule アプリケーションでの永続性ゲートウェイの使用

Anypoint Runtime Fabric で永続性ゲートウェイを設定したら、Mule Runtime Engine バージョン 4.2.1 以降にデプロイされた Mule アプリケーションで使用できるようになります。設定すると、ユーザーは Runtime Manager を使用してアプリケーションをデプロイするときに ​[Use Persistent Object Storage (永続オブジェクトストレージを使用)]​ を選択できます。詳細は、​「Runtime Fabric に Mule アプリケーションをデプロイする」​を参照してください。

Mule アプリケーションでは Object Store Connector を通じて Object Store v2 REST API を使用して永続性ゲートウェイに接続します。これにより、Mule アプリケーションを変更することなく、Anypoint Runtime Fabric と CloudHub の両方をデプロイできます。

アプリケーションを削除しても、すぐには永続データが削除されない場合があります。Runtime Fabric は 60 分ごとに永続データをクリーンアップします。

永続性ゲートウェイの制限事項

次の表に、永続性ゲートウェイによって保存されるデータに関する制限事項を示します。

Limit (制限) 説明

最大 TTL。

データが永続性ゲートウェイに保存される期間。値は 30 日に設定されます。

始める前に

永続性ゲートウェイを有効化する前に、次の準備が整っていることを確認します。

  • 永続性ゲートウェイによって保存されるデータのデータソースとなる PostgreSQL データベースを作成してある。このデータベースは ​partition​ キーワードが予約されていない PostgresSQL のサポート対象バージョン​と互換性がある必要があります。

  • PostgreSQL ユーザーに CREATE、INSERT、SELECT、UPDATE、DELETE 権限を付与してある。

データベースへのプレーンテキスト接続のみがサポートされています。

永続性ゲートウェイの設定

設定中に、永続性ゲートウェイによって必要なデータベーススキーマが作成されます。その後、Runtime Fabric にデプロイされたアプリケーションが永続オブジェクトストレージを使用するように設定されると、永続性ゲートウェイによってデータベースに必要な行が書き込まれます。

永続性ゲートウェイを設定するには、クラスターが永続性データストアに接続するための Kubernetes カスタムリソースを作成する必要があります。

  1. Kubernetes シークレットを作成します。

    kubectl create secret generic <SECRET NAME> -n rtf --from-literal=persistence-gateway-creds='postgres://username:pass@host:port/databasename'
  2. データストアのカスタムリソースを作成します。

    1. カスタムリソーステンプレートを ​Kubernetes カスタムリソーステンプレート​ から ​custom-resource.yaml​ という名前のファイルにコピーします。

    2. secretRef: name​ の値が Kubernetes シークレットファイルで定義された ​name​ 項目に一致することを確認します。

    3. 環境で必要に応じてカスタムリソーステンプレートのその他の項目を変更します。

    4. kubectl apply -f custom-resource.yaml​ を実行します。

  3. 永続性ゲートウェイポッドのログをチェックして、データベースと通信できることを確認します。

    kubectl get pods -n rtf

    名前にプレフィックス ​persistence-gateway​ が付いたポッドを見つけます。

    kubectl logs -f persistence-gateway-6dfb98949c-7xns9 -n rtf

    このコマンドの出力は次のようになります。

    2021/04/09 16:35:31 Connecting to PostgreSQL backend...
    2021/04/09 16:35:32 Starting watcher for /var/run/secrets/rtf-object-store/persistence-gateway-creds
    2021/04/09 16:35:32 Watching for changes on /var/run/secrets/rtf-object-store/persistence-gateway-creds
    2021/04/09 16:35:35 Successfully connected to the PostgreSQL backend.
    192.168.2.101 - - [09/Apr/2021:16:35:55 +0000] "GET /api/v1/status/ready HTTP/1.1" 200 2 "" "kube-probe/1.18+"

認証済みの名前空間での永続性ゲートウェイの使用

認証済みの名前空間​で永続性ゲートウェイを使用する場合は、新しい ​rtf-persistence-gateway​ サブジェクトを追加して RoleBinding を編集します。

subjects:
  - kind: ServiceAccount
    name: rtf-persistence-gateway
    namespace: <rtf_namespace>

Kubernetes カスタムリソーステンプレート

下のテンプレート例を使用して、Kubernetes カスタムリソースを作成します。このカスタムリソースにより、Kubernetes クラスターがデータストアに接続できます。

apiVersion: rtf.mulesoft.com/v1
kind: PersistenceGateway
metadata:
  name: default
  namespace: rtf
spec:
  objectStore:
    backendDriver: postgresql
    maxBackendConnectionPool: 20
    replicas: 2
    secretRef:
      name: persistence-gateway-creds
    resources:
      limits:
        cpu: 250m
        memory: 250Mi
      requests:
        cpu: 200m
        memory: 75Mi

環境に基づいて次の項目を変更します。

項目 説明 デフォルト値

kind

カスタムリソースの種別。サポートされる値は ​PersistenceGateway​ のみです。

PersistenceGateway

metadata.name

このカスタムリソースの内部識別子。この項目の値は ​default​ である必要があります。

default

metadata.namespace

シークレットが適用される名前空間。サポートされる値は ​rtf​ です。

rtf

spec.objectStore.backendDriver

データストアで使用するドライバー。​postgresql​ のみがサポートされています。

postgresql

spec.objectStore.maxBackendConnectionPool

データストアに対して同時に開いている最大接続数。

20

spec.objectStore.replicas

永続性ゲートウェイのレプリカの数。

2

spec.objectStore.resources.limits.cpu

永続性ゲートウェイポッドの CPU リソースの制限。

250m

spec.objectStore.resources.limits.memory

永続性ゲートウェイポッドのメモリリソースの制限。

150Mi

spec.objectStore.resources.requests.cpu

永続性ゲートウェイポッドの CPU リソース要求。

200m

spec.objectStore.resources.requests.memory

永続性ゲートウェイポッドのメモリリソース要求。

75Mi

spec.objectStore.secretRef.name

Kubernetes シークレットファイルで定義された永続性ゲートウェイのログイン情報の名前。

persistence-gateway-creds

デフォルトの CPU、メモリ、制限の値は少数のデプロイ済み Mule アプリケーションに基づきます。環境の要求に基づいてこれらの値を変更してください。

Persistence Gateway のアプリケーションデータ

Persistence Gateway は次の 2 つのテーブルを使用してアプリケーションデータを保存します。

CREATE TABLE IF NOT EXISTS stores (
	id SERIAL PRIMARY KEY,
	name VARCHAR(255) NOT NULL,
	org_id VARCHAR(255) NOT NULL,
	env_id VARCHAR(255) NOT NULL,
	default_ttl_seconds int NOT NULL,
	is_fixed_ttl bool NOT NULL,
	CONSTRAINT UK_stores UNIQUE (name, org_id, env_id)
);
CREATE TABLE IF NOT EXISTS items (
	id SERIAL PRIMARY KEY,
	store_id INT NOT NULL REFERENCES stores(id),
	key VARCHAR(255) NOT NULL,
	partition VARCHAR(255) NOT NULL,
	value_type VARCHAR(10) NOT NULL,
	number_value integer,
	string_value text,
	binary_value bytea,
	last_updated timestamp,
	is_fixed_ttl bool NOT NULL,
	ttl timestamp NOT NULL,
	CONSTRAINT UK_items UNIQUE (key, store_id, partition)
);
	CREATE INDEX IF NOT EXISTS IDX_items_ttl ON items(ttl)
;`

永続的なデータをクラスター間で移行する場合は、これらの 2 つのテーブルをソースクラスターから完全にバックアップして、移行先のデータベースで再作成してください。予期しない結果を防ぐため、両方のクラスターでこのプロセスが実行されている間は、アプリケーションをデプロイしないでください。