コミュニティの皆さん、こんにちは。
今までにミラーリング環境をセットアップされたことはありますか? プライベートネットワーク、仮想 IP アドレス、および SSL 構成を設定したことはありますか? この作業を何度か繰り返すと、証明書の生成や各 IRIS インスタンスの構成にはたくさんの手動による作業が必要で、時間がかかる作業であることに気づきました。 頻繁にこの作業を行わなければならない方にとっては、面倒な作業です。
たとえば、品質管理チームでは、新しいバージョンのアプリケーションをテストするたびに、新しい環境を作成しなければならないでしょう。 サポートチームであれば、複雑な問題を再現する環境を作成しなくてはならないかもしれません。
となれば、こういった環境を素早く作成できるツールが絶対に必要です。
この記事では、以下を使用するミラー環境のセットアップ例を紹介します。
- アービター
- プライマリ
- バックアップフェイルオーバーメンバー
- 読み書きレポート非同期メンバー
- ノード間でジャーナルを転送するための SSL 構成
- ミラー用のプライベートネットワーク
- 仮想 IP アドレス
- ミラーリングされたデータベース
一見すると、ちょっと複雑であり、たくさんのコードが必要なように見えますが、ご心配いりません。 OpenExchange には、ほとんどの操作を簡単に実行できるライブラリがあります。
この記事では、プロセスをニーズに適合させる方法を例示することを目的としていますが、セキュリティ事項においてはベストプラクティスガイドではありません。 では、ここで使用するサンプルを作成しましょう。
ツールとライブラリ
-
PKI-script: 公開鍵基盤(PKI)は、自己署名された証明書を生成して権限サーバーを得られるようにする、IRIS に統合された機能です。 Pete Greskoff の素晴らしい記事によると、PKI Script ライブラリは、すべての操作をプログラムで実行し、管理ポータルでのあらゆる手動操作を回避することを目標としています。 このライブラリには、ミラーリング用のユーティリティメソッドが含まれますが、 証明書がすでにある場合は、PKI-Script の代わりにその証明書を使用できます。
-
config-api: このライブラリは、IRIS の構成に使用されます。 ミラーリング構成は、バージョン 1.1.0 以来サポートされています。 このライブラリの使用方法については詳しく説明しません。 これについてはいくつかの記事がすでに公開されていますので、 そちらをご覧ください。 手短に言えば、config-api は IRIS テンプレート構成ファイル(JSON 形式)の作成と読み込みを簡単に行うために使用されます。
- Docker
GitHub ページ
すべての必要なリソースは、iris-mirroring-samples リポジトリにあります。
システムの準備
既存のリポジトリをクローンします。
git clone https://github.com/lscalese/iris-mirroring-samples
cd iris-mirroring-samples
リポジトリをクローンする代わりにサンプルを新規作成する場合は、新しいディレクトリと、backup
と config-files
というサブカテゴリを作成します。 irissession.sh をダウンロードします。
mkdir -p iris-mirroring-samples/backup iris-mirroring-samples/config-files
cd iris-mirroring-samples
wget -O session.sh https://raw.githubusercontent.com/lscalese/iris-mirroring-samples/master/session.sh
後で「アクセス拒否」の問題が発生しないように、irisowner
グループと irisowner
ユーザーを作成し、バックアップディレクトリのグループを irisowner
に変更する必要があります。
sudo useradd --uid 51773 --user-group irisowner
sudo groupmod --gid 51773 irisowner
sudo chgrp irisowner ./backup
このディレクトリは、最初のミラーメンバーをセットアップした後に、他のノードとデータベースバックアップを共有するためのボリュームとして使用されます。
IRIS ライセンスを取得する
IRIS Community エディションでは、ミラーリングを使用できません。 有効な IRIS コンテナーライセンスをまだお持ちでない場合は、資格情報を使用して Worldwide Response Center(WRC)にお問い合わせください。 「アクション」-->「オンライン配布」、次に「評価」ボタンをクリックし、「評価ライセンス」を選択してフォームに入力します。 ライセンスファイルの iris.key
をこのディレクトリにコピーします。
InterSystems Containers Registry にログインする
便宜上、InterSystems Containers Registry(ICR)を使用して、Docker イメージをプルします。 Docker ログイン\パスワードが不明な場合は、WRC 資格情報を使用して SSO.UI.User.ApplicationTokens.cls にアクセスすると、ICR トークンを取得できます。
docker login -u="YourWRCLogin" -p="YourICRToken" containers.intersystems.com
myappdata
データベースとグローバルマッピングを作成する
ここでは実際には myappdata
データベースの作成を行いませんが、Docker ビルド時にそれを作成するように構成を準備します。 そのためには、JSON 形式で単純なファイルを作成します。IRIS インスタンスに読み込むには config-api ライブラリが使用されます。
config-files/simple-config.json ファイルを作成します。
{
"Defaults":{
"DBDATADIR" : "${MGRDIR}myappdata/",
"DBDATANAME" : "MYAPPDATA"
},
"SYS.Databases":{
"${DBDATADIR}" : {}
},
"Databases":{
"${DBDATANAME}" : {
"Directory" : "${DBDATADIR}"
}
},
"MapGlobals":{
"USER": [{
"Name" : "demo.*",
"Database" : "${DBDATANAME}"
}]
},
"Security.Services" : {
"%Service_Mirror" : { /* このインスタンスのミラーサービスを有効にします */
"Enabled" : true
}
}
}
この構成ファイルを使用すると、デフォルトの設定で新しいデータベースを作成し、USER ネームスペースに demo.*
というグローバルマッピングを指定できます。
config-api 構成ファイルの機能に関する詳細については、関連する記事または GitHub ページをご覧ください。
Docker ファイル
Docker ファイルは既存の Docker テンプレートを基盤としていますが、作業ディレクトリの作成、仮想 IP を使用するためのツールのインストール、ZPM のインストールなどを行うように変更する必要があります。
IRIS イメージは、すべてのミラーメンバーで同一です。 ミラーリングは、ロール(最初のメンバー、フェイルオーバーバックアップ、または読み書きレポート)に応じて正しい構成を使って開始するコンテナにセットアップされます。 以下の Dockerfile のコメントをご覧ください。
ARG IMAGE=containers.intersystems.com/intersystems/iris:2021.1.0.215.0
# WRC からイメージをダウンロードする必要はありません。 イメージはビルド時に ICR からプルされます。
FROM $IMAGE
USER root
#
COPY session.sh /
COPY iris.key /usr/irissys/mgr/iris.key
# /opt/demo を作業ディレクトリとし、構成ファイルやその他のインストールファイルをそこに保存します。
# arping コマンドを得るために、iputils-arping をインストールします。 仮想 IP の構成に必要です。
# 最新の ZPM バージョンをダウンロードします(ZPM は Communty エディションにのみ含まれます)。
RUN mkdir /opt/demo && \
chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/demo && \
chmod 666 /usr/irissys/mgr/iris.key && \
apt-get update && apt-get install iputils-arping && \
wget -O /opt/demo/zpm.xml https://pm.community.intersystems.com/packages/zpm/latest/installer
USER ${ISC_PACKAGE_MGRUSER}
WORKDIR /opt/demo
# デフォルトミラーのロールを master に設定します。
# これはランタイム時に docker-compose ファイルでオーバーライドされます(最初のインスタンス、バックアップ、およびレポートのマスター)
ARG IRIS_MIRROR_ROLE=master
# config-files ディレクトリの内容を /opt/demo にコピーします。
# 現時点では、データベースとグローバルマッピングをセットアップする simple-config のみを作成しました。
# この記事の後の方で、ミラーのセットアップを行う他の構成ファイルを追加します。
ADD config-files .
SHELL [ "/session.sh" ]
# ZPM をインストールします。
# ZPM を使用して、config-api と pki-script をインストールします。
# 以下の操作を行うために、config-api を使って simple-config.json ファイルを読み込みます。
# - 「myappdata」データベースを作成する
# - 「myappdata」データベースのグローバル「demo.*」の「USER」ネームスペースにグローバルマッピングを追加する
# 基本的に、ここが、ObjectScript アプリケーションをインストールするエントリポイントです。
# このサンプルでは、simple-config.json を読み込んで、単純なデータベースとグローバルマッピングを作成します。
RUN \
Do $SYSTEM.OBJ.Load("/opt/demo/zpm.xml", "ck") \
zpm "install config-api" \
zpm "install pki-script" \
Set sc = ##class(Api.Config.Services.Loader).Load("/opt/demo/simple-config.json")
# ミラー初期化スクリプトをコピーします。
COPY init_mirror.sh /
# 起動後のスクリプト実行して、ミラーリングを構成します。
# init_mirror.sh の内容は、この記事の後の方で記述されます。
CMD ["-a", "/init_mirror.sh"]
IRIS イメージをビルドする
Dockerfile の準備ができたので、イメージをビルドできます。
docker build --no-cache --tag mirror-demo:latest .
このイメージは、プライマリ、バックアップ、およびレポートノードの実行に使用されます。
最初のミラーメンバー構成ファイルを準備する
config-api ライブラリではミラーの構成が可能であるため、最初のミラーメンバー専用の構成ファイル config-files/mirror-master.json
を作成する必要があります。
便宜上、コメントは直接 JSON に記述されています。 コメントなしの mirror-master.json はこちらからダウンロードできます。 すべての IP アドレスは、Docker-compose
ファイルのあるノードにそれぞれ割り当てられます。
{
"Defaults":{ /* すべての変数を含むセクション */
"MirrorName" : "Demo", /* ミラー名 */
"ArbiterNode" : "172.16.238.10|2188", /* アービターノードの IP アドレスとポート */
"VirtualAddress" : "172.16.238.100/24", /* 仮想 IP アドレス */
"VirtualAddressInterface" : "eth0", /* 仮想 IP アドレスに使用されるネットワークインターフェース */
"MirrorAddress" : "172.16.220.20", /* プライベートミラーネットワーク内のこのノードの IP アドレス */
"AgentAddress" : "172.16.238.20", /* このノードの IP アドレス(Agent は同じマシンにインストールされています) */
"SystemName" : "master", /* ミラー内のこのインスタンスの名前 */
"DBDir" : "${MGRDIR}myappdata/", /* Demo ミラーい追加するデータベースディレクトリ */
"DBName" : "MYAPPDATA" /* ミラー内のデータベース名 */
},
"SYS.MirrorMaster" : {
"${MirrorName}" : {
"Config" : {
"Name" : "${MirrorName}",
"SystemName" : "${SystemName}",
"UseSSL" : true,
"ArbiterNode" : "${ArbiterNode}",
"VirtualAddress" : "${VirtualAddress}",
"VirtualAddressInterface" : "${VirtualAddressInterface}",
"MirrorAddress": "${MirrorAddress}",
"AgentAddress": "${AgentAddress}"
},
"Databases" : [{ /* ミラーに追加するデータベースのリスト */
"Directory" : "${DBDir}",
"MirrorDBName" : "${DBName}"
}],
"SSLInfo" : { /* SSL 構成、証明書は PKI で生成されます */
"CAFile" : "/usr/irissys/mgr/CAServer/CA_Server.cer",
"CertificateFile" : "/usr/irissys/mgr/master_client.cer",
"PrivateKeyFile" : "/usr/irissys/mgr/master_client.key",
"PrivateKeyPassword" : "",
"PrivateKeyType" : "2"
}
}
}
}
フェイルオーバーミラーメンバー構成ファイルを準備する
フェイルオーバーバックアップメンバーの config-files/mirror-backup.json
構成ファイルを作成します。
最初のメンバーに似ています。
{
"Defaults":{ /* すべての変数を含むセクション */
"MirrorName" : "Demo", /* 参加するミラー */
"AgentAddress" : "172.16.238.20", /* 最初のミラーメンバーの Agent IP アドレス */
"SystemName" : "backup", /* ミラー内のこのインスタンス名 */
"PrimaryInstanceName" : "IRIS", /* 最初のミラーメンバーの IRIS インスタンス名 */
"VirtualAddressInterface" : "eth0", /* 仮想 IP アドレスに使用されるネットワークインターフェース */
"DBDir" : "${MGRDIR}myappdata/", /* ミラーの DB */
"MirrorAddress" : "172.16.220.30" /* プライベートネットワーク内のこのノードの IP アドレス */
},
"SYS.MirrorFailOver" : {
"${MirrorName}" : {
"Config": {
"Name" : "${MirrorName}",
"SystemName" : "${SystemName}",
"InstanceName" : "${PrimaryInstanceName}",
"AgentAddress" : "${AgentAddress}",
"AgentPort" : "2188",
"AsyncMember" : false,
"AsyncMemberType" : ""
},
"Databases" : [{
"Directory" : "${DBDir}"
}],
"LocalInfo" : {
"VirtualAddressInterface" : "${VirtualAddressInterface}",
"MirrorAddress": "${MirrorAddress}"
},
"SSLInfo" : {
"CAFile" : "/usr/irissys/mgr/CA_Server.cer",
"CertificateFile" : "/usr/irissys/mgr/backup_client.cer",
"PrivateKeyFile" : "/usr/irissys/mgr/backup_client.key",
"PrivateKeyPassword" : "",
"PrivateKeyType" : "2"
}
}
}
}
読み書き非同期メンバー構成ファイルを準備する
フェイルオーバー構成ファイルに非常に良く似ています。 違いは、AsyncMember
、AsyncMemberType
、および MirrorAddress
の値です。 ./config-files/mirror-report.json
ファイルを作成します。
{
"Defaults":{
"MirrorName" : "Demo",
"AgentAddress" : "172.16.238.20",
"SystemName" : "report",
"PrimaryInstanceName" : "IRIS",
"VirtualAddressInterface" : "eth0",
"DBDir" : "${MGRDIR}myappdata/",
"MirrorAddress" : "172.16.220.40"
},
"SYS.MirrorFailOver" : {
"${MirrorName}" : {
"Config": {
"Name" : "${MirrorName}",
"SystemName" : "${SystemName}",
"InstanceName" : "${PrimaryInstanceName}",
"AgentAddress" : "${AgentAddress}",
"AgentPort" : "2188",
"AsyncMember" : true,
"AsyncMemberType" : "rw"
},
"Databases" : [{
"Directory" : "${DBDir}"
}],
"LocalInfo" : {
"VirtualAddressInterface" : "${VirtualAddressInterface}",
"MirrorAddress": "${MirrorAddress}"
},
"SSLInfo" : {
"CAFile" : "/usr/irissys/mgr/CA_Server.cer",
"CertificateFile" : "/usr/irissys/mgr/report_client.cer",
"PrivateKeyFile" : "/usr/irissys/mgr/report_client.key",
"PrivateKeyPassword" : "",
"PrivateKeyType" : "2"
}
}
}
}
IRIS ノードを構成して証明書を生成する
すべての構成ファイルの準備が整いました! Dockerfile の最後の行は、CMD ["-a", "/init_mirror.sh"]
です。 次に、証明書を生成して、関連する構成ファイルで各 IRIS ノードをセットアップするこのスクリプトを記述する必要があります。
以下のこのスクリプトでわかるように、証明書を生成するためのコードはいたって単純です。
- マスターの場合は、
Do ##class(lscalese.pki.Utils).MirrorMaster(,"",,,,"backup,report")
とします。 PKI サーバー、PKI クライアント、証明書のリクエストの構成、検証を待機、証明書の取得、以降のノード別のリクエストを 5 分間自動的に検証、を行います。 自動的に受け入れられるリクエストは、ホストのbackup
とreport
に制限されます。 - バックアップとレポートノードの場合は、
Do ##class(lscalese.pki.Utils).MirrorBackup("${PKISERVER}","")
とします。 PKI クライアントを構成、証明書をリクエスト、検証を待機、証明書を取得、を行います。
#!/bin/bash
# ミラーをテストするために使用されるデータベース。
DATABASE=/usr/irissys/mgr/myappdata
# ディレクトリには、他のノードでリストアするための、マスターがバックアップした myappdata が含まれます。
BACKUP_FOLDER=/opt/backup
# マスターノード用の config-api JSON 形式のミラー構成ファイル。
MASTER_CONFIG=/opt/demo/mirror-master.json
# フェイルオーバーとバックアップノード用の config-api JSON 形式のミラー構成ファイル。
BACKUP_CONFIG=/opt/demo/mirror-backup.json
# レポートと非同期ノード用の config-api JSON 形式のミラー構成ファイル。
REPORT_CONFIG=/opt/demo/mirror-report.json
# ミラー名...
MIRROR_NAME=DEMO
# ミラーメンバーのリスト。
MIRROR_MEMBERS=BACKUP,REPORT
# PKI サーバーのホスト:ポート(PKI サーバーはマスターインスタンスにインストールされます)
PKISERVER=master:52773
# マスターで実行。
# このインスタンスの公開鍵基盤サーバーを構成し、SSL を使用してミラーを構成するための証明書を生成します。
# https://community.intersystems.com/post/creating-ssl-enabled-mirror-intersystems-iris-using-public-key-infrastructure-pki に記載された記事と
# https://openexchange.intersystems.com/package/PKI-Script の関連ツールをご覧ください。
# config-api と /opt/demo/simple-config.json ファイルを使用して、マイナー構成を読み込みます。
# 「backup」と「report」という他のメンバーのミラーへの参加を自動的に許可するジョブを開始します(最大 600 秒の遅延でポータル管理の手動検証を回避します)。
master() {
rm -rf $BACKUP_FOLDER/IRIS.DAT
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS <<- END
Do ##class(lscalese.pki.Utils).MirrorMaster(,"")
Set sc = ##class(Api.Config.Services.Loader).Load("${MASTER_CONFIG}")
Set ^log.mirrorconfig(\$i(^log.mirrorconfig)) = \$SYSTEM.Status.GetOneErrorText(sc)
Job ##class(Api.Config.Services.SYS.MirrorMaster).AuthorizeNewMembers("${MIRROR_MEMBERS}","${MIRROR_NAME}",600)
Hang 2
Halt
END
}
# マスターが実行。myappdata データベースのバックアップを作成します。
make_backup() {
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS "##class(SYS.Database).DismountDatabase(\"${DATABASE}\")"
md5sum ${DATABASE}/IRIS.DAT
cp ${DATABASE}/IRIS.DAT ${BACKUP_FOLDER}/IRIS.TMP
mv ${BACKUP_FOLDER}/IRIS.TMP ${BACKUP_FOLDER}/IRIS.DAT
# バックアップはコンテナ外に保存されます。
# chmod 777 により、ホストからこのファイルを削除する必要がある場合に、アクセス拒否が
# 発生しないようにします。
chmod 777 ${BACKUP_FOLDER}/IRIS.DAT
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS "##class(SYS.Database).MountDatabase(\"${DATABASE}\")"
}
# ミラーリングされたデータベース「myappdata」をリストアします。 このリストアプロセスは、フェイルオーバー「backup」と「report」ノードで実行されます。
restore_backup() {
sleep 5
while [ ! -f $BACKUP_FOLDER/IRIS.DAT ]; do sleep 1; done
sleep 2
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS "##class(SYS.Database).DismountDatabase(\"${DATABASE}\")"
cp $BACKUP_FOLDER/IRIS.DAT $DATABASE/IRIS.DAT
md5sum $DATABASE/IRIS.DAT
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS "##class(SYS.Database).MountDatabase(\"${DATABASE}\")"
}
# 「backup」メンバーを構成します。
# - 証明書をインストールしてミラーと SSL 接続するように PKI クライアントを構成します。
# - このインスタンスが backup の場合は /opt/demo/mirror-backup.json 構成ファイルを読み込みます。
# このインスタンスが report(非同期読み書きミラーノード)である場合は /opt/demo/mirror-report.json を読み込みます。
other_node() {
sleep 5
iris session $ISC_PACKAGE_INSTANCENAME -U %SYS <<- END
Do ##class(lscalese.pki.Utils).MirrorBackup("${PKISERVER}","")
Set sc = ##class(Api.Config.Services.Loader).Load("$1")
Halt
END
}
if [ "$IRIS_MIRROR_ROLE" == "master" ]
then
master
make_backup
elif [ "$IRIS_MIRROR_ROLE" == "backup" ]
then
restore_backup
other_node $BACKUP_CONFIG
else
restore_backup
other_node $REPORT_CONFIG
fi
exit 0
Docker-compose ファイル
まず、4 つのコンテナがあります。 Docker-compose ファイルは、サンプルのオーケストレーションにピッタリです。
version: '3.7'
services:
arbiter:
image: containers.intersystems.com/intersystems/arbiter:2021.1.0.215.0
init: true
container_name: mirror-demo-arbiter
command:
- /usr/local/etc/irissys/startISCAgent.sh 2188
networks:
app_net:
ipv4_address: 172.16.238.10
extra_hosts:
- "master:172.16.238.20"
- "backup:172.16.238.30"
- "report:172.16.238.40"
cap_add:
- NET_ADMIN
master:
build: .
image: mirror-demo
container_name: mirror-demo-master
networks:
app_net:
ipv4_address: 172.16.238.20
mirror_net:
ipv4_address: 172.16.220.20
environment:
- IRIS_MIRROR_ROLE=master
ports:
- 81:52773
volumes:
- ./backup:/opt/backup
hostname: master
extra_hosts:
- "backup:172.16.238.30"
- "report:172.16.238.40"
cap_add:
- NET_ADMIN
backup:
image: mirror-demo
container_name: mirror-demo-backup
networks:
app_net:
ipv4_address: 172.16.238.30
mirror_net:
ipv4_address: 172.16.220.30
ports:
- 82:52773
environment:
- IRIS_MIRROR_ROLE=backup
volumes:
- ./backup:/opt/backup
hostname: backup
extra_hosts:
- "master:172.16.238.20"
- "report:172.16.238.40"
cap_add:
- NET_ADMIN
report:
image: mirror-demo
container_name: mirror-demo-report
networks:
app_net:
ipv4_address: 172.16.238.40
mirror_net:
ipv4_address: 172.16.220.40
ports:
- 83:52773
environment:
- IRIS_MIRROR_ROLE=report
volumes:
- ./backup:/opt/backup
hostname: report
extra_hosts:
- "master:172.16.238.20"
- "report:172.16.238.40"
cap_add:
- NET_ADMIN
networks:
app_net:
ipam:
driver: default
config:
- subnet: "172.16.238.0/24"
# Mirror Private Network
mirror_net:
ipam:
driver: default
config:
- subnet: "172.16.220.0/24"
コンテナを実行する
docker-compose up
各インスタンスのミラーステータスがそれぞれ以下のように良好になるのを待ちます。
- マスターノードのステータス:
Primary
- バックアップノードのステータス:
Backup
- レポートノードのステータス:
Connected
システムによる仮想 IP の取得が困難であるため、これにはしばらく時間がかかります。 試行は何度も繰り返されるため、messages.log
に AddVirtualAddress failed
が書き込まれます。
最終的には、docker ログに以下のメッセージが表示されます。
mirror-demo-master | 01/09/22-11:02:08:227 (684) 1 [Utility.Event] Becoming primary mirror server
...
mirror-demo-backup | 01/09/22-11:03:06:398 (801) 0 [Utility.Event] Found MASTER as primary, becoming backup
...
mirror-demo-report | 01/09/22-11:03:10:745 (736) 0 [Generic.Event] MirrorClient: Connected to primary: MASTER (ver 4)
また、 http://localhost:81/csp/sys/utilhome.csp のポータルでミラーステータスを確認することも可能です。
ポータルへのアクセス
Docker-compose において、ポート 81、82、および 83 を、それぞれの管理ポータルにアクセスできるようにマッピングします。 これは、すべてのインスタンスで使用できるデフォルトのログイン\パスワードです。
- マスター http://localhost:81/csp/sys/utilhome.csp
- フェイルオーバーバックアップメンバー http://localhost:82/csp/sys/utilhome.csp
- 読み書きレポート非同期メンバー http://localhost:83/csp/sys/utilhome.csp
テスト
ミラー・モニタ(管理ポータル、デフォルトのユーザー名とパスワード): http://localhost:81/csp/sys/op/%25CSP.UI.Portal.Mirror.Monitor.zen
ミラーの設定を確認します。http://localhost:81/csp/sys/mgr/%25CSP.UI.Portal.Mirror.EditFailover.zen?$NAMESPACE=%25SYS
テストは、demo.
で始まるグローバルを設定するだけで開始できます。 USER ネームスペースに demo.*
というグローバルマッピングを構成したことを思い出しましょう。
プライマリサーバーで、ターミナルセッションを開きます。
docker exec -it mirror-demo-master irissession iris
Set ^demo.test = $zdt($h,3,1)
バックアップノードでデータを使用できるかを確認します。
docker exec -it mirror-demo-backup irissession iris
Write ^demo.test
レポートノードでデータを使用できるかを確認します。
docker exec -it mirror-demo-report irissession iris
Write ^demo.test
うまくいきました! 完全にプログラムで作成したミラー環境の準備が整いました。 もう少し完成度を高めるには、Web ゲートウェイと IRIS の間でhttps と暗号化を使用する Web ゲートウェイを追加することができますが、これは次の記事に取っておきます。
独自のスクリプトを作成することに決めたときに、この記事が役立つことを願っています。
出典
この記事のコンテンツは、以下からヒントをいただきました。