複数のゾーンでの構成

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

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

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

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

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

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

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

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

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

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

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

注意:

ゾーンには、プライマリとセカンダリの2つのタイプがあります。

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

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

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

注意:

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

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

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

    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter1/KVROOT \
    -host localhost \
    -port 5000 \
    -harange 5010,5020 \
    -capacity 1 
    
    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter2/KVROOT \
    -host localhost \
    -port 6000 \
    -harange 6010,6020 \
    -capacity 1 
    
    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter3/KVROOT \
    -host localhost \
    -port 7000 \
    -harange 7010,7020 \
    -capacity 1 
    
    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter4/KVROOT \
    -host localhost \
    -port 8000 \
    -harange 8010,8020 \
    -capacity 1 
    
    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter5/KVROOT \
    -host localhost \
    -port 9000 \
    -harange 9010,9020 \
    -capacity 1 
    
    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar makebootconfig \
    -root Data/virtualroot/datacenter6/KVROOT \
    -host localhost \
    -port 10000 \
    -harange 10010,10020 \
    -capacity 1 
  2. 次のようにして、セキュリティ・ディレクトリを作成してコピーします。

    java -Xmx64m -Xms64m \
    -jar kv/lib/kvstore.jar securityconfig config create \
    -root Data/virtualroot/datacenter1/KVROOT -kspwd password
    Created files
    Data/virtualroot/datacenter1/KVROOT/security/security.xml
    Data/virtualroot/datacenter1/KVROOT/security/store.keys
    Data/virtualroot/datacenter1/KVROOT/security/store.trust
    Data/virtualroot/datacenter1/KVROOT/security/client.trust
    Data/virtualroot/datacenter1/KVROOT/security/client.security
    Data/virtualroot/datacenter1/KVROOT/security/store.passwd
    (Generated in CE version)
    Data/virtualroot/datacenter1/KVROOT/security/store.wallet/cwallet.sso
    (Generated in EE version)
        
    Created
    cp -r Data/virtualroot/datacenter1/KVROOT/security \
    Data/virtualroot/datacenter2/KVROOT/
    cp -r Data/virtualroot/datacenter1/KVROOT/security \
    Data/virtualroot/datacenter3/KVROOT/
    cp -r Data/virtualroot/datacenter1/KVROOT/security \
    Data/virtualroot/datacenter4/KVROOT/
    cp -r Data/virtualroot/datacenter1/KVROOT/security \
    Data/virtualroot/datacenter5/KVROOT/
    cp -r Data/virtualroot/datacenter1/KVROOT/security \
    Data/virtualroot/datacenter6/KVROOT/
  3. 各構成ファイルを使用して、すべてのストレージ・ノード・エージェントを起動します。

    注意:

    SNAを開始する前に、各ノードで環境変数MALLOC_ARENA_MAX1に設定します。こうすることで、メモリー使用量が指定されたヒープ・サイズに制限されます。

    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start \
    -root Data/virtualroot/datacenter1/KVROOT &
    
    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar  start \
    -root Data/virtualroot/datacenter2/KVROOT &
    
    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start \
    -root Data/virtualroot/datacenter3/KVROOT &
    
    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start \
    -root Data/virtualroot/datacenter4/KVROOT &
    
    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start \
    -root Data/virtualroot/datacenter5/KVROOT &
    
    > nohup java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar start \
    -root Data/virtualroot/datacenter6/KVROOT & 
  4. CLIを起動します。

    java -Xmx64m -Xms64m \
    -jar KVHOME/lib/kvstore.jar runadmin -host \ 
    localhost -port 5000 \
    -security Data/virtualroot/datacenter1/KVROOT/security/client.security
    kv->
  5. ストアに名前を付けます。

    kv-> configure -name MetroArea
    Store configured: MetroArea 
  6. 管理プロセスを持つ最初のストレージ・ノードをマンハッタン・ゾーンにデプロイします。

    kv-> plan deploy-zone -name Manhattan -rf 1 -wait
    Executed plan 1, waiting for completion...
    Plan 1 ended successfully
    kv-> plan deploy-sn -zn1 -host localhost -port 5000 -wait
    Executed plan 2, waiting for completion...
    Plan 2 ended successfully
    kv-> plan deploy-admin -sn sn1 -wait
    Executed plan 3, waiting for completion...
    Plan 3 ended successfully
    kv-> pool create -name SNs
    Added pool SNs
    kv-> pool join -name SNs -sn sn1
    Added Storage Node(s) [sn1] to pool SNs  
  7. 2番目のストレージ・ノードをマンハッタン・ゾーンにデプロイします。

    kv-> plan deploy-sn -znname Manhattan -host localhost \
    -port 6000 -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  
  8. 管理プロセスを持つ最初のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。

    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 7000 -wait
    Executed plan 6, waiting for completion...
    Plan 6 ended successfully
    kv-> plan deploy-admin -sn sn3 -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  
  9. 2番目のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。

    kv-> plan deploy-sn -znname JerseyCity -host localhost \
    -port 8000 -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  
  10. 管理プロセスを持つ最初のストレージ・ノードをクイーンズ・ゾーンにデプロイします。

    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 9000 -wait
    Executed plan 10, waiting for completion...
    Plan 10 ended successfully
    kv-> plan deploy-admin -sn sn5 -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  
  11. 2番目のストレージ・ノードをクイーンズ・ゾーンにデプロイします。

    kv-> plan deploy-sn -znname Queens -host localhost \
    -port 10000 -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  
  12. トポロジを作成してデプロイします。

    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  
  13. show topologyコマンドを使用してサービス・ステータスを確認します。

    kv-> show topology
    store=MetroArea numPartitions=100 sequence=117
    zn: id=zn1 name=Manhattan repFactor=1 type=PRIMARY allowArbiters=false masterAffinity=false
    zn: id=zn2 name=JerseyCity repFactor=1 type=PRIMARY allowArbiters=false masterAffinity=false
    zn: id=zn3 name=Queens repFactor=1 type=PRIMARY allowArbiters=false masterAffinity=false
    
    sn=[sn1] zn=[id=zn1 name=Manhattan] node01:5000 capacity=1 RUNNING
      [rg1-rn2] RUNNING
         No performance info available
    sn=[sn2] zn=[id=zn1 name=Manhattan] node02:6000 capacity=1 RUNNING
      [rg2-rn2] RUNNING
         No performance info available
    sn=[sn3] zn=[id=zn2 name=JerseyCity] node03:7000 capacity=1 RUNNING
      [rg1-rn3] RUNNING
         No performance info available
    sn=[sn4] zn=[id=zn2 name=JerseyCity] node04:8000 capacity=1 RUNNING
      [rg2-rn3] RUNNING
         No performance info available
    sn=[sn5] zn=[id=zn3 name=Queens] node05:9000 capacity=1 RUNNING
      [rg1-rn1] RUNNING
         No performance info available
    sn=[sn6] zn=[id=zn3 name=Queens] node06:10000 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  
  14. すべてのゾーンの各シャードにレプリカがあることを確認します。

    kv-> verify configuration
    Verify: starting verification of store MetroArea based upon
    topology sequence #117
    100 partitions and 6 storage nodes
    Time: 2018-09-28 06:57:10 UTC   Version: 18.3.2
    See node01:Data/virtualroot/datacenter1/kvroot/MetroArea/
                                              log/MetroArea_{0..N}.log for
                                              progress messages
    Verify: Shard Status: healthy:2 writable-degraded:0
                                                read-only:0 offline:0
    Verify: Admin Status: healthy
    Verify: Zone [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false] 
       RN Status: online:2 offline: 0 maxDelayMillis:1 maxCatchupTimeSecs:0
    Verify: Zone [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false] 
       RN Status: online:2 offline: 0 maxDelayMillis:1 maxCatchupTimeSecs:0
    Verify: Zone [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false] 
       RN Status: online:2 offline: 0
    Verify: == checking storage node sn1 ==
    Verify: Storage Node [sn1] on node01:5000
       Zone: [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Admin [admin1]          Status: RUNNING,MASTER
    Verify:         Rep Node [rg1-rn2]      Status: RUNNING,REPLICA
       sequenceNumber:127 haPort:5011 available storage size:14 GB delayMillis:1 catchupTimeSecs:0
    Verify: == checking storage node sn2 ==
    Verify: Storage Node [sn2] on node02:6000
       Zone: [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Rep Node [rg2-rn2]      Status: RUNNING,REPLICA
       sequenceNumber:127 haPort:6010 available storage size:17 GB delayMillis:1 catchupTimeSecs:0
    Verify: == checking storage node sn3 ==
    Verify: Storage Node [sn3] on node03:7000
       Zone: [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Admin [admin2]          Status: RUNNING,REPLICA
    Verify:         Rep Node [rg1-rn3]      Status: RUNNING,REPLICA
       sequenceNumber:127 haPort:7011 available storage size:12 GB delayMillis:1 catchupTimeSecs:0
    Verify: == checking storage node sn4 ==
    Verify: Storage Node [sn4] on node04:8000
       Zone: [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Rep Node [rg2-rn3]      Status: RUNNING,REPLICA
       sequenceNumber:127 haPort:8010 available storage size:18 GB delayMillis:1 catchupTimeSecs:0
    Verify: == checking storage node sn5 ==
    Verify: Storage Node [sn5] on node05:9000
       Zone: [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Admin [admin3]          Status: RUNNING,REPLICA
    Verify:         Rep Node [rg1-rn1]      Status: RUNNING,MASTER
       sequenceNumber:127 haPort:9011 available storage size:6 GB
    Verify: == checking storage node sn6 ==
    Verify: Storage Node [sn6] on node06:10000
       Zone: [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false]
       Status: RUNNING
       Ver: 18.3.2 2018-09-17 09:33:45 UTC  Build id: a72484b8b33c
    Verify:         Rep Node [rg2-rn1]      Status: RUNNING,MASTER
       sequenceNumber:127 haPort:10010 available storage size:6 GB
    
    Verification complete, no violations.   
  15. リモート・アクセスでのセキュリティの構成に記載の手順に従って、複数ゾーンのデプロイの例でユーザーのアクセスを作成します。

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