17 Oracle Shardingのアーキテクチャ
Oracle Shardingシャーディングは、複数のOracleデータベース間におけるデータの水平パーティション化に基づくデータベース・スケーリング技術です。
この章のトピックは、次のとおりです:
シャーディングについて
シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。
各データベースは、独自のローカル・リソース(CPU、メモリー、フラッシュまたはディスク)を持つ専用サーバーでホストされます。このような構成の各データベースはシャードと呼ばれます。すべてのシャードが一体的に単一の論理データベースを形成し、これはシャード・データベース(SDB)と呼ばれます。
水平パーティション化にはシャード間のデータベース表の分割が伴い、これによって各シャードには、列は同じですが行は異なるサブセットを持つ表が含まれます。この方法で分割された表はシャード表とも呼ばれています。
次の図は、3つのシャード間で水平パーティション化された表を示しています。
シャーディングはシェアードナッシング・ハードウェア・インフラストラクチャに基づいており、シャードはCPU、メモリー、ストレージ・デバイスなどの物理リソースを共有しないため、単一障害点が発生しません。シャードはソフトウェアの観点でも疎結合されています。クラスタウェアが実行されないためです。
通常、シャードは専用サーバーでホストされます。これらのサーバーには、市販のハードウェアまたはエンジニアド・システムを使用できます。シャードは、単一インスタンスまたはOracle RACデータベースで実行できます。それらは、オンプレミス、クラウド、またはオンプレミスとクラウドのハイブリッド構成に配置できます。
データベース管理者の視点からすると、SDBは、まとめて管理することも個別に管理することも可能な複数のデータベースで構成されています。ただし、アプリケーションの視点からはSDBは単一のデータベースのように見えます。シャードの数とそのシャード間におけるデータ分散は、データベース・アプリケーションに対して完全に透過的です。
シャーディングは、シャード・データベース・アーキテクチャに適したカスタムOLTPアプリケーションを対象としています。シャーディングを使用するアプリケーションには、シャーディング・キーを使用して主にデータにアクセスする適切に定義されたデータ・モデルおよびデータ分散方法(コンシステント・ハッシュ、範囲、リストまたはコンポジット)が必要です。シャーディング・キーの例として、customer_id
、account_no
、country_id
などがあります。
シャーディングの利点
シャーディングは、最も負荷の高いOLTPアプリケーションに対する線形の拡張性と完全な障害分離を提供します。
シャーディングの主な利点には、次のようなものがあります。
-
線形の拡張性。シャーディングによってパフォーマンス上のボトルネックを排除し、シャードを追加することでパフォーマンスと容量を直線的に拡張できます。
-
障害の封じ込め。シャーディングは、共有ディスク、SAN、クラスタウェアなど、単一障害点を排除するシェアード・ナッシング・ハードウェア・インフラストラクチャであり、強力な障害分離が可能なため、1つのシャードの障害または処理速度の低下は他のシャードのパフォーマンスまたは可用性に影響しません。
-
データの地理的分散.シャーディングは、データを特定の管轄に配置することが必要なときに、特定のデータをそのコンシューマの近くに格納して定期的な要求を満たすことを可能にします。
-
ローリング・アップグレード。1回につき1つのシャードへの構成変更の適用は他のシャードに影響を及ぼさないため、管理者は最初にデータの小さなサブセットで変更をテストできます。
-
クラウド・デプロイメントの簡潔性。シャーディングは、クラウドでのデプロイメントに適しています。シャードを必要に応じてサイズ調整することで、利用可能なあらゆるクラウド・インフラストラクチャに対応しながら、必要なサービス・レベルを達成できます。Oracle Shardingは、オンプレミス、クラウドおよびハイブリッドのデプロイメント・モデルをサポートしています。
シャーディングを実装するNoSQLデータ・ストアとは異なり、Oracle ShardingはエンタープライズRDBMSの機能を犠牲にすることなく、シャーディングの利点を提供します。たとえば、Oracle Shardingは次の要素をサポートしています。
-
リレーショナル・スキーマ
-
データベース・パーティション化
-
ACIDプロパティおよび読取りの一貫性
-
SQLおよびその他のプログラム的インタフェース
-
複合データ型
-
オンラインのスキーマ変更
-
マルチコア・スケーラビリティ
-
高度なセキュリティ
-
圧縮
-
高可用性機能
-
エンタープライズ級のバックアップおよびリカバリ
Oracle Shardingアーキテクチャのコンポーネント
Oracle Shardingは、適合するOLTPアプリケーションのためのスケーラビリティおよび可用性機能です。ハードウェアまたはソフトウェアを共有しないOracleデータベースのプール間でデータを分散およびレプリケートできます。
アプリケーションは、データベースのプールを単一の論理データベースとして認識します。データベース(シャード)をプールに追加することで、アプリケーションはどのプラットフォーム上でも任意のレベルでデータ、トランザクションおよびユーザーを弾力的にスケーリングできます。Oracle Databaseでは、1,000シャードまでのスケーリングがサポートされています。
次の図に、Oracle Shardingの主なアーキテクチャ・コンポーネントを示します。
-
シャード・データベース(SDB): ハードウェアまたはソフトウェアを共有しない物理Oracle Database (シャード)のプール間で水平にパーティション化される単一の論理Oracle Database
-
シャード - シャード・データベースのサブセットをホストする独立した物理Oracleデータベース
-
グローバル・サービス: SDB内のデータへのアクセスを提供するデータベース・サービス
-
シャード・カタログ: シャードの自動デプロイメント、シャード・データベースの集中管理および複数シャードの問合せをサポートするOracle Database
-
シャード・ディレクタ: シャーディング・キーに基づく高パフォーマンス接続のルーティングを可能にするネットワーク・リスナー
-
接続プール: 実行時に、データベース・リクエストをプールされた接続間でルーティングすることにより、シャード・ディレクタとして機能します
-
管理インタフェース - GDSCTL (コマンドライン・ユーティリティ)およびOracle Enterprise Manager (GUI)
シャード・データベースとシャード
シャードは、固有のローカル・リソース(CPU、メモリーおよびディスク)を備えたデータベース・サーバーでホストされている独立したOracle Databaseです。シャード間の共有記憶域は必要ありません。
シャード・データベースは、シャードの集まりです。シャードは、すべてを1つのリージョンに配置することも、異なるリージョンに配置することもできます。Oracle Shardingのコンテキストにおけるリージョンは、1つのデータ・センターまたはネットワーク上で近接する複数のデータ・センターを表します。
シャードは、Data GuardなどのOracleレプリケーション・テクノロジによって高可用性(HA)および障害時リカバリ(DR)のためにレプリケートされます。HAの場合は、プライマリ・シャードが配置されている同じリージョンにスタンバイ・シャードを配置できます。DRの場合、スタンバイ・シャードは別のリージョンに配置されます。
グローバル・サービス
グローバル・サービスは、従来のデータベース・サービスの概念を拡張したものです。グローバル・サービスでは、従来のデータベース・サービスのすべてのプロパティがサポートされます。シャード・データベースでは、グローバル・サービス用の追加のプロパティが設定されます。たとえば、データベース・ロール、レプリケーション・ラグの許容値、クライアントとシャード間のリージョン・アフィニティなどがあります。読取り/書込みトランザクション・ワークロードの場合は、SDB内のプライマリ・シャードからデータにアクセスするために、単一のグローバル・サービスが作成されます。Active Data Guardを使用する高可用性シャードの場合は、別個の読取り専用グローバル・サービスを作成できます。
シャード・カタログ
シャード・カタログは、SDB構成データ用の永続ストアであり、シャード・データベースの集中管理で重要な役割を果たす特殊用途のOracle Databaseです。すべての構成変更(シャードおよびグローバル・サービスの追加や削除など)は、シャード・カタログで開始されます。SDB内のすべてのDDLは、シャード・カタログに接続することで実行されます。
シャード・カタログには、SDB内のすべての複製された表のマスター・コピーも含まれています。シャード・カタログでは、すべてのシャード内の複製された表への変更が、マテリアライズド・ビューを使用して自動的にレプリケートされます。シャード・カタログは、複数シャードの問合せやシャーディング・キーを指定しない問合せを処理するために使用される問合せコーディネータとしても機能します。
シャード・カタログの高可用性のためにOracle Data Guardを使用することをベスト・プラクティスとしてお薦めします。シャード・カタログの可用性はSDBの可用性に影響を与えません。シャード・カタログの停止は、スタンバイ・シャード・カタログへの自動フェイルオーバーが完了するまでの短い期間にメンテナンス操作や複数シャードの問合せを実行できるかどうかにのみ影響します。OLTPトランザクションは、引き続きSDBによってルーティングおよび実行され、カタログの停止による影響を受けません。
シャード・ディレクタ
Oracle Database 12cでは、データベース・ロール、負荷、レプリケーション・ラグおよび局所性に基づいて接続をルーティングするグローバル・サービス・マネージャが導入されました。Oracle Shardingをサポートするグローバル・サービス・マネージャは、データのロケーションに基づく接続のルーティングをサポートします。グローバル・サービス・マネージャは、Oracle Shardingのコンテキストではシャード・ディレクタと呼ばれます。
シャード・ディレクタは、SDBに接続するクライアント用のリージョン・リスナーとして機能するグローバル・サービス・マネージャの特定の実装です。ディレクタは、SDBの最新のトポロジ・マップを維持します。ディレクタは、接続リクエストで渡されたシャーディング・キーに基づいて、接続を適切なシャードにルーティングします。
一般的なSDBでは、一連のシャード・ディレクタが各リージョンに配置された低コストな専用のコモディティ・サーバーにインストールされます。高可用性を実現するには、複数のシャード・ディレクタをデプロイします。Oracle Database 12cリリース2では、1つのリージョンに最大5個のシャード・ディレクタをデプロイできます。
次に、シャード・ディレクタの主な機能を示します。
-
SDBの構成とシャードの可用性に関する実行時データを維持します
-
そのリージョンと他のリージョンの間のネットワーク待機時間を測定します
-
クライアントがSDBに接続するためのリージョン・リスナーとして機能します
-
グローバル・サービスを管理します
-
接続ロード・バランシングを実行します
接続プール
Oracle Databaseは、データ・アクセス・ドライバ(OCI、JDBC、ODP.NETなど)の接続プールをサポートします。Oracle 12cリリース2では、これらのドライバが、接続リクエストの一部として指定されたシャーディング・キーを認識します。同様に、JDBCクライアントのOracle Universal Connection Pool (UCP)も、接続URLで指定されたシャーディング・キーを認識できます。また、Oracle UCPを使用すると、非Oracleアプリケーション・クライアント(Apache Tomcat、WebSphereなど)がOracle Shardingと連携できるようになります。
Oracleクライアントは、UCPキャッシュのルーティング情報を使用して、アプリケーションから提供されたシャーディング・キーに基づいてデータベース・リクエストを適切なシャードに直接ルーティングします。このようなデータベース・リクエストのデータ依存型ルーティングにより、余分なネットワーク・ホップが排除され、大規模なOLTPアプリケーションのトランザクション待機時間が減少します。
ルーティング情報は、シャード・ディレクタを使用して確立されるシャードへの最初の接続時にキャッシュされます。キャッシュされた範囲内のシャーディング・キーに対する後続のデータベース・リクエストは、シャード・ディレクタをバイパスしてシャードに直接ルーティングされます。
シャード・ディレクタは、接続文字列に指定されたシャーディング・キーとキャッシュのルーティング情報をUCPと同じように処理できます。ただし、UCPはすでに確立された接続を使用してデータベース・リクエストをルーティングしますが、シャード・ディレクタはシャードに接続リクエストをルーティングします。ルーティング・キャッシュは、シャードが使用できなくなったとき、またはシャーディング・トポロジに変更が発生したときに、自動的にリフレッシュされます。高パフォーマンスのデータ依存型ルーティングのために、SDB内のデータにアクセスするときは接続プールを使用することをお薦めします。
SDBの管理インタフェース
2つのインタフェースOracle Enterprise Manager Cloud ControlおよびGDSCTLを使用してOracleシャード・データベースをデプロイ、管理および監視できます。
Cloud Controlでは、グラフィカル・ユーザー・インタフェースでシャード・データベースのライフサイクル管理を行うことができます。SDBの可用性とパフォーマンスを管理および監視できます。また、シャード、サービス、シャード・ディレクタおよび他のシャーディング・コンポーネントの追加とデプロイなどのタスクを実行できます。
GDSCTLは、SDBの構成を指定し、そのデプロイメントを自動化するためのシンプルな宣言的手段を提供するコマンドライン・インタフェースです。SDBを作成するのに必要なGDSCTLコマンドは、次のようにごくわずかです。
-
CREATE SHARDCATALOG
-
ADD GSM
およびSTART GSM
(シャード・ディレクタの作成と起動) -
CREATE SHARD
(各シャードが対象) -
DEPLOY
GDSCTL DEPLOY
コマンドは、シャードとそれに対応するリスナーを自動的に作成します。さらに、このコマンドは管理者によって指定されたシャードレベルの高可用性を実現するために使用されるレプリケーション構成を自動的にデプロイします。
関連項目:
-
Oracle Shardingで使用されるグローバル・サービス・マネージャ、グローバル・サービスおよびGDSCTLコマンドの詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください
-
Oracle MAAのWebページのOracle DatabaseセクションのOracle Shardingのベスト・プラクティス・ホワイト・ペーパー