ユースケース1: 複数リージョン環境の設定

組織は、2つのオンプレミスKVStoreをフランクフルトとロンドンにそれぞれ1つずつデプロイします。要件に従って、両方のリージョンにいくつかのMR表を作成します。Users表は、この組織が作成および保守する多くのMR表の1つです。次のいくつかのトピックでは、フランクフルトとロンドンのリージョンを設定する方法、およびこれらの2つのリージョンでUsersというMR表を作成して操作する方法について説明します。

複数リージョンNoSQL Databaseを構成するには、各リージョンで次のタスクを実行する必要があります。ここで説明するユースケースでは、参加しているリージョン(フランクフルトとロンドン)の両方で、次に示すすべての手順を実行する必要があります。
  1. KVStoreのデプロイ
  2. ローカル・リージョン名の設定
  3. XRegionサービスの構成
  4. XRegionサービスの起動
  5. リモート・リージョンの作成
  6. 複数リージョン表の作成
  7. 複数リージョン表へのアクセスおよび操作

KVStoreのデプロイ

複数リージョンNoSQL Databaseの設定では、各リージョンにそれぞれ独自のKVStoreを個別にデプロイする必要があります。
KVStoreをデプロイするには、次の手順を実行します。
  1. 構成の概要に示されている手順に従います。
  2. 目的のトポロジのKVStoreをデプロイした後、コマンドライン・インタフェースからpingコマンドを実行して、KVStoreの状態を確認できます。
    -bash-4.1$ java -jar $KVHOME/lib/kvstore.jar ping -port <port number> -host <host name>
  3. kvプロンプトからshow topologyコマンドを実行して、KVStoreのトポロジを確認することもできます。show topologyを参照してください。
    kv-> show topology

ローカル・リージョン名の設定

複数リージョンNoSQL Databaseのローカル・リージョンに名前を設定する方法について学習します。

KVStoreをデプロイしたら、参加している各リージョンに最初のMR表を作成する前にローカル・リージョン名を設定する必要があります。ローカル・リージョン名は、MR表がそのリージョンに1つも作成されていなければ変更できます。最初のMR表の作成後、ローカル・リージョン名は変更不可になります。
ローカル・リージョン名を設定するには、次の手順を実行します。
  1. ローカル・リージョンからkvプロンプトに接続し、ローカルのKVStoreに接続します。
  2. kvプロンプトから次のコマンドを実行します。
    kv-> execute 'SET LOCAL REGION <localregion name>'
  3. オプションで、次のコマンドを実行して、ローカル・リージョン名が正常に設定されていることを確認できます。
    kv-> execute 'show regions'

フランクフルト(FRA)リージョンからローカル・リージョン名を設定します。

[oracle@host1]$ java -jar $KVHOME/lib/kvstore.jar runadmin \ 
-helper-hosts host1:5000,host2:5000,host5:5000
 
kv-> connect store -name earnback 
Connected to earnback at host1:5000.
 
kv-> execute 'SET LOCAL REGION FRA' 
Statement completed successfully
 
kv-> execute 'show regions' 
regions
 
FRA (local, active)

ロンドン(LND)リージョンからローカル・リージョン名を設定します。

[oracle@host3]$ java -jar $KVHOME/lib/kvstore.jar runadmin \
-helper-hosts host3:5000,host4:5000,host6:5000
 
kv-> connect store -name earnback
Connected to earnback at host3:5000.
 
kv-> execute 'SET LOCAL REGION LND' 
Statement completed successfully
 
kv-> execute 'show regions' 
regions
 
LND (local, active)

XRegionサービスの構成

複数リージョンOracle NoSQL DatabaseでXRegionサービスを構成する方法について学習します

MR表を作成する前に、XRegionサービスをデプロイする必要があります。簡単に言うと、これはエージェントとも呼ばれます。要件に基づいて、1つのリージョンに1つ以上のエージェントをデプロイできます。XRegionサービスはローカルのKVStoreとは独立して実行されるため、ローカルのKVStoreの近くにデプロイすることをお薦めします。エージェントおよびエージェント・グループの詳細は、概要マニュアルリージョン間サービスを参照してください。
XRegionサービスを構成するには、各リージョンで次のタスクを実行します。
  1. XRegionサービスのホーム・ディレクトリを作成します。
  2. ステップ1で作成したホーム・ディレクトリにJSON構成ファイルを作成します。json.configファイルの構造を次に示します。
    {
      "path" : "<entire path to the home directory for the XRegion Service>",
      "agentGroupSize" : <number of service agents>,
      "agentId" : <agent id using 0-based numbering>,
      "region" : "<local region name>",
      "store" : "<local store name>",
      "helpers" : [ "<host1>:<port>","<host2>:<port>",…,"<hostn>:<port> ],
      "security" : "<entire path to the security file of the local store>",
      "regions" : [ {
        "name" : "<remote region name>",
        "store" : "<remote store name>",
        "security" : "<entire path to the security file of the remote store>",
        "helpers" : [ "<host1>:<port>","<host2>:<port>",…,"<hostn>:<port> ]
      }, {
        "name" : "<remote region name>",
        "store" : "<remote store name>",
        "security" : "<entire path to the security file of the remote store>",
        "helpers" : [ "<host1>:<port>","<host2>:<port>",…,"<hostn>:<port> ]
      }, ... ]
      "durability" : "<durability setting>"
    }
    ここで、json.configファイルの各属性の詳細は次のとおりです。
  3. XRegionサービス・エージェントに次の権限を付与します。
    • システム表に対する書込み権限
    • すべてのユーザー表に対する読取りおよび書込み権限
    — create role for the agent -- 
    CREATE ROLE <Agent Role>
    
    — grant privileges to the role --   
    GRANT WRITE_SYSTEM_TABLE to <Agent Role>
    GRANT READ_ANY_TABLE to <Agent Role>
    GRANT INSERT_ANY_TABLE to <Agent Role>
    
    — grant role to the agent user -- 
    GRANT <Agent Role> to user <Agent User>

    注意:

    このステップはセキュアなKVStoreの場合にのみ必要です。非セキュアなKVStoreの設定では、このステップをスキップできます。

フランクフルト(FRA)リージョンのjson.configファイルの内容です。

{
"path": "/home/oracle/xrshome",
"agentGroupSize": 1,
"agentId": 0,
"region": "FRA",
"store": "earnback",
"security" : "/home/oracle/security/test.security",
"helpers": [
"host1:5000",
"host2:5000",
"host5:5000"
],
"regions": [
{
"name": "LND",
"store": "mrtstore",
"security" : "/home/oracle/remoteSecureStore/security/test.security",
"helpers": [
"host3:5000",
"host4:5000",
"host6:5000"
]
}
]
}

ロンドン(LND)リージョンのjson.configファイルの内容です。

{
"path": "/home/oracle/xrshome",
"agentGroupSize": 1,
"agentId": 0,
"region": "LND",
"store": "mrtstore",
"security" : "/home/oracle/security/test.security",
"helpers": [
"host3:5000",
"host4:5000",
"host6:5000"
],
"regions": [
{
"name": "DEN",
"store": "earnback",
"security" : "/home/oracle/remoteSecureStore/security/test.security",
"helpers": [
"host1:5000",
"host2:5000",
"host5:5000"
]
}
]
}

XRegionサービスの起動

XRSTARTコマンドにJSON構成ファイルの完全パスを指定して、各リージョンでXRegionサービスを起動する必要があります。このサービスは長時間実行されるプロセスであるため、コマンドの最後に&を付加することで、バックグラウンド・プロセスとして起動することをお薦めします。

注意:

XRegionサービスを起動する前に、ローカルのKVStoreを起動する必要があります。ローカル・リージョンのKVStoreが起動していないか、アクセスできない場合、XRegionサービスは起動しません。
XRegionサービスを起動するには、次の手順を実行します。
  1. 各KVStoreで個別にxrstartコマンドを実行します。
    nohup java -Xms256m -Xmx2048m -jar $KVHOME/lib/kvstore.jar xrstart \
     -config <complete path to the json.config file> > \
    <complete path to the home directory for the XRegion Service>/nohup.out &
    ここで、各パラメータの詳細は次のとおりです。
  2. オプションで、nohup.outの内容を読み取ることで、xrstartコマンド実行のステータスを表示できます。
    cat <complete path to the home directory for the XRegion Service>/nohup.out
  3. サービス・ログで詳細なログも確認することもできます。このログは、前にXRegionサービスの構成ファイル(json.config)に指定したXRegionサービスのホーム・ディレクトリにあります。

フランクフルト(FRA)リージョンでXRegionサービスを起動します。

nohup java -Xms256m -Xmx2048m -jar $KVHOME/lib/kvstore.jar xrstart \
-config /home/oracle/xrshome/json.config  > /home/oracle/xrshome/nohup.out &

[1] 24356

[oracle@host1 xrshome]$ nohup: ignoring input and redirecting stderr to stdout

[oracle@host1 xrshome]$ cat nohup.out

Cross-region agent (region=FRA, store=earnback, helpers=[host1:5000, host2:5000, host5:5000]) starts up from config file=/home/oracle/xrshome/json.config at 2019-11-07 08:57:34 UTC

ロンドン(LND)リージョンでXRegionサービスを起動します。

[oracle@host3 xrshome]$ nohup java -Xms256m -Xmx2048m -jar $KVHOME/lib/kvstore.jar xrstart \
-config /home/oracle/xrshome/json.config  > /home/oracle/xrshome/nohup.out &

[1] 17587

[oracle@host3 xrshome]$ nohup: ignoring input and redirecting stderr to stdout

[oracle@host3 xrshome]$ cat nohup.out

Cross-region agent (region=LND, store=mrtstore, helpers=[host3:5000, host4:5000, host6:5000]) starts up from config file=/home/oracle/xrshome/json.config at 2019-11-07 08:58:57 UTC

リモート・リージョンの作成

複数リージョンNoSQL Databaseの各リージョンからリモート・リージョンを作成する方法を学習します。

MR表を作成して操作する前に、リモート・リージョンを定義する必要があります。各リージョンのローカル・リージョン名は、前のステップですでに設定しています。このステップでは、各リージョンにすべてのリモート・リージョンを定義します。リモート・リージョンは、コマンドが実行されるローカル・リージョンとは異なります。

注意:

次に示すコマンドはすべて、kvプロンプトまたはsqlシェル・プロンプトから実行できます。sqlシェルからこれらのコマンドを実行する場合は、executeキーワードを破棄します。
リモート・リージョンを作成するには、次の手順を実行します。
  1. ローカル・リージョンからkvプロンプトに接続し、ローカルのKVStoreに接続します。
  2. kvプロンプトから次のコマンドを実行します。
    kv-> execute 'CREATE REGION <remote region name>'
  3. オプションで、次のコマンドを実行して、正常に作成されたリモート・リージョンを一覧表示できます。
    kv-> execute 'show regions'

フランクフルト(FRA)リージョンからLNDという名前のリモート・リージョンを作成します。

[oracle@host1 xrshome]$ java -jar $KVHOME/lib/kvstore.jar runadmin \
-helper-hosts host1:5000,host2:5000,host5:5000

kv-> connect store -name earnback
Connected to earnback at host1:5000.

kv-> execute 'CREATE REGION LND'
Statement completed successfully

kv-> execute 'show regions'
regions

  FRA (local, active) 

  LND (remote, active)

ロンドン(LND)リージョンからFRAという名前のリモート・リージョンを作成します。

[oracle@host3 ~]$ java -jar $KVHOME/lib/kvstore.jar runadmin \
-helper-hosts host3:5000,host4:5000,host6:5000

kv-> connect store -name mrtstore
Connected to mrtstore at host3:5000.

kv-> execute 'CREATE REGION FRA'
Statement completed successfully

kv-> execute 'show regions'
regions

  LND (local, active) 

  FRA (remote, active)

複数リージョン表の作成

接続されたグラフの各KVStoreにMR表を作成し、表がまたがるリージョンのリストを指定する必要があります。ここで説明するユースケースでは、任意の順序で両方のリージョンにMR表としてUsers表を作成します。

注意:

次に示すコマンドはすべて、kvプロンプトまたはsqlシェル・プロンプトから実行できます。sqlシェルからこれらのコマンドを実行する場合は、各コマンドの前のexecuteキーワードを破棄します。
MR表を作成するには、次の手順を実行します。
  1. 表定義を作成するには、CREATE TABLE文を使用します。SQLリファレンス・ガイド表の作成を参照してください。
  2. オプションで、次のコマンドを実行して、MR表の作成を確認できます。
    kv-> show table -name Users

kvプロンプトを使用して、フランクフルト(FRA)リージョンからUsersというMR表を作成します。

kv-> execute 'CREATE TABLE Users (id INTEGER, name STRING, team STRING, PRIMARY KEY (id)) IN REGIONS FRA, LND'
Statement completed successfully
kv-> show table -name Users
{
  "json_version" : 1,
  "type" : "table",
  "name" : "Users",
  "shardKey" : [ "id" ],
  "primaryKey" : [ "id" ],
  "fields" : [ {
    "name" : "id",
    "type" : "INTEGER",
    "nullable" : false,
    "default" : null
  }, {
    "name" : "name",
    "type" : "STRING",
    "nullable" : true,
    "default" : null
  }, {
    "name" : "team",
    "type" : "STRING",
    "nullable" : true,
    "default" : null
  } ],
  "regions" : {
    "2" : "LND",
    "1" : "FRA"
  }
}

注意:

regions属性の下のID 1のリージョンはローカル・リージョンを指します。

sqlシェル・プロンプトを使用して、ロンドン(LND)リージョンからUsersというMR表を作成します。

sql-> CREATE TABLE Users (
id INTEGER, 
name STRING, 
team STRING, 
PRIMARY KEY (id)) 
IN REGIONS LND, FRA;
Statement completed successfully
ロンドン(LND)リージョンからUsers表の構造を確認します。
kv-> show table -name users
{
  "json_version" : 1,
  "type" : "table",
  "name" : "Users",
  "shardKey" : [ "id" ],
  "primaryKey" : [ "id" ],
  "fields" : [ {
    "name" : "id",
    "type" : "INTEGER",
    "nullable" : false,
    "default" : null
  }, {
    "name" : "name",
    "type" : "STRING",
    "nullable" : true,
    "default" : null
  }, {
    "name" : "team",
    "type" : "STRING",
    "nullable" : true,
    "default" : null
  } ],
 "regions" : {
     "2" : "FRA"
     "1" : "LND"
  }
}

複数リージョン表へのアクセスおよび操作

MR表を作成した後、既存のデータ・アクセスAPIまたはDML文を使用して、表に対する読取りまたは書込み操作を実行できます。MR表を操作するために既存のデータ・アクセスAPIまたはDML文を変更する必要はありません。SQLリファレンス・ガイドデータ行の管理を参照してください。
フランクフルト(FRA)リージョンからUsers表に新しい行を挿入します。
kv-> execute 'INSERT INTO Users VALUES(1,"Amy","HR")'
{"NumRowsInserted":1}

1 row returned
kv-> execute 'INSERT INTO Users VALUES(2,"Jack","HR")'
{"NumRowsInserted":1}

1 row returned
ロンドン(LND)リージョンからUsers表の行を読み取ります。
kv-> execute 'SELECT * FROM Users'
{"id":2,"name":"Jack","team":"HR"}
{"id":1,"name":"Amy","team":"HR"}

2 rows returned
ロンドン(LND)リージョンからUsers表のid=2の行を更新します。
kv-> execute 'UPDATE Users SET team="IT" WHERE id=2'
{"NumRowsUpdated":1}

1 row returned
フランクフルト(FRA)リージョンからUsers表の更新行を読み取ります。
kv-> execute 'SELECT * FROM Users'
{"id":2,"name":"Jack","team":"IT"}
{"id":1,"name":"Amy","team":"HR"}

2 rows returned
フランクフルト(FRA)リージョンからUsers表のid=1の行を削除します。
kv-> execute 'DELETE FROM Users WHERE id=1'
{"NumRowsDeleted":1}

1 row returned
ロンドン(LND)リージョンからUsers表の行を読み取ります。
kv-> execute 'SELECT * FROM Users'
{"id":2,"name":"Jack","team":"IT"}

1 row returned

XRegionサービスの停止

XRegionサービスを別のホスト・マシンに再配置する場合は、現在のマシンでサービスを停止してから新しいホスト・マシンで再起動する必要があります。
XRegionサービスを停止するには、次の手順を実行します。
  1. 各KVStoreで個別にxrstopコマンドを実行します。
    java -Xmx1024m -Xms256m -jar $KVHOME/lib/kvstore.jar xrstop \
    -config <complete path to the json.config file>

フランクフルト(FRA)リージョンでXRegionサービスを停止します。

-bash-4.1$ java -Xmx1024m -Xms256m -jar $KVHOME/lib/kvstore.jar xrstop \
-config /home/oracle/xrshome/json.config

同様に、他のすべてのリージョンのXRegionサービスも停止する必要があります。