日本語PDF

10 Oracle Shardingによるデータ主権の実現

クラウド・コンピューティングの普及に伴い、特にデータとそのプライバシの保護に関する業界標準に関する関心が高まっています。今日、ほとんどの組織は、データがどこに保存され、誰がデータにアクセスできるかを把握することを必要としています。これにより、データ・レジデンシの管理が重大な関心事項になり、データを特定の地理的な場所に格納することが要求されるようになりました。

オンプレミスであれクラウドであれ、市民のデータをより厳格に保護および管理するために、すでに120か国以上がデータ保護に関するなんらかの国際プライバシ法に関与しています。

データ主権の概要

データ主権とは、一般的に、データが作成された地域に固有の規制によってデータが管理されることを指します。これらのタイプの規制では、データの保存場所、データへのアクセス方法、データの処理方法およびデータのライフサイクルが指定されることがあります。

国境やパブリック・クラウド・リージョンをまたぐデータの急増に伴い、100か国以上でデータの保存場所と転送方法に関する規制が可決されました。特に、個人を特定できる情報(PII)は、それが収集される国の法律およびガバナンス構造の対象となることが増えています。多くの場合、他の国へのデータ転送は、その国が同様のレベルのデータ保護を提供しているかどうか、およびその国が科学捜査で協力するかどうかに基づいて制限または許可されます。

データ主権の要件は地域の規制に基づくため、アプリケーション・アーキテクチャは様々なものになる可能性のあるます。そのいくつかは次のとおりです。

  • データを特定の地理的な場所で物理的に保存する必要があります。たとえば、特定の国または複数の国で構成される地域の境界内です。データが遠隔地に保存されていないかぎり、データにリモートでアクセスして処理することは問題ありません。技術的な観点からは、これは、永続データを物理的に格納するデータベース、オブジェクト・ストア、メッセージング・ストアなどのデータ・ストアが特定の地理的な場所にある必要があることを意味します。ただし、データを処理するためのビジネス・ロジックを持つアプリケーション・ランタイムは、地理的な場所の外に配置できます。このようなアプリケーション・パーツの例には、アプリケーション・サーバー、モバイル・アプリケーション、APIゲートウェイ、ワークフローなどがあります。

  • データを特定の地理的な場所で物理的に保存および処理する必要があります。この場合、データの保存と処理は、定義された地理的な場所内で行う必要があります。

Oracle Shardingを使用してデータ主権を実装するメリット

Oracle Shardingはデータ主権の要件を満たし、低レイテンシと高可用性を必要とするアプリケーションをサポートします。

  • シャーディングにより、データの様々な部分を様々な国や地域に配置できるため、データを特定の管轄区域に配置する必要がある規制要件を満たします。

  • また、特定のデータを利用者の近くに保存することもサポートしています。Oracle Shardingは、優れたランタイム・パフォーマンス、柔軟なスケーリング、ライフサイクル管理により、シャード・データベースのライフサイクル全体(デプロイメント、スキーマ作成、データ依存ルーティング)を自動化します。

  • リレーショナル・スキーマ、SQL、およびその他のプログラム・インタフェース、複雑なデータ型のサポート、オンライン・スキーマの変更、マルチコア・スケーラビリティ、高度なセキュリティ、圧縮、高可用性、ACIDプロパティ、読取り一貫性、JSONを使用した開発者の俊敏性などを含むエンタープライズRDBMSの利点も提供します。

Oracle Shardingによるデータ主権の実装

Oracle Shardingは、様々なコンピュータ、オンプレミスまたはクラウドの多数のデータベース(シャード)にデータ・セットのセグメントを分散します。これらのシャードは、世界中の複数のリージョンにデプロイできます。これにより、Oracle Shardingは、データ・レジデンシを考慮してグローバルに分散したデータベースを作成できます。

特定のデータベース内のすべてのシャードは、単一の論理データベースとしてアプリケーションに提供されます。アプリケーションは、実行する問合せに基づいて適切なシャードにシームレスに接続されます。たとえば、米国にデプロイされたアプリケーション・インスタンスがヨーロッパに存在するデータを必要とする場合は、特別な処理の必要なくアプリケーション・リクエストがEUデータ・センターにシームレスにルーティングされます。

図10-1 Oracle Shardingのアーキテクチャ



また、Real Application Security (RAS)やOracle Database VaultなどのOracle Databaseのセキュリティ機能を使用して、リージョン内でもデータ・アクセスをさらに制限できます。たとえば、すべてのEU諸国ではなく、一部の国からのデータのみがEUリージョンの管理者に表示されるようにさらに制限できます。データ主権リージョン内では、レプリケーションにOracle Data GuardおよびOracle GoldenGateを使用することで、データを複数のデータ・センターにレプリケートできます。

Oracle Sharding管理インタフェースにより、グローバル・メタデータを制御し、物理データベース(レプリカ)、それに含まれるデータ、レプリケーション・トポロジなどを表示できます。Oracle Shardingは、ノードが追加または削除されたときにデータの再分散を処理します。

様々なリージョンからデータを実際にコピーすることなく、世界中のレポートにアクセスできます。シャーディングでは、どのリージョンからもデータをコピーせずにマルチシャード・レポートを実行できます。Oracle Shardingは、データが存在するノードに問合せをプッシュします。

Oracle Shardingは、次の側面に焦点を当てた包括的なデータ主権ソリューションを提供します。

  • データ・レジデンシ: データを複数のシャードに分散でき、地理的に異なる場所にデプロイできます。

  • データ処理: アプリケーション・リクエストは、アプリケーションの実行場所に関係なく、正しいシャードに自動的にルーティングされます。

  • データ・アクセス: Oracle Databaseの仮想プライベート・データベース機能を使用して、リージョン内のデータ・アクセスをさらに制限できます。

  • 派生データ: データをOracle Databaseに格納し、Oracle Databaseの機能を使用して派生データの増加を抑制します。

  • データ・レプリケーション: Oracle ShardingをOracle Data GuardまたはOracle GoldenGateとともに使用して、同じデータ主権リージョン内でデータをレプリケートできます。

Oracle Shardingを使用してデータ主権を実現するユースケース

架空の大手金融機関であるShard Bankは、複数の国でユーザーにクレジット・サービスを提供しようとしています。クレジット・サービスが提供される各国には独自のデータ・プライバシ規制があり、個人を特定できる情報(PII)データを当該国に保存する必要があります。

データへのアクセスを制限する必要があり、ある国のデータ管理者は他の国のデータを表示できません。このユースケースのソリューションは、様々な国でシャードが構成されたユーザー定義のシャーディングと、データ・アクセス制御のためのReal Application Security (RAS)です。

Oracle Shardingソリューションの概要

Oracle Shardingソリューションは、国内のデータ・ストレージを提供し、すべてのデータのグローバル・ビューもサポートしています。

次の例は、複数のリージョンを横断するOCIデータ・センターとオンプレミスの間のハイブリッドOracle Shardingユーザー定義デプロイメントを示しています。このOracle Sharding構成では、すべてのデータをローカルに保存および処理できます。各データベース(各主権リージョン内)はシャードになり、シャードは単一のシャード・データベースに属します。Oracle Shardingを使用すると、1つのシャード(1つの国内)のデータを問い合せることができます。Oracle Shardingは、(すべての国からデータを問い合せることができる)マルチシャード問合せをサポートしています。

図10-2 シャード・データベース



グローバル・シャード・データベースは、存在する必要がある国を示すキーでシャードされます。国内のアプリケーションは通常どおりローカル・データベースに接続し、すべてのデータはローカルに保存および処理されます。

マルチシャード問合せは、シャード・コーディネータに転送されます。コーディネータは問合せをリライトし、必要なデータがある各シャード(国)に送信します。コーディネータは、すべての国からの結果を処理して集計し、結果を返します。

Oracle Shardingでは、次の機能でこのユースケースが可能になります。

  • 国内の問合せのシャードへの直接ルーティング。
  • ユーザー定義のシャーディング方法により、国の範囲またはリストを使用して、シャード間でデータをパーティション化できます。
  • Oracle Active Data Guardを使用してレプリケーションを自動構成し、レプリカを国内に制限します。

この方法のメリットは次のとおりです。

  • 各シャードは、国内のクラウドまたはオンプレミスに配置できます。
  • シャードは様々なクラウド・プロバイダを使用でき(マルチクラウド戦略)、シャードのレプリカを異なるクラウドまたはオンプレミスに配置できます。
  • オンライン再シャーディングにより、クラウド間、またはクラウドとオンプレミスとの間でデータを移動できます。
  • データ主権の厳格な施行により、不注意によるリージョンをまたいだデータ漏えいを防止します。
  • データの重複を低減した単一のマルチモデル・ビッグ・データ・ストア。
  • 1つのリージョン/LOB内の計画/計画外停止時間が他のリージョン/LOBに影響しないため、より優れた障害分離が実現します。
  • ビジー状態のパーティションとシャードを必要に応じて分割できます。
  • 完全なACIDプロパティのサポートは、トランザクション・アプリケーションにとって重要です。

Oracle Shardingを使用したデータ主権のデプロイメント・トポロジ

このユースケースの例では、フランクフルト(リージョン1 FRA)、アムステルダム(リージョン2 AMS)、およびロンドン(リージョン3 LON)の3つのリージョンにまたがるOracle Cloud Infrastructureにシャード・データベースを作成します。

各リージョンは、シャード・ディレクタ(仮想マシン・グローバル・サービス・マネージャ(GSM))と1つのシャード(それぞれシステム・データベース・シャード1、2および3)をホストし、リージョン1 (FRA)はシャード・カタログ(システム・データベースGSMカタログ・データベース)をホストします。

図10-3 Oracle Shardingを使用したデータ主権のデプロイメント・トポロジ



Oracle Shardingを使用したデータ主権の構成

次のトピックで説明するステップを実行して、Oracle Shardingを使用してデータ主権を構成します。

3つのOCIリージョンすべてにおけるVCNネットワークの構成

Oracle Cloud Infrastructure (OCI)では、仮想クラウド・ネットワークは、インスタンスが実行される従来のネットワークの仮想バージョンです。各リージョン(FRA、AMSおよびLON)に仮想クラウド・ネットワーク(VCN)をデプロイして構成します。

各リージョンで、パブリックとプライベートの2つのサブネットを持つVCNを作成します。
  1. プライベート・サブネットの新しいルート表を作成し、プライベート・サブネットに関連付けます。デフォルトのルート表はパブリック・サブネットにのみ使用し、プライベート・サブネットには専用のプライベート・ルート表を設定することが適切です。
  2. インターネット・ゲートウェイを作成し、デフォルトのルート表に関連付けます。
  3. ネットワーク・アドレス変換(NAT)ゲートウェイであるサービス・ゲートウェイを作成し、プライベート・サブネットのルート表に関連付けます。
FRAの例:
  • VCN名/CIDER: Oracle Sharding VCN FRA 10.0.0.0/16
  • パブリック・サブネット名/CIDER: public_fra 10.0.5.0/24
  • プライベート・サブネット名/CIDER: private_fra 10.0.6.0/24

ノート:

シャーディング・デプロイメントで使用されるすべてのリージョンでステップを繰り返します。サブネットCIDERは各リージョンで異なる必要があり、VCN/サブネット名にリージョン接頭辞を指定する必要があります。
3つのリージョン間のリモートVCNピアリングの構成

リモートVCNピアリングは、異なるリージョンにある2つのVCNを接続することで、トラフィックをインターネット経由でルーティングすることなく、プライベートIPアドレスを使用してVCNのリソースが通信できるようにするプロセスです。

トポロジ内の他の2つのリージョンに接続するために、各リージョンに2つのリモート・ピアリング接続(RPC)を構成します。
  1. RPCを構成するステップについては、RPCを使用したリモートVCNピアリングに関する項を参照してください。
  2. パブリック・サブネット/VCNのルーティング・ルールを構成します。
  3. プライベート・サブネット/VCNのルーティング・ルールを構成します。
  4. セキュリティ・ルールを構成します。
たとえば、リージョン1 (FRA)では次のようになります。

リージョン間のネーミング解決のためのプライベートDNSの構成

各リージョンのドメインごとにパブリック・サブネットとプライベート・サブネットのプライベート・ビューを作成し、1つのゾーン内に合計6つのプライベート・ゾーンを作成します。その後、すべてのエントリが各プライベート・ゾーン構成に追加されます。

  1. プライベートDNSゾーンを作成および管理するには、プライベートDNSに関する項を参照してください。
  2. 次のタスクに進む前に、すべての名前が正しく解決されていることを確認します。

ノート:

これらの手順は、名前を正しく解決できるように、すべてのVCN/VMの各リージョンで実行する必要があります。
各リージョンへのグローバル・サービス・マネージャのインストール

Oracle Global Data Servicesグローバル・サービス・マネージャ(GSM)は、Oracle Shardingで、アプリケーションからシャード・データベース内の正しいシャードに問合せをルーティングするために使用されます。

ソフトウェアをダウンロードし、次のタスクを実行します。
  • グローバル・サービス・マネージャ(Oracle Database 19c)ソフトウェアを要塞VMにダウンロードします。
  • 最新バージョンのOPatchを適用します。
  • 新しくインストールされたグローバル・サービス・マネージャ(Oracle Database 19c)に、利用可能な最新のOracle Databaseバンドル・パッチを適用します。
各リージョンにGSMをインストールするには:
  1. iSCSIを使用して200 GBのブロック・ストレージを作成します。GSM用OCIコンピュートでiSCSIを構成します。ブロック・ストレージを/u01にマウントします。
    ブロック・ストレージのマウント・プロセスについては、一貫性のあるデバイス・パスを使用したボリュームへの接続に関する項を参照してください。
  2. rootユーザーとして、必要なすべてのパッケージをインストールします。
    # yum install -y oracle-database-preinstall-19c
  3. rootユーザーとして、/u01oracle:oinstallによって所有されていることを確認します。
    # chown oracle:oinstall /u01
  4. GSMソフトウェアを指定されたシャード・ディレクタVMにダウンロードし、サイレント・モードでインストールします。
  5. gsm home/etc/oratabに追加します。
    gsm:/u01/app/oracle/product/19.0.0.0/dbhome_1:N
  6. 最新のOPatchバージョンを適用します。
  7. Oracle Database 19cに利用可能な最新のバンドル・パッチ・バージョンを適用します。
  8. ファイアウォールでGSMポートを開きます。
    $ systemctl start firewalld.service
    $ systemctl enable firewalld.service
    $ firewall-cmd --permanent --zone=public --add-port=1522/tcp # firewall-cmd --reload
    $ firewall-cmd --permanent --zone=public --list-ports
    1522/tcp 22/tcp 
    
  9. アプリケーションがGSMに接続できるように、GSM VMに割り当てられたセキュリティ・リストで必要なポートが開いていることを確認します。
シャード・カタログおよびシャード・データベースのTNSエントリの収集

シャード・カタログおよびシャード・データベースの構成用にGSMサーバーを準備するには、TNSエントリのコレクションが必要です。シャード・カタログは、シャード・カタログ・オブジェクトを格納するPDBにのみアクセスする必要があります。ただし、シャード・データベースには、アプリケーション・スキーマを格納する各共有CDBおよびPDBのエントリを準備します。

  1. シャード・カタログ・データベースおよびすべてのシャード(シャード・カタログとシャード)にアクセスするためのtnsnamesエントリを準備します。
  2. これらのエントリをGSM VMの$ORACLE_HOME/network/admin/tnsnames.oraに追加します。

    ノート:

    接続文字列のホスト名にはFQDNを使用します。
    db_unique_name =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = host_name_fqdn)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = cdb_service_name)
        )
      )
    
    pdb_name =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = host_name_fqdn)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = pdb_service_name)
        )
      )
    
シャード・カタログの構成

シャード・カタログは、Oracle Shardingのメタデータを管理します。シャード・カタログ・データベースとなるリージョン1 (FRA)でデータベースを構成します。

  1. すべてのDBCSインスタンスに接続し、sqlnet.oraファイルに構成されているsqlnet暗号化アルゴリズムを更新し、クライアントおよびサーバーでサポートされるアルゴリズムとしてRC4_256暗号化方法を追加します。

    ノート:

    AES暗号化はGSM: Enh 29496977 - GDS ONLY USES RC4_256 TYPE ENCRYPTIONではデフォルトではサポートされていないため、AES暗号化を有効にするためにパッチが必要です。AES暗号化を有効にするには、Oracle Database 19cでパッチを適用します。ただし、このパッチはOracle Database 21cでは必要ありません。

    ノート:

    RC4_256アルゴリズムは、Oracle Database 19cでのみ必要です。
  2. Oracle Shardingの要件を使用してシャード・カタログ・データベースを構成します。
    SQL> alter system set open_links=16 scope=spfile;
    SQL> alter system set open_links_per_instance=16 scope=spfile;
    SQL> shu immediate
    SQL> startup
    
  3. シャード・カタログ・データベースでユーザーを構成します。
    SQL> alter user gsmcatuser account unlock.
    SQL> alter user gsmcatuser identified by password;
    # Switch to PDB dedicated for catalog database
    SQL> alter session set container=catalog_db_pdb;
    SQL> create user mysdbadmin identified by password;
    SQL> grant connect, create session, gsmadmin_role to mysdbadmin; 
    SQL> grant inherit privileges on user SYS to GSMADMIN_INTERNAL;
    
シャード・データベースの構成

Oracle Sharding構成でシャードになるデータベースを各リージョンに構成します。

  1. すべてのDBCSインスタンスに接続し、sqlnet.oraファイルに構成されているsqlnet暗号化アルゴリズムを更新し、クライアントおよびサーバーでサポートされるアルゴリズムとしてRC4_256暗号化方法を追加します。

    ノート:

    AES暗号化はGSM: Enh 29496977 - GDS ONLY USES RC4_256 TYPE ENCRYPTIONではデフォルトではサポートされていないため、AES暗号化を有効にするためにパッチが必要です。AES暗号化を有効にするには、Oracle Database 19cでパッチを適用します。ただし、このパッチはOracle Database 21cでは必要ありません。

    ノート:

    RC4_256アルゴリズムは、Oracle Database 19cでのみ必要です。
  2. 次のコマンドを実行します。
    SQL> alter database flashback on;
    SQL> alter system set dg_broker_start=true;
    SQL> alter user GSMROOTUSER account unlock;
    SQL> alter user GSMUSER account unlock;
    SQL> alter user GSMADMIN_INTERNAL account unlock;
    SQL> alter user GSMROOTUSER identified by password;
    SQL> alter user GSMUSER identified by password;
    SQL> alter user GSMADMIN_INTERNAL identified by password;
    SQL> grant sysdg to gsmuser;
    SQL> grant SYSBACKUP to gsmuser;
    SQL> grant sysdg to GSMROOTUSER;
    SQL> grant SYSBACKUP to GSMROOTUSER;
    SQL> alter system set global_names=false;
    SQL> shu immediate
    SQL> startup
    # Switch to PDB used as shared database
    SQL> alter session set container= pdb_name;
    SQL> grant read,write on directory DATA_PUMP_DIR to GSMADMIN_INTERNAL;
    SQL> grant sysdg to gsmuser;
    SQL> grant SYSBACKUP to gsmuser;
    
Oracle Shardingグローバル・データベースの作成

グローバル・サービス・マネージャ・リスナーを構成し、シャード・カタログ・データベースを作成して、すべてのシャードを構成に追加します。デプロイメント・ステップでは、すべてのシャードを単一のグローバル・データベースとして構成します。

  1. Oracle Shardingでシャード・カタログを構成します。

    ノート:

    デフォルトでは、システム管理のシャーディングが構成されています。他のシャーディング方法が必要な場合は、シャード・カタログの作成時に指定します。
    GDSCTL> create shardcatalog -database catalog_pdb_tns_entry -sharding user -user
          mysdbadmin/password -region region1
  2. GSMリスナーを追加して起動します。GDSCTLからリスナーを実行します。
    GDSCTL> add gsm -gsm sharddirector1 -listener 1522 -pwd password -catalog pdb_tns_entry
          -region region1
  3. 次のテンプレートを使用して、構成にシャードを追加します。シャード・データベースごとに繰り返します。

    FRAでシャードを追加します。

    GDSCTL> add invitednode shard_hostname
    GDSCTL> add cdb -connect cdb_conn_tns_entry -pwd gsmrootuser_pwd
    GDSCTL> add shardspace -shardspace primary_shardspace_fra
    GDSCTL> add shard -cdb cdb_conn_string -connect pdb_conn_string
     -shardspace primary_shardspace_fra -pwd gsmuser_pwd -deploy_as PRIMARY

    AMSでシャードを追加します。

    GDSCTL> add invitednode shard_hostname
    GDSCTL> add cdb -connect cdb_conn_tns_entry -pwd gsmrootuser_pwd
    GDSCTL> add shardspace -shardspace primary_shardspace_ams
    GDSCTL> add shard -cdb cdb_conn_string -connect pdb_conn_string
     -shardspace primary_shardspace_ams -pwd gsmuser_pwd -deploy_as PRIMARY

    LONでシャードを追加します。

    GDSCTL> add invitednode shard_hostname
    GDSCTL> add cdb -connect cdb_conn_tns_entry -pwd gsmrootuser_pwd
    GDSCTL> add shardspace -shardspace primary_shardspace_lon
    GDSCTL> add shard -cdb cdb_conn_string -connect pdb_conn_string
     -shardspace primary_shardspace_lon -pwd gsmuser_pwd -deploy_as PRIMARY
  4. シャード・データベース構成をデプロイします。
    GDSCTL DEPLOYコマンドを実行して、次の出力を取得します。
    GDSCTL> deploy
    deploy: examining configuration...
    deploy: requesting Data Guard configuration on shards via GSM
    deploy: shards configured successfully
    The operation completed successfully
    
  5. アプリケーションからの着信接続リクエストを処理するために、シャードでグローバル・データベース・サービスを作成します。グローバル・サービスは、従来のデータベース・サービスの拡張です。グローバル・サービスでは、従来のサービスのすべてのプロパティがサポートされます。シャード・データベースの場合、グローバル・サービスに追加のプロパティが設定されます。「グローバル・データベース・サービスの作成と開始」を参照してください。
    たとえば、データベース・ロール、レプリケーション・ラグの許容範囲、クライアントとシャードの間のリージョン・アフィニティなどです。読取り/書込みトランザクション・ワークロードの場合は、シャード・データベースのプライマリ・シャードのデータにアクセスするために、単一のグローバル・サービスを作成します。Active Data Guardを使用した高可用性シャードの場合は、個別の読取り専用グローバル・サービスを作成します。
    GDSCTL> add service -service oltp_rw_srvc -role primary
「シャード・データベースへの移行」で説明されている方法を使用して、データをシャードにロードします