複数のデータ・センターでの構成

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

各データ・センターに異なるレプリケーション係数を指定できます。ストアのレプリケーション係数の合計は、すべてのデータ・センターのレプリケーション係数の合計です。

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

注意

複数のデータ・センターの現在のサポートでは、すべてのデータ・センターがそれぞれ近くにあり、新しいマスターの選択においてクォーラムにも関与していることを前提としています。

高スループットと低遅延ネットワークによりパフォーマンスが向上しますが、データ・センターに障害が発生した場合、低ネットワークが必ずしもデータ損失につながるとはかぎりません。特に、2つのデータ・センターがそれぞれ近くにあり、3番目のデータ・センターが遠くにある場合、ローカル・データ・センターの一方に障害が発生しても、もう一方のデータ・センターが最新のデータを引き続き保持するため、データが失われる可能性はなくなります。

注意

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

次の手順では、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
    
    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
    
    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
    
    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar makebootconfig \
    -root KVROOT -host localhost -config config4.xml \
    -port 5040 -harange 5042,5045 \
    -memory_mb 0
    
    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar makebootconfig \
    -root KVROOT -host localhost -config config5.xml \
    -port 5050 -harange 5052,5055 \
    -memory_mb 0
    
    java -Xmx256m -Xms256m \
    -jar KVHOME/lib/kvstore.jar makebootconfig \
    -root KVROOT -host localhost -config config6.xml \
    -port 5060 -harange 5062,5065 \
    -memory_mb 0
  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-datacenter -name Manhattan -rf 1 -wait
    Executed plan 1, waiting for completion...
    Plan 1 ended successfully 
    kv-> plan deploy-sn -dc 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 -dcname 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-datacenter -name JerseyCity -rf 1 -wait
    Executed plan 5, waiting for completion...
    Plan 5 ended successfully 
    kv-> plan deploy-sn -dcname 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 -dcname 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-datacenter -name Queens -rf 1 -wait 
    Executed plan 9, waiting for completion...
    Plan 9 ended successfully 
    kv-> plan deploy-sn -dcname 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 -dcname 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
    dc=[dc1] name=Manhattan repFactor=1
    dc=[dc2] name=JerseyCity repFactor=1
    dc=[dc3] name=Queens repFactor=1
    
    sn=[sn1] dc=dc1 localhost:5010 capacity=1 RUNNING
    [rg1-rn2] RUNNING
         No performance info available
    sn=[sn2] dc=dc1 localhost:5020 capacity=1 RUNNING
    [rg2-rn2] RUNNING
         No performance info available
    sn=[sn3] dc=dc2 localhost:5030 capacity=1 RUNNING
    [rg1-rn3] RUNNING
         No performance info available
    sn=[sn4] dc=dc2 localhost:5040 capacity=1 RUNNING
    [rg2-rn3] RUNNING
         No performance info available
    sn=[sn5] dc=dc3 localhost:5050 capacity=1 RUNNING
    [rg1-rn1] RUNNING
         No performance info available
    sn=[sn6] dc=dc3 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: started verification of MetroArea based 
    upon topology sequence #117
    100 partitions and 6 storage nodes. 
    Version: 11.2.2.1.2 Time: 2013-06-21 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 
    Datacenter: Manhattan[dc1]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    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 
    Datacenter: Manhattan[dc1]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    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 
    Datacenter: JerseyCity[dc2]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    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 
    Datacenter: JerseyCity[dc2]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    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 
    Datacenter: Queens[dc3]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    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 
    Datacenter: Queens[dc3]
    Status: RUNNING 
    Ver: 11gR2.2.1.2 2013-06-21 12:39:45 UTC Build id: 81d2c9370013
    Verify: Rep Node [rg2-rn2]  
    Status: RUNNING, MASTER at sequence number: 121 haPort: 5062 
    Verification complete, no violations.   

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