Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

シャーディングによるデータ量に応じた水平方向の拡張

この章では、InterSystems IRIS シャード・クラスタの導入と使用について説明します。

InterSystems IRIS のシャーディングの概要

シャーディングは、InterSystems IRIS データ・プラットフォームを水平方向に拡張するための重要な機能です。InterSystems IRIS シャード・クラスタは、データの格納とキャッシュの両方を複数のサーバ間で分割して、クエリおよびデータ取り込みに応じた柔軟で安価なパフォーマンス拡張を実現しながら、きわめて効率的にリソースを使用することにより、インフラストラクチャの価値を最大化します。シャーディングは、InterSystems IRIS の優れた垂直方向の拡張性と容易に組み合わせることができ、InterSystems IRIS がソリューションを提供する作業負荷の範囲が大幅に広がります。

Note:

シャード・クラスタを導入および使用するための実践演習を含むシャーディングの簡単な紹介については、"機能紹介 : 分散キャッシュによるユーザ数に応じた InterSystems IRIS の拡張" を参照してください。

シャーディングの要素

シャーディングによる InterSystems IRIS の水平方向の拡張は、さまざまなアプリケーションに有益ですが、以下のいずれかまたは両方を含むユース・ケースで最も大きな効果が得られます。

  • ディスクからの大量のデータの取得、データの複雑な処理、またはその両方 (分析作業負荷など)

  • 大量で高速のデータ取り込み

シャーディングは、データ・ノードと呼ばれる複数の InterSystems IRIS インスタンス間で大規模なデータベース・テーブルおよびそれらに関連付けられたインデックスを水平方向に分割すると同時に、これらのインスタンスのいずれかを介してアプリケーションがこれらのテーブルにアクセスできるようにします。データ・ノードが集まって、シャード・クラスタを形成します。このアーキテクチャには以下の利点があります。

  • シャード・テーブルに対するクエリは、すべてのデータ・ノード上で並列で実行され、結果はマージおよび集約され、完全なクエリ結果としてアプリケーションに返されます。

  • データ分割は別個のインスタンスによってホストされるため、単一インスタンスのキャッシュがデータ・セット全体を処理するのではなく、データ・セットの独自のパーティションを処理する専用キャッシュがあります。

シャーディングにより、大きなテーブルに対するクエリのパフォーマンスが、単一システムのリソースによって制約されなくなります。複数のシステムにわたってクエリ処理とキャッシュの両方を分散することで、シャーディングは計算リソースとメモリ・リソースの両方の線形に近い拡大を実現し、作業負荷に合わせて調整されたクラスタを設計および管理できます。データ・ノードを追加することによりスケール・アウトすると、シャード・データをクラスタ全体で再分散することができます。この分散データ・レイアウトは、データの並列ロードやサードパーティ・フレームワークでの使用などで活用することもできます。

シャードは、テーブルの行のサブセットです。各行は 1 つのシャード内に格納され、テーブルのすべてのシャードにほぼ同じ数の行が格納されます。各データ・ノードは、クラスタ上のシャード・テーブルごとに 1 つのシャードで構成されるデータ・シャードをホストします。シャーディング・マネージャと呼ばれるフェデレートされたソフトウェア・コンポーネントは、どのシャード (およびどのテーブル行) がどのデータ・ノードにあるかを追跡し、それに応じてクエリを送ると共に、他のシャード操作を管理します。各テーブルは、そのフィールドの 1 つをシャード・キーとして使用することで、自動的にデータ・ノード間で水平方向に分割されます。シャード・キーは、データを均等に分散するための確実な方法を提供します。シャード・キーは一般にはテーブルの RowId (既定) ですが、ユーザ定義のフィールドまたはフィールド・セットにすることもできます。

シャード・データはデータ・ノード間で物理的に分割されますが、任意のデータ・ノードで (シャード化されていないデータ、メタデータ、およびコードとして) すべて論理的に表示可能です。各データ・ノードには、クラスタ上のすべてのデータおよびコードに透過的にアクセスできるようにする、クラスタ・ネームスペース (クラスタ全体で同一の名前) があります。アプリケーションは任意のノードのクラスタ・ネームスペースにアクセスでき、全データセットをローカルのものであるかのように利用できます。したがってアプリケーション接続はクラスタ内すべてのデータ・ノードで負荷分散され、クエリの並列処理や分割されたキャッシュを最大限に活用する必要があります。

基本的なシャード・クラスタ
Four data nodes hold equal amounts of sharded data, but only the leftmost holds nonsharded data

シャード化されていないデータは、最初に構成されたデータ・ノード (データ・ノード 1、または単にノード 1 と呼ぶ) にのみ格納されます。この区別は、より多くのデータがノード 1 に格納されるということ以外、ユーザに対して透過的です。ただし、この違いも一般的には小さいものです。アプリケーション SQL から見ると、シャード・テーブルとシャード化されていないテーブルの区別は透過的です。

InterSystems IRIS ミラーリングを使用すると、シャード・クラスタ内のデータ・ノードに対して高可用性を実現できます。単一インスタンスと同じように簡単に InterSystems IRIS インスタンスのミラー・フェイルオーバー・ペアをクラスタに追加できます。ミラーリングされたシャード・クラスタの導入の詳細は、"ミラー・データ・ノードによる高可用性" を参照してください。

常に大量のデータが取り込まれるような状況でも、クエリの遅延がきわめて小さいことが求められる高度な使用事例では、計算ノードを追加してクエリを処理するための透過的なキャッシュ層を提供することで、クエリとデータ取り込みの作業負荷を分離し、両方のパフォーマンスを向上させることができます。1 つのデータ・ノードに複数の計算ノードを割り当てることで、クラスタのクエリ・スループットをさらに向上させることができます。計算ノードとそれらの導入手順の詳細は、"作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" を参照してください。

シャーディングの効果の評価

InterSystems IRIS のシャーディングは、さまざまなアプリケーションに有益ですが、以下を含むユース・ケースで最も大きな効果が得られます。

  • 比較的大きなデータ・セット、大量のデータを返すクエリ (またはその両方)。

    シャーディングでは、データと共にキャッシュを分割することにより、複数のシステムのメモリ・リソースを利用し、データのサイズに合わせてキャッシュの処理能力を調整します。単一インスタンスのデータベース・キャッシュがすべてのデータに使用可能であるのと比べて、各データ・ノードのデータベース・キャッシュ (グローバル・バッファ・プール) はデータ・セットの一部のみに使用されます。定期的に使用されるデータが大きすぎて、シャード化されていない単一インスタンスのデータベース・キャッシュに収まらない場合、パフォーマンスの向上が最も顕著になります。

  • 大量のデータ処理を行う大量の複雑なクエリ。

    シャーディングでは、クエリを分解し、複数のデータ・ノード間で並列で実行することにより、複数のシステムの計算リソースを利用し、クエリ処理のスループットを調整します。クラスタに対するクエリが以下の条件に該当する場合、パフォーマンスの向上が最も顕著です。

    • 永続ストレージから大量のデータを読み取り、特に、返す結果に対して取得するデータの割合が高い。

    • かなりの計算作業 (集約、グループ化、ソートなど) を必要とする。

  • 大容量または高速のデータ取り込み (またはその組み合わせ)。

    シャーディングでは、InterSystems IRIS JDBC ドライバを使用してデータ・ノードに直接接続し、並列でデータをロードすることにより、複数のインスタンス間で取り込みを分散し、データ取り込みを調整します。データが検証済みであるとして、一意性チェックを省略できる場合は、効果がさらに大きくなります。

これらの要因はそれぞれ個別でも、シャーディングから得られる潜在的恩恵に影響しますが、結合すれば恩恵も大きくなる場合があります。例えば、大量のデータの高速の取り込み、大規模データ・セット、大量のデータを取得して処理する複雑なクエリを組み合わせると、現代の分析上の作業負荷の多くがシャーディングに非常に適した候補になります。

前述のように、これまでに説明したいくつかの要因に対処するために InterSystems IRIS のシャーディングを垂直方向の拡張と組み合わせて使用すれば、さまざまな状況で最も高い効果が得られる可能性があります (詳細は、"InterSystems IRIS シャード・クラスタの計画" を参照してください)。

Note:

現在のリリースでは、シャーディングで、アトミック性を必要とする複雑なトランザクションが関与する作業負荷をサポートしておらず、そのような作業負荷に対してシャード・クラスタを使用することはできません。

ネームスペース・レベルのシャーディング・アーキテクチャ

このドキュメントの以前のバージョンでは、より大規模な別のノード・タイプのセット (シャード・マスタ・データ・サーバ、シャード・データ・サーバ、シャード・クエリ・サーバ) を含むシャーディング・アーキテクチャについて説明していました。このネームスペース・レベルのアーキテクチャは、新しいノード・レベルのアーキテクチャの透過的な基盤として残っており、ノード・レベルのアーキテクチャと完全な互換性があります。ノード・レベルのアーキテクチャにおいて、クラスタ・ネームスペース (クラスタ全体で同一の名前) は、クラスタ上のすべてのデータおよびコード (シャード化されているもの、いないもの共に) への透過的なアクセスを提供します。最初のデータ・ノードに配置されるようになったマスタ・ネームスペースは、依然としてメタデータ、シャード化されていないデータ、およびコードへのアクセスを提供し、すべてのデータ・ノードで完全に利用可能です。これにより、導入および使用が単純で便利な、より統一され、簡単なモデルが提供されます。

InterSystems Cloud Manager (ICM)Opens in a new tab、管理ポータルの [シャード構成] ページ、および %SYSTEM.ShardingOpens in a new tab API を使用して、ネームスペース・レベルのシャード・クラスタを導入できます。後者の 2 つは、"ネームスペース・レベル・アーキテクチャの導入" で説明されています。

シャード・クラスタの導入

評価やテストのために最初のクラスタを作成する簡単な方法を提供するため、このセクションでは、ミラーリングされていないデータ・ノードで構成される基本的な InterSystems IRIS シャード・クラスタを導入し、管理ポータルまたは %SYSTEM.ClusterOpens in a new tab API を使用してそのクラスタを構成する手動手順を説明します。それ以降の各セクションでは、以下のように、これらの手順を拡張して計算ノードとミラーリングを追加します。

  • 計算ノードは既存のクラスタに簡単に追加できます。プロダクション環境への計算ノードの導入を検討する場合、一般的には、データ・ノードのみのクラスタの動作を評価してから、クラスタにとって計算ノードの追加が有益であるかどうかを決定することをお勧めします。計算ノードの計画と追加の詳細は、"計算ノードの計画" および "作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" を参照してください。

  • 各データ・ノードにフェイルオーバー機能 (およびオプションの災害復旧機能) を追加すること、およびフェイルオーバー・メンバ間の遅延によって軽微な影響が出る可能性があることを除くと、ミラーリングされたシャード・クラスタの動作は、同じ数のデータ・ノードのミラーリングされていないクラスタとまったく同じです。ミラーリングされたシャード・クラスタの導入に関心がある場合、手順については "ミラー・データ・ノードによる高可用性" を参照してください。

InterSystems IRIS データ・プラットフォームでは、シャード・クラスタの自動導入方法もいくつか提供されています。これらの方法を使うと、オンプレミス・ハードウェア、パブリック・クラウド、プライベート・クラウド、Kubernetes などのさまざまなトポロジのクラスタを導入するプロセスが大幅に簡素化されます。

シャード・クラスタの導入にどの方法を使用するかにかかわらず、最初のステップでは、クラスタに含めるデータ・ノードの数を決定し、それらのノード上のデータベース・キャッシュとグローバル・データベースのサイズを計画します。手動で導入する場合は、クラスタを構成する前に、クラスタをホストするインフラストラクチャを特定またはプロビジョニングし、ホストに InterSystems IRIS インスタンスを導入する必要もあります。したがって、このセクションの手動手順を使用して基本のクラスタを導入するには、以下のように、最初にこのセクションのステップを実行してから、手動構成方法を選択します。

  1. データ・ノードの計画

  2. データベース・キャッシュとデータベースのサイズの見積もり

  3. インフラストラクチャのプロビジョニングまたは特定

  4. データ・ノード・ホストへの InterSystems IRIS の導入

  5. 以下のいずれかを使用したクラスタの構成

Important:

このセクションの手順では、以下に注意してください。

Note:

これらの手順では、クラスタを構成する前にプロビジョニングまたは特定したホストに新しい InterSystems IRIS インスタンスを導入することを前提としていますが、既存のインスタンスでも使用できるように手順を変更できます。ただしその場合、クラスタ・ノードとして構成するインスタンスとそのホストが、最初の 4 つのステップで説明する要件とガイドラインに準拠していることが条件です。

メモリ管理および拡張、CPU サイジングおよび拡張、その他の考慮事項を含む、パフォーマンス計画の重要な説明は、"システム・リソースの計画と管理" を参照してください。

最も標準的なシャード・クラスタ構成では、各クラスタ・ノードは 1 つの物理または仮想システム上の 1 つの InterSystems IRIS インスタンスで構成されます。この章で説明する手順では、この構成が前提となります。

LDAP サーバを使用して、シャード・クラスタのノード全体で一元的なセキュリティを実装することをお勧めします。InterSystems IRIS での LDAP の使用についての詳細は、"LADP ガイド" を参照してください。

HealthShare Health Connect ではシャーディングはサポートされません。

クラスタの自動導入方法

このセクションで概要を説明する手動手順のほかにも、InterSystems IRIS データ・プラットフォームでは、導入後に完全に機能するシャード・クラスタの自動導入方法がいくつか提供されています。

InterSystems Cloud Manager (ICM) を使用したシャード・クラスタの導入

InterSystems Cloud Manager (ICM) を使用すると、InterSystems IRIS データ・プラットフォームの任意の構成を自動的に導入できます。これには、ミラーリングされていないシャード・クラスタとミラーリングされたシャード・クラスタも含まれ、計算ノードを使用することも使用しないこともできます。プレーン・テキストの宣言型構成ファイル、シンプルなコマンド行インタフェース、およびコンテナへの InterSystems IRIS の導入を組み合わせることにより、ICM では、簡単かつ直感的にクラウド・インフラストラクチャまたは仮想インフラストラクチャをプロビジョニングし、目的の InterSystems IRIS アーキテクチャを他のサービスと共にそのインフラストラクチャに導入することができます。また、ICM を使用して InterSystems IRIS インストール・キットからインストールすることもできます。

パブリック・クラウド、プライベート・クラウド、または既存のインフラストラクチャ (ハードウェアを含む) へのシャード・クラスタの導入手順を含む ICM の詳細なドキュメントは、"InterSystems Cloud Manager ガイド" を参照してください。シャード・クラスタの導入の実践演習を含む ICM の簡単な紹介については、"機能紹介 : InterSystems Cloud Manager" を参照してください。ICM で導入したシャード・クラスタの実践練習については、"機能紹介 : インターシステムズ・シャード・クラスタの導入Opens in a new tab" を参照してください。

InterSystems Kubernetes Operator (IKO) を使用したシャード・クラスタの導入

KubernetesOpens in a new tab は、コンテナ化されたワークロードとサービスの導入、拡張、および管理を自動化するためのオープンソースのオーケストレーション・エンジンです。導入するコンテナ化されたサービスと、そのサービスを管理するポリシーを定義すると、Kubernetes は、必要なリソースを可能な限り効率的な方法で透過的に提供します。また、導入が指定値から外れた場合は導入を修復またはリストアするほか、拡張を自動またはオンデマンドで行います。InterSystems Kubernetes Operator (IKO) は、IrisCluster カスタム・リソースで Kubernetes API を拡張します。このリソースは、InterSystems IRIS のシャード・クラスタ、分散キャッシュ・クラスタ、またはスタンドアロン・インスタンスとして、すべて任意でミラーリングした状態で、Kubernetes プラットフォームに導入できます。

Kubernetes で InterSystems IRIS を導入するのに IKO は必須ではありませんが、プロセスが大幅に簡易化され、InterSystems IRIS 固有のクラスタ管理機能が Kubernetes に追加され、クラスタにノードを追加するなどのタスクが可能になります。このようなタスクは、IKO を使わなければインスタンスを直接操作して手動で行わなければなりません。

IKO の使用方法の詳細は、"InterSystems Kubernetes Operator の使用Opens in a new tab" を参照してください。

構成マージを使用したシャード・クラスタの導入

Linux および UNIX® システムで利用可能な構成マージ機能を使用すると、宣言型構成マージ・ファイルを導入内の各インスタンスに適用することにより、同じイメージから導入した InterSystems IRIS コンテナや、同じキットからインストールしたローカル・インスタンスの構成を変更することができます。

このマージ・ファイルは、既存のインスタンスを再起動したときに適用することもでき、インスタンスの構成パラメータ・ファイル (CPF) を更新します。CPF にはインスタンスのほとんどの構成設定が含まれており、これらの設定は開始時に毎回、インスタンス導入後の最初の設定を含めて CPF から読み取られます。導入時に構成マージを適用すると、インスタンスと共に提供された既定の CPF が実質的に独自の更新バージョンに置き換えられます。

構成マージを使用すると、ノード・タイプごとに別個のマージ・ファイルを呼び出してシャード・クラスタを導入できます。その際、データ ノード 1、次に残りのデータ・ノード、そして計算ノード (オプション) というように順番に導入できます (他のデータ・ノードを構成するには、データ・ノード 1 として構成されているインスタンスが実行されている必要があるため、他のインスタンスを導入する前に、このインスタンスを導入して正常に開始する必要があります)。導入ホストの名前が指定した正規表現で終わっていれば、1 つのマージ・ファイルを使用して、データ・ノードのクラスタを自動的に導入 (およびオプションでミラーリング) することもできます。データ・ノードの導入後、オプションで別のマージ・ファイルを使用して計算ノードを導入できます。

前のセクションで説明したように、ICM と IKO のどちらにも構成マージ機能が組み込まれています。

一般的な構成マージの使用法および具体的なシャード・クラスタの導入方法の詳細は、"構成マージを使用した InterSystems IRIS の自動構成Opens in a new tab" を参照してください。

データ・ノードの計画

クラスタに格納するシャード・データについて予測される作業セットと、そのデータに対して実行するクエリの性質に応じて、クラスタに適したデータ・ノードの数がわずか 4 台の場合もあります。いつでもデータ・ノードを既存のクラスタに追加し、シャード・データ を再分散できるため ("データ・ノードの追加とデータの再分散" を参照)、控えめになるのはもっともです。

(リソースの制限を条件として) プロダクション構成に必要なデータ・ノードの最適な数を最初に見積もるのに適した基本的な方法は、クラスタに必要なデータベース・キャッシュの総量を計算した後、状況およびリソースの可用性に応じて、サーバの数とサーバごとのメモリ量をどのように組み合わせるのが構成に適しているかを判断することです。これは、複数のシステム間で必要なリソースを分割する必要がある場合を除き、通常のサイジング・プロセスと同様です (メモリ管理および拡張、CPU サイジングおよび拡張、その他の考慮事項を含む、パフォーマンス計画の重要な説明は、"システム・リソースの計画と管理" を参照してください)。

必要なデータベース・キャッシュのサイズを決定するには、クラスタ上に格納することが予想されるシャード・データの総量、および頻繁にシャード・データと結合されるクラスタ上のシャード化されていないデータの量を見積もることから開始します。次にこれらの合計を使用して、シャード・データと頻繁に結合されるシャード化されていないデータの両方の作業セットを見積もり、これらを合わせたものが、クラスタ内のすべてのデータ・ノードで必要なデータベースのキャッシュ処理能力の合計を表します。この計算の詳細は、"InterSystems IRIS シャード・クラスタの計画" を参照してください。

ノード数とノードごとのメモリの両方に関するすべてのオプションを検討したら、各データ・ノード上のデータベース・キャッシュ (グローバル・バッファ・プール) がその処理能力の割り当て分に等しくなる、またはほぼ等しくなるように、十分なデータ・ノードを構成できます。さまざまなシナリオで、開始時のデータ・ノード数は、必要なキャッシュ・サイズの合計を、クラスタ・ノードとして導入するために使用できるシステムのメモリ容量で割ることで、大まかに決定することができます。

シャード・クラスタ内のすべてのデータ・ノードの仕様とリソースが同じであるか、少なくともほぼ同等である必要があります。クエリの並列処理の速度は、最も低速なデータ・ノードと同じ速度にしかなりません。さらに、クラスタ内のすべての InterSystems IRIS インスタンスの構成が一貫している必要があります。確実に正しい SQL クエリ結果が返されるようにするには、インスタンス・レベルで構成される照合などのデータベース設定やそれらの SQL 設定 (既定の日付形式など) がすべてのノードで同じでなければなりません。標準化された手順や、シャード・クラスタで利用可能な自動導入方法を使用すると、この一貫性を簡単に確保できます。

アプリケーションは任意のデータ・ノードのクラスタ・ネームスペースに接続して、全データセットをローカルのものであるかのように利用できるので、一般的なベスト・プラクティスとして、クラスタ内のすべてのデータ・ノード間でアプリケーション接続を負荷分散することをお勧めします。 ICM および IKO は、一般的なシナリオの場合、必要に応じてデータ・ノードのロード・バランサを自動的にプロビジョニングし、構成します。他の手段でシャード・クラスタを導入する場合は負荷分散メカニズムが必要となります。

データベース・キャッシュとデータベースのサイズの見積もり

シャード・クラスタを導入する前に、各データ・ノードに割り当てるデータベース・キャッシュのサイズを決定します。これは、予想される増大に十分対応できる空き容量を確保できるよう、各データ・ノードの既定のグローバル・データベースに必要なデータ量の予想サイズを把握するのにも有効です。

自動導入方法を使用してシャード・クラスタを導入する場合、これらの設定を導入の一部として指定できます。シャーディング API または管理ポータルを使用して手動で導入する場合は、シャード・クラスタを構成する前に各インスタンスのデータベース・キャッシュ・サイズを指定し、呼び出しでデータベース設定を指定することができます。両方の手動導入方法で既定の設定を提供しています。

以下に示すサイズはガイドラインであり、要件ではないこと、また、実践ではこれらの数値の見積もりが調整される可能性があることに留意してください。

データベース・キャッシュ・サイズ

"InterSystems IRIS シャード・クラスタの計画" で説明しているように、理想的にデータ・ノード上のデータベース・キャッシュに割り当てる必要があるメモリ量は、予想されるシャード・データの作業セットすべてのノードへの割り当て分に、頻繁にシャード・データに結合されるシャード化されていないデータの予想される作業セットすべてを加えたものになります。

グローバル・データベース・サイズ

"InterSystems IRIS シャード・クラスタの計画" で説明しているように、既定のグローバル・データベースのターゲット・サイズは以下のとおりです。

  • クラスタ・ネームスペース — シャード・データの合計サイズのうちの各サーバへの割り当て分 (上述のセクションで説明している計算による) に、予想を超える増大を見越したマージンを加えたもの。

  • ノード 1 のマスタ・ネームスペース — シャード化されていないデータの合計サイズに、予想を超える増大を見越したマージンを加えたもの。

すべての導入方法でこれらのデータベースのサイズが既定で構成されているため、ユーザがこの構成を行う必要はありません。ただし、これらのデータベースが配置されるストレージが、ターゲット・サイズに対応できる大きさであることを確認する必要があります。

インフラストラクチャのプロビジョニングまたは特定

必要なネットワーク・ホスト・システム (物理、仮想、またはクラウド) の数をプロビジョニングまたは特定します (各データ・ノードにつき 1 つのホスト)。

Important:

シャード・クラスタ内のすべてのデータ・ノードの仕様とリソースが同じであるか、少なくともほぼ同等である必要があります。クエリの並列処理の速度は、最も低速なデータ・ノードと同じ速度にしかなりません (計算ノードでも同じことが言えます。ただし、その場合、ストレージは考慮されません)。

ベスト・プラクティスとして、クラスタ内のすべてのデータ・ノード間でアプリケーション接続を負荷分散することをお勧めします。

クラスタのパフォーマンスを最大限に発揮させるためのベスト・プラクティスは、すべてのデータ・ノード間に低遅延のネットワーク接続を構成してネットワーク・スループットを最大化することです。例えば、すべてのデータ・ノードを同じデータ・センターまたはアベイラビリティ・ゾーン内の同じサブネットに配置します。この手順では、データ・ノードが TCP/IP 経由で相互にアクセス可能であることが前提となっており、推奨ネットワーク帯域幅はすべてのノード間で最小 1 GB、利用可能であれば 10 GB 以上が推奨されています。

データ・ノード・ホストへの InterSystems IRIS の導入

この手順では、各システムで単一の InterSystems IRIS インスタンスをホストするか、またはホストする予定であることが前提となっています。各インスタンスとそのホストがこのステップで説明する要件を満たす限り、最後のステップで新しく導入したインスタンスの代わりに既存のインスタンスを構成できます。

Important:

シャード・クラスタ内のすべての InterSystems IRIS インスタンスは、同じバージョンである必要があり、シャーディング・ライセンスを有する必要があります。

可能であれば、すべてのインスタンスについて、データベース・ディレクトリとジャーナル・ディレクトリを別個のストレージ・デバイスに配置してください。これは、大量のデータ取り込みがクエリの実行と同時に行われる場合に特に重要です。ファイル・システムの構成およびジャーナル・ストレージなどのストレージの構成のガイドラインについては、"システム・リソースの計画と管理" の "ストレージの計画" と "ファイル・システムの分離"、および "データ整合性ガイド" の "ジャーナリングの最善の使用方法" を参照してください。

クラスタ内のすべての InterSystems IRIS インスタンスの構成が一貫している必要があります。確実に正しい SQL クエリ結果が返されるようにするには、インスタンス・レベルで構成される照合などのデータベース設定やそれらの SQL 設定 (既定の日付形式など) がすべてのノードで同じでなければなりません。

各ホスト・システムで、以下を実行します。

  1. インターシステムズが提供するイメージからコンテナを作成する ("コンテナ内でのインターシステムズ製品の実行Opens in a new tab" を参照) か、キットから InterSystems IRIS をインストールする ("インストール・ガイドOpens in a new tab" を参照) ことにより、InterSystems IRIS のインスタンスを導入します。

  2. "データベース・キャッシュとデータベースのサイズの見積もり" の説明に従って、インスタンスのデータベースをホストするストレージ・デバイスがグローバル・データベースのターゲット・サイズに十分対応できる大きさであることを確認します。

  3. "データベース・キャッシュとデータベースのサイズの見積もり" で決定したサイズに従って、インスタンスのデータベース・キャッシュ (グローバル・バッファ・プール) を割り当てます。管理ポータルでデータベース・キャッシュを割り当てる手順は、"システム管理ガイド" の "“InterSystems IRIS の構成”" の章にある "メモリと開始設定Opens in a new tab" を参照してください。また、インスタンスの構成パラメータ・ファイル (CPF) を編集するか、UNIX® および Linux プラットフォームでは構成マージ・ファイルOpens in a new tabを使用して目的の値でインスタンスを導入することにより、globals パラメータを使用してキャッシュを割り当てることもできます。

    クラスタ・メンバの共有メモリ・ヒープのサイズを大きくすることがお勧めの手段となることもあります。共有メモリ・ヒープは、"構成パラメータ・ファイル・リファレンス" の gmheap パラメータの説明のように管理ポータルを使用して編集するか、上記の globals の説明のように gmheap を使用してインスタンスの CPF ファイルで編集できます。

    Note:

    InterSystems IRIS インスタンスのルーチン・キャッシュとデータベース・キャッシュおよび共有メモリ・ヒープに必要なメモリを見積もる際の一般的なガイドラインは、"メモリ要件の見積もり" を参照してください。

最後に、管理ポータル (次のセクション) または %SYSTEM.Cluster API (次の次のセクション) を使用して、導入したインスタンスをシャード・クラスタとして構成します。

管理ポータルを使用したクラスタの構成

最初の 4 つのステップ (データ・ノードの計画データベース・キャッシュとデータベース・サイズの見積もり、インフラストラクチャのプロビジョニングまたは特定、およびデータ・ノード・ホストへの InterSystems IRIS の導入) を完了したら、この手順を使用して、前のステップで導入したインスタンス (または準備しておいた既存のインスタンス) を、管理ポータルを使用してデータ・ノードの基本の InterSystems IRIS シャード・クラスタとして構成します。

以下のステップを使用して、クラスタ内の各ノードを構成します。

  1. ノード 1 の構成

  2. 残りのデータ・ノードの構成

すべてのシステムで、URL http://host:webserverport/csp/sys/UtilHome.csp をブラウザで読み込むことによって管理ポータルを開くことができます。host は、ホスト ID、port はインスタンスの Web サーバのポート番号です (http://localhost:52773/csp/sys/UtilHome.csp など) (この URL を使用して管理ポータルを開く方法の詳細は、コンテナに導入Opens in a new tabされたインスタンスの手順、または "InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" のセクションで、キットからインストールしたOpens in a new tabインスタンスの手順を参照してください)。Windows システムの場合、システム トレイにある InterSystems IRIS のアイコンをクリックして [管理ポータル] を選択することで、管理ポータルを開くこともできます。

この手順の後に、他の管理ポータルのシャード・クラスタ・オプションについて簡単に説明します。

データ・ノード 1 の構成

シャード・クラスタは最初のデータ・ノードを構成するときに初期化されます。最初のデータ・ノードをデータ・ノード 1、または単にノード 1 と呼びます。このデータ・ノードは、クラスタのシャード化されていないデータ、メタデータ、およびコードを格納し、すべてのデータ・ノードがそのデータにアクセスできるようにするマスタ・ネームスペースをホストするという点で、他のノードとは異なります。この区別は、より多くのデータがこの最初のノードに格納されるということ以外、ユーザに対して完全に透過的です。ただし、この違いも一般的には小さいものです。

最初の 4 つのステップ (データ・ノードの計画データベース・キャッシュとデータベース・サイズの見積もり、インフラストラクチャのプロビジョニングまたは特定、およびデータ・ノード・ホストへの InterSystems IRIS の導入) を完了したら、この手順を使用して、前のステップで導入したインスタンス (または準備しておいた既存のインスタンス) を、管理ポータルを使用してデータ・ノードの基本の InterSystems IRIS シャード・クラスタとして構成します。

すべてのシステムで、URL http://host:webserverport/csp/sys/UtilHome.csp をブラウザで読み込むことによって管理ポータルを開くことができます。host は、ホスト ID、port はインスタンスの Web サーバのポート番号です (http://localhost:52773/csp/sys/UtilHome.csp など) (この URL を使用して管理ポータルを開く方法の詳細は、コンテナに導入Opens in a new tabされたインスタンスの手順、または "InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" のセクションで、キットからインストールしたOpens in a new tabインスタンスの手順を参照してください)。Windows システムの場合、システム トレイにある InterSystems IRIS のアイコンをクリックして [管理ポータル] を選択することで、管理ポータルを開くこともできます。

ノード 1 を構成するには、以下の手順を実行します。

  1. インスタンスの管理ポータルを開き、[システム管理][構成][システム構成] [Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (既定値はほぼすべてのクラスタに適しているため、[ECP 接続の最大数] 設定の値を変更する必要はありません)。

  2. インスタンスを再起動します (管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動した後に再読み込みするだけでかまいません)。

  3. [Configure Node-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Node-Level]) に移動して、[構成] ボタンをクリックします。

  4. [Configure Node-Level Cluster] ダイアログで [Initialize a new sharded cluster on this instance] を選択し、表示されるプロンプトに次のように応答します。

    • [Cluster namespace] および [マスターネームスペース] のドロップダウンからそれぞれクラスタ・ネームスペースとマスタ・ネームスペースを選択します。どちらのドロップダウンにも以下が含まれます。

      • 作成する新しいネームスペースの既定の名前 (IRISCLUSTER および IRISDM) と、その既定のグローバル・データベース。

      • 対象となるすべての既存のネームスペース。

      シャード・クラスタを初期化すると、既定で、クラスタとマスタ・ネームスペース (それぞれ IRISCLUSTER および IRISDM という名前) と共に、その既定のグローバル・データベースと必要なマッピングが作成されます。ただし、クラスタ・ネームスペースとマスタ・ネームスペースの名前、およびそのグローバル・データベースの特性を制御するため、クラスタを構成する前に一方または両方のネームスペースと既定のデータベースを作成しておき、この手順でそれらを指定できます。例えば、"グローバル・データベース・サイズ" で説明されている考慮事項を踏まえ、クラスタ・ネームスペースの既定のグローバル・データベースの特性や、クラスタ内のすべてのデータ・ノードに複製されるシャード・データベースを制御するために、この方法を実行できます。

      Note:

      クラスタ・ネームスペースとして指定した既存ネームスペースの既定グローバル・データベースになんらかのグローバルまたはルーチンがあると、初期化がエラーで失敗します。

    • 場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、ホスト名のオーバーライドのプロンプトで IP アドレスを入力します。

    • [Enable mirroring] は選択しないでください。ミラーリングされたシャード・クラスタの導入手順は、"ミラーによる高可用性" で説明されています。

  5. [OK] をクリックして [Configure Node-Level] ページに戻ります。2 つのタブ [シャード][シャードテーブル] が表示されています。ノード 1 がクラスタ・アドレス (次の手順で必要になります) を含めて [シャード] に表示されるので、参照用にノード 1 の管理ポータルで [Configure Node-Level] ページを開いたままにしておくことができます。[シャードを検証] をクリックして、ノード 1 が正しく構成されていることを検証します。

残りのデータ・ノードの構成

ノードを構成したら、以下の手順を使用して追加の各データ・ノードを構成します。

  1. インスタンスの管理ポータルを開き、[システム管理][構成][システム構成] [Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (既定値はほぼすべてのクラスタに適しているため、[ECP 接続の最大数] 設定の値を変更する必要はありません)。

  2. インスタンスを再起動します (管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動した後に再読み込みするだけでかまいません)。

  3. [Configure Node-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Node-Level]) に移動して、[構成] ボタンをクリックします。

  4. [Configure Node-Level Cluster] ダイアログで [Add this instance to an existing sharded cluster] を選択し、表示されるプロンプトに次のように応答します。

    • クラスタ URL を入力します。これは、[Configure Node-Level] ページの [シャード] タブにノード 1 に対して表示されているアドレスです (前の手順の説明を参照してください)。クラスタ URL は、ノード 1 ホストの ID (ホスト名、または前の手順で IP アドレスを指定した場合は IP アドレス) に、InterSystems IRIS インスタンスのスーパーサーバ・ポートとクラスタ・ネームスペースの名前を加えたものになります。例えば、clusternode011.acmeinternal.com:1972:IRISCLUSTER のようになります (クラスタ・ネームスペースの名前は、既定の IRISCLUSTER である場合は省略できます)。

      Note:

      もう 1 つのノード (この手順で必要なノード) から見ると、コンテナ化された InterSystems IRIS インスタンスのスーパーサーバ・ポートは、そのコンテナが作成されたときにスーパーサーバ・ポートが公開されたホスト・ポートによって異なります。この詳細および例は、"コンテナ内でのインターシステムズ製品の実行" の "永続的な %SYS を使用した InterSystems IRIS コンテナの実行Opens in a new tab" と "InterSystems IRIS コンテナの実行 : Docker Compose の例Opens in a new tab"、および Docker ドキュメントの "Container networkingOpens in a new tab" を参照してください。

      キットでインストールした、そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。複数のインスタンスがインストールされている場合、スーパーサーバ・ポート番号は 51776 以上の範囲になります。インスタンスのスーパーサーバ・ポート番号を表示または変更するには、管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します。

    • [ロール] プロンプトで [データ] を選択して、インスタンスをデータ・ノードとして構成します。

    • 場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、ホスト名のオーバーライドのプロンプトで IP アドレスを入力します。

    • [Mirrored cluster] は選択しないでください。ミラーリングされたシャード・クラスタの導入手順は、"ミラーによる高可用性" で説明されています。

  5. [OK] をクリックして [Configure Node-Level] ページに戻ります。2 つのタブ [シャード][シャードテーブル] が表示されています。これまでに構成したデータ・ノードが [シャード] にノード 1 から表示されます。[シャードを検証] をクリックして、データ・ノードが正しく構成されていて、他のノードと通信できることを検証します。

    Note:

    構成するデータ・ノードが多数ある場合は、[詳細設定] ボタンをクリックし、[詳細設定] ダイアログで [割り当て時に自動的にシャードを検証] を選択することにより、検証操作を自動化できます。シャード・クラスタを導入する際は、このダイアログのその他の設定は既定値のままにします。

管理ポータルのシャーディング・オプション

[Rebalance] ボタンを使用すると、[REBALANCE] ダイアログが表示されます。このダイアログで、既存のクラスタに最近追加されたデータ・ノードを含むすべてのデータ・ノードに均等にシャード・データを再分散できます (再分散の実行中にシャード・テーブルをクエリすることはできません)。データの再分散の詳細は、"データ・ノードの追加とデータの再分散" を参照してください。

[詳細設定] ダイアログは、[Configure Node-Level] ページの [詳細設定] ボタンを押すと表示できます。このダイアログには以下のオプションがあります。

[Configure Node-Level] ページの [シャードテーブル] タブに、クラスタ上のすべてのシャード・テーブルに関する情報が表示されます。

%SYSTEM.Cluster API を使用したクラスタの構成

以下の手順を使用して、前のステップで %SYSTEM.Cluster API を使用してデータ・ノードの基本の InterSystems IRIS シャード・クラスタとして導入したインスタンス (または準備しておいた既存のインスタンス) を構成します。"インターシステムズ・クラス・リファレンス" の %SYSTEM.Cluster クラス・ドキュメントOpens in a new tabを参照してください (%SYSTEM パッケージのすべてのクラスと同様に、%SYSTEM.ClusterOpens in a new tab メソッドは、$SYSTEM.Cluster を介しても使用できます)。

以下のステップを使用して、クラスタ内の各ノードを構成します。

  1. ノード 1 の構成

  2. 残りのデータ・ノードの構成

ノード 1 の構成

シャード・クラスタは最初のデータ・ノードを構成するときに初期化されます。最初のデータ・ノードをデータ・ノード 1、または単にノード 1 と呼びます。このデータ・ノードは、クラスタのシャード化されていないデータ、メタデータ、およびコードを格納し、すべてのデータ・ノードがそのデータにアクセスできるようにするマスタ・ネームスペースをホストするという点で、他のノードとは異なります。この区別は、より多くのデータがこの最初のノードに格納されるということ以外、ユーザに対して完全に透過的です。ただし、この違いも一般的には小さいものです。

ノード 1 を構成するには、インスタンスの InterSystems ターミナルOpens in a new tabを開き、$SYSTEM.Cluster.Initialize()Opens in a new tab メソッドを呼び出します。以下に例を示します。

set status = $SYSTEM.Cluster.Initialize()
Note:

これらの手順で詳述されている各 API 呼び出しの戻り値 (成功の場合は 1 など) を確認するには、以下を入力します。

zw status

状況によっては通知なしで呼び出しが失敗することがあるため、各呼び出しの後に [ステータス] を確認することをお勧めします。呼び出しが成功しなかった ([ステータス][1] 以外) 場合、以下を入力することにより、わかりやすいエラー・メッセージが表示されます。

do $SYSTEM.Status.DisplayError(status) 

Initialize() 呼び出しにより、マスタ・ネームスペースとクラスタ・ネームスペース (それぞれ IRISDMIRISCLUSTER)、およびその既定のグローバル・データベースを作成し、必要なマッピングを追加します。ノード 1 はクラスタの他の部分に対してテンプレートとして機能します。クラスタ・ネームスペースの名前、既定のグローバル・データベース (シャード・データベースとも呼ばれる) の特性、およびマッピングは、2 番目に構成したデータ・ノードに直接複製され、さらにその他すべてのデータ・ノードに直接、または間接的に複製されます。インスタンスの SQL 構成設定も複製されます。

クラスタとマスタ・ネームスペースの名前、およびそれらのグローバル・データベースの特性を制御するには、クラスタのネームスペース、マスタ・ネームスペース、またはその両方として既存のネームスペースを指定 (いずれかまたは両方の名前を引数として含めることによって指定) します。以下に例を示します。

set status = $SYSTEM.Cluster.Initialize("CLUSTER","MASTER",,)

この際、指定した各ネームスペースの既存の既定グローバル・データベースは残ります。これにより、シャード・データベースの特性を制御でき、これらはクラスタ内の他のデータ・ノードに複製されます。

Note:

クラスタ・ネームスペースとして指定した既存ネームスペースの既定グローバル・データベースになんらかのグローバルまたはルーチンがあると、初期化がエラーで失敗します。

既定では、どのホストもクラスタ・ノードになることができます。Initialize() の 3 番目の引数で、IP アドレスまたはホスト名のコンマ区切りのリストを指定することで、クラスタに参加できるホストを指定できます。リストにないノードはクラスタに参加できません。

場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、4 番目の引数として IP アドレスを含めます (この引数にホスト名を指定することはできません。IP アドレスのみです)。いずれの場合も、2 番目のデータ・ノードを構成する際、ホスト識別子 (ホスト名または IP アドレス) を使用してノード 1 を識別します。インスタンスのスーパーサーバ (TCP) ポートも必要です。

Note:

もう 1 つのノード (この手順で必要なノード) から見ると、コンテナ化された InterSystems IRIS インスタンスのスーパーサーバ・ポートは、そのコンテナが作成されたときにスーパーサーバ・ポートが公開されたホスト・ポートによって異なります。この詳細および例は、"コンテナ内でのインターシステムズ製品の実行" の "永続的な %SYS を使用した InterSystems IRIS コンテナの実行Opens in a new tab" と "InterSystems IRIS コンテナの実行 : Docker Compose の例Opens in a new tab"、および Docker ドキュメントの "Container networkingOpens in a new tab" を参照してください。

キットでインストールした、そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。インスタンスのスーパーサーバ・ポート番号を表示または設定するには、そのインスタンスの管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します (インスタンスの管理ポータルを開く方法の詳細は、"InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" を参照してください)。

Initialize() メソッドは、InterSystems IRIS インスタンスが既にシャード・クラスタのノードであるか、ミラー・メンバである場合、エラーを返します。

残りのデータ・ノードの構成

各追加データ・ノードを構成するには、InterSystems IRIS インスタンスのターミナルOpens in a new tabを開き、既存のクラスタ・ノード (2 番目のノードを構成している場合はノード 1) のホスト名とその InterSystems IRIS インスタンスのスーパーサーバ・ポートを指定して $SYSTEM.Cluster.AttachAsDataNode()Opens in a new tab メソッドを呼び出します。以下に例を示します。

set status = $SYSTEM.Cluster.AttachAsDataNode("IRIS://datanode1:1972")

ノード 1 の初期化の際、Initialize() の 4 番目の引数として IP アドレスを指定した場合は、最初の引数でノード 1 を識別するためにホスト名の代わりに IP アドレスを使用します。以下に例を示します。

set status = $SYSTEM.Cluster.AttachAsDataNode("IRIS://100.00.0.01:1972")
Note:

指定する正しいスーパーサーバ・ポートの特定についての重要な情報は、前の手順、"ノード 1 の構成" を参照してください。

AttachAsDataNode() 呼び出しは、以下を実行します。

  • クラスタ・ネームスペースとシャード・データベースを作成し、それらを "ノード 1 の構成" で説明したとおり、テンプレート・ノードの設定 (最初の引数で指定) に合わせて構成し、必要なマッピングを作成して、これらをノード 1 のマスタ・ネームスペースのグローバル・データベースとルーチン・データベースに含めます (ユーザ定義のマッピングを含む)。

  • すべての SQL 構成オプションOpens in a new tabを、テンプレート・ノードに合わせて設定します。

  • このノードは AttachAsDataNode() のテンプレート・ノードとして後で使用される可能性があるため、クラスタに参加できるホストのリストを、ノード 1 の Initialize() 呼び出しで指定したリスト (ある場合) に設定します。

Note:

テンプレート・ノードのクラスタ・ネームスペースと同じ名前のネームスペースが新しいデータ・ノードに存在する場合は、そのネームスペースとそのグローバル・データベースがクラスタ・ネームスペースとシャード・データベースとして使用され、マッピングのみが複製されます。続いてこの新しいノードがテンプレート・ノードとして使用される場合は、これらの既存の要素の特性が複製されます。

AttachAsDataNode() 呼び出しは、InterSystems IRIS インスタンスが既にシャード・クラスタのノードまたはミラー・メンバであるか、最初の引数で指定されたテンプレート・ノードがミラー・メンバである場合、エラーを返します。

前のステップで説明したように、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させるには、IP アドレスを 2 番目の引数として含めます (この引数にホスト名を指定することはできません。IP アドレスのみです)。

すべてのデータ・ノードを構成したら、$SYSTEM.Cluster.ListNodes()Opens in a new tab メソッドを呼び出してこれらをリストできます。以下に例を示します。

set status = $system.Cluster.ListNodes()
NodeId  NodeType    Host          Port
1       Data        datanode1     1972
2       Data        datanode2     1972
3       Data        datanode3     1972

この例のように、データ・ノードには、クラスタにアタッチされる順序を表す数値 ID が割り当てられます。

ベスト・プラクティスとして、クラスタ内のすべてのデータ・ノード間でアプリケーション接続を負荷分散することをお勧めします。

クラスタへの計算ノードの追加の詳細は、"作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" を参照してください。

シャード・テーブルの作成とデータのロード

クラスタが完全に構成されたら、シャード・テーブルを計画および作成し、それらにデータをロードします。必要な手順は以下のとおりです。

シャーディングに関する既存のテーブルの評価

クラスタ上のシャード化されていないデータに対するシャード・データの割合は一般には高いですが、既存のスキーマのシャード・クラスタへの移行を計画する際は、すべてのテーブルがシャーディングに適した候補であるとは限らないことに留意してください。アプリケーションのテーブルのうち、どれをシャード・テーブルとして定義するのか、どれをシャード化されていないテーブルとして定義するのかを決定する際には、主に、以下の要因に基づいて、クエリ・パフォーマンスやデータ取り込みの速度の向上を検討する必要があります (これらの要因については、"シャーディングの効果の評価" でも説明しています)。計画の際、シャード・テーブルとシャード化されていないテーブルの区別は、アプリケーション SQL に対して完全に透過的であることに留意してください。インデックスの選択と同様に、シャーディングの決定はパフォーマンスにのみ影響します。

  • 全体のサイズ — 他の条件がすべて同じであれば、テーブルが大きいほど、効果が大きくなる可能性があります。

  • データ取り込み — 頻繁または大規模な (あるいはその両方の) INSERT 文をテーブルが受け取るかどうか。データの並列ロードは、シャーディングによってそのパフォーマンスを向上させることができることを意味します。

  • クエリの量 — 継続的に最も頻繁にクエリが実行されているテーブルはどれか。この場合も、他の条件がすべて同じであれば、クエリの量が多いほど、パフォーマンスが大きく向上する可能性があります。

  • クエリ・タイプ — クエリの量が多い、大きいテーブルの中でも、多くのデータを読み取る (特に、返す結果に対して読み取るデータの割合が高い) クエリを頻繁に受け取るものや多くの計算作業を行うものは、シャーディングに適した候補となります。例えば、幅広い SELECT 文によって頻繁にスキャンされるテーブルや、集約関数を含む多数のクエリを受け取るテーブルなどです。

シャーディングに適した候補をいくつか特定したら、以下の考慮事項について確認します。

  • 頻繁な結合 — "シャード・キーの選択" で説明するように、頻繁に結合されるテーブルは、同じシャード・キーでシャード化してコシャード結合を有効にすることができます。これにより、個々のシャード上でローカルに結合を実行できるため、パフォーマンスが向上します。等値条件の 2 つの大きいテーブルを結合する、頻繁に使用される各クエリを調べて、コシャード結合の機会を示しているかどうかを評価します。テーブルのコシャーディングによって効果が得られるクエリが全体的なクエリ作業負荷のかなりの部分を占めている場合、これらの結合されるテーブルはシャーディングに適した候補となります。

    ただし、大きいテーブルがはるかに小さいものに頻繁に結合されるときに、大きいテーブルをシャード化し、小さいテーブルをシャード化されないようにすると、最も効果的な場合があります。シャード化するテーブルを選択する際には、特定の結合の頻度やクエリ・コンテキストを入念に分析すると非常に役立ちます。

  • 一意制約 — シャード・キーが一意キーのサブセットでない限り、シャード・テーブルの一意制約によって、挿入/更新のパフォーマンスに重大な悪影響が生じることがあります。詳細は、"シャード・キーの選択" を参照してください。

Important:

他の要因に関係なく、アトミック性を必要とする複雑なトランザクションに含まれるテーブルはシャード化しないでください。

シャード・テーブルの作成

シャード・テーブル (およびシャード化されていないテーブル) は、任意のノードのクラスタ・ネームスペースで、シャーディング仕様を含む SQL CREATE TABLE 文を使用して作成できます。このシャーディング仕様は、テーブルがシャーディングされること、および使用されるシャード・キー (シャード・テーブルのどの行をどのシャードに格納するかを特定するフィールド) を示します。シャード間でテーブルの行を均等に分散するための確実な方法を提供する適切なシャード・キーでテーブルが作成されると、INSERT や専用ツールを使用してここにデータをロードできます。

シャード・キーの選択

既定では、シャード・テーブルを作成してシャード・キーを指定していない場合、システムにより割り当てられた RowIDOpens in a new tab をシャード・キーとして使用して、データがここにロードされます。例えば、2 つのシャードがある場合、RowID=1 の行は一方のシャードに、RowID=2 の行はもう一方のシャードにロードされます。これはシステムが割り当てたシャード・キー (SASK) と呼ばれ、データの均等分散を最適に保証し、最も効率的な並列データ・ロードを可能にするため、多くの場合、最も簡単で効果的なアプローチになります。

Note:

既定では、RowID フィールドは ID と名付けられ、列 1 に割り当てられます。ID というユーザ定義フィールドが追加されると、テーブルのコンパイル時に RowID フィールドは ID1 という名前に変更され、キーを指定せずにシャーディングを行う際、既定で使用されるのは、このユーザ定義の ID フィールドになります。

シャード・テーブルの作成時に、シャード・キーとして 1 つ以上のフィールドを指定するオプションもあります。これはユーザ定義のシャード・キー (UDSK) と呼ばれます。スキーマに RowID に対応しない意味的に重要な一意の識別子が含まれている場合、例えば、スキーマ内のいくつかのテーブルに accountnumber フィールドがある場合は、UDSK を使用する良い機会かもしれません。

その他の考慮事項として、大きなテーブルを結合するクエリがあります。各シャード・クエリはシャードローカル・クエリに分解されます。それぞれのクエリは個々に、各シャード上でローカルに実行され、そのシャードに存在するデータを参照すればよいだけです。ただし、シャード・クエリに 1 つ以上の結合が含まれる場合、シャードローカル・クエリは一般に他のシャードのデータを参照する必要があるため、処理時間が長くなると共に、データベース・キャッシュに割り当てられたメモリをより多く使用します。この余分なオーバーヘッドは、コシャード結合を有効にすることで回避できます。コシャード結合では、結合される 2 つのテーブルの行が同じシャード上に配置されます。結合がコシャードされている場合、その結合が関与するクエリは、同じシャード上の行のみを結合するシャードローカル・クエリに分解され、他のシャード・クエリと同様に個別にローカルに実行されます。

コシャード結合は、以下の 2 つのアプローチのいずれかを使用して有効にできます。

  • 2 つのテーブルに対して同等な UDSK を指定する。

  • 1 つのテーブルに SASK を使用し、もう 1 つのテーブルで coshard with キーワードと適切な UDSK を使用する。

同等な UDSK を使用するには、2 つのテーブルにシャード・キーとして頻繁に結合されるフィールドを指定するだけです。例えば CITATION テーブルと VEHICLE テーブルを結合し、各車両に関連付けられた交通違反通知を返す場合、以下のようにします。

SELECT * FROM citation, vehicle where citation.vehiclenumber = vehicle.vin

この結合をコシャード結合にするには、同等なそれぞれのフィールドをシャード・キーとして使用して、両方のテーブルを作成します。

CREATE TABLE VEHICLE (make VARCHAR(30) not null, model VARCHAR(20) not null, 
  year INT not null, vin VARCHAR(17) not null, shard key (vin))

CREATE TABLE CITATION(citationid VARCHAR(8) not null, date DATE not null, 
  licensenumber VARCHAR(12) not null, plate VARCHAR(10) not null,
  vehiclenumber VARCHAR(17) not null, shard key (vehiclenumber))

シャーディング・アルゴリズムは決定的であるため、特定の VIN の VEHICLE 行と CITATION 行 (ある場合) (それぞれ vin および vehiclenumber フィールドの値) は、同じシャード上に配置されます (ただし、フィールド値そのものが、行の各セットがどのシャードに配置されるかを特定することはありません)。したがって、上記のクエリが実行されると、各シャードローカル・クエリは、ローカルに (つまり、完全にそのシャード上で) 結合を実行できます。シャード・キーとして使用される 2 つのフィールド間の等値条件が含まれていなければ、結合をこのようにコシャードすることはできません。同様に、それぞれのテーブルのシャード・キーに、フィールド値の等値性を比較できるタイプの同じフィールド番号が同じ順序で存在する限り、複数フィールドの UDSK を使用して、コシャード結合を有効にできます。

多くのケースで有効なその他のアプローチでは、SASK を使用して 1 つのテーブルを作成し、最初のテーブルと共にコシャードされることを示す coshard with キーワード、および最初のテーブルのシステムが割り当てた RowID 値に等しい値を持つシャード・キーを指定することにより、もう 1 つのテーブルを作成します。例えば、以下のように、クエリで ORDER テーブルおよび CUSTOMER テーブルを頻繁に結合しているとします。

SELECT * FROM orders, customers where orders.customer = customers.%ID

この場合、結合の片方のフィールドは RowId を表すため、テーブル CUSTOMER を SASK を使用して次のように作成することから開始します。

CREATE TABLE CUSTOMER (firstname VARCHAR(50) not null, lastname VARCHAR(75) not null, 
  address VARCHAR(50) not null, city VARCHAR(25) not null, zip INT, shard)

コシャード結合を有効にするには、CUSTOMER テーブルへの参照として customer フィールドが定義されている ORDER テーブルを、そのフィールドで CUSTOMER テーブルとのコシャードを指定することで、シャーディングします。

CREATE TABLE ORDER (date DATE not null, amount DECIMAL(10,2) not null, 
  customer CUSTOMER not null, shard key (customer) coshard with CUSTOMER)

前に説明した UDSK の例と同様、これにより、ORDER の各行は、RowID 値がその customerid 値と一致する CUSTOMER の行と同じシャード上に配置されます (例えば、customerid=427 であるすべての ORDER 行は、ID=427 の CUSTOMER 行と同じシャード上に配置されます)。このようにして有効になったコシャード結合は、SASK でシャーディングされたテーブルの ID と、そのテーブルと共にコシャードされるテーブルに対して指定されるシャード・キーとの間の等値条件を含む必要があります。

一般には、スキーマで指定した以下のいずれかを使用することで、最も有用なコシャード結合を有効にできます。

  • 例に示したとおり、テーブルと coshard with キーワードとの構造的な関係を表す SASK。この例では、ORDER テーブル内の customerid が CUSTOMER テーブル内の RowId への参照となっています。

  • RowID に対応しないため、VEHICLE テーブルおよび CITATION テーブルの等値の vin フィールドと vehiclenumber フィールドの使用で説明したとおりに coshard with を使用してコシャードできない、意味的に重要なフィールドを含む UDSK (多くの結合で使用されますが、表面的またはアドホックな関係を表すフィールドを含む UDSK は、通常あまり役立ちません)。

結合がないクエリやシャード・データとシャード化されていないデータを結合するクエリと同様に、コシャード結合は、シャード数の増加に伴う拡張性に優れているだけでなく、結合されるテーブルの数の増加に伴う拡張性にも優れています。コシャードされていない結合は、シャードや結合されるテーブルの数が適度であれば、優れたパフォーマンスを発揮しますが、それらの数の増加に伴う拡張性にはそれほど優れていません。こうした理由から、例えば、クエリが頻繁に実行されるフィールドのセットのパフォーマンスを向上させるためにインデックスを考慮するのと同様に、この段階でコシャード結合を慎重に検討する必要があります。

シャード・キーを選択する際は、これらの一般的な考慮事項に留意してください。

  • シャード・テーブルのシャード・キーは変更できず、その値を更新することもできません。

  • 他の条件がすべて同じであれば、シャード間でのテーブルの行のバランスの取れた分散はパフォーマンスを向上させ、行の分散に使用されるアルゴリズムは、シャード・キーにさまざまな値が大量に含まれるが、主だった異常値はない場合に、最適なバランスを提供します (頻度に関して)。これは既定の RowID が一般にうまく機能するためです。類似した特性を持つ適切な UDSK は効率的であることも多いですが、不適切な UDSK はパフォーマンスの大きな向上が見られない不均衡なデータ分散につながる可能性があります。

  • 大きいテーブルがはるかに小さいものに頻繁に結合されるときに、大きいテーブルをシャード化し、小さいテーブルをシャード化されないようにすると、コシャード結合を有効にするより効果的な場合があります。

一意制約の評価

シャード・テーブルに一意制約がある場合 ("InterSystems SQL リファレンス" の “CREATE TABLE” エントリにある "フィールド制約Opens in a new tab" および "複数フィールドでの一意制約Opens in a new tab" を参照)、すべてのシャード間で一意性が保証されます。これは通常、挿入または更新される各行について、すべてのシャード全体で一意性を強制する必要があるため、挿入/更新のパフォーマンスが大幅に低下することを意味します。ただし、シャード・キーが一意キーのフィールドのサブセットである場合は、行が挿入または更新されるシャードでローカルに一意性を強制することにより、すべてのシャード全体で一意性を保証できるため、このようなパフォーマンスへの影響が回避されます。

例えば、指定したキャンパスの OFFICES テーブルに buildingnumber フィールドと officenumber フィールドが含まれているとします。建物番号はキャンパス内で一意であり、オフィス番号は各建物内で一意です。この 2 つを組み合わせて、各従業員のオフィス・アドレスをキャンパス内で一意にする必要があります。したがって、テーブルに対する一意制約を以下のように配置します。

CREATE TABLE OFFICES (countrycode CHAR(3), buildingnumber INT not null, officenumber INT not null,
  employee INT not null, CONSTRAINT address UNIQUE (buildingname,officenumber))

ただし、テーブルをシャーディングする予定で、挿入/更新のパフォーマンスへの影響を回避するには、buildingnumberofficenumber、またはその両方をシャード・キーとして使用する必要があります。例えば、buildingnumber に対してシャーディングを行う (shard key (buildingnumber) を上記の文に追加することによる) 場合、各建物のすべての行が同じシャードに配置され、アドレスが “building 10, office 27” である従業員の行を挿入する際に、buildingnumber=10 であるすべての行を含むシャードに、アドレスの一意性をローカルに適用できます。officenumber に対してシャーディングを行う場合、officenumber=27 であるすべての行が同じシャードに配置され、“building 10, office 27” の一意性を、そのシャードにローカルに適用できます。一方、SASK、または UDSK として employee を使用する場合は、buildingnumberofficenumber の任意の組み合わせが任意のシャードに現れる可能性があるため、“building 10, office 27” の一意性をすべてのシャードで適用しなければならず、パフォーマンスに影響が生じます。

このような理由により、次のいずれかが当てはまらない限り、シャード・テーブルでの一意制約の定義は避けることをお勧めします。

  • すべての一意制約がサブセットとしてシャード・キーと共に定義されている (これは一般に、SASK や他の UDSK ほど効果的ではない)。

  • 挿入および更新のパフォーマンスが、該当するテーブルのクエリ・パフォーマンスと比べてはるかに重要性が低いと思われる。

Note:

アプリケーション・コードで一意性を強制することにより (あるカウンタに基づくなど)、テーブル内の一意制約の必要性を排除でき、シャード・キーの選択が簡素化されます。

テーブルの作成

クラスタ内の任意のデータ・ノードのクラスタ・ネームスペースで標準の CREATE TABLE 文 ("InterSystems SQL リファレンス" の "CREATE TABLE" を参照) を使用して空のシャード・テーブルを作成します。"シャード・キーの選択" の例で示したように、テーブルを作成する際、2 種類のシャーディング仕様があります。

  • システムが割り当てたシャード・キー (SASK) でシャーディングを行うには、CREATE TABLE 文に shard キーワードを含めます。

  • ユーザ定義のシャード・キー (UDSK) でシャーディングを行うには、shard の後に key とシャーディングするフィールドを指定します (shard key (customerid, purchaseid) など)。

Note:

"CREATE TABLE" リファレンス・ページの "主キーの定義" で説明しているように、テーブルを作成する際に PK_IS_IDKEY オプションを設定すると、テーブルの RowID が主キーになります。このような場合、既定のシャード・キーを使用することは、主キーがシャード・キーとなることを意味します。ただし、主キーをシャード・キーとして使用する場合は、テーブルを作成する前にこの設定の状態を確認しなくても済むように、シャード・キーを明示的に指定することをお勧めします。

ノード 1 または別のデータ・ノードの管理ポータルの [シャード構成] ページ ([システム管理][構成][システム構成][シャード構成]) に移動して、クラスタ・ネームスペースを選択し、[シャードテーブル] タブを選択することによって、名前、所有者、シャード・キーを含む、クラスタ上のすべてのシャード・テーブルのリストを表示できます。データをロードしたテーブルに対し、[詳細] リンクをクリックすると、クラスタ内の各データ・ノードに格納されているテーブルの行数を確認できます。

シャード・テーブルの作成における制約

以下の制約が、シャード・テーブルの作成に適用されます。

  • ALTER TABLE を使用して既存のシャード化されていないテーブルをシャード・テーブルに入れることはできません (ただし、ALTER TABLE を使用してシャード・テーブルを変更することはできます)。

  • SHARD KEY フィールドのデータ型は、数値または文字列でなければなりません。シャード・キー・フィールドについて現在サポートされている照合は、完全一致、SQLString、および SQLUpper のみで、切り捨ては行われません。

  • ROWVERSION フィールドおよび SERIAL (%Counter) フィールド以外のすべてのデータ型がサポートされます。

  • シャード・テーブルに %CLASSPARAMETER VERSIONPROPERTYOpens in a new tab を含めることはできません。

このセクションのトピックの詳細および例は、"InterSystems SQL リファレンス" の "CREATE TABLE" を参照してください。

シャード・クラスを使用したシャード・テーブルの定義

DDL を使用したシャード・テーブルの定義に加え、シャード・クラス・キーワードを使用してクラスをシャード・クラスとして定義することができます。詳細は、"InterSystems SQL の使用法" の “テーブルの定義” の章にある "永続クラスの作成によるシャード・テーブルの定義Opens in a new tab" を参照してください。クラス・コンパイラが拡張され、コンパイル時にシャーディングと互換性のないクラス定義機能 (カスタマイズされたストレージ定義など) の使用に対して警告を発行するようになりました。さらに成熟した作業負荷メカニズムや一部の互換性のない機能のサポートは、InterSystems IRIS の今後のバージョンで導入される予定です。

クラスタへのデータのロード

データは、SQL をサポートする InterSystems IRIS インタフェースを介してシャード・テーブルにロードできます。InterSystems IRIS JDBC ドライバに組み込まれている透過的な並列ロード機能では、シャード・テーブルへのデータの高速一括ロードがサポートされています。これらのオプションを、以下で説明します。

  • JDBC クライアント・ツールや SQL シェルOpens in a new tabなど、SQL をサポートする任意の InterSystems IRIS インタフェースを介してクラスタ上の空のシャード・テーブルにデータをロードできます。十分に検証されたデータで迅速にテーブルを生成することを目的とした LOAD DATA コマンドOpens in a new tabは、テーブルまたはファイルからデータをロードします。INSERT SELECT FROM などの INSERT 文Opens in a new tabを使用してデータをロードすることもできます。

  • InterSystems IRIS JDBC ドライバOpens in a new tabは、シャード・テーブルのロードに対する特定の最適化を実装します。シャード・テーブルへの INSERT 文を準備する際、JDBC クライアントは自動的に各データ・ノードへの直接接続を開き、これらに挿入された行を分配することで、特定の構成や API 呼び出しを行うことなく、大幅にパフォーマンスを向上させます。JDBC を使用するどのアプリケーションのシャード・テーブルのロードも、透過的にこの機能を利用します。

    Note:

    ほとんどのデータ・ロード操作では、JDBC ドライバは、クラスタによって仲介されるデータ・ノードへの直接接続を使用します。これは、クラスタに割り当てる際に使用された IP アドレスまたはホスト名でデータ・ノードにアクセスすることをドライバ・クライアントに要求し、これが不可能な場合、このようなクエリを実行できないことを意味します。例えば、ローカル・クライアントから、ICM によってクラウドにプロビジョニングされたシャード・クラスタに接続する場合、データ・ノード 1 が認識して返すデータ・ノードの IP アドレスはクラウド・サブネット上にあるため、ローカル・マシンからはアクセスできません。

シャード化されていないテーブルの作成とロード

シャード・テーブルと同様に、一般的な方法を使用して任意のデータ・ノードにシャード化されていないテーブルを作成し、それらのテーブルにデータを読み込むことができます。これらのテーブルは、シャード化されていないクエリとそれらをシャード・テーブルに結合するシャード・クエリの両方について、クラスタですぐに使用できます (これは、シャード化されていないテーブルを、それらを必要とする可能性がある各ノードに明示的に複製する必要があるアーキテクチャとは対照的です)。シャード化されていないものとしてロードするテーブルを選択する際のガイダンスについては、"シャーディングに関する既存のテーブルの評価" を参照してください。

シャード・クラスタにおけるクエリ

マスタ・ネームスペースとそこに格納されているシャード・テーブルは完全に透過的であり、マスタ・ネームスペース内のシャード・テーブルとシャード化されていないテーブルの任意の組み合わせを含む SQL クエリは、InterSystems IRIS ネームスペース内のテーブルに対する SQL クエリとまったく同じです。シャード・テーブルやシャード・キーを特定するための特殊なクエリ構文は必要ありません。クエリでは、複数のシャード・テーブルを結合することも、シャード・テーブルとシャード化されていないテーブルを結合することもできます。以下に示した InterSystems IRIS シャード・クラスタの初期バージョンにおける制限および制約以外のすべてがサポートされています。これらの制限および制約をすべて取り除くことを目標としています。

  • 2 つのテーブルがコシャードされる場合、シャード・テーブルに強制される参照整合性制約は外部キーのみです。また、サポートされる唯一の参照アクションは NO ACTION です。

  • シャード・キー・フィールドのデータ型は、数値または文字列でなければなりません。シャード・キー・フィールドについて現在サポートされている照合は、完全一致、SQLString、および SQLUpper のみで、切り捨ては行われません。

  • シャード・テーブルの行レベルのセキュリティは、現在サポートされていません。

  • SQL ゲートウェイ接続経由でコンテンツを取得しているリンク・テーブルをシャード化することはできません。

  • 以下の InterSystems IRIS SQL 拡張の使用は、現在サポートされていません。

    • %FOREACH および %AFTERHAVING を含む集約関数拡張

    • 入れ子になった集約関数

    • SELECT 節または HAVING 節に集約関数と集約していないフィールドの両方を使用したクエリ (この集約していないフィールドを、GROUP BY 節で GROUP 項目としても使用している場合を除く)

    • FOR SOME %ELEMENT 述語条件

    • %INORDER キーワード

Note:

データ・ノードでクエリ・キャッシュを明示的に削除する場合、すべてのクエリ・キャッシュをマスタ・ネームスペースから削除することも、特定のテーブルについてクエリ・キャッシュを削除することもできます。これらのどちらのアクションでも、データ・ノードに削除が伝播されます。個々のクエリ・キャッシュの削除がデータ・ノードに伝播されることはありません。

クエリからタイムアウト・エラーが返された場合や messages.logOpens in a new tab に ECP 接続の問題が報告された場合、その一般的な原因はネットワークの問題です。このような場合は、%SYSTEM.Sharding API$SYSTEM.Sharding.VerifyShards()Opens in a new tab メソッドを呼び出すことをお勧めします。このメソッドによってテストが実行され、接続の回復が試行されて、その過程での診断情報が報告されます。

クエリで報告される特権エラーの原因は、さまざまなシャードにユーザが割り当てた特権の不一致にあることが考えられます。例えば、特定のテーブルやビューに SELECT 特権を割り当てている場合です。サーバごとに特権を検証し、その同期を図ることをお勧めします。IRIS の今後のバージョンでは、このプロセスを自動化する予定です。

その他のシャード・クラスタ・オプション

シャーディングには、ニーズに適したさまざまな構成およびオプションが用意されています。このセクションでは、関連するその他のオプションについて簡単に説明します。内容は以下のとおりです。

クラスタにおけるこれらのオプションの効果を評価する際には、インターシステムズのサポート窓口Opens in a new tabまでお問い合わせください。

データ・ノードの追加とデータの再分散

InterSystems IRIS のシャーディングは、スケーラビリティと弾力性を実現するために設計されています。"InterSystems IRIS シャード・クラスタの計画" で説明しているように、最初の導入時にクラスタに含めるデータ・ノードの数は、シャード・テーブルで予測される作業セット、利用可能な計算リソースを含む (ただし、これらに限定されない) いくつかの要素の影響を受けます。ただし、時間の経過に伴って、クラスタ上のシャード・データの量が大幅に増加したり、リソース制約が削除されるといったさまざまな理由により、データ・ノードを追加する場合があります。"シャード・クラスタの導入" で説明されている自動または手動の導入方法を使用して、データ・ノードを追加できます。

"InterSystems IRIS のシャーディングの概要" で説明しているように、シャーディングでは、すべてのデータ・ノードでクエリの分解とそれらの実行を並列で実行することにより、クエリ処理のスループットを調整し、結果はマージおよび集約され、完全なクエリ結果としてアプリケーションに返されます。一般に、データ・ノードに格納されるシャード・データの量が多いほど、結果を返すのに時間がかかり、全体的なクエリのパフォーマンスは、最も遅いデータ・ノードによって制限されます。したがって、最適なパフォーマンスを得るには、シャード・データの格納が、クラスタのデータ・ノード間でほぼ均等になるようにする必要があります。

データ・ノードの追加後は該当しませんが、すべてのデータ・ノードでクラスタのシャード・データを再分散することで、このほぼ均等な分散がリストアされます。クラスタはその動作を中断せずに再分散できます。

データ・ノードの追加およびデータの再分散のプロセスを、次の例で説明します。

  • データ・ノードをクラスタに追加した後、既存のシャード・テーブルの行は、再分散するまで元のノードでそれらが配置されていた場所に維持されます。

    データ・ノードが追加される
    The steps in adding a data node and rebalancing data are illustrated
  • 既存のテーブルに追加した行、または新しく作成してデータを読み込んだテーブルの形式でスケーリングされたクラスタにシャード・データを追加した場合、そのストレージは、各テーブルのシャード・キーによって異なります。

    • テーブルにシステム割り当てシャード・キー (SASK) がある場合、新しい行は、新しいノードを含むすべてのデータ・ノードに均等に格納されます。

    • テーブルにユーザ定義のシャード・キー (UDSK) がある場合、新しい行は元のデータ・ノード・セットにのみ均等に格納され、新しく追加したノードには格納されません。(ただし、新しいノードが追加される前に、既存の UDSK テーブルが存在しなかった場合は、新しい UDSK テーブル内の行がすべてのデータ・ノードに分散されます。)

    新しいデータがシャード・キーに基づいて格納される
    The steps in adding a data node and rebalancing data are illustrated
  • データ・ノードの追加後、クラスタ上でのクエリの並列処理を最大限に活用するには、クラスタに格納されたシャード・データを再分散し、今後クラスタに追加されるデータの分散された格納を可能にします。

    再分散によりシャード・データが均等に格納される
    The steps in adding a data node and rebalancing data are illustrated
  • 再分散後、両方の行が既存のテーブルに追加され、新しく作成されたテーブルの行も、シャード・キーに関係なくすべてのデータ・ノードに分散されます。したがって、再分散後、すべてのシャード・データ (既存のテーブル、既存のテーブルに追加された行、新しいテーブル内) は、すべてのデータ・ノードに均等に分散されます。

    新しいシャード・データが均等に格納される
    The steps in adding a data node and rebalancing data are illustrated

再分散操作は以下の 2 つの方法のいずれかで開始できます。

  • 管理ポータルの [Configure Node-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Node-Level]) で [Rebalance] をクリックすることにより表示される [Rebalance] ダイアログを使用する。

  • $SYSTEM.Sharding.Rebalance()Opens in a new tab API 呼び出しを使用する。

$SYSTEM.Sharding.Rebalance()Opens in a new tab のクラス・リファレンス・ドキュメントでは、いずれかのインタフェースを使用して指定できるパラメータについて説明しているほか、データ・ノード間でのシャード・データの再分散の詳細な手法についても説明しています。

再分散操作では、シャード・テーブル上でのほぼすべての操作が許可されていますが、シャード・テーブルへの JDBC バッチ挿入 (または仲介される JDBC バッチ挿入を使用するすべてのバルク・ロード・ユーティリティ) は例外で、これが試みられるとエラーが返されます。再分散操作の実行中には、クエリ・パフォーマンスに小さな悪影響を及ぼす場合があり、さらに小さな規模では、更新、挿入、削除などを含むその他の操作、テーブルの作成、変更、および削除、新しいシャードの割り当てにも悪影響を及ぼす場合があります。

パフォーマンスがかなりの懸念事項となる場合は、その操作に時間制限を設け、トラフィックが少ない時間やメンテナンスの時間にスケジュールすることもできます。時間制限に達すると、再分散操作は (まだ完了していない場合) データの移動を停止します (ただし、一部のクリーンアップ・タスクは短時間継続する場合があります)。再分散するデータが残っている場合は、選択した時間に、前の再分散が中断された場所を取得して別の再分散操作を開始できます。このアプローチを使用して、ニーズに合った長さでスケジュールされた一連の操作により、クラスタを完全に再分散できます。

この API 呼び出しを使用する場合、呼び出しにより移動されるデータの最小量を指定することもできます。指定された制限時間内にそれだけの量のデータを移動できない場合、再配分は発生しません。データ・ノードを追加したら、そのデータを再分散することによりパフォーマンスを最大限に高めることに留意してください。

ミラー・データ・ノードによる高可用性

InterSystems IRIS ミラーとは、物理的に独立した複数の InterSystems IRIS インスタンスの論理グループで、プロダクション・データベースの同一コピーを同時に保持します。これによって、データベースへのアクセスを提供しているインスタンスが使用不可になった場合でも、別のインスタンスが自動的にすばやく引き継ぐことができます。この自動フェイルオーバー機能により、ミラー内の InterSystems IRIS データベースに高可用性が提供されます。InterSystems IRIS のミラーリングの詳細は、"高可用性ガイドOpens in a new tab" を参照してください。

シャード・クラスタ内のデータ・ノードをミラーリングすると、データ・ノードにフェイルオーバー機能を提供し、高可用性を実現できます。シャード・クラスタ内のミラーリングされた各データ・ノードには、少なくともインスタンスのフェイルオーバー・ペアOpens in a new tabが含まれます。ペアの一方は常にプライマリとして動作するのに対し、他方はバックアップとして動作し、フェイルオーバー・パートナーが利用できなくなった場合にプライマリとして引き継ぐことができます。シャード・クラスタ内のデータ・ノード・ミラーに DR (災害復旧) 非同期メンバOpens in a new tabを 1 つ以上含めることもできます。このメンバをフェイルオーバー・メンバに昇格させることで、無効になったフェイルオーバー・パートナーを置き換えたり、フェイルオーバー・パートナーが両方とも利用できなくなった場合に災害復旧を提供したりできます。一般的な構成では、DR 非同期をフェイルオーバー・ペアとは別のデータ・センターまたはクラウドのアベイラビリティ・ゾーンに配置して、すべてのメンバが同じ障害や停止の影響を受ける可能性を最小限に抑えることを強くお勧めします。

シャード・クラスタは、すべてミラーリングするか、まったくミラーリングしないかのどちらかにする必要があります。同じクラスタ内にミラーリングされたデータ・ノードとミラーリングされていないデータ・ノードを混在させることはできません。

(管理ポータルまたは %SYSTEM.Cluster API のいずれかを使用した) ミラーリングされたデータ・ノードの手動での構成手順では、既存のミラー構成が認識されます。つまり、既存の環境と要件に応じて、ミラーリングされていないインスタンスか、ミラーリングされたインスタンスのいずれかから、以下のようにミラーリングされたデータ・ノードのシャード・クラスタを構成できます。

  • ミラーリングされたシャード・クラスタとしてミラーリングされていないインスタンスを構成する場合、追加する対象の各プライマリが、クラスタにアタッチされる前に自動的にミラー・プライマリとして構成されます。その後、別のミラーリングされていないインスタンスを、そのバックアップとして追加できます。追加したインスタンスは、自動的に適切に構成されてからクラスタにアタッチされます。

  • 既存のミラーをシャード・クラスタとして構成する場合は、追加する各プライマリは、既存のミラー構成に変更を加えることなく、データ・ノード・プライマリとしてクラスタにアタッチされます。その後、フェイルオーバー・パートナーをそのプライマリのバックアップとして指定して、クラスタに追加できます。(データ・ノード・プライマリとして追加したミラーリングされたインスタンスにフェイルオーバー・パートナーがない場合は、ミラーリングされていないインスタンスをバックアップとして指定できます。これは自動的に適切に構成されてからクラスタにアタッチされます。)

  • 同様に、ミラーリングされていないインスタンスを、データ・ノード・ミラーの DR 非同期メンバとして追加し、自動的に適切に構成してからクラスタにアタッチするか、フェイルオーバー・メンバが既にクラスタにアタッチされている既存のミラーのDR 非同期メンバを、適切に指定することで追加することができます。

  • どの場合も、クラスタ・ネームスペースとマスタ・ネームスペース (既定では IRISCLUSTERIRISDM) のグローバル・データベースは、ミラー (前者はすべてのデータ・ノード、後者はノード 1 のミラー) に追加されます。既存のミラー・メンバを構成する場合は、ミラーリングされたデータベースは、シャード・クラスタの構成に従ってミラーリングされたまま残ります。

一般には、ミラーリングされていないすべてのインスタンスで開始してシャード・クラスタ導入の一環としてミラーを構成するか、既存のミラーからすべてのデータ・ノードを構成するのがベスト・プラクティスです。

"シャード・クラスタの導入" で説明されているいずれかの方法を使用して、ミラーリングされたシャード・クラスタを導入できます。そこで説明されている自動導入方法にはすべて、ミラーリングがオプションとして含まれます。このセクションでは、ミラーリングされたクラスタに関する手順を説明し、"シャード・クラスタの導入" のセクションに含まれる手動手順の最後のステップを置き換えます。まず、"シャード・クラスタの導入" のセクションで説明されているステップを実行してから、以下のように、ここで説明する手順の 1 つを使用して導入を完了します。

  1. データ・ノードの計画

  2. データベース・キャッシュとデータベースのサイズの見積もり

  3. インフラストラクチャのプロビジョニングまたは特定

    Note:

    最初のステップで計画したミラーリングされたデータ・ノードにホストをそれぞれ 2 つ指定する必要があることに注意してください。例えば、8 個のデータ・ノードが必要な計画の場合、クラスタには 16 個のホストが必要です。シャード・クラスタ内のすべてのデータ・ノードに対して推奨されているように、ミラーを構成する 2 つのホストの仕様とリソースは、同じであるか、少なくともほぼ同等である必要があります。

  4. データ・ノード・ホストへの InterSystems IRIS の導入

  5. 以下のいずれかを使用した、ミラーリングされたクラスタ・ノードの構成

ただし、クラスタを導入する際のベスト・プラクティスとして、以下を推奨します。

Note:

管理ポータルのミラーリングのページおよび %SYSTEM.MIRROR API では、ここで説明されている %SYSTEM.ClusterOpens in a new tab API および管理ポータルのシャーディングのページより多くのミラー設定を指定できます。"高可用性ガイド" の “ミラーリングの構成” の章を参照してください。ミラーリングされていないインスタンスからクラスタを作成し、管理ポータルまたは API で自動的にミラーを構成する予定であっても、作業の前に "“ミラーリングの構成”" の章の "ミラーの作成" で手順と設定を確認することをお勧めします。

このセクションの手順を使用して、ミラーリングされたネームスペース・レベルのクラスタを導入することはできません。ただし、ミラーリングされていないネームスペース・レベルのクラスタを導入してから ("ネームスペース・レベル・アーキテクチャの導入" を参照)、そのクラスタをミラーリングされたクラスタに変換できます ("ミラーリングされていないクラスタからミラーリングされたクラスタへの変換" を参照)。

ミラーリングされたクラスタの考慮事項

ミラーリングされたシャード・クラスタの導入時には、以下のセクションで説明する重要なポイントに留意してください。

ミラーリングされたクラスタに計算ノードを含めることによる、フェイルオーバー前後での透過的なクエリ実行

計算ノードには永続データが保存されないため、計算ノードそのものはミラーリングしませんが、ミラーリングされたクラスタに計算ノードを含めると便利な場合があります。これは、関係のあるワークロードが、"作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" (計算ノードとそれらの導入手順の詳細情報を提供) で説明されている高度なユース・ケースに一致しない場合でも同様です。

ミラーリングされたシャード・クラスタが非同期クエリ・モード (既定) である場合に、シャード・クエリの実行中にデータ・ノード・ミラーがフェイルオーバーすると、エラーが返され、アプリケーションはクエリを再試行しなければなりません。この問題に対処する方法は 2 つあります。つまり、以下のように、フェイルオーバー前後でシャード・クエリを透過的に実行できるようにすることです。

  • クラスタを同期クエリ・モードに設定する。ただし、これには欠点があります。同期モードの場合、シャード・クエリをキャンセルできず、IRISTEMP データベースの使用量が増えます。このため、シャード・クエリが増加すると、利用可能なストレージ領域がすべて消費されて、クラスタの動作が中断するリスクが高くなります。

  • 計算ノードをクラスタに含める。計算ノードには、計算ノードが割り当てられているミラーリングされたデータ・ノードとのミラー接続があるため、フェイルオーバーの前後で非同期モードでクエリを透過的に実行できます。

上記のオプションを考慮すると、ワークロードにとってフェイルオーバー前後でクエリを透過的に実行できることが重要である場合は、ミラーリングされたシャード・クラスタに計算ノードを含めることをお勧めします (少なくとも、ミラーリングされたデータ・ノードと同じ数の計算ノードが必要です)。計算ノードを含めることができない状況の場合は、$SYSTEM.Sharding.SetOption()Opens in a new tab API 呼び出しの RunQueriesAsync オプション (%SYSTEM.Sharding API を参照) を使用して、クラスタを非同期モードに変更できます。ただし、変更するのは、シャード・クエリをキャンセルできること、および IRISTEMP のサイズを管理できることよりも、フェイルオーバー前後でクエリを透過的に実行できることの方が重要な場合だけにしてください。

導入前のクラスタおよびマスタ・ネームスペースの作成

シャード・クラスタは最初のデータ・ノードを構成するときに初期化されます。最初のデータ・ノードをデータ・ノード 1、または単にノード 1 と呼びます。ここには既定で、クラスタとマスタ・ネームスペース (それぞれ IRISCLUSTER および IRISDM という名前) と共に、その既定のグローバル・データベースと必要なマッピングの作成が含まれます。ただし、クラスタ・ネームスペースとマスタ・ネームスペースの名前、またはそのグローバル・データベースの特性 (あるいはその両方) を制御するため、クラスタを構成する前に一方または両方のネームスペースと既定のデータベースを作成しておき、この手順でそれらを指定できます。ミラーリングされたシャード・クラスタの導入時にこれを行うことを計画している場合、ミラーリングされていないインスタンスで開始することはできませんが、代わりに次の手順を示された順序で実行する必要があります

  1. それぞれ 2 つのフェイルオーバー・メンバを含め、想定される各データ・ノードにミラーを構成します。

  2. 各ミラー・プライマリ上で対象のクラスタ・ネームスペースを作成し (既定の名前 IRISCLUSTER またはオプションで別の名前を使用)、データ・ノード 1 としてアタッチするミラーのプライマリ上で対象のマスタ・ネームスペース (既定の名前 IRISDM) を作成します。各ネームスペースの作成時に、[グローバルのための既存のデータベースを選択] のプロンプトで [新規データベース作成] を選択し、データベース・ウィザードの 2 ページ目の下部にある [ミラー・データベース?] に [はい] と設定して、ミラーリングされたデータベースとしてネームスペースの既定のグローバル・データベースを作成します。

  3. このセクションで説明したとおり、データ・ノードとしてミラーを構成し、作成したネームスペースをクラスタおよびマスタ・ネームスペースとして指定します。

すべてのミラー・メンバでの IP アドレスのオーバーライドの有効化

場合によっては、対象のクラスタ・ノード上の InterSystems IRIS インスタンスに認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このため、または他の何らかの理由により、他のクラスタ・ノードが代わりにその IP アドレスを使用してノードと通信する場合、管理ポータルの [Override hostname with IP address] プロンプトで、または $SYSTEM.Cluster.InitializeMirrored()Opens in a new tab および $SYSTEM.Cluster.AttachAsMirroredNode()Opens in a new tab 呼び出しの引数として、そのノードの IP アドレスを指定することでこれを有効にできます。ミラーの 1 つのメンバに対してこれを実行したら、以下のようにすべてのミラー・メンバに対してこれを実行する必要があります。

  • ミラーリングされていないインスタンスをミラーリングされたデータ・ノードとして構成する場合は、上記のプロンプトまたは呼び出しを使用して、すべてのミラー・メンバに対して IP アドレスのオーバーライドを必ず有効にしてください。

  • ただし、既存のミラーをデータ・ノードとして構成する場合は、クラスタに追加する前に、ミラーのすべてのメンバに対して IP アドレスのオーバーライドを有効にする必要があります。管理ポータルと API のどちらの手順を使用しているかに関係なく、これは、各ノードで、InterSystems ターミナルOpens in a new tab・ウィンドウを開き、(任意のネームスペースで) $SYSTEM.Sharding.SetNodeIPAddress()Opens in a new tab ("%SYSTEM.Sharding API" を参照) を呼び出すことによって行ってください。以下に例を示します。

    set status = $SYSTEM.Sharding.SetNodeIPAddress("00.53.183.209")
    

    ノードでこの呼び出しを使用したら、他の API 呼び出しでそのノードを参照するのに、ホスト名ではなく、指定した IP アドレスを使用する必要があります ($SYSTEM.Cluster.AttachAsMirroredNode()Opens in a new tab 呼び出し (ここでアタッチされるプライマリを指定する必要があります) を使用してミラー・バックアップをクラスタにアタッチする場合など)。

ミラーリングされたクラスタのメタデータの更新

%SYSTEM.ClusterOpens in a new tab API および管理ポータルのシャーディングのページ以外で、例えば管理ポータルのミラーリングのページや SYS.MirrorOpens in a new tab API を使用して、クラスタのミラーリングされたデータ・ノードを変更する場合は、変更後にミラーリングされたクラスタのメタデータを更新する必要があります。詳細は、"変更をミラーリングするためのクラスタ・メタデータの更新" を参照してください。

管理ポータルを使用したミラーリングされたクラスタの構成

すべてのシステムで、URL http://host:webserverport/csp/sys/UtilHome.csp をブラウザで読み込むことによって管理ポータルを開くことができます。host は、ホスト ID、port はインスタンスの Web サーバのポート番号です (http://localhost:52773/csp/sys/UtilHome.csp など) (この URL を使用して管理ポータルを開く方法の詳細は、コンテナに導入Opens in a new tabされたインスタンスの手順、または "InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" のセクションで、キットからインストールしたOpens in a new tabインスタンスの手順を参照してください)。Windows システムの場合、システム トレイにある InterSystems IRIS のアイコンをクリックして [管理ポータル] を選択することで、管理ポータルを開くこともできます。

ミラーリングされたクラスタを管理ポータルを使用して構成するには、以下の手順を実行します。

  1. 対象のノード 1 プライマリと対象のノード 1 バックアップの両方でインスタンスの管理ポータルを開き、[システム管理][構成][システム構成][Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (ここで [ECP 接続の最大数] 設定を変更する必要はありません)。続いて、指示に従ってインスタンスを再起動します。管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動したら再読み込みするだけでかまいません。

  2. 対象のプライマリで、[Configure Node-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Node-Level]) に移動して、[構成] ボタンをクリックします。

  3. [Configure Node-Level Cluster] ダイアログで [Initialize a new sharded cluster on this instance] を選択し、表示されるプロンプトに次のように応答します。

    1. [Cluster namespace] および [マスターネームスペース] のドロップダウンからそれぞれクラスタ・ネームスペースとマスタ・ネームスペースを選択します。どちらのドロップダウンにも以下が含まれます。

      • 作成する新しいネームスペースの既定の名前 (IRISCLUSTER および IRISDM) と、その既定のグローバル・データベース。

      • 対象となるすべての既存のネームスペース。

      シャード・クラスタを初期化すると、既定で、クラスタとマスタ・ネームスペース (それぞれ IRISCLUSTER および IRISDM という名前) と共に、その既定のグローバル・データベースと必要なマッピングが作成されます。ただし、クラスタ・ネームスペースとマスタ・ネームスペースの名前、およびそのグローバル・データベースの特性を制御するため、クラスタを構成する前に一方または両方のネームスペースと既定のデータベースを作成しておき、この手順でそれらを指定できます。例えば、"グローバル・データベース・サイズ" で説明されている考慮事項を踏まえ、クラスタ・ネームスペースの既定のグローバル・データベースの特性や、クラスタ内のすべてのデータ・ノードに複製されるシャード・データベースを制御するために、この方法を実行できます。

      Note:

      シャード・クラスタとして既存のミラーを構成する際に既存のネームスペースを使用する場合は、"導入前のクラスタおよびマスタ・ネームスペースの作成" の手順に従います。

      クラスタ・ネームスペースとして指定した既存ネームスペースの既定グローバル・データベースになんらかのグローバルまたはルーチンがあると、初期化がエラーで失敗します。

    2. 場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、ホスト名のオーバーライドのプロンプトで IP アドレスを入力します。

    3. [Enable mirroring] を選択し、アービターOpens in a new tabを構成する場合はその場所とポートを追加します (これは強く推奨されるベスト・プラクティスです)。

  4. [OK] をクリックして [Configure Node-Level] ページに戻ります。2 つのタブ [シャード][シャードテーブル] が表示されています。ノード 1 がクラスタ・アドレス (次の手順で必要になります) を含めて [シャード] に表示されるので、参照用にノード 1 の管理ポータルで [Configure Node-Level] ページを開いたままにしておくことができます。まだバックアップを追加していないため、ミラー名はまだ表示されません。

  5. 対象のノード 1 バックアップで、プライマリの [Configure Node-Level] ページに移動し、[構成] ボタンをクリックします。

  6. [Configure Node-Level Cluster] ダイアログで [Add this instance to an existing sharded cluster] を選択し、表示されるプロンプトに次のように応答します。

    1. [Configure Node-Level] ページの [シャード] タブに、[Cluster URL] として、ノード 1 プライマリに対して表示されているアドレスを入力します (前のステップを参照)。

    2. [ロール] プロンプトで [データ] を選択して、インスタンスをデータ・ノードとして構成します。

    3. 場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、ホスト名のオーバーライドのプロンプトで IP アドレスを入力します。

    4. [Mirrored cluster] を選択して以下を実行します。

      • [Mirror role] ドロップダウンから [バックアップ・フェイルオーバー] を選択します。

      • 前のステップでノード 1 を初期化する際にアービターを構成した場合は、その際に追加したものと同じアービターの場所とポートを追加します。

  7. [OK] をクリックして [Configure Node-Level] ページに戻ります。2 つのタブ [シャード][シャードテーブル] が表示されています。これまでに構成したノード 1 プライマリとバックアップは [シャード] のノード 1 の位置に、割り当てられているミラー名が含まれた状態で一覧表示されます。

  8. 残りのミラーリングされたデータ・ノードに対し、[シャード有効] オプションの設定と両方のインスタンスの再起動から始めて、前のステップを繰り返します。プライマリをクラスタに追加する場合は、前述のように、ノード 1 プライマリのアドレスを [Cluster URL] として入力します。ただし、バックアップを追加する場合には、先ほど追加したプライマリのアドレスを [Cluster URL] として入力します (ノード 1 プライマリのアドレスではありません)。

  9. ミラーリングされたデータ・ノードをそれぞれ追加したら、クラスタ内のプライマリの 1 つで [Configure Node-Level] ページに移動して [シャードを検証] をクリックし、新しいミラーリングされたノードが正しく構成されていて、他のノードと通信できることを検証します。この作業は、ミラーリングされたデータ・ノードをすべて追加するまで待つこともできます。また、構成するデータ・ノードが多数ある場合は、[詳細設定] ボタンをクリックし、[詳細設定] ダイアログで [割り当て時に自動的にシャードを検証] を選択することにより、検証操作を自動化できます (シャード・クラスタを導入する際は、このダイアログのその他の設定は既定値のままにします)。

%SYSTEM.Cluster API を使用したミラーリングされたクラスタ・ノードの構成

この API を使用して、ミラーリングされたクラスタを構成するには、以下の手順を実行します。

  1. 対象のノード 1 プライマリで、インスタンスの InterSystems ターミナルOpens in a new tabを開き、$SYSTEM.Cluster.InitializeMirrored()Opens in a new tab メソッドを呼び出します。以下に例を示します。

    set status = $SYSTEM.Cluster.InitializeMirrored()
    
    Note:

    これらの手順で詳述されている各 API 呼び出しの戻り値 (成功の場合は 1 など) を確認するには、以下を入力します。

    zw status
    

    呼び出しが成功しなかった場合、以下を入力することにより、わかりやすいエラー・メッセージが表示されます。

    do $SYSTEM.Status.DisplayError(status) 
    

    “%SYSTEM.Cluster API を使用したクラスタの導入” の "ノード 1 の構成" で説明したように、この呼び出しは、$SYSTEM.Cluster.Initialize()Opens in a new tab と同じようにノード上のクラスタを初期化します。InitializeMirrored() の最初の 4 つの引数 (必須のものはありません) の説明については、このセクションを確認してください。これらの引数は Initialize() の引数と同じです。インスタンスがまだミラー・プライマリでない場合、次の 5 つの引数を使用してこれを構成します。既にプライマリである場合、これらは無視されます。ミラー引数は以下のとおりです。

    • アービターのホスト。

    • アービターのポート。

    • 認証機関の証明書、ローカルな証明書、必要に応じて TLS でミラーを保護するために必要な秘密鍵ファイルを含むディレクトリ。呼び出しでは、これらのファイルがそれぞれ CAFile.pemCertificateFile.pem、および PrivateKeyFile.pem という名前であると想定しています。

    • ミラーの名前。

    • このミラー・メンバの名前。

    Note:

    InitializeMirrored() 呼び出しは、以下の場合、エラーを返します。

    • 現在の InterSystems IRIS インスタンスが既にシャード・クラスタのノードである場合。

    • 現在のインスタンスが既にミラー・メンバであるが、プライマリではない場合。

    • (最初の 2 つの引数で) 既に存在するクラスタ・ネームスペースまたはマスタ・ネームスペースを指定し、そのグローバル・データベースがミラーリングされていない場合。

  2. 対象のノード 1 バックアップで InterSystems IRIS インスタンスのターミナルOpens in a new tabを開き、最初の引数のクラスタ URL としてノード 1 プライマリのホストとスーパーサーバ・ポート、2 番目の引数にミラー・ロール backup を指定して、$SYSTEM.Cluster.AttachAsMirroredNode()Opens in a new tab を呼び出します。以下に例を示します。

    set status = $SYSTEM.Cluster.AttachAsMirroredNode("IRIS://node1prim:1972","backup")
    

    ノード 1 プライマリの初期化の際、InitializeMirrored() の 4 番目の引数として IP アドレスを指定した場合は、最初の引数でノード 1 を識別するためにホスト名の代わりに IP アドレスを使用します。以下に例を示します。

    set status = $SYSTEM.Cluster.AttachAsMirroredNode("IRIS://100.00.0.01:1972","backup")
    
    Note:

    そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。インスタンスのスーパーサーバ・ポート番号を表示または設定するには、そのインスタンスの管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します(インスタンスの管理ポータルを開く方法の詳細は、"InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" を参照してください)。

    “%SYSTEM.Cluster API を使用したクラスタの導入” の "残りのデータ・ノードの構成" で説明しているように、この呼び出しにより、$SYSTEM.Cluster.AttachAsDataNode()Opens in a new tab と同様、ノードがデータ・ノードとしてアタッチされ、これがノード 1 ミラーのバックアップ・メンバとなることが保証されます。この呼び出しを発行する前に、ノードがノード 1 プライマリのバックアップとなっている場合 (つまり、既存のミラーをノード 1 として初期化している場合)、ミラー構成は変わりません。これがミラー・メンバではない場合は、ノード 1 プライマリのミラーにバックアップとして追加されます。どちらの場合も、ノード 1 プライマリのネームスペース、データベース、およびマッピング構成は、このノードに複製されます。(AttachAsMirroredNode の 3 番目の引数は、AttachAsDataNode と同じです。つまり、他のクラスタ・メンバがこのノードとの通信にホストの IP アドレスを使用する場合、このアドレスを含めます。)

    ノード 1 ミラーの対象の DR 非同期メンバがある場合は、AttachAsMirroredNode() を使用してメンバをアタッチします。その際、以下の例のように、2 番目の引数として backup の代わりに drasync を使用します。

    set status = $SYSTEM.Cluster.AttachAsMirroredNode("IRIS://node1prim:1972","drasync")
    

    バックアップをアタッチするときと同じように、ミラーの既存のメンバをアタッチする場合、そのミラー構成が変更されるのではなく、必要なミラー構成が追加されます。どちらの場合も、ノード 1 プライマリのネームスペース、データベース、およびマッピング構成は、新しいノードに複製されます。

    Note:

    ノード 1 プライマリのミラーとは異なるミラーのメンバであるインスタンスをアタッチしようとすると、エラーが発生します。

  3. ノード 1 以外のミラーリングされたデータ・ノードを構成するには、以下のように、$SYSTEM.Cluster.AttachAsMirroredNode()Opens in a new tab を使用してフェイルオーバー・ペアと DR 非同期の両方をクラスタにアタッチします。

    1. プライマリを追加する際には、既存のプライマリをクラスタ URL に指定し、2 番目の引数として primary を指定します。インスタンスがまだミラーのプライマリではない場合、4 番目の引数と続く 4 つの引数を使用してこれを新しいミラーの最初のメンバとして構成します。引数は、前述の InitializeMirrored() 呼び出しでリストされているとおりです。インスタンスが既にミラー・プライマリの場合、ミラー引数を指定しても無視されます。

    2. バックアップを追加する際には、対象のプライマリをクラスタ URL に指定し、2 番目の引数として backup を指定します。指定したノードがプライマリであるミラーに、バックアップとして既にインスタンスが構成されている場合、そのミラー構成は変わりません。インスタンスがまだミラー・メンバではない場合、これは 2 番目のフェイルオーバー・メンバとして構成されます。

    3. DR 非同期を追加する際には、対象のプライマリをクラスタ URL に指定し、2 番目の引数として drasync を指定します。指定したノードがプライマリであるミラーに、DR 非同期として既にインスタンスが構成されている場合、そのミラー構成は変わりません。インスタンスがまだミラー・メンバではない場合、これは DR 非同期として構成されます。

    Note:

    AttachAsMirroredNode() 呼び出しは、以下の場合、エラーを返します。

    • 現在の InterSystems IRIS インスタンスが既にシャード・クラスタのノードである場合。

    • primary のロールが指定され、クラスタ URL (最初の引数) で指定されたクラスタ・ノードがミラー・プライマリではないか、現在のインスタンスがプライマリ以外のロールのミラーに属している場合。

    • backup のロールが指定され、最初の引数で指定されたクラスタ・ノードがミラー・プライマリではないか、バックアップ・フェイルオーバー・メンバを既に持つミラーのプライマリである場合。

    • drasync のロールが指定され、最初の引数で指定されたクラスタ・ノードがミラー・プライマリではない場合。

    • backup または drasync のロールが指定され、追加するインスタンスが既に、指定したプライマリを持つミラー以外のミラーに属している場合。

    • クラスタ・ネームスペース (または、ノード 1 バックアップを追加している場合はマスタ・ネームスペース) が現在のインスタンスに既に存在し、そのグローバル・データベースがミラーリングされていない場合。

  4. すべてのデータ・ノードを構成したら、$SYSTEM.Cluster.ListNodes()Opens in a new tab メソッドを呼び出してこれらをリストできます。クラスタがミラーリングされている場合、このリストはミラーリングされているデータ・ノードの各メンバのミラー名とロールを示します。以下に例を示します。

    set status = $system.Cluster.ListNodes()
    NodeId  NodeType    Host          Port   Mirror  Role
    1       Data        node1prim     1972   MIRROR1 Primary
    1       Data        node1back     1972   MIRROR1 Backup
    1       Data        node1dr       1972   MIRROR2 DRasync
    2       Data        node2prim     1972   MIRROR2 Primary
    2       Data        node2back     1972   MIRROR2 Backup
    2       Data        node2dr       1972   MIRROR2 DRasync
    

ミラーリングされていないクラスタからミラーリングされたクラスタへの変換

このセクションで説明する手順を使用して、既存のミラーリングされていないシャード・クラスタをミラーリングされたクラスタに変換できます。以下に、関連するタスクの概要を示します。

  • 少なくとも十分な数の新しいノードをプロビジョニングして準備し、クラスタ内の既存のデータ・ノードそれぞれにバックアップを提供します。

  • 既存のデータ・ノードそれぞれにミラーを作成してから、ノード 1 で $SYSTEM.Sharding.AddDatabasesToMirrors()Opens in a new tab を呼び出して、クラスタをミラーリングされた構成に自動的に変換します。

  • 既存のデータ・ノード上に、ミラーリングされていないマスタ・データベースとシャード・データベースの調整されたバックアップを作成します (各ミラーの最初のフェイルオーバー・メンバ)。"シャード・クラスタの調整されたバックアップとリストア" を参照してください。

  • 対象の 2 番目のフェイルオーバー・メンバ (新しいノード) それぞれに対して、参加させる最初のフェイルオーバー・メンバ (既存のデータ・ノード) を選択してから、最初のフェイルオーバー・メンバ上のミラーリングされたデータベースに対応するデータベースを新しいノード上に作成します。続いて、そのミラーに新しいノードを 2 番目のフェイルオーバー・メンバとして追加し、最初のフェイルオーバー・メンバ上に作成したバックアップからデータベースをリストアして、そのデータベースを自動的にミラーに追加します。

  • データ・ノード・ミラー内に作成したフェイルオーバー・ペアに DR 非同期を追加するには、最初のフェイルオーバー・メンバ上のミラーリングされたデータベースに対応する新しいノード上にデータベースを作成します。続いて、そのミラーに新しいノードを DR 非同期として追加し、最初のフェイルオーバー・メンバ上に作成したバックアップからデータベースをリストアして、そのデータベースを自動的にミラーに追加します。

  • 任意のミラー・プライマリ (元のデータ・ノード) で $SYSTEM.Sharding.VerifyShards()Opens in a new tab を呼び出して、バックアップに関する情報を検証し、その情報をシャーディング・メタデータに追加します。

手順全体を 1 つのメンテナンス時間枠 (つまり、アプリケーションがオフラインで、クラスタ上にユーザのアクティビティがない予定期間) で実行することも、ここで説明するように手順を 2 つのメンテナンス時間枠に分割することもできます。

詳細なステップを以下に示します。まだ十分に理解していない場合は、続行する前に "%SYSTEM.Cluster API を使用したクラスタの導入" のセクションを確認してください。"高可用性ガイド" の "ミラーの構成Opens in a new tab" の章で説明されているミラーの構成手順に関する知識も役に立ちますが、必須ではありません。この手順の各ステップには、必要に応じてこの章へのリンクが記載されています。

Important:

ノード・レベルのミラーリングしていないクラスタを、この手順でミラー化したクラスタに変換するとネームスペース・レベルのクラスタになります。このクラスタの管理と変更は、%SYSTEM.Sharding API および管理ポータルのネームスペース・レベルのページでのみ可能です。

  1. "“%SYSTEM.Cluster API を使用したクラスタの導入”" の最初の 2 つのステップ "インフラストラクチャのプロビジョニングまたは特定" および "データ・ノードへの InterSystems IRIS の導入" の指示に従って、クラスタにバックアップ・フェイルオーバー・メンバとして追加するノードを準備します。想定されるバックアップのホストの特性と InterSystems IRIS の構成は、すべての点で既存のデータ・ノードと同じである必要があります ("高可用性ガイド" の "ミラー構成のガイドラインOpens in a new tab" を参照)。

    Note:

    各フェイルオーバー・ペアに含まれる対象の最初のフェイルオーバー・メンバ (既存のデータ・ノード) および 2 番目のフェイルオーバー・メンバ (新しく追加したノード) をホスト名または IP アドレスで記録しておくと役に立ちます。

  2. シャード・クラスタのメンテナンス時間枠を開始します。

  3. 現在のデータ・ノードそれぞれで ISCAgent を開始Opens in a new tabし、ミラーを作成して最初のフェイルオーバー・メンバを構成Opens in a new tabします。

  4. クラスタをミラーリングされた構成に変換するには、マスタ・ネームスペース (既定では IRISDM) でノード 1 のインスタンスに対して InterSystems ターミナルOpens in a new tabを開き、以下のように $SYSTEM.Sharding.AddDatabasesToMirrors() メソッドを呼び出します ("%SYSTEM.Sharding API" を参照)。

    set status = $SYSTEM.Sharding.AddDatabasesToMirrors()
    
    Note:

    これらの手順で詳述されている各 API 呼び出しの戻り値 (成功の場合は 1 など) を確認するには、以下を入力します。

    zw status
    

    状況によっては通知なしで呼び出しが失敗することがあるため、各呼び出しの後に [ステータス] を確認することをお勧めします。呼び出しが成功しなかった ([ステータス][1] 以外) 場合、以下を入力することにより、わかりやすいエラー・メッセージが表示されます。

    do $SYSTEM.Status.DisplayError(status) 
    

    AddDatabasesToMirrors() 呼び出しは、以下を実行します。

    • ノード 1 でマスタ・データベースとシャード・データベースを追加し (“%SYSTEM.Cluster API を使用したクラスタの導入” の "ノード 1 の初期化" を参照)、他のデータ・ノードでシャード・データベースをそのそれぞれのミラーに追加します。

    • ノード間のすべての ECP 接続をミラー接続Opens in a new tabとして再構成します。計算ノード (該当する場合) とその関連データ・ノード間の ECP 接続も対象です。

    • すべてのデータ・ノード上でリモート・データベースOpens in a new tabを再構成し、それに応じて関連するすべてのマッピングを調整します。

    • シャーディング・メタデータを更新し、再構成した接続、データベース、およびマッピングを反映させます。

    呼び出しが正常に完了すると、シャード・クラスタは完全に使用可能な状態になります (ただし、バックアップ・フェイルオーバー・メンバをまだ追加していないため、フェイルオーバーはまだ実行できません)。

  5. データ・ノードの調整されたバックアップを実行します (つまり、すべてのノードが論理的な同じ時点でバックアップされているバックアップ)。具体的には、最初のフェイルオーバー・メンバ (既存のデータ・ノード) のそれぞれでシャード・データベース (既定では IRISCLUSTER) をバックアップし、ノード 1 でマスタ・データベース (既定では IRISDM) もバックアップします。

  6. オプションで、想定される 2 番目のフェイルオーバー・メンバと DR 非同期ミラー・メンバ (該当する場合) を次のステップで準備する間、現在のメンテナンス時間枠を終了してアプリケーションのアクティビティを許可します。

  7. クラスタに 2 番目のフェイルオーバー・メンバまたは DR 非同期として追加する各ノードで、ISCAgent を開始Opens in a new tabします。続いて、対象の最初のフェイルオーバー・メンバ上にあるものと同じ名前とデータベース・ディレクトリを使用して、クラスタ・ネームスペースとシャード・データベース (既定では IRISCLUSTER) を作成します。ノード 1 の対象の 2 番目のフェイルオーバー・メンバと、そのノードの対象の DR 非同期で、マスタ・ネームスペースとデータベース (既定では IRISDM) も同じ方法で追加します。

  8. メンテナンス時間枠内ではない場合は、新しいメンテナンス時間枠を開始します。

  9. 新しいノードそれぞれで、データが含まれるミラーリングされたデータベースを含む既存のミラーの 2 番目のフェイルオーバー・メンバまたは DR 非同期メンバとして、ミラーリングされていないインスタンスを追加するために必要なタスクを実行します。

    Note:

    シャーディングでは、必要なマッピングはすべて自動的に作成され、マスタ・ネームスペース内のユーザ定義マッピングがシャードに伝播されます。したがって、このプロセスで手動で作成する必要があるマッピングは、マスタ・ネームスペース内のユーザ定義マッピングだけです。このマッピングは、ノード 1 の 2 番目のフェイルオーバー・メンバ上のマスタ・ネームスペース内にのみ作成する必要があります。

  10. いずれかのプライマリ (元のデータ・ノード) のインスタンスに対して InterSystems ターミナルOpens in a new tabを開き、以下のように、クラスタ・ネームスペース (またはノード 1 のマスタ・ネームスペース) で $SYSTEM.Sharding.VerifyShards()Opens in a new tab メソッドを呼び出します ("%SYSTEM.Sharding API" を参照)。

    set status = $SYSTEM.Sharding.VerifyShards()
    

    この呼び出しにより、ミラーの 2 番目のフェイルオーバー・メンバについての必要な情報がシャーディング・メタデータに自動的に追加されます。

    Note:

    この呼び出しを実行する場合、元のすべてのクラスタ・ノードがそのミラーの現在のプライマリである必要があります。したがって、2 番目のフェイルオーバー・メンバの追加後にミラーがフェイルオーバーした場合は、このステップを実行する前に、元のフェイルオーバー・メンバへの計画的フェイルバックを準備する必要があります (計画的フェイルオーバーの手順は、"高可用性ガイド" の "プライマリ・フェイルオーバー・メンバのメンテナンスOpens in a new tab" を参照してください。iris stop コマンドを使用して、その手順で参照されている適切なシャットダウンを終了する方法は、"システム管理ガイド" の "InterSystems IRIS インスタンスの制御" を参照してください)。

Important:

上記の最後のステップが完了したら、メンテナンス時間枠を終了できます。ただし、クラスタをプロダクション環境に移行する前に、計画的フェイルオーバー (前の項目を参照) を実行して、各ミラーをテストすることを強くお勧めします。

変更をミラーリングするためのクラスタ・メタデータの更新

ここで説明されている API または管理ポータルによる手順以外の方法 (つまり、管理ポータルのミラーリングのページ、^MIRROR ルーチン、または SYS.MIRROR API) を使用して、ミラーリングされたクラスタ内の 1 つ以上のデータ・ノードのミラー構成を変更する場合は、クラスタのメタデータを更新する必要があります。そのためには、クラスタ・ネームスペース内で $SYSTEM.Sharding.VerifyShards()Opens in a new tab を呼び出すか ("%SYSTEM.Sharding API" を参照)、またはクラスタ内の現在のプライマリ・フェイルオーバー・メンバ上で管理ポータルの [Configure Node-Level] ページの [シャードを検証] ボタンを使用します ("管理ポータルを使用したミラーリングされたクラスタの構成" を参照)。例えば、計画的フェイルオーバーOpens in a new tabを実行する場合は、DR 非同期Opens in a new tabを追加するか、バックアップ・メンバを DR 非同期に降格Opens in a new tabさせるか、または DR 非同期をフェイルオーバー・メンバに昇格させて、シャードによってメタデータが更新されて変更が反映されることを検証します。データ・ノード・ミラーに DR 非同期を含めることによって設定した災害復旧機能を維持・活用する上で、クラスタ・メタデータを更新することは重要な要素です。詳細は、"ミラーリングされたシャード・クラスタの災害復旧" を参照してください。

クラスタのシャードは、ミラーリング構成操作のたびに検証することも、一連の操作の完了後に一度だけ検証することもできますが、クラスタのオンライン中に操作を実行した場合は、フェイルオーバー・メンバを追加または削除する操作の実行後すぐにシャードを検証することをお勧めします。

作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入

常に大量のデータが取り込まれるような状況でも、クエリの遅延がきわめて小さいことが求められる高度な使用事例では、計算ノードを追加して、クエリを処理するための透過的なキャッシュ層を提供できます。各計算ノードは、それが関連付けられているデータ・ノード上のシャード・データと、必要に応じてシャード化されていないデータをキャッシュします。クラスタに計算ノードが含まれている場合は、データ・ノード上ではなく、その計算ノード上で読み取り専用クエリが自動的に並行して実行されます。データ・ノードではすべての書き込み操作 (挿入、更新、削除、および DDL 操作) が引き続き実行されます。この作業分担により、クエリとデータ取り込みの作業負荷が分離される一方で、並列処理や分散キャッシュの利点を維持し、これら両方のパフォーマンスを向上させます。1 つのデータ・ノードに複数の計算ノードを割り当てることで、クラスタのクエリ・スループットとパフォーマンスをさらに向上させることができます。

計算ノードがクラスタに追加されると、これらはデータ・ノード間でできる限り均等に自動分散されます。計算ノードを追加することによってパフォーマンスが大幅に向上するのは、計算ノードがデータ・ノードごとに少なくとも 1 つある場合のみです。クラスタの速度は最も低速なデータ・ノードと同じ速度にしかならないので、リソースの最も効率的な使用方法は、一般的に、各データ・ノードに同じ数の計算ノードを割り当てることです。計算ノードではクエリの実行のみがサポートされ、データは格納されないので、メモリと CPU を重視し、ストレージを最小限に抑えるなど、ニーズに合わせてハードウェア・プロファイルを調整できます。

計算ノードを含むシャード・クラスタ
8 compute nodes manage query traffic for the 4 data nodes in the cluster, which handle data operations separately

計算ノード、および計算ノードを使用したアプリケーションのクラスタへの接続の負荷分散の詳細は、"計算ノードの計画" を参照してください。

"シャード・クラスタの導入" で説明されているいずれかの導入方法を使用して、シャード・クラスタに計算ノードを追加できます。そこで説明されている自動導入方法にはすべて、計算ノードがオプションとして含まれます。このセクションでは、計算ノードを手動で導入する追加手順を説明します。まず、上記のセクションで説明されているステップを使用して、シャード・クラスタを手動で導入および構成します。その後、ここで説明するステップを使用して導入を完了します。

  1. データ・ノードの計画

  2. データベース・キャッシュとデータベースのサイズの見積もり

  3. インフラストラクチャのプロビジョニングまたは特定

    Note:

    計画した計算ノードのホストを、計画したデータ・ノードのホストと共に含めます。例えば、8 個のデータ・ノードと 8 個の計算ノードが必要な計画の場合、クラスタには 16 個のホストが必要です。シャード・クラスタ内のすべてのノードの仕様とリソースが同じであるか、少なくともほぼ同等である必要があります。ただし、計算ノードのストレージは例外です。計算ノードはシャード・クラスタ・ロールではストレージを使用しません。

  4. データ・ノード・ホストへの InterSystems IRIS の導入

  5. 管理ポータルまたは %SYSTEM.Cluster API を使用したデータ・ノードの構成

  6. 管理ポータルまたは %SYSTEM.Cluster API を使用した計算ノードの追加 (以下の各セクションを参照)

管理ポータルを使用した計算ノードの構成または導入

クラスタに計算ノードを追加すると、データ・ノード間で計算ノードを自動的に分散するため、計算ノードは、前に関連付けられていた計算ノード数が最小だったデータ・ノードに割り当てられます。この手順は、クラスタをミラーリングするかどうかに関係なく同じです。

すべてのシステムで、URL http://host:webserverport/csp/sys/UtilHome.csp をブラウザで読み込むことによって管理ポータルを開くことができます。host は、ホスト ID、port はインスタンスの Web サーバのポート番号です (http://localhost:52773/csp/sys/UtilHome.csp など) (この URL を使用して管理ポータルを開く方法の詳細は、コンテナに導入Opens in a new tabされたインスタンスの手順、または "InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" のセクションで、キットからインストールしたOpens in a new tabインスタンスの手順を参照してください)。Windows システムの場合、システム トレイにある InterSystems IRIS のアイコンをクリックして [管理ポータル] を選択することで、管理ポータルを開くこともできます。

ネットワーク・システム上のインスタンスを計算ノードとしてクラスタに追加するには、以下の手順を使用します。

  1. インスタンスの管理ポータルを開き、[システム管理][構成][システム構成] [Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (既定値はほぼすべてのクラスタに適しているため、[ECP 接続の最大数] 設定の値を変更する必要はありません)。

  2. インスタンスを再起動します (管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動した後に再読み込みするだけでかまいません)。

  3. [Configure Node-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Node-Level]) に移動して、[構成] ボタンをクリックします。

  4. [Configure Node-Level Cluster] ダイアログで [Add this instance to an existing sharded cluster] を選択し、表示されるプロンプトに次のように応答します。

    • クラスタ URL を入力します。この URL は、既にクラスタに属しているインスタンスの [Configure Node-Level] ページの [シャード] タブに、すべてのノードに対して表示されるアドレスです。“管理ポータルを使用したクラスタの導入” の "残りのデータ・ノードの構成" のステップを参照してください。

      Note:

      クラスタがミラーリングされている場合は、プライマリ・データ・ノードまたは計算ノードのアドレスを入力します。バックアップ・データ・ノードのアドレスではありません。

    • [ロール] プロンプトで [計算] を選択して、インスタンスをデータ・ノードとして構成します。

    • 場合によっては、InterSystems IRIS に認識されているホスト名が適切なアドレスに解決されないことや、ホスト名が利用できないことがあります。このような理由または他の理由で、代わりに IP アドレスを使用して他のクラスタ・ノードをこのノードと通信させたい場合は、ホスト名のオーバーライドのプロンプトで IP アドレスを入力します。

    • [Mirrored cluster] チェックボックスは利用できません。計算ノードの構成はミラーリングに関係なく同じであるためです (ただし、前述のようにクラスタ URL が指定されている場合を除きます)。

  5. [OK] をクリックして [Configure Node-Level] ページに戻ります。2 つのタブ [シャード][シャードテーブル] が表示されています。これまでに構成したデータ・ノードと計算ノードが [シャード] にノード 1 から表示され、各計算ノードがどのデータ・ノードに割り当てられているかを示します。

    [シャードを検証] をクリックして、計算ノードが正しく構成されていて、他のノードと通信できることを検証します。

    Note:

    構成する計算ノードが多数ある場合は、[詳細設定] ボタンをクリックし、[詳細設定] ダイアログで [割り当て時に自動的にシャードを検証] を選択することにより、検証操作を自動化できます (シャード・クラスタを導入する際は、このダイアログのその他の設定は既定値のままにします)。

%SYSTEM.Cluster API を使用した計算ノードの導入

ネットワーク・システム上のインスタンスをクラスタに計算ノードとして追加するには、そのインスタンスの InterSystems ターミナルOpens in a new tabを開き、既存のクラスタ・ノードのホスト名とその InterSystems IRIS インスタンスのスーパーサーバ・ポートを指定して $SYSTEM.Cluster.AttachAsComputeNode()Opens in a new tab メソッドを呼び出します。以下に例を示します。

set status = $SYSTEM.Cluster.AttachAsComputeNode("IRIS://datanode2:1972")
Note:

これらの手順で詳述されている各 API 呼び出しの戻り値 (成功の場合は 1 など) を確認するには、以下を入力します。

zw status

呼び出しが成功しなかった場合、以下を入力することにより、わかりやすいエラー・メッセージが表示されます。

do $SYSTEM.Status.DisplayError(status) 

テンプレート・ノードの構成時にこの IP アドレスを指定した場合 (“%SYSTEM.Cluster API を使用したクラスタの導入” の "ノード 1 の構成" を参照) は、ホスト名ではなく、その IP アドレスを使用します。

set status = $SYSTEM.Cluster.AttachAsComputeNode("IRIS://100.00.0.01:1972")

他のノードに、IP アドレスを使用してこのノードと通信させる場合は、2 番目の引数として IP アドレスを指定します。

Note:

もう 1 つのノード (この手順で必要なノード) から見ると、コンテナ化された InterSystems IRIS インスタンスのスーパーサーバ・ポートは、そのコンテナが作成されたときにスーパーサーバ・ポートが公開されたホスト・ポートによって異なります。この詳細および例は、"コンテナ内でのインターシステムズ製品の実行" の "永続的な %SYS を使用した InterSystems IRIS コンテナの実行Opens in a new tab" と "InterSystems IRIS コンテナの実行 : Docker Compose の例Opens in a new tab"、および Docker ドキュメントの "Container networkingOpens in a new tab" を参照してください。

キットでインストールした、そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。インスタンスのスーパーサーバ・ポート番号を表示または設定するには、そのインスタンスの管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します(インスタンスの管理ポータルを開く方法の詳細は、"InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" を参照してください)。

最初の引数で指定したクラスタ・ノードがデータ・ノードの場合、これがテンプレートとして使用されます。計算ノードの場合は、これが割り当てられているデータ・ノードがテンプレートとして使用されます。AttachAsComputeNode() 呼び出しは、以下を実行します。

  • ECP およびシャーディング・サービスを有効にします。

  • データ・ノード間で計算ノードを自動的に分散するため、新しい計算ノードを、前に関連付けられた計算ノード数が最小だったデータ・ノードに関連付けます。

  • クラスタ・ネームスペースを作成し、“%SYSTEM.Cluster API を使用したクラスタの構成” の "ノード 1 の構成" で説明したとおり、それをテンプレート・ノード (最初の引数で指定) の設定に合わせて構成し、必要なすべてのマッピングを作成します。

  • すべての SQL 構成オプションOpens in a new tabを、テンプレート・ノードに合わせて設定します。

クラスタ・ネームスペースと同じ名前のネームスペースが新しい計算ノードに既に存在する場合は、そのネームスペースがクラスタ・ネームスペースとして使用され、マッピングのみが複製されます。

他のクラスタ・ノードに、ホスト名ではなく IP アドレスを使用してこのノードと通信させる場合は、2 番目の引数として IP アドレスを指定します。

AttachAsComputeNode() 呼び出しは、InterSystems IRIS インスタンスが既にシャード・クラスタのノードである場合、エラーを返します。

すべての計算ノードを構成したら、$SYSTEM.Cluster.ListNodes()Opens in a new tab メソッドを呼び出してこれらをリストできます。以下に例を示します。

set status = $system.Cluster.ListNodes()
NodeId  NodeType    DataNodeId    Host          Port
1       Data                      datanode1     1972
2       Data                      datanode2     1972
3       Data                      datanode3     1972
1001    Compute     1             computenode1  1972
1002    Compute     2             computenode2  1972
1003    Compute     3             computenode3  1972

計算ノードが導入されると、このリストに各計算ノードが割り当てられるデータ・ノードのノード ID が示されます。$SYSTEM.Cluster.GetMetadata()Opens in a new tab を使用して、クラスタおよびマスタ・ネームスペースの名前、それらの既定のグローバル・データベース、および呼び出しを発行するノードの設定を含む、クラスタのメタデータを取得することもできます。

1 つのホストへの複数のデータ・ノードのインストール

指定数のシステムでデータ・ノードをホストしている場合、%SYSTEM.Shardng API を使用してホストごとに複数のデータ・ノード・インスタンスを構成すると、データ取り込みのスループットが大幅に向上します (%SYSTEM.Cluster API や管理ポータルでは、このような構成は不可能です)。したがって、最小限のコストで最大のデータ取り込みのスループットを達成することが重要である場合、ホストあたり 2 つまたは 3 つのデータ・ノード・インスタンスを構成することにより、これを実現できます。この方法で得られる効果は、サーバ・タイプ、サーバ・リソース、および全体の作業負荷によって異なります。システムの総数を増やすことで (ホスト・システムのメモリを複数のデータベース・キャッシュ間で分割することなく) 同様の、またはそれ以上のスループットの向上を実現できますが、インスタンスの追加は、システムの追加と比べてコストがかかりません。

InterSystems IRIS シャーディング・リファレンス

このセクションでは、シャード構成の計画、導入、および使用に関する追加情報を紹介します。内容は以下のとおりです。

InterSystems IRIS シャード・クラスタの計画

このセクションでは、基本的なシャード・クラスタの計画と、計算ノードの追加 (該当する場合) に関する一次ガイドラインを紹介します。完全な設計および計画プロセスに関する詳細な説明を目的としたものではありません。以下のタスクについて説明します。

シャーディングと垂直方向の拡張の併用

シャーディングについて計画する際には、一般に、システムごとのリソースと使用するシステム数との間のトレードオフを考慮する必要があります。極端に言えば、2 つの主なアプローチを以下のように説明できます。

  • 垂直方向に拡張して、各システムおよびインスタンスの性能をできるだけ高めてから、高性能なノードを追加して水平方向に拡張します。

  • 高度な構成の高性能な 1 つのシステムに代わるコスト効率の高い手段として、手ごろな価格であるが、性能が劣るシステムを複数使用して水平方向に拡張します。

実際には、ほとんどの場合、これらのアプローチを組み合わせると最も効果を発揮します。他の水平方向の拡張アプローチとは異なり、InterSystems IRIS のシャーディングは、InterSystems IRIS の優れた垂直方向の拡張性と容易に組み合わせることができます。多くの場合、4 ~ 16 台のデータ・ノードを含む、処理能力がかなり高いシステムでホストされているクラスタで最も大きな成果が得られます。

データ・ノードの基本的なクラスタの計画

下記のガイドラインを使用するには、クラスタに格納するデータの量に関連するいくつかの変数を見積もる必要があります。

  1. まず、クラスタに格納するデータを検討して、以下について見積もりを行います。

    1. クラスタに格納するシャード・テーブルすべて (インデックスを含む) の合計サイズ

    2. クラスタに格納するシャード化されていないテーブルのうち、シャード・テーブルと頻繁に結合されるもの (インデックスを含む) の合計サイズ

    3. クラスタに格納するシャード化されていないすべてのテーブル (インデックスを含む) の合計サイズ。(前の見積もりはこの見積もりのサブセットです。)

  2. 定期的にクエリが実行されるデータの割合に基づいて、これらの合計を、予測される作業セットに変換します。

    作業セットの見積もりは、複雑な問題である場合があります。既存のデータベース・キャッシュの過去の使用統計から、これらの作業セットに関する有用な情報を取得できることがあります。それに加えて、またはその代わりに、テーブルを 3 つのカテゴリに分け、以下の作業を行うことにより、それぞれについて大まかな作業セットを特定します。

    • テーブルに対して頻繁に実行される重要な SELECT 文について、WHERE 節を確認します。それらは通常、テーブルおよび列の統計に基づいてサイズを見積もることができる可能性があるデータのサブセットを調べますか。個々の SELECT 文によって取得されるサブセットは相互に重複していますか、それとも相加的ですか。

    • 重要な INSERT 文のサイズと頻度を確認します。これらを作業セットに変換するのはさらに難しい場合がありますが、簡単なアプローチとして、1 時間あたりの平均取り込み速度を MB 単位で見積もり (1 秒あたりのレコード数 * レコードの平均サイズ * 3600)、それをテーブルの作業セットに加算します。

    • 返される結果を具体的に見積もることができる可能性がある他の高頻度のクエリを検討します。

    • シャード化されていないテーブルとシャード・テーブルを結合するクエリは作業セット NonshardSizeJoinedWS に反映され、シャード化されていない同じデータ・テーブルに対するクエリのうち、シャード化されていないテーブルをシャード・テーブルに結合しないものは作業セット NonshardSizeTotalWS に反映される点に留意してください。シャード化されていない同じデータが両方のタイプのクエリによって返されることがあるため、両方の作業セットに反映されます。

    その後、これらの見積もりを合計して各テーブルの作業セットについて 1 つの見積もりを作成し、それらの見積もりを加算することで全体的な作業セットを大まかに計算できます。これらの全体的な見積もりはかなり大まかである可能性があり、プロダクション環境では調整が必要になることがあります。50% の安全係数を各見積もりに加算し、最終的な合計データ・サイズと作業セットを以下の変数として記録します。

    クラスタの計画に関する変数

    変数

    ShardSizeShardSizeWS

    シャード・テーブルの合計サイズと作業セット (安全係数を含む)

    NonshardSizeJoinedNonshardSizeJoinedWS

    シャード・テーブルに頻繁に結合されるシャード化されていないテーブルの合計サイズと作業セット (安全係数を含む)

    NonshardSizeTotalNonshardSizeTotalWS

    シャード化されていないテーブルの合計サイズと作業セット (安全係数を含む)

    NodeCount

    データ・ノード・インスタンスの数

下記のテーブルのガイドラインを確認する際には、以下の点に留意してください。

  • 一般的に言えば、他の条件がすべて同じであれば、シャードが多い方が並列処理が増えるため、パフォーマンスが向上します。ただし、通常はデータ・ノードが 16 台ほどになるとオーバーヘッドが発生するため、パフォーマンスは低下します。

  • 紹介しているガイドラインは、最小要件ではなく、理想的、または最も効果的な構成を表しています。

    例えば、"シャーディングの効果の評価" に記載しているように、シャーディングによってパフォーマンスが向上するのは、1 つには、シャード化されていない単一インスタンスですべてのデータがキャッシュされるのではなく、複数のシステム間でデータがキャッシュされることによります。定期的に使用されるデータが大きすぎて、シャード化されていないインスタンスのデータベース・キャッシュに収まらない場合、効果が最も大きくなります。ガイドラインに示しているように、最適なパフォーマンスを得るには、クラスタ内の各データ・ノード・インスタンスのデータベース・キャッシュが、シャード・データ作業セットと頻繁に結合されるシャード化されていないデータ作業セットの合計サイズ以上になるようにします。合計キャッシュ・サイズが小さくなると、パフォーマンスが低下します (他の条件がすべて同じである場合)。ただし、すべてのデータ・ノード・キャッシュの合計が、シャード化されていない指定の単一インスタンスのキャッシュ・サイズ以上である限り、シャード・クラスタは、シャード化されていないインスタンスよりも優れたパフォーマンスを発揮します。したがって、例えば、推奨値と等しいデータベース・キャッシュ・メモリをデータ・ノードで割り当てることができない場合は、できる限り近づけてください。さらに、初期見積もりは、実践では調整が必要になることがあります。

  • データベース・キャッシュとは、各インスタンスに対して行う必要があるデータベース・キャッシュ (グローバル・バッファ・プール) のメモリ割り当てを指します。インスタンスのデータベース・キャッシュは、以下のように割り当てることができます。

    InterSystems IRIS インスタンスのルーチン・キャッシュとデータベース・キャッシュおよび共有メモリ・ヒープにメモリを割り当てる際のガイドラインは、"メモリ要件の見積もり" を参照してください。

  • 既定のグローバル・データベースは、関連するデータベースのターゲット・サイズを示します。これは、予想される最大サイズに、予想を超える増大を見越したマージンを加えたものです。データベースをホストするファイル・システムは、この合計に対応できるサイズでなければなりません。また、安全マージンも確保する必要があります。InterSystems IRIS データベースのサイズと拡張、InterSystems IRIS データベースに対する空き容量の管理、および手動でインスタンスを構成する際のデータベース・サイズやその他特性の指定手順についての一般情報は、"システム管理ガイド" の “InterSystems IRIS の構成” の章にある "データベースの構成" および “InterSystems IRIS の管理” の章にある "ローカル・データベースの管理" を参照してください。

    ICM または IKO を使用して導入する場合、インスタンスのデータ用のストレージ・ボリューム・サイズを指定できます。これはマスタ・ネームスペースとクラスタ・ネームスペースの既定のグローバル・データベースが導入の一部として配置される場所です。これは、既定のグローバル・データベースのターゲット・サイズに対応できる十分な大きさである必要があります。

    Important:

    手動で導入する場合、すべてのインスタンスでデータベース・ディレクトリとジャーナル・ディレクトリが個別のストレージ・デバイスに配置されるようにします。これは、大量のデータ取り込みがクエリの実行と同時に行われる場合に特に重要です。ファイル・システムの構成およびジャーナル・ストレージなどのストレージの構成のガイドラインについては、"システム・リソースの計画と管理" の "ストレージの計画" と "ファイル・システムの分離"、および "データ整合性ガイド" の "ジャーナリングの最善の使用方法" を参照してください。

  • データ・ノードの数 (NodeCount) と各データ・ノードのデータベース・キャッシュ・サイズは、どちらも変数です。シャードの数と各データ・ノードのデータベース・キャッシュ・サイズを変えることにより、データ・ノードのデータベース・キャッシュ・サイズの合計と合計作業セットの見積もりの間に必要な関係を作成できます。この選択は、システム・コストとメモリ・コストの間のトレードオフなどの要因に基づいて行うことができます。メモリ・リソースが少ない多数のシステムが使用可能な場合は、少量のメモリをデータベース・キャッシュに割り当てることができます。システムごとのメモリが多い場合は、少数のサーバを構成できます。一般的に言えば、他の条件がすべて同じであれば、シャードが多い方が並列処理が増えるため、パフォーマンスが向上します。ただし、ある時点になると、パフォーマンスは低下します (原因の一部は、増加したシャーディング・マネージャのオーバーヘッド)。通常、最も効果的な構成は、シャードが 4 ~ 16 の範囲である場合です。つまり、他の要因を除くと、例えば、8 台のデータ・ノードがあり、それぞれのメモリが M である場合、64 台のシャードがあり、それぞれのメモリが M/8 である場合よりも優れたパフォーマンスを発揮する可能性があります。

  • クラスタにデータがロードされた後にデータ・ノードを追加する必要がある場合は、シャード・データを新しいサーバにわたって自動的に再分散できることに留意してください。これにより、パフォーマンスが最適化されます。詳細は、"データ・ノードの追加とデータの再分散" を参照してください。一方、シャード・データがあるデータ・ノードは削除できず、サーバのシャード・データは自動的に別のデータ・ノードに再分散できません。したがって、プロダクションのクラスタへのデータ・ノードの追加は、データ・ノードの数の削減 (すべてのシャード・テーブルを削除してからデータ・ノードを削除し、データを再ロードする) に比べ、かなり少ない労力ですみます。

  • クエリの並列処理の速度は、最も低速なデータ・ノードと同じ速度にしかなりません。したがって、シャード・クラスタ内のすべてのデータ・ノードの仕様とリソースが同じであるか、少なくともほぼ同等であるようにすることをお勧めします。さらに、クラスタ内のすべての InterSystems IRIS インスタンスの構成が一貫している必要があります。確実に正しい SQL クエリ結果が返されるようにするには、インスタンス・レベルで構成される照合などのデータベース設定やそれらの SQL 設定 (既定の日付形式など) がすべてのノードで同じでなければなりません。標準化された手順や自動導入方法を使用すると、この一貫性を簡単に確保できます。

以下のテーブルの推奨事項は、前述の合計データ・サイズと作業セット・サイズの見積もり手順を、各変数について計算結果に 50% の安全係数を加算することを含め、実行済みであることを前提としています。

クラスタの計画に関するガイドライン

対象

必要な最小サイズ

データ・ノード上のデータベース・キャッシュ

(ShardSizeWS / NodeCount) + NonshardSizeJoinedWS

この推奨は、アプリケーションで 100% のメモリ内キャッシュを必要としていることを前提としています。代わりにソリッドステート・ドライブなどの高速ストレージから読み取ることのできる範囲によっては、キャッシュのサイズを削減できます。

各データ・ノードのクラスタ・ネームスペースの既定グローバル・データベース

ShardSize / NodeCount に、予想される増大に対応するためのスペースを加えたもの

データ取り込みのパフォーマンスが重要な考慮事項である場合は、データベースの初期サイズを予想される最大サイズと等しくなるように構成し、自動的なデータベースの拡張によるパフォーマンスの影響を回避することを検討してください。ただし、クラウド環境で実行している場合は、使用していないストレージの支払いによるコスト面での影響も検討する必要があります。

ノード 1 上のマスタ・ネームスペースの既定のグローバル・データベース ("ネームスペースの構成" を参照)

NonshardSizeTotal および、可能であれば、予想される増大に対応するためのスペース

シャード化されていないデータは、シャード・データに比べ、時間が経ってもあまり増大しない傾向がありますが、もちろんこれは、アプリケーションによります。

各データ・ノード上の IRISTEMP データベース (マスタ・ネームスペースおよびクラスタ・ネームスペース用の一時ストレージ・データベース)

特定のガイドラインはありません。理想的な初期サイズはデータ・セット、作業負荷、およびクエリ構文により異なりますが、おそらく 100 GB を超え、これよりはるかに大きい場合もあります。

このデータベースは必ず、大幅な拡張に対応できる大きな領域がある、可能な限り最速のストレージに配置してください。T

CPU

具体的な推奨値はありません。

InterSystems IRIS サーバはすべて、シャーディングが含まれるかどうかに関係なく、CPU を増やすことでパフォーマンスが向上します。CPU、メモリ、およびストレージ・リソースの垂直方向の拡張は、常に、シャーディングと組み合わせて使用することでさらに大きな効果をもたらしますが、特に必要ではなく、一般的なコストとパフォーマンスのトレードオフによって制御されます。
Important:

シャード・クラスタ内のすべての InterSystems IRIS インスタンスは、同じバージョンである必要があり、シャーディング・ライセンスを有する必要があります。

シャード・クラスタ内のすべてのデータ・ノードの仕様とリソースが同じであるか、少なくともほぼ同等である必要があります。クエリの並列処理の速度は、最も低速なデータ・ノードと同じ速度にしかなりません。さらに、クラスタ内のすべての InterSystems IRIS インスタンスの構成が一貫している必要があります。確実に正しい SQL クエリ結果が返されるようにするには、インスタンス・レベルで構成される照合などのデータベース設定やそれらの SQL 設定 (既定の日付形式など) がすべてのノードで同じでなければなりません。標準化された手順や自動導入方法を使用すると、この一貫性を簡単に確保できます。

アプリケーションは任意のデータ・ノードのクラスタ・ネームスペースに接続して、全データセットをローカルのものであるかのように利用できるので、一般的なベスト・プラクティスとして、クラスタ内のすべてのデータ・ノード間でアプリケーション接続を負荷分散することをお勧めします。ICM および IKO は、一般的なシナリオの場合、必要に応じてデータ・ノードのロード・バランサを自動的にプロビジョニングし、構成します。他の手段でシャード・クラスタを導入する場合は負荷分散メカニズムが必要となります。

クラスタのパフォーマンスを最大限に発揮させるためのベスト・プラクティスは、すべてのデータ・ノード間に低遅延のネットワーク接続を構成することです。例えば、すべてのデータ・ノードを同じデータ・センターまたはアベイラビリティ・ゾーン内の同じサブネットに配置します。

計算ノードの計画

"InterSystems IRIS のシャーディングの概要" に記載されているように、計算ノードがデータ・ノードに格納されているデータをキャッシュし、自動的に読み取り専用クエリを処理する一方、すべての書き込み操作 (挿入、更新、削除、および DDL 操作) はデータ・ノードで実行されます。計算ノードをクラスタに追加することで効果が得られる可能性が最も高いシナリオは、以下のとおりです。

  • 大量のデータ取り込みが大量のクエリの実行と同時に行われる場合、データ・ノードあたり 1 つの計算ノードにすると、データ取り込みの作業負荷 (データ・ノード) からクエリの作業負荷 (計算ノード) が分離され、パフォーマンスが向上します。

  • 多数のユーザによる大量のクエリがパフォーマンス低下の重大な要因である場合、データ・ノードあたり複数の計算ノードとすることで、基盤となる各データ・ノード上のデータに対して複数の同時シャード・クエリを実行できるようになり、全体的なクエリのスループット (および結果としてパフォーマンス) が向上します (一度に 1 つずつ、個別のシャード・クエリを実行する際のパフォーマンスは、計算ノードが複数になっても向上しません。多数のユーザによるクエリの作業負荷が関与しない限り、これは有益ではないためです)。計算ノードが複数あると、1 つの計算ノードに障害が発生した場合に、そのデータ・ノードに割り当てられた残りの計算ノードでクエリを処理できるため、作業負荷の分離を維持することもできます。

計算ノードを計画する際は、以下の要素について検討します。

  • 計算ノードの導入を検討する場合、一般的には、基本的なシャード・クラスタの動作を評価してから、クラスタにとって計算ノードの追加が有益であるかどうかを決定することをお勧めします。計算ノードは、"クラスタの自動導入方法" で説明されている自動導入方法の 1 つを使用するか、%SYSTEM.Cluster API を使用して、既存のクラスタに簡単に追加できます。計算ノードの追加の詳細は、"作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" を参照してください。

  • 最適なパフォーマンスを得るには、クラスタの計算ノードをデータ・ノードと同じ場所 (つまり、同じデータ・センターまたはアベイラビリティ・ゾーン内) に配置して、ネットワーク遅延を最小化する必要があります。

  • 計算ノードがクラスタに追加されると、これらはデータ・ノード間でできる限り均等に自動分散されます。計算ノードを追加することによってパフォーマンスが大幅に向上するのは、データ・ノードごとに計算ノードが少なくとも 1 つある場合のみであることに注意してください

  • 各データ・ノードに同じ数の計算ノードを割り当てることをお勧めします。したがって、例えば 8 つのデータ・ノードを計画している場合、計算ノード数の推奨選択肢には、0、8、16 などが含まれます。

  • 計算ノードではクエリの実行のみがサポートされ、データは格納されないので、メモリと CPU を重視し、ストレージを最小限に抑えるなど、ニーズに合わせてハードウェア・プロファイルを調整できます。シャード・クラスタ内のすべての計算ノードの仕様とリソースは、ほぼ同等である必要があります。

  • 計算ノードに対し、データ・ノードのデータベース・キャッシュ・サイズの推奨事項 ("データ・ノードの基本的なクラスタの計画" を参照) に従います。各計算ノードが、割り当てられているデータ・ノードと同じサイズのデータベース・キャッシュを持つのが理想的です。

データ・ノードと計算ノードの区別は、アプリケーションに対して完全に透過的です。アプリケーションは任意のノードのクラスタ・ネームスペースに接続して、全データセットをローカルのものであるかのように利用できます。したがって、アプリケーションの接続は、クラスタ内のすべてのデータ・ノードおよび計算ノードで負荷分散でき、ほとんどのアプリケーション・シナリオで、これが最も効果的なアプローチです。特定のシナリオで実際に何が最適であるかは、クエリの処理とデータの取り込みのどちらを最適化したいのかにより異なります。シャード・クエリが最も重要である場合は、計算ノードのリソースについて、アプリケーションがシャードローカル・クエリと競合しないように、データ・ノード間で負荷分散することにより、シャード・クエリを優先させることができます。並列ロードを使用した高速取り込みが最も重要である場合は、計算ノード間で負荷分散することで、データ・ノードでのアプリケーション・アクティビティを回避できます。クエリとデータ取り込みが同じように重要である場合、またはそれらを組み合わせた状態が予測できない場合は、すべてのノードで負荷分散します。

ICM および IKO では、データ・ノードまたは計算ノードの定義に自動的にロード・バランサを追加できます。また、独自の負荷分散配置を作成することもできます。

シャード・クラスタの調整されたバックアップとリストア

InterSystems IRIS シャード・クラスタの場合のように、複数のシステムにわたってデータを分散する場合、バックアップおよびリストアの手順で複雑さが増す可能性があります。シャード・クラスタ間のデータの厳格な整合性が必要な場合、個々のノードを個別にバックアップしてリストアすることでは不十分です。バックアップすべてが、論理的な同じ時点で作成されているとは限らないからです。これにより、障害の後にクラスタ全体をリストアする際に、確実に順序を保持し、それによってリストアしたデータベースの論理整合性を確保することは不可能になります。

例えば、データ・ノード S1 上のデータの更新 A が、データ・ノード S2 上のデータの更新 B より前に実行されたとします。バックアップからのクラスタのリストアの後に、論理整合性では、更新 B が認識可能であれば、更新 A も認識可能である必要があります。ところが、S1 と S2 のバックアップが個別に実行されると、S2 のバックアップが B のコミット後に行われても、S1 のバックアップが A のコミット後に行われたことを保証するのは不可能です。したがって、バックアップを個別にリストアすると、S1 と S2 が互いに不整合になる可能性があります。

一方、使用した手順でバックアップまたはリストアを調整して、すべてのシステムが論理的な同じ時点 (ここでは、更新 B の後) にリストアされることを確実にすると、順序が保持されて、その順序に依存する論理整合性が確保されます。これは、調整されたバックアップおよびリストアの手順の目標です。

ここで説明したシャード・クラスタのリストアのいずれかの手順を使用しなければならなくなる可能性を大幅に小さくするために、"ミラーによる高可用性" で説明しているように、ミラーリングされたデータ・サーバを使用してシャード・クラスタを導入できます。クラスタがミラーリングされていない場合でも、ほとんどのデータ・エラー (例えば、データ破損やデータの誤った削除) は、エラーが発生したデータ・ノードを最新のバックアップからリストアし、そのジャーナル・ファイルを使用して現在の論理的な時点に回復することで修正できます。ここで説明した手順は、クラスタ全体のリストアが必要なきわめてまれな状況で使用するものです。

このセクションでは、以下のトピックについて説明します。

シャード・クラスタの調整されたバックアップとリストアのアプローチ

シャード・クラスタの調整されたバックアップとリストアには、常にクラスタ内のすべてのデータ・ノードが関係します。InterSystems IRIS バックアップ API には、クラスタのデータ・ノードの調整されたバックアップとリストアを行う 3 種類のアプローチをサポートする Backup.ShardedClusterOpens in a new tab クラスが含まれます。

すべてのアプローチの目標が、すべてのデータ・サーバを同じ論理的な時点にリストアすることであり、それを行う方法が異なるだけです。1 つのアプローチでは、論理的な時点を共有するのはバックアップ自体ですが、それ以外のアプローチでは、InterSystems IRIS データベース・ジャーナリングOpens in a new tabが共通の論理的な時点を提供します。これはジャーナル・チェックポイントと呼ばれ、ここにデータベースがリストアされます。以下のようなアプローチがあります。

  • 調整されたバックアップ

  • 調整されていないバックアップの後の、調整されたジャーナル・チェックポイント

  • 調整されていないバックアップに含まれる調整されたジャーナル・チェックポイント

これらのアプローチが機能するしくみを理解するには、InterSystems IRIS データ整合性とクラッシュ回復の基本を理解することが重要です。これについては、"データ整合性ガイド" の “データ整合性の概要” の章で説明されています。データベース・ジャーナリングは、データ整合性および回復の重要な機能であり、特にこのトピックでは大きな影響があります。ジャーナリングでは、インスタンスのデータベースに加えられたすべての更新がジャーナル・ファイルに記録されます。これによって、バックアップが作成された時点から障害が発生した時点 (または別の選択した時点) までの間に加えられた更新を回復できるようになります。これは、バックアップからのリストアの後にジャーナル・ファイルから更新をリストアすることで実行できます。ジャーナル・ファイルは、トランザクション整合性の確保にも使用され、障害によって開いたままになっているトランザクションをロールバックすることで実現されます。ジャーナリングの詳細は、"データ整合性ガイド" の “ジャーナリング” の章を参照してください。

調整されたバックアップとリストアのアプローチを選択する際の考慮事項は、以下のとおりです。

  • アクティビティがバックアップ手順によって中断される度合い

  • 十分な復元可能性を保証するために必要な、バックアップ手順の実行頻度

  • 必要なリストア手順の複雑さ

これらの問題の詳細は、このセクションで後述します。

API 呼び出しの調整されたバックアップとリストア

Backup.ShardedClusterOpens in a new tab クラス内のメソッドは、任意のデータ・ノードで呼び出すことができます。メソッドのすべてが ShardMasterNamespace 引数を取ります。これは、クラスタ内のすべてのノードからアクセスできる、データ・ノード 1 上のマスタ・ネームスペースの名前 (既定では IRISDM) です。

使用できるメソッドは以下のとおりです。

  • Backup.ShardedCluster.Quiesce() Opens in a new tab

    シャード・クラスタのすべてのデータ・ノード上のすべてのアクティビティをブロックし、保留中の書き込みすべてがディスクにフラッシュされるまで待機します。Quiesce() の下に作成される、クラスタのデータ・ノードのバックアップは、論理的な時点を表します。

  • Backup.ShardedCluster.Resume()Opens in a new tab

    Quiesce() によって一時停止されているデータ・ノードで、アクティビティを再開します。

  • Backup.ShardedCluster.JournalCheckpoint()Opens in a new tab

    調整されたジャーナル・チェックポイントを作成し、各データ・ノードを新しいジャーナル・ファイルに切り替えた後、チェックポイント番号とプリチェックポイント・ジャーナル・ファイルの名前を返します。プリチェックポイント・ファイルは、リストアに含める必要のある各データ・ノード上の最後のジャーナル・ファイルです。この後のジャーナル・ファイルには、チェックポイントで表される論理的な時点の後に生じたデータが含まれます。

  • Backup.ShardedCluster.ExternalFreezeOpens in a new tab

    クラスタ全体の物理的なデータベース書き込みを凍結しますが、アプリケーションのアクティビティは凍結しません。その後、調整されたジャーナル・チェックポイントを作成し、各データ・ノードを新しいジャーナル・ファイルに切り替え、チェックポイント番号とプリチェックポイント・ジャーナル・ファイルの名前を返します。ExternalFreeze() の下に作成されたバックアップは、論理的な時点を表しませんが、プリチェックポイント・ジャーナル・ファイルが含まれているため、チェックポイントによって表される論理的な時点にリストアできます。

  • Backup.ShardedCluster.ExternalThawOpens in a new tab

    ExternalFreeze() によって一時停止されているディスク書き込みを再開します。

これらの呼び出しの技術情報に関するドキュメントについては、"インターシステムズ・クラス・リファレンス" を参照してください。

調整されたバックアップとリストアの手順

調整されたバックアップとリストアの 3 種類のアプローチに含まれる、シャーディング API を使用した手順については、以下のセクションで説明しています。

データ・ノードのバックアップには通常、データベース・ファイルだけでなく、InterSystems IRIS で使用されるすべてのファイル (ジャーナル・ディレクトリ、ライト・イメージ・ジャーナル、インストール・データ・ディレクトリなど) および必要な外部ファイルを含める必要があります。これらのファイルの場所は、一部にはクラスタの導入状況によって異なります ("シャード・クラスタの導入" を参照)。バックアップにこれらのファイルを含めるために必要な手法が、アプローチの選択に関わってくる可能性があります。

Important:

ここで説明しているリストア手順では、リストア対象のデータ・ノードに使用可能なミラー・フェイルオーバー・パートナーがなく、災害復旧の状況でのみ、ミラーリングされたデータ・ノードで使用することが前提となっています。"ミラーリングされたシャード・クラスタの災害復旧"、および "高可用性ガイド" の “ミラー停止の手順” の章にある "災害復旧の手順" を参照してください。データ・ノードがミラーリングされている場合は、ミラーからプライマリを削除し、説明しているリストア手順を完了してから、"高可用性ガイド" の "ミラー・メンバの再構築" で説明されているようにミラー・メンバとして再構築します。

調整されたバックアップの作成
  1. Backup.ShardedCluster.QuiesceOpens in a new tab を呼び出して、クラスタ内のすべてのデータ・ノード上のアクティビティ (およびこれによってすべてのアプリケーション・アクティビティ) を一時停止して、保留中のすべての書き込みがディスクにフラッシュされるまで待機します。このプロセスが完了して呼び出しが値を返すと、クラスタ内のすべてのデータベースおよびジャーナル・ファイルが論理的な同じ時点になります。

  2. クラスタ内のすべてのデータ・ノードのバックアップを作成します。データベースのバックアップは調整されますが、開いているトランザクションが含まれる可能性があります。データ・ノードがバックアップからリストアされた後で再起動されると、InterSystems IRIS のリカバリではジャーナル・ファイルを使用して、これらのトランザクションをロールバックすることで、トランザクションの整合性をリストアします。

  3. バックアップが完了したら、Backup.ShardedCluster.ResumeOpens in a new tab を呼び出して、データ・ノードの通常の動作をリストアします。

    Important:

    Resume() は、Quiesce() を呼び出したものと同じジョブ内で呼び出す必要があります。失敗の返り値は、Quiesce() の下に作成したバックアップ・イメージの信頼性が低く、このイメージの破棄が必要な可能性があることを示します。

  4. 失敗の後に、各データ・ノードで以下の操作を行います。

    1. バックアップ・イメージをリストアします。

    2. 存在するジャーナル・ファイルは、バックアップの作成時点からリストアしたイメージに含まれるものだけであることを確認します。

      Caution:

      これはきわめて重要です。起動時に、リカバリによってジャーナル・ファイルがリストアされ、バックアップの作成時点で開いていたトランザクションがすべてロールバックされるからです。バックアップの作成時点より後のジャーナル・データが起動時に存在する場合、そのジャーナル・データがリストアされ、対象のデータ・ノードが他のデータ・サーバと不整合になる可能性があります。

    3. 対象のデータ・ノードを再起動します。

    このデータ・ノードは、データベースのアクティビティが停止された論理的な時点にリストアされます。

Note:

この最初の 3 つの手順の代替方法として、クラスタ内のすべてのデータ・ノードを適切にシャットダウンして、コールド・バックアップを作成し、すべてのデータ・ノードを再起動することができます。

調整されていないバックアップの作成後の、調整されたジャーナル・チェックポイント
  1. クラスタ内のすべてのデータ・ノードが動作中で、アプリケーション・アクティビティが続行している間に、これらのデータ・ノード上のデータベースのバックアップを作成します。これらのバックアップは、選択した任意の方法を使用して、選択した任意の間隔で、まったく異なる時点で作成できます。

  2. Backup.ShardedCluster.JournalCheckpoint()Opens in a new tab を定期的に (スケジュールされたタスクとすることを推奨) 呼び出します。このメソッドは、調整されたジャーナル・チェックポイントを作成し、そのチェックポイントに達するために各データ・ノード上のリストアに含める最新のジャーナル・ファイルの名前を返します。データ・ノードを回復できる論理的な時点を指示するのは、バックアップのタイミングではなく、最新のチェックポイントの時点とプリチェックポイント・ジャーナル・ファイルの可用性であることに留意してください。

    Note:

    ジャーナル・ファイルを切り替える前に、JournalCheckpoint() は、シャード・クラスタ内のすべてのデータ・ノードを短時間停止して、プリチェックポイント・ファイルすべてが論理的な同じ時点で終了するようにします。この結果、アプリケーション・アクティビティがこのメソッドの実行中にきわめて短い時間一時停止する可能性があります。

  3. データ・ノードごとにジャーナル・ファイルの完全セットを必ず格納します。このセットには、最後のバックアップ時点から最新の調整されたジャーナル・チェックポイントの作成時点までのジャーナル・ファイルを格納し、最後がプリチェックポイント・ジャーナル・ファイルにします。また、これらのファイルすべてがサーバ障害発生後も必ず使用可能な状態にします (ジャーナル・ファイルを定期的にバックアップすることで実現する可能性が高い)。データベースのバックアップが調整されることはなく、部分トランザクションが存在する可能性もありますが、データ・ノードはバックアップからのリストア後に再起動され、調整されたジャーナル・ファイルをリカバリで使用して、すべてのデータベースを論理的な同じ時点にして、トランザクションの整合性をリストアします。

  4. 障害発生後に、すべてのデータ・ノードに共通のリストア・ポイントとして利用可能な最新のチェックポイントを識別します。このためには、各データ・ノードに、最新のチェックポイントより前に作成されたデータベース・バックアップと、プリチェックポイント・ジャーナル・ファイルまでの途中のジャーナル・ファイルすべてが格納されている必要があります。

    Caution:

    これはきわめて重要です。起動時に、リカバリによってジャーナル・ファイルがリストアされ、バックアップの作成時点で開いていたトランザクションがすべてロールバックされるからです。プリチェックポイント・ジャーナル・ファイルより後のジャーナル・ファイルが起動時に存在する場合、それらのジャーナル・ファイルがリストアされ、対象のデータ・ノードが他のデータ・サーバと不整合になる可能性があります。

  5. 各データ・ノードで、チェックポイントより前のバックアップからデータベースをリストアし、ジャーナル・ファイルをチェックポイントまでリストアします。このチェックポイントの後のジャーナル・データが適用されることのないようにします。これを確実にする簡単な方法は、チェックポイントより後のジャーナル・ファイルがサーバに存在するかどうかを確認し、存在する場合はそれを移動または削除してから、ジャーナル・ログを削除することです。

    これで、調整されたジャーナル・チェックポイントが作成された論理的な時点にデータ・ノードがリストアされます。

調整されていないバックアップへの調整されたジャーナル・チェックポイントの追加
  1. Backup.ShardedCluster.ExternalFreezeOpens in a new tab() を呼び出します。このメソッドは、シャード・クラスタ内のすべてのデータ・ノードのライト・デーモンを一時停止することで、それらのデータ・サーバ上のすべてのアクティビティを凍結します。アプリケーション・アクティビティは続行しますが、更新はジャーナル・ファイルだけに書き込まれ、ディスクにはコミットされません。このメソッドは、値を返す前に、調整されたジャーナル・チェックポイントを作成し、各データ・ノードを新しいジャーナル・ファイルに切り替えた後、チェックポイント番号とプリチェックポイント・ジャーナル・ファイルの名前を返します。この時点で、プリチェックポイント・ジャーナル・ファイルは、単一の論理的な時点を表します。

    Note:

    Backup.ShardedCluster.ExternalFreezeOpens in a new tab() は内部的に Backup.ShardedCluster.JournalCheckpoint()Opens in a new tab を呼び出します。その結果、Backup.ShardedCluster.Quiesce()Opens in a new tabBackup.ShardedCluster.Resume()Opens in a new tab が呼び出されてジャーナル・ファイルが切り替わる間、システムが短時間停止します。Resume() の実行が完了すると、Backup.ShardedCluster.Resume: System resumed メッセージがログに記録されます。これによってシステムが凍結しなくなるわけではなく、停止しなくなるにすぎません。ExternalFreeze() を呼び出すと、Backup.ShardedCluster.ExternalThaw()Opens in a new tab を呼び出すまでシステムは凍結した状態になります。

  2. クラスタ内のすべてのデータ・ノードのバックアップを作成します。データベースのバックアップが調整されることはなく、部分トランザクションが存在する可能性もありますが、データ・ノードをリストアする際に必ず実行することは、データ・サーバをジャーナル・チェックポイントに回復し、すべてのデータベースを論理的な同じ時点にして、トランザクションの整合性をリストアすることです。

    Note:

    Backup.ShardedCluster.ExternalFreeze()Opens in a new tab によってライト・デーモンが既定で 10 分間一時停止すると、アプリケーションのプロセスが以降の更新が行われないようブロックされます (ジャーナル・バッファがいっぱいになるリスクがあるため)。ただし、バックアップ・プロセスにもっと時間が必要な場合は、ExternalFreeze() のオプションの引数を使用してこの時間を延長できます。

  3. すべてのバックアップが完了したら、Backup.ShardedCluster.ExternalThaw()Opens in a new tab を呼び出して、ライト・デーモンを再開し、データ・ノードの通常の動作をリストアします。

    Important:

    失敗の返り値は、ExternalFreeze() の下に作成したバックアップ・イメージの信頼性が低く、このイメージの破棄が必要な可能性があることを示します。

  4. 失敗の後に、各データ・ノードで以下の操作を行います。

    1. バックアップ・イメージをリストアします。

    2. リストアされたイメージに、ExternalFreeze() から返されたプリチェックポイント・ジャーナル・ファイルより後のジャーナル・ファイルが存在する場合は、それらをすべて削除します。

    3. InterSystems IRIS インスタンスを手動で回復するには、"データ整合性ガイド" の “バックアップとリストア” の章にある "自動 WIJ およびジャーナル・リカバリを使用しない InterSystems IRIS の起動" の手順に従います。ジャーナル・ファイルをリストアする場合、ExternalFreeze() によって切り替えられたジャーナル・ファイルから開始し、ExternalFreeze() によって返されたプリチェックポイント・ジャーナル・ファイルを最後にします (これらが同一のファイルである可能性があります。この場合、これがリストア対象の唯一のジャーナル・ファイルです)。

      Note:

      コンテナ化された InterSystems IRIS インスタンスを使用して作業している場合に、コンテナ内で手動リカバリを実行する手順については、"コンテナ内でのインターシステムズ製品の実行" の "手動での起動が必要な場合のアップグレード" を参照してください。

    調整されたジャーナル・チェックポイントが ExternalFreeze() メソッドによって作成された論理的な時点に、データ・ノードがリストアされます。

Note:

このアプローチでは、各データ・ノード上のデータベースとジャーナル・ファイルを、単一のバックアップにこれら両方を含めることができるように配置する必要があります。

ミラーリングされたシャード・クラスタの災害復旧

災害復旧 (DR) 非同期は、ミラーリングされたデータベースの同期された同じコピーをバックアップ・フェイルオーバー・メンバとして維持します。違いは、非同期とそのプライマリ間の通信が非同期であること、および非同期は自動フェイルオーバーに参加しないことです。ただし、フェイルオーバー・メンバの 1 つが利用できなくなった場合、DR 非同期をフェイルオーバー・メンバに昇格させてバックアップにすることができます。例えば、バックアップでメンテナンスを実行する場合や、プライマリの停止によってミラーがバックアップにフェイルオーバーしたときに、以前のプライマリの問題を調査・修正する一方で自動フェイルオーバー機能を維持しなければならない場合などです。重大な障害によって両方のフェイルオーバー・メンバの停止が発生した場合、昇格させた DR 非同期に手動でフェイルオーバーOpens in a new tabして災害復旧を行うことができます。

DR 非同期ミラー・メンバを使用すると、ミラーリングされたシャード・クラスタに災害復旧オプションを提供することが可能になり、ミラー・フェイルオーバー・ペアの停止後に比較的短時間でクラスタの動作を復旧できます。ミラーリングされたクラスタの災害復旧を可能にする場合、具体的には以下を行います。

  • ミラーリングされたシャード・クラスタ内のすべてのデータ・ノード・ミラーで DR 非同期を少なくとも 1 つ構成します。

    重大な障害によってフェイルオーバー・ペアの停止が発生した場合に DR 非同期を確実に利用可能に維持するため、DR 非同期は通常、フェイルオーバー・ペアとは別のデータ・センターまたはアベイラビリティ・ゾーンに配置します。災害復旧手順で手動によってフェイルオーバーする先の DR 非同期が複数の場所に分散されている場合、DR 非同期間のネットワーク遅延がクラスタのパフォーマンスに大きな影響を及ぼす可能性があります。このため、ベスト・プラクティスとして、クラスタ内のすべてのデータ・ノード・ミラーに、共通の場所にある DR 非同期を少なくとも 1 つ含めます。

    Important:

    災害復旧実現の一環として (または他の理由で) 既存のミラーリングされたクラスタ内のデータ・ノードに DR 非同期を追加する場合や、バックアップ・メンバを DR 非同期に降格Opens in a new tabさせる場合は、いずれかのミラー・プライマリのクラスタ・ネームスペースで $SYSTEM.Sharding.VerifyShards()Opens in a new tab を呼び出してクラスタのメタデータを更新し、追加を反映させる必要があります。

  • 前のセクションの説明に従って、調整されたバックアップを定期的に作成します。

    バックアップによってクラスタの動作がどの程度中断するか、バックアップの実行頻度、およびリストア手順の複雑さはすべて、選択した、調整されたバックアップとリストアのアプローチによって変わるため、アプローチを確認して、自身の状況と災害復旧の目標 (許容できるデータ損失の量、クラスタの動作をリストアする必要がある速度など) に最も適したアプローチを決定する必要があります。

  • 必要な災害復旧手順 (選択した調整されたバックアップ手順について説明されているリストア手順を含む) を計画、準備、およびテストし、"高可用性ガイド" の "災害復旧の手順Opens in a new tab" で説明されている手順を十分に理解します。

必要な DR 非同期を構成済みで、調整されたバックアップを定期的に作成していることを前提とした場合、ミラーリングされたシャード・クラスタの一般的な災害復旧手順は以下のようになります。

  1. 各データ・ノード・ミラーで以下を実行します。

  2. "調整されたバックアップとリストアの手順" の該当セクションで説明されているように、選択した調整されたバックアップとリストアのアプローチについて説明されている手順を使用して、最新の調整されたバックアップをリストアします。

  3. フェイルオーバー機能をクラスタにリストアするために、各ミラーでフェイルオーバー・ペアを完成させます。データ・ノード・ミラーすべてに複数の DR 非同期が含まれていた場合、それぞれで別の DR 非同期をフェイルオーバー・メンバに昇格させます。ミラーに追加の DR 非同期がない場合は、"ミラー・データ・ノードによる高可用性" の説明に従って、各ミラーに 2 つ目のフェイルオーバー・メンバを構成します。

  4. シャード・クラスタへのアプリケーション・アクセスをリストアします。

Note:

回復したミラーリングされたシャード・クラスタに計算ノードが含まれていた場合、これらの計算ノードはほぼ確実にデータ・ノードのフェイルオーバー・ペアと同じ場所に配置されており、障害によって利用できなくなっています。この場合、クラスタの完全なリカバリを行うには、"作業負荷の分離とクエリ・スループットの向上のための計算ノードの導入" の説明に従って、回復したクラスタと同じ場所に配置された新しい計算ノードを導入して、ネットワーク遅延を最小化することが含まれます。クラスタの既存の計算ノードがまだ元の場所で動作している場合は、できる限り速やかにそれらの計算ノードをクラスタの新しい場所に再配置する必要があります。回復したクラスタは計算ノードなしでも動作可能ですが、計算ノードが提供する利点を利用することはできません。

シャード・クラスタの複製

現在のホストとは別の複数のホストに既存のクラスタを複製することが必要になる場合があります。その状況の例を以下に挙げます。

  • プロダクション・クラスタのスナップショットに基づくテスト・システムを準備する。

  • 既存ホストの一部またはすべてが使用できなくなる障害が発生した後、新しいホストにバックアップからクラスタを復元する。

  • 現在とは別のデータ・センターなどの新しい場所にクラスタを移動する。

ここでは、新しいホストに既存のクラスタを複製して、上記のタスクまたは類似のタスクを達成できるようにする手順を説明します。

シャード・クラスタは、複数のマッピングと通信チャンネルを通じて連携するように構成したノードとネームスペースから成ります。この構成に関する情報は、データ・ノード 1 のマスタ・ネームスペース (または、ネームスペースレベル・クラスタのシャード・マスタ) に保存されて維持されます。この情報として、具体的なホスト名、ポート番号、ネームスペースなどがあります。クラスタを複製するには、この構成を新しいクラスタ上に複製する必要があります。

Note:

複製元の既存クラスタと複製先の新規クラスタでデータ・ノードの数が同じ場合にのみ、この手順を使用できます。

この複製プロセスには SYSTEM.Sharding API 呼び出しが関わっているので、複製されたクラスタは必ずネームスペースレベル・クラスタになります。このクラスタの管理と変更は、%SYSTEM.Sharding API および管理ポータルのネームスペース・レベルのページでのみ可能です。

この手順は、ホストあたりのノードが 1 つであることを想定していますが、ホストあたり複数のノードがあるネームスペースレベル・クラスタで使用できるように変更することもできます。

シャード・クラスタを複製するには以下の手順に従います。

  1. 複製先クラスタのデータ・ノード・ホストをプロビジョニングまたは特定し、そのホストに InterSystems IRIS を導入します。管理ポータルまたは $SYSTEM.Sharding.EnableSharding API 呼び出しを使用してシャードを有効にします。

  2. 複製元クラスタのデータ・ノード 1 にあるマスタ・ネームスペースで $SYSTEM.Sharding.GetConfig()Opens in a new tab を呼び出して、ノード 1 にあるマスタ・ネームスペースの既定のグローバル・データベースの場所と、各データ・ノードにあるシャード・ネームスペースの既定のグローバル・データベースの場所を表示します。新しいクラスタでは、元のクラスタのノードに対応するノードにこれらのデータベースを複製する必要があるので、必ず情報を正確に記録します。マスタ・ネームスペースで既定のルーチン・データベースとグローバル・データベースが異なる場合は、その情報も記録します。

    GetConfig() の出力には、各データ・ノードのシャード番号が記述されています。複製先のデータ・ノードを構成するには、複製元でそれに対応するデータ・ノードのシャード番号が必要です。複製元クラスタのシャード番号を複製先クラスタの各ホストに割り当てることによって、複製先ノードと複製元ノードとの対応関係を指定します。

  3. 複製元クラスタへのアプリケーションのアクセスをブロックします。すべての書き込みをディスクにフラッシュした後、複製元クラスタにある InterSystems IRIS のすべてのインスタンスを 1 つずつシャット・ダウンします。

  4. 複製先クラスタ上に複製元クラスタのグローバル・データベースを複製します (必要に応じて、マスタのルーチン・データベースも複製します)。この作業には以下の 2 つの方法のいずれかを使用します。

    • 複製元クラスタでデータベースをバックアップし、それを複製先クラスタに復元する。

    • 複製元クラスタから複製先クラスタに IRIS.DAT ファイルをコピーする。

    この 2 つのクラスタでディレクトリ・パスを同じにする必要はありません。どちらの方法を使用する場合でも、必ず複製元のシャード番号に対応する複製先クラスタ・ノード上に各データベースを複製します。

    Note:

    複製元クラスタをミラーリングしている場合は、各ノードのいずれか 1 つのフェイルオーバー・メンバのみからデータベースをバックアップまたはコピーするだけですみます。

  5. 複製先クラスタの各ノードでシャード・ネームスペースを作成し、複製したシャード・データベースをそのネームスペースの既定のグローバル・データベースとします。ノード 1 で、マスタ・ネームスペースに対して上記と同じ手順を実行します。ルーチン・データベースとグローバル・データベースが異なる場合はルーチン・データベースを追加します。

  6. 複製先クラスタのノード 1 にあるマスタ・ネームスペースで以下の手順に従います。

    1. 複製先データ・ノートごとに $SYSTEM.Sharding.ReassignShard()Opens in a new tab を 1 回ずつ呼び出し、それぞれのホスト名または IP アドレス、スーパーサーバ・ポート、シャード・ネームスペース、シャード番号を指定します。複製元クラスタに対応する正しいシャード番号を指定します。以下に例を挙げます。

      set status = $SYSTEM.Sharding.ReassignShard(,"shard-host",shard-port,"shard-namespace","shard-number")
      
    2. $SYSTEM.Sharding.Reinitialize()Opens in a new tab を呼び出します。これによって、複製先クラスタのバージョンに互換性があることが確認され、複製先クラスタの有効化に必要なマッピング、ECP 接続、メタデータがすべて設定されます。$SYSTEM.Sharding.VerifyShards()Opens in a new tab が自動的に呼び出されて、クラスタが有効になり、構成が正しいことが確認されます。

      複製先クラスタに複製したグローバル・データベースとルーチン・データベース以外のデータベースに対して、ユーザ定義のグローバル、ルーチン、またはパッケージのマッピングがマスタ・ネームスペースにあると、Reinitialize() からエラーが返されます。新しいクラスタにはこのような追加のデータベースが存在しないからです。このエラーを回避するには、Reinitialize() を呼び出すときの 2 番目の引数 IgnoreMappings に、以下のように 1 を指定します。

      set status = $SYSTEM.Sharding.Reinitialize(,1)
      

      Reinitialize() 呼び出しの後、グローバル・データベースとルーチン・データベースを複製したときと同様に、関連する追加のデータベースを複製先ノード 1 に複製します。これらのデータベースをすべて用意した段階で $SYSTEM.Sharding.VerifyShards()Opens in a new tab を呼び出し、関連するマッピングをシャード・ネームスペースに適用します。

  7. 必要に応じて、複製したクラスタをミラーリングに変換し、計算ノードを追加します。

シャーディング API

このリリースで、InterSystems IRIS は、シャード・クラスタの構成および管理に使用できる 2 つの API を用意しています。

%SYSTEM.Cluster API

%SYSTEM.Cluster API メソッドおよびそれらを呼び出す手順の詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.ClusterOpens in a new tab" クラス・ドキュメントを参照してください。

%SYSTEM.ClusterOpens in a new tab API メソッドを以下の要領で使用します。

%SYSTEM.Cluster メソッドには以下のようなものがあります。

%SYSTEM.Sharding API

%SYSTEM.Sharding API メソッドおよびそれらを呼び出す手順の詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.ShardingOpens in a new tab" クラス・ドキュメントを参照してください。

%SYSTEM.ShardingOpens in a new tab API メソッドを以下の要領で使用します。

%SYSTEM.Sharding メソッドには以下のようなものがあります。

ネームスペース・レベル・アーキテクチャの導入

管理ポータルまたは %SYSTEM.ShardingOpens in a new tab API を使用して、シャード・マスタ、シャード・データ・サーバ、およびオプションのクエリ・サーバで構成される、古いネームスペース・レベル・アーキテクチャで InterSystems IRIS シャード・クラスタを導入するには、このセクションの手順を使用します。これらの手順は、各 InterSystems IRIS インスタンスを独自のシステムにインストールすることを前提としています。

Note:

InterSystems Cloud Manager (ICM) を使用してネームスペース・レベルのシャード・クラスタを導入することもできます。そのためには、DM ノードOpens in a new tab (ミラーリングあり、またはミラーリングなし) をシャード・マスタ・データベース・サーバとして定義し、DS ノードOpens in a new tab (ミラーリングあり、またはミラーリングなし) の一定数をシャード・データ・サーバとして定義して、オプションで QS ノードOpens in a new tabをシャード・クエリ・サーバとして追加します。詳細は、"InterSystems Cloud Manager ガイドOpens in a new tab" を参照してください。

アプリケーションは任意のシャード・データ・サーバのクラスタ・ネームスペースに接続して、全データセットをローカルのものであるかのように利用できるので、シャード・クエリ・サーバを含まないネームスペース・レベルのクラスタの一般的な推奨ベスト・プラクティスは、すべてのシャード・データ・サーバ間でアプリケーション接続を負荷分散することです。一般的に、これはシャード・クエリ・サーバを含むクラスタにも最適なアプローチですが、追加の考慮事項があります。詳細は、"計算ノードの計画" のセクションの末尾を参照してください。

ノード・レベルのクラスタのノード・レベルの導入と異なり、ネームスペース・レベルの導入では、クラスタ構成の一部としてミラーを作成することはできません。ただし、ミラーリングされたシャード・クラスタ (つまり、ミラーリングされたシャード・マスタ・データ・サーバとミラーリングされたシャード・データ・サーバで構成) を導入する場合は、以下のどれでも実行できます。

  • 既存のミラーのプライマリをシャード・マスタ・データ・サーバとして構成し、最初に対象のマスタ・ネームスペースのグローバル・データベースをミラーに追加する。

  • 既存のシャード・マスタ・データ・サーバをプライマリとして含むミラーを作成し、バックアップを追加する前に、マスタ・ネームスペースのグローバル・データベースをミラーに追加する。

  • 既存のミラーのフェイルオーバー・メンバをシャード・マスタ・データ・サーバとして割り当て、最初に対象のクラスタ・ネームスペースのグローバル・データベースをミラーに追加する。

  • 割り当てたシャード・データ・サーバをプライマリとして含むミラーを作成し、シャード・ネームスペースのグローバル・データベースをミラーに追加してから、バックアップに関する情報を指定して、ミラーリングされたシャード・データ・サーバとして再割り当てする。

ミラーリングされたシャード・クラスタに DR 非同期を含めることはできますが、レポート非同期を含めることはできません。推奨されるベスト・プラクティスは、ミラーリングされたノードとミラーリングされていないノードを混在させないようにすることです。つまり、シャード・マスタとすべてのシャード・データ・サーバをミラーリングするか、いずれもミラーリングしないようにしてください。これらの手順のステップを以下に示します。このステップは、ミラーリングされたクラスタを導入する場合にも、ミラーリングされていないクラスタを導入する場合にも使用できます。

インフラストラクチャのプロビジョニングまたは特定

必要なネットワーク・ホスト・システム (物理、仮想、またはクラウド) の数を特定します (シャード・マスタおよびシャード・データ・サーバについてそれぞれ 1 つのホスト)。

ミラー・クラスタを導入する場合は、シャード・マスタ・データ・サーバ用に 2 つのホストと、各シャード・データ・サーバ用に 2 つ以上のホスト (DR 非同期メンバが必要かどうかによる) をプロビジョニングします。

Important:

必ず、“%SYSTEM.Cluster API を使用したクラスタの導入” の "インフラストラクチャのプロビジョニングまたは特定" で、シャード・クラスタのインフラストラクチャの要件とベスト・プラクティスを確認してください。

クラスタ・ノードへの InterSystems IRIS の導入

この手順では、各システムで単一の InterSystems IRIS インスタンスをホストするか、またはホストする予定であることが前提となっています。

  1. インターシステムズが提供するイメージからコンテナを作成する ("コンテナ内でのインターシステムズ製品の実行Opens in a new tab" を参照) か、キットから InterSystems IRIS をインストールする ("インストール・ガイドOpens in a new tab" を参照) ことにより、InterSystems IRIS のインスタンスを導入します。

    Important:

    必ず、"%SYSTEM.Cluster API を使用したクラスタの導入" の "データ・ノードへの InterSystems IRIS の導入" で、シャード・クラスタの InterSystems IRIS インスタンスの要件とベスト・プラクティスを確認してください。

  2. "データベース・キャッシュとデータベースのサイズの見積もり" の説明に従って、各インスタンスのデータベースをホストするストレージ・デバイスがグローバル・データベースのターゲット・サイズに十分対応できる大きさであることを確認します。

    可能であれば、すべてのインスタンスについて、データベース・ディレクトリとジャーナル・ディレクトリを別個のストレージ・デバイスに配置してください。これは、大量のデータ取り込みがクエリの実行と同時に行われる場合に特に重要です。ファイル・システムの構成およびジャーナル・ストレージなどのストレージの構成のガイドラインについては、"システム・リソースの計画と管理" の "ストレージの計画" と "ファイル・システムの分離"、および "データ整合性ガイド" の "ジャーナリングの最善の使用方法" を参照してください。

  3. "データベース・キャッシュとデータベースのサイズの見積もり" で決定したサイズに従って、クラスタにおける最終的なロールに応じて、各インスタンスのデータベース・キャッシュ (グローバル・バッファ・プール) を割り当てます。データベース・キャッシュを割り当てる手順については、"システム管理ガイド" の “InterSystems IRIS の構成” の章にある "メモリと開始設定" を参照してください。

    Note:

    クラスタ・メンバの共有メモリ・ヒープのサイズを大きくすることがお勧めの手段となることがあります。共有メモリ・ヒープへのメモリの割り当て方法の詳細は、"構成パラメータ・ファイル・リファレンス" の "gmheap" を参照してください。

    InterSystems IRIS インスタンスのルーチン・キャッシュとデータベース・キャッシュおよび共有メモリ・ヒープにメモリを割り当てる際のガイドラインは、"メモリ要件の見積もり" を参照してください。

管理ポータルを使用したネームスペース・レベルのクラスタの構成

インフラストラクチャをプロビジョニングまたは特定して、クラスタ・ノードに InterSystems IRIS をインストールした後、このセクションのステップに従って、管理ポータルを使用してネームスペース・レベルのクラスタを構成します。

シャード・データ・サーバの準備

目的の各インスタンスで以下を実行して、クラスタにシャード・データ・サーバとして追加するための準備を行います。

Note:

状況によっては、API (管理ポータルの基盤) で 1 つ以上のノードのホスト名をクラスタのノードの相互接続に使用できる IP アドレスに解決できない場合があります。このような場合、$SYSTEM.Sharding.SetNodeIPAddress()Opens in a new tab ("%SYSTEM.Sharding API" を参照) を呼び出して、各ノードで使用する IP アドレスを指定できます。$SYSTEM.Sharding.SetNodeIPAddress() を使用するには、対象の各クラスタ・ノードでこれを呼び出してから、これらのノードで他の %SYSTEM.Sharding API 呼び出しを行う必要があります。以下に例を示します。

set status = $SYSTEM.Sharding.SetNodeIPAddress("00.53.183.209")

この呼び出しを使用する場合、シャードをマスタ・ネームスペースに割り当てる際に、ホスト名ではなく、各シャード・データ・サーバ・ノードに対して指定した IP アドレスを使用する必要があります。"シャード・マスタ・データ・サーバの構成とシャード・データ・サーバの割り当て" を参照してください。

  1. インスタンスの管理ポータルを開き、[システム管理][構成][システム構成] [Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (既定値はほぼすべてのクラスタに適しているため、[ECP 接続の最大数] 設定の値を変更する必要はありません)。

    Note:

    すべてのシステムで、URL http://host:webserverport/csp/sys/UtilHome.csp をブラウザで読み込むことによって管理ポータルを開くことができます。host は、ホスト ID、port はインスタンスの Web サーバのポート番号です (http://localhost:52773/csp/sys/UtilHome.csp など) (この URL を使用して管理ポータルを開く方法の詳細は、コンテナに導入Opens in a new tabされたインスタンスの手順、または "InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" のセクションで、キットからインストールしたOpens in a new tabインスタンスの手順を参照してください)。Windows システムの場合、システム トレイにある InterSystems IRIS のアイコンをクリックして [管理ポータル] を選択することで、管理ポータルを開くこともできます。

  2. インスタンスを再起動します (管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動した後に再読み込みするだけでかまいません)。

  3. シャード・ネームスペースを作成するには、[Configure Namespace-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Namespace-Level]) に移動して、[ネームスペースを作成] ボタンをクリックします。続いて、"システム管理ガイド" の "InterSystems IRIS の構成" の章にある "ネームスペースの作成/変更" の手順に従います (ネームスペースは相互運用対応である必要はありません)。別のシャード・データ・サーバのシャード・ネームスペースには異なる名前を付けることができますが、同じ名前を付けた方が便利です。

    このプロセスでは、"データベース・キャッシュとデータベースのサイズの見積もり" で説明しているように、既定のグローバル・データベースで新しいデータベースを作成し、必ず、シャード・ネームスペースのターゲット・サイズに対応できる十分な空き容量があるデバイスにそのデータベースを配置してください。データ取り込みのパフォーマンスが重要な考慮事項である場合は、データベースの初期サイズをそのターゲット・サイズに設定します。また、作成したグローバル・データベースを、ネームスペースの既定のルーチン・データベースとして選択します。

    Important:

    シャード・データ・サーバにするために既存のミラーを準備する場合は、各メンバのシャード・ネームスペースの既定のグローバル・データベースを作成する際に (最初にプライマリ、次にバックアップ、その次に DR 非同期)、[ミラー・データベース?] プロンプトで [はい] を選択して、シャード・ネームスペースのグローバル・データベースをミラーに含めます。

    Note:

    "データベース・キャッシュとデータベースのサイズの見積もり" で説明したように、シャード・マスタ・データ・サーバとシャード・データ・サーバはすべて、単一の既定のグローバル・データベースを共有し、このデータベースは、シャード・マスタに物理的に配置され、マスタ・グローバル・データベースと呼ばれます。シャード・ネームスペースが作成されたときに作成される既定のグローバル・データベースはシャードに残りますが、シャードに保存されているデータを含む local globals database になります。シャード・データ・サーバは、クラスタに割り当てられるまでマスタ・グローバル・データベースを使用しません。このため、わかりやすくするために、このドキュメントの計画ガイドラインと手順では、最終的なローカル・グローバル・データベースを、シャード・ネームスペースの既定のグローバル・データベースと呼んでいます。

    新しいネームスペースは、IRISTEMP が一時ストレージ・データベースとして構成された状態で自動的に作成されます。シャード・ネームスペースのこの設定を変更しないでください。

  4. 後の手順のために、ホスト・システムの DNS 名または IP アドレス、インスタンスのスーパーサーバ (TCP) ポート、および作成したシャード・ネームスペースの名前を記録します。

    Note:

    もう 1 つのノード (この手順で必要なノード) から見ると、コンテナ化された InterSystems IRIS インスタンスのスーパーサーバ・ポートは、そのコンテナが作成されたときにスーパーサーバ・ポートが公開されたホスト・ポートによって異なります。この詳細および例は、"コンテナ内でのインターシステムズ製品の実行" の "永続的な %SYS を使用した InterSystems IRIS コンテナの実行" と "InterSystems IRIS コンテナの実行 : Docker Compose の例"、および Docker ドキュメントの "Container networkingOpens in a new tab" を参照してください。

    キットでインストールした、そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。インスタンスのスーパーサーバ・ポート番号を表示または設定するには、そのインスタンスの管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します(インスタンスの管理ポータルを開く方法の詳細は、"InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" を参照してください)。

シャード・マスタ・データ・サーバの構成とシャード・データ・サーバの割り当て

目的のインスタンスで以下を実行してシャード・マスタ・データ・サーバとして構成し、準備しておいたシャード・データ・サーバをクラスタに割り当てます。この手順を使用してクラスタにクエリ・シャードを割り当てることもできます。

  1. インスタンスの管理ポータルを開き、[システム管理][構成][システム構成] [Sharding][シャード有効] の順に選択し、表示されるダイアログで [OK] をクリックします (既定値はほぼすべてのクラスタに適しているため、[ECP 接続の最大数] 設定の値を変更する必要はありません)。

  2. インスタンスを再起動します (管理ポータルが表示されているブラウザのウィンドウやタブを閉じる必要はありません。インスタンスが完全に再起動した後に再読み込みするだけでかまいません)。

  3. マスタ・ネームスペースを作成するには、[Configure Namespace-Level] ページ ([システム管理][構成][システム構成][Sharding][Configure Namespace-Level]) に移動して、[ネームスペースを作成] ボタンをクリックします。続いて、"システム管理ガイド" の "InterSystems IRIS の構成" の章にある "ネームスペースの作成/変更" の手順に従います (ネームスペースは相互運用対応である必要はありません)。

    このプロセスでは、"データベース・キャッシュとデータベースのサイズの見積もり" で説明しているように、既定のグローバル・データベースで新しいデータベースを作成し、マスタ・ネームスペースのターゲット・サイズに対応できる十分な空き容量があるデバイスにそのデータベースを必ず配置してください。また、作成したグローバル・データベースを、ネームスペースの既定のルーチン・データベースとして選択します。

    Important:

    既存のミラーをシャード・マスタ・データ・サーバとして構成する場合は、各メンバのマスタ・ネームスペースの既定のグローバル・データベースを作成する際に (最初にプライマリ、次にバックアップ、その次に DR 非同期)、[ミラー・データベース?] プロンプトで [はい] を選択して、マスタ・ネームスペースのグローバル・データベースをミラーに含めます。

  4. シャード・データ・サーバを割り当てるには、[ネームスペース] ドロップダウンが先ほど作成したマスタ・ネームスペースに設定されていることを確認します。各シャードに対して、[Configure Namespace-Level] ページの [シャード割り当て] ボタンをクリックして [シャード割り当て] ダイアログを表示し、シャード・データ・サーバ・インスタンスの以下の情報を入力します。

    • ホストの名前 (または、このセクションの冒頭で説明したように、この手順を開始する前に各ノードで $SYSTEM.Sharding.SetNodeIPAddress()Opens in a new tab 呼び出しを使用した場合は IP アドレス)。

    • スーパーサーバ・ポート。

    • 準備の際に作成したシャード・ネームスペースの名前。

    • シャードのロールとして [データ] を選択。

      Important:

      シャード・クエリ・サーバを割り当てるには、シャードのロールとして、[データ] ではなく [クエリ] を選択します。

    既存のミラーをシャード・データ・サーバとして割り当てる場合は、プライマリから作業を始め、上記の情報を入力した後に、[ミラー] を選択して以下の情報を指定します。これにより、バックアップが自動的にプライマリに割り当てられます (シャード・クエリ・サーバはミラーリングされません)。

    • ミラーの名前。

    • バックアップのホストの名前 (または IP アドレス)。

    • バックアップのスーパーサーバ・ポート。

    • ミラーの仮想 IP アドレス (VIP) (設定されている場合)。

    最後に [完了] を選択します。

  5. シャードを割り当てると、そのシャードは [Configure Namespace-Level] ページのリストに表示されます。シャードがミラーである場合は、両方のフェイルオーバー・メンバが含まれます。

  6. すべてのシャード・データ・サーバ (およびオプションでシャード・クエリ・サーバ) を割り当てたら、[シャードを検証] をクリックして、ポートが正しく、ノードの必要な情報がすべて設定されていて、シャード・マスタがシャード・データ・サーバと通信できることを確認します。

シャード・サーバの割り当て解除

一覧表示されているシャード・データ・サーバまたはシャード・クエリ・サーバの右側にある [割り当て解除] リンクを使用して、シャード・サーバをクラスタから削除できます。ミラーリングされたシャード・データ・サーバを割り当て解除する場合は、プライマリの管理ポータルで割り当て解除を行う必要があります。

Important:

クラスタにシャード・テーブルまたはクラスがある場合は (テーブルにデータが含まれるかどうかは関係ありません)、シャード・データ・サーバを割り当て解除することはできません。

API を使用したクラスタ・ノードの構成

インフラストラクチャをプロビジョニングまたは特定して、クラスタ・ノードに InterSystems IRIS をインストールした後、このセクションのステップに従って、API を使用してネームスペース・レベルのクラスタを構成します。ここで説明されている呼び出し、および API の他の呼び出しの詳細は、"InterSystems クラス・リファレンス" の %SYSTEM.Sharding のクラス・ドキュメントOpens in a new tabを参照してください。

Note:

状況によっては、API で 1 つ以上のノードのホスト名をクラスタのノードの相互接続に使用できる IP アドレスに解決できない場合があります。このような場合、$SYSTEM.Sharding.SetNodeIPAddress()Opens in a new tab ("%SYSTEM.Sharding API" を参照) を呼び出して、各ノードで使用する IP アドレスを指定できます。$SYSTEM.Sharding.SetNodeIPAddress() を使用するには、対象の各クラスタ・ノードでこれを呼び出してから、これらのノードで他の %SYSTEM.Sharding API 呼び出しを行う必要があります。以下に例を示します。

set status = $SYSTEM.Sharding.SetNodeIPAddress("00.53.183.209")

この呼び出しを使用する場合、シャード・マスタで $SYSTEM.Sharding.AssignShard()Opens in a new tab を呼び出してクラスタにノードを割り当てる際、以下の手順に示すように、shard-host 引数として、ホスト名ではなく、各ノードに対して指定した IP アドレスを使用する必要があります。

シャード・データ・サーバの準備

目的の各インスタンスで以下を実行して、クラスタにシャード・データ・サーバとして追加するための準備を行います。

Note:

ネームスペース・レベルの導入でミラーを作成することはできません。ただし、既存のミラーのフェイルオーバー・メンバをシャード・データ・サーバとして追加できます。このためには、ミラーを作成し、この手順を使用してメンバを準備してから、次の手順の説明に従ってメンバをシャード・データ・サーバとして割り当てます。

  1. "システム管理ガイド" の “InterSystems IRIS の構成” の章にある "ネームスペースの作成/変更" の説明に従って、管理ポータルを使用してシャード・ネームスペースを作成します。(ネームスペースは相互運用対応である必要はありません。)別のシャード・データ・サーバのシャード・ネームスペースには異なる名前を付けることができますが、同じ名前を付けた方が便利です。

    "データベース・キャッシュとデータベースのサイズの見積もり" で説明しているように、新しいデータベースを既定のグローバル・データベースとして作成し、必ず、そのターゲット・サイズに対応できる十分な空き容量があるデバイスにそのデータベースを配置してください。データ取り込みのパフォーマンスが重要な考慮事項である場合は、データベースの初期サイズをそのターゲット・サイズに設定します。

    Important:

    シャード・データ・サーバにするために既存のミラーを準備する場合は、各メンバのシャード・ネームスペースの既定のグローバル・データベースを作成する際に (最初にプライマリ、次にバックアップ、その次に DR 非同期)、[ミラー・データベース?] プロンプトで [はい] を選択して、シャード・ネームスペースのグローバル・データベースをミラーに含めます。

    作成したグローバル・データベースを、ネームスペースの既定のルーチン・データベースとして選択します。

    Note:

    "データベース・キャッシュとデータベースのサイズの見積もり" で説明したように、シャード・マスタ・データ・サーバとシャード・データ・サーバはすべて、単一の既定のグローバル・データベースを共有し、このデータベースは、シャード・マスタに物理的に配置され、マスタ・グローバル・データベースと呼ばれます。シャード・ネームスペースが作成されたときに作成される既定のグローバル・データベースはシャードに残りますが、シャードに保存されているデータを含む local globals database になります。シャード・データ・サーバは、クラスタに割り当てられるまでマスタ・グローバル・データベースを使用しません。このため、わかりやすくするために、このドキュメントの計画ガイドラインと手順では、最終的なローカル・グローバル・データベースを、シャード・ネームスペースの既定のグローバル・データベースと呼んでいます。

    新しいネームスペースは、IRISTEMP が一時ストレージ・データベースとして構成された状態で自動的に作成されます。シャード・ネームスペースのこの設定を変更しないでください。

  2. 後の手順のために、ホスト・システムの DNS 名または IP アドレス、インスタンスのスーパーサーバ (TCP) ポート、および作成したシャード・ネームスペースの名前を記録します。

    Note:

    もう 1 つのノード (この手順で必要なノード) から見ると、コンテナ化された InterSystems IRIS インスタンスのスーパーサーバ・ポートは、そのコンテナが作成されたときにスーパーサーバ・ポートが公開されたホスト・ポートによって異なります。この詳細および例は、"コンテナ内でのインターシステムズ製品の実行" の "永続的な %SYS を使用した InterSystems IRIS コンテナの実行" と "InterSystems IRIS コンテナの実行 : Docker Compose の例"、および Docker ドキュメントの "Container networkingOpens in a new tab" を参照してください。

    キットでインストールした、そのホスト上にしかない InterSystems IRIS インスタンスの既定のスーパーサーバ・ポート番号は 1972 です。インスタンスのスーパーサーバ・ポート番号を表示または設定するには、そのインスタンスの管理ポータルで [システム管理][構成][システム構成][メモリと開始設定] を選択します(インスタンスの管理ポータルを開く方法の詳細は、"InterSystems IRIS の基礎 : IDE の接続" の "InterSystems IRIS 接続情報Opens in a new tab" を参照してください)。

  3. InterSystems ターミナルOpens in a new tab・ウィンドウで、任意のネームスペースで $SYSTEM.Sharding.EnableShardingOpens in a new tab を呼び出して ("%SYSTEM.Sharding API" を参照)、インスタンスがシャード・クラスタに参加できるようにします。次に例を示します。

    set status = $SYSTEM.Sharding.EnableSharding()
    

    引数は必要ありません。

    Note:

    これらの手順で詳述されている各 API 呼び出しの戻り値 (成功の場合は 1 など) を確認するには、以下を入力します。

    zw status
    

    状況によっては通知なしで呼び出しが失敗することがあるため、各呼び出しの後に [ステータス] を確認することをお勧めします。呼び出しが成功しなかった ([ステータス][1] 以外) 場合、以下を入力することにより、わかりやすいエラー・メッセージが表示されます。

    do $SYSTEM.Status.DisplayError(status) 
    

    この呼び出しを実行した後で、インスタンスを再起動します。

シャード・マスタ・データ・サーバの構成とシャード・データ・サーバの割り当て

シャード・マスタ・データ・サーバのインスタンスで、以下を実行してシャード・マスタを構成し、シャード・データ・サーバを割り当てます。

  1. "システム管理ガイド" の “InterSystems IRIS の構成” の章にある "ネームスペースの作成/変更" の説明に従って、管理ポータルを使用してマスタ・ネームスペースを作成します。(ネームスペースは相互運用対応である必要はありません。)

    "データベース・キャッシュとデータベースのサイズの見積もり" で説明しているように、必ず、作成する既定のグローバル・データベースをそのターゲット・サイズに対応できる十分な空き容量があるデバイスに配置してください。データ取り込みのパフォーマンスが重要な考慮事項である場合は、データベースの初期サイズをそのターゲット・サイズに設定します。

    Important:

    既存のミラーをシャード・マスタ・データ・サーバとして構成する場合は、各メンバのマスタ・ネームスペースの既定のグローバル・データベースを作成する際に (最初にプライマリ、次にバックアップ、その次に DR 非同期)、[ミラー・データベース?] プロンプトで [はい] を選択して、マスタ・ネームスペースのグローバル・データベースをミラーに含めます。

    作成したグローバル・データベースを、ネームスペースの既定のルーチン・データベースとして選択します。

    Note:

    新しいネームスペースは、IRISTEMP が一時ストレージ・データベースとして構成された状態で自動的に作成されます。マスタ・ネームスペースのこの設定を変更しないでください。シャード・クエリの中間結果が IRISTEMP に格納されるため、このデータベースは、拡張に対応できる十分な空き容量がある、使用可能な最速のストレージに配置する必要があります。大規模な結果セットを返す多くの同時シャード・クエリが予想される場合は特に、その必要があります。

  2. InterSystems ターミナルOpens in a new tab・ウィンドウで、任意のネームスペースで以下の手順を実行します。

    1. $SYSTEM.Sharding.EnableSharding()Opens in a new tab を呼び出して ("%SYSTEM.Sharding API" を参照)、インスタンスがシャード・クラスタに参加できるようにします (引数は必要ありません)。次に例を示します。

      set status = $SYSTEM.Sharding.EnableSharding()
      

      この呼び出しを実行した後で、インスタンスを再起動します。

    2. シャード・データ・サーバごとに 1 回ずつ $SYSTEM.Sharding.AssignShard()Opens in a new tab を呼び出して ("%SYSTEM.Sharding API" を参照)、作成したマスタ・ネームスペースにシャードを割り当てます。次に例を示します。

      set status = $SYSTEM.Sharding.AssignShard("master-namespace","shard-host",shard-superserver-port,
          "shard_namespace")
      

      引数は、作成したマスタ・ネームスペースの名前と、前の手順でそのシャード・データ・サーバについて記録した情報を表します。次に例を示します。

      set status = $SYSTEM.Sharding.AssignShard("master","shardserver3",1972,"shard3")
      

      このセクションの冒頭で説明したように、この手順を始める前に各ノードで $SYSTEM.Sharding.SetNodeIPAddress()Opens in a new tab 呼び出しを使用した場合、shard-host には、ホスト名ではなくシャード・ホストの IP アドレスを使用してください。

    3. シャードを正しく割り当てているかどうかを検証するには、以下のコマンドを発行し、ホスト、ポート、およびネームスペースの名前を確認します。

      do $SYSTEM.Sharding.ListShards()
      Shard   Host                       Port    Namespc  Mirror  Role    VIP
      1       shard1.internal.acme.com   56775   SHARD1
      2       shard2.internal.acme.com   56777   SHARD2
      ...
      
      Note:

      InterSystems IRIS インスタンスのスーパーサーバ・ポートの特定についての重要な情報は、"シャード・データ・サーバの構成" の手順 2 を参照してください。

    4. シャード・マスタがシャード・データ・サーバと通信できるように、ポートが正しく、ノードの必要な構成がすべて適切であることを確認するには、次のように $SYSTEM.Sharding.VerifyShards()Opens in a new tab ("%SYSTEM.Sharding API" を参照) を呼び出します。

      do $SYSTEM.Sharding.VerifyShards() 
      

      $SYSTEM.Sharding.VerifyShards()Opens in a new tab 呼び出しは、多数のエラーを識別します。例えば、$SYSTEM.Sharding.AssignShard()Opens in a new tab 呼び出しで指定されたポートが、シャード・データ・サーバ・ホスト上で開いているポートであり、InterSystems IRIS インスタンスのスーパーサーバ・ポートではない場合、シャードは正しく割り当てられません。$SYSTEM.Sharding.VerifyShards()Opens in a new tab 呼び出しはこれを示します。

    5. ミラーのフェイルオーバー・ペアをシャード・データ・サーバとして準備および追加した場合は、以下に示すように、シャード・マスタ・データ・サーバで $SYSTEM.Sharding.AddDatabasesToMirrors()Opens in a new tab 呼び出し ("%SYSTEM.Sharding API" を参照) を使用して、各プライマリにマスタ・データベースとシャード・データベースをミラーリングされたデータベースとして追加し、各フェイルオーバー・ペアをミラーリングされたシャード・データ・サーバとして完全に構成できます。

      set status = $SYSTEM.Sharding.AddDatabasesToMirrors("master-namespace")
      

      推奨されるベスト・プラクティスは、ミラーリングされたノードとミラーリングされていないノードを混在させるのではなく、完全にミラーリングするか、まったくミラーリングしないでクラスタを導入することです。

構成したデータ・ノード・ミラー内のフェイルオーバー・ペアに DR 非同期を追加するには、最初のフェイルオーバー・メンバ上のミラーリングされたデータベースに対応する新しいノード上にデータベースを作成します。続いて、そのミラーに新しいノードを DR 非同期として追加し、最初のフェイルオーバー・メンバ上に作成したバックアップからデータベースをリストアして、そのデータベースを自動的にミラーに追加します。

既存のデータ・ノードそれぞれにミラーを作成してから、ノード 1 で $SYSTEM.Sharding.AddDatabasesToMirrors()Opens in a new tab を呼び出して、クラスタをミラーリングされた構成に自動的に変換します。

予約名

以下の名前は InterSystems IRIS で使用されているため、ユーザ定義要素の名前には使用しないでください。

  • パッケージ名 IRIS.Shard は、システム生成シャード・ローカル・クラス名用に予約されているため、ユーザ定義クラスには使用しないでください。

  • スキーマ名 IRIS_Shard は、システム生成シャード・ローカル・テーブル名用に予約されているため、ユーザ定義テーブルには使用しないでください。

  • プレフィックス IRIS.Shard.IS.、および BfVY. は、シャード・ローカル・テーブルのグローバル用に予約されており、シャード・ネームスペースでシャードのローカル・データベースにマッピングされます。ユーザ定義グローバル名およびシャード化されていないテーブルのグローバル名は、これらのプレフィックスで始めないでください。シャード・ローカル・テーブル以外のグローバルにこれらのプレフィックスを使用すると、予測できない動作が起こる可能性があります。

FeedbackOpens in a new tab