ライブラリ・バージョン12.1.3.0

複数のゾーンでの構成
前 | 第4章 KVStoreの構成 | 次

## 複数のゾーンでの構成

使用可能な物理設備を最適に利用するには、複数のゾーンにストアをデプロイします。これにより、1つのゾーンで障害が発生しても、障害を分離してデータの可用性を確保できます。各ゾーンには、すべてのシャードのコピーを含む完全なストアのコピーがあります。この構成では、データの一貫性が保証されるかぎり少なくとも1つのレプリカが各ゾーンに存在するため、読取りは常に可能です。クォーラムが維持されるかぎり、1つのゾーンが失われた場合でも書込みも可能です。

各ゾーンに異なるレプリケーション係数を指定できます。その後、レプリケーション係数を次のいずれかとして定量化できます。

- ゾーン・レプリケーション係数

  ゾーンで保持されるコピー、つまりレプリカの数。

- プライマリ・レプリケーション係数

  すべてのプライマリ・ゾーン内のレプリカの合計数。このレプリケーション係数は、選択および承認に参加するレプリカの数を制御します。プライマリ・レプリケーション係数およびその関連性の識別方法の詳細は、「レプリケーション係数」を参照してください。

- セカンダリ・レプリケーション係数

  すべてのセカンダリ・ゾーン内のレプリカの合計数。セカンダリ・レプリカは、追加の読取り専用データ・コピーを提供します。

- ストア・レプリケーション係数

  ストア内のすべてのゾーンに関して、ストア全体のレプリカ数の合計を表します。

ゾーンが近くに配置されていると、選択とコミットの際の遅延を軽減するだけでなく、スループットの制限によるボトルネックを回避できるという利点があります。

### 注意

ゾーンには2つのタイプがあります。プライマリ・ゾーンには、マスターまたはレプリカとなるノードが含まれます。デフォルトでは、ゾーンはプライマリ・ゾーンとして作成されます。パフォーマンス向上のためには、プライマリ・ゾーンが効率的にマスター選択に参加および承認をコミットできるようにするため、低遅延ネットワークで接続している必要があります。

セカンダリ・ゾーンには、レプリカとなるノードのみが含まれます。セカンダリ・ゾーンを使用して離れた場所にあるデータに対する低遅延読取りアクセスを提供したり、冗長性または読取り機能を向上するためにデータの予備のコピーを保持できます。セカンダリ・ゾーンのノードはマスター選択に参加したり承認をコミットしたりしないため、セカンダリ・ゾーンは高遅延ネットワークで他のゾーンと接続することもできます。これは、余計な遅延がクリティカルな操作を妨害しないからです。

高いスループットで低遅延ネットワークを使用してプライマリ・ゾーンに接続することは、結果を改善し、パフォーマンスを向上します。一時的な中断がネットワーク・スループットを妨害せず、レプリケーションをサポートし、十分な信頼性を保つのに十分なスループットを接続が提供できているかぎりは、セカンダリ・ゾーンへの接続に高遅延ネットワークを使用できます。

### 注意

どのプライマリ・ゾーンもマスター・ノードにホストできるため、制限付きスループットまたは高遅延ネットワーク・リンク(あるいはその両方)を介してプライマリ・ゾーンが接続されている場合には、書込みパフォーマンスが低下する可能性があります。

次の手順では、3つのプライマリ・ゾーンに6つのストレージ・ノードをデプロイするプロセスを示します。こうすることで、すべてのゾーンで各シャードにレプリカがあることを確認できます。ゾーンに障害が発生してもサービスを続行できます。

### 注意

次の例では、6つのストレージ・ノード・エージェントは同じホストで起動されますが、本番環境では1つの物理マシンに1つのストレージ・ノード・エージェントをホストする必要があります。

1. 新しいストアの場合、makebootconfigユーティリティを使用して、初期"boot config"構成ファイルを作成します。

       > java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config1.xml \
       -port 5010 -admin 5011 -harange 5012,5015 \
       -memory_mb 0 -store-security none

       java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config2.xml \
       -port 5020 -admin 5021 -harange 5022,5025 \
       -memory_mb 0 -store-security none

       java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config3.xml \
       -port 5030 -admin 5031 -harange 5032,5035 \
       -memory_mb 0 -store-security none

       java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config4.xml \
       -port 5040 -harange 5042,5045 \
       -memory_mb 0 -store-security none

       java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config5.xml \
       -port 5050 -harange 5052,5055 \
       -memory_mb 0 -store-security none

       java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar makebootconfig \
       -root KVROOT -host localhost -config config6.xml \
       -port 5060 -harange 5062,5065 \
       -memory_mb 0 -store-security none

2. 各構成ファイルを使用して、すべてのストレージ・ノード・エージェントを起動します。

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config1.xml
       > [1] 12019

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config2.xml
       > [2] 12020

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config3.xml
       > [3] 12021

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config4.xml
       > [4] 12022

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config5.xml
       > [5] 12023

       > nohup java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar \
       start -root KVROOT -config config6.xml
       > [6] 12024

3. CLIを起動します。

       > java -Xmx256m -Xms256m \
       -jar KVHOME/lib/kvstore.jar runadmin -host \
       localhost -port 5010
       kv->

4. ストアに名前を付けます。

       kv-> configure -name MetroArea
       Store configured: MetroArea
       kv->

5. 管理プロセスを持つ最初のストレージ・ノードをマンハッタン・ゾーンにデプロイします。

       kv-> plan deploy-zone -name Manhattan -rf 1 -wait
       Executed plan 1, waiting for completion...
       Plan 1 ended successfully
       kv-> plan deploy-sn -zn 1 -host localhost -port 5010 -wait
       Executed plan 2, waiting for completion...
       Plan 2 ended successfully
       kv-> plan deploy-admin -sn sn1 -port 5011 -wait
       Executed plan 3, waiting for completion...
       Plan 3 ended successfully
       kv-> pool create -name SNs
       kv-> pool join -name SNs -sn sn1
       Added Storage Node(s) [sn1] to pool SNs

6. 2番目のストレージ・ノードをマンハッタン・ゾーンにデプロイします。

       kv-> plan deploy-sn -znname Manhattan -host localhost \
       -port 5020 -wait
       kv-> Executed plan 4, waiting for completion...
       Plan 4 ended successfully
       kv-> pool join -name SNs -sn sn2
       Added Storage Node(s) [sn2] to pool SNs

7. 管理プロセスを持つ最初のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。

       kv-> plan deploy-zone -name JerseyCity -rf 1 -wait
       Executed plan 5, waiting for completion...
       Plan 5 ended successfully
       kv-> plan deploy-sn -znname JerseyCity -host localhost \
       -port 5030 -wait
       Executed plan 6, waiting for completion...
       Plan 6 ended successfully
       kv-> plan deploy-admin -sn sn3 -port 5031 -wait
       Executed plan 7, waiting for completion...
       Plan 7 ended successfully
       kv-> pool join -name SNs -sn sn3
       Added Storage Node(s) [sn3] to pool SNs

8. 2番目のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。

       kv-> plan deploy-sn -znname JerseyCity -host localhost \
       -port 5040 -wait
       kv-> Executed plan 8, waiting for completion...
       Plan 8 ended successfully
       kv-> pool join -name SNs -sn sn4
       Added Storage Node(s) [sn4] to pool SNs

9. 管理プロセスを持つ最初のストレージ・ノードをクイーンズ・ゾーンにデプロイします。

       kv-> plan deploy-zone -name Queens -rf 1 -wait
       Executed plan 9, waiting for completion...
       Plan 9 ended successfully
       kv-> plan deploy-sn -znname Queens -host localhost -port 5050 -wait
       Executed plan 10, waiting for completion...
       Plan 10 ended successfully
       kv-> plan deploy-admin -sn sn5 -port 5051 -wait
       Executed plan 11, waiting for completion...
       Plan 11 ended successfully
       kv-> pool join -name SNs -sn sn5
       Added Storage Node(s) [sn5] to pool SNs

10. 2番目のストレージ・ノードをクイーンズ・ゾーンにデプロイします。

        kv-> plan deploy-sn -znname Queens -host localhost \
        -port 5060 -wait
        kv-> Executed plan 12, waiting for completion...
        Plan 12 ended successfully
        kv-> pool join -name SNs -sn sn6
        Added Storage Node(s) [sn6] to pool SNs

11. トポロジを作成してデプロイします。

        kv-> topology create -name Topo1 -pool SNs -partitions 100
        Created: Topo1
        kv-> plan deploy-topology -name Topo1 -wait
        kv-> Executed plan 13, waiting for completion...
        Plan 13 ended successfully

12. `show topology`コマンドを使用してサービス・ステータスを確認します。

        kv->kv-> show topology
        store=MetroArea numPartitions=100 sequence=117
        zn: id=zn1 name=Manhattan repFactor=1 type=PRIMARY
        zn: id=zn2 name=JerseyCity repFactor=1 type=PRIMARY
        zn: id=zn3 name=Queens repFactor=1 type=PRIMARY

        sn=[sn1] zn=[id=zn1 name=Manhattan] localhost:5010 capacity=1 RUNNING
          [rg1-rn2] RUNNING
             No performance info available
        sn=[sn2] zn=[id=zn1 name=Manhattan] localhost:5020 capacity=1 RUNNING
          [rg2-rn2] RUNNING
             No performance info available
        sn=[sn3] zn=[id=zn2 name=JerseyCity] localhost:5030 capacity=1 RUNNING
          [rg1-rn3] RUNNING
             No performance info available
        sn=[sn4] zn=[id=zn2 name=JerseyCity] localhost:5040 capacity=1 RUNNING
          [rg2-rn3] RUNNING
             No performance info available
        sn=[sn5] zn=[id=zn3 name=Queens] localhost:5050 capacity=1 RUNNING
          [rg1-rn1] RUNNING
             No performance info available
        sn=[sn6] zn=[id=zn3 name=Queens] localhost:5060 capacity=1 RUNNING
          [rg2-rn1] RUNNING
             No performance info available

        shard=[rg1] num partitions=50
          [rg1-rn1] sn=sn5
          [rg1-rn2] sn=sn1
          [rg1-rn3] sn=sn3
        shard=[rg2] num partitions=50
          [rg2-rn1] sn=sn6
          [rg2-rn2] sn=sn2
          [rg2-rn3] sn=sn4

13. すべてのゾーンの各シャードにレプリカがあることを確認します。

        kv-> verify configuration
        Verify: starting verification of MetroArea based
        upon topology sequence #117
        100 partitions and 6 storage nodes.
        Version: 12.1.3.0.1 Time: 2014-01-07 20:10:45 UTC
        See localhost:/tm/kvroot/MetroArea/log/MetroArea_{0..N}.log
        for progress messages
        Verify: == checking storage node sn1 ==
        Verify: Storage Node [sn1] on localhost:5010
        Zone: [name=Manhattan id=zn1 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Admin [admin]
        Status: RUNNING
        Verify: Rep Node [rg1-rn2]
        Status: RUNNING, REPLICA at sequence number: 121 haPort: 5013
        Verify: == checking storage node sn2 ==
        Verify: Storage Node [sn2] on localhost:5020
        Zone: [name=Manhattan id=zn1 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Rep Node [rg2-rn2]
        Status: RUNNING, REPLICA at sequence number: 121 haPort: 5022
        Verify: == checking storage node sn3 ==
        Verify: Storage Node [sn3] on localhost:5030
        Zone: [name=JerseyCity id=zn2 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Admin [admin2]
        Status: RUNNING
        Verify: Rep Node [rg1-rn3]
        Status: RUNNING, REPLICA at sequence number: 121 haPort: 5033
        Verify: == checking storage node sn4 ==
        Verify: Storage Node [sn4] on localhost:5040
        Zone: [name=JerseyCity id=zn2 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Rep Node [rg2-rn3]
        Status: RUNNING, REPLICA at sequence number: 121 haPort: 5042
        Verify: == checking storage node sn5 ==
        Verify: Storage Node [sn5] on localhost:5050
        Zone: [name=Queens id=zn3 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Admin [admin3]
        Status: RUNNING
        Verify: Rep Node [rg1-rn1]
        Status: RUNNING, MASTER at sequence number: 121 haPort: 5053
        Verify: == checking storage node sn6 ==
        Verify: Storage Node [sn6] on localhost:5060
        Zone: [name=Queens id=zn3 type=PRIMARY]
        Status: RUNNING
        Ver: 12cR1.3.0.1 2013-12-18 06:35:02 UTC  Build id: 8e70b50c0b0e
        Verify: Rep Node [rg2-rn2]
        Status: RUNNING, MASTER at sequence number: 121 haPort: 5062
        Verification complete, no violations.

前の例では、このクラスタ内に6個のレプリケーション・ノード(2つはマスター、4つはレプリカ)を持つ3つのゾーン(zn1 = マンハッタン、zn2 = ジャージー・シティ、zn3 = クイーンズ)があります。これは、このトポロジは各シャード内に3つのレプリカがあるため可用性が高いだけでなく、1つのゾーンで障害が起こってもリカバリできることを意味します。ゾーンに障害が発生した場合、新しいマスターを選択するには残りの2つのゾーンで十分なため、サービスは中断することなく続行します。

前 | 先頭へ | 次
レプリケーション・ノードの作成およびデプロイ | ホーム | ストアを構成するためのスクリプトの使用