複数のゾーンでの構成
使用可能なすべての物理設備を最適に利用するには、複数のゾーンにストアをデプロイします。複数のゾーンがあることで、1つのゾーンで障害が発生しても、障害を分離してデータの可用性を確保できます。各ゾーンには、すべてのシャードのコピーを含む完全なストアのコピーがあります。この構成では、少なくとも1つのレプリカが各ゾーンに存在するため、データの一貫性保証を満たすことができるかぎり、読取りは常に可能です。データベースでクォーラムが維持されるかぎり、1つのゾーンが失われても書込みが発生する可能性があります。概要ガイドを参照してください。
各ゾーンに異なるレプリケーション係数を指定できます。レプリケーション係数は、次のいずれかとして定量化できます。
- ゾーン・レプリケーション係数
- ゾーンで保持されるコピー、つまりレプリカの数。
- プライマリ・レプリケーション係数
- すべてのプライマリ・ゾーン内のレプリカの合計数。このレプリケーション係数は、選択および承認に参加するレプリカの数を制御します。 プライマリ・レプリケーション係数およびその関連性の識別方法の詳細は、「レプリケーション係数」を参照してください。
- セカンダリ・レプリケーション係数
- すべてのセカンダリ・ゾーン内のレプリカの合計数。セカンダリ・レプリカは、追加の読取り専用データ・コピーを提供します。
- ストア・レプリケーション係数
- ストア内のすべてのゾーンに関して、ストア全体のレプリカ数の合計を表します。
物理的に近い場所にゾーンを配置することには、スループットの制限によるボトルネックを回避でき、選択とコミットの際の遅延が軽減されるという利点があります。
ノート:
ゾーンには、プライマリとセカンダリの2つのタイプがあります。
プライマリ・ゾーンには、マスターまたはレプリカとしてサービスできるノードが含まれます。ゾーンは、デフォルトではプライマリ・ゾーンとして作成されます。パフォーマンス向上のためには、プライマリ・ゾーンが効率的にマスター選択に参加および承認をコミットできるようにするため、低遅延ネットワークで接続している必要があります。プライマリ・ゾーンは、マスター・アフィニティ・ゾーンになることもできます。マスター・アフィニティ・ゾーンの使用を参照してください。
セカンダリ・ゾーンには、レプリカとしてのみサービスできるノードが含まれています。セカンダリ・ゾーンを使用して離れた場所にあるデータに対する低遅延読取りアクセスを提供したり、冗長性または読取り機能を向上するためにデータの予備のコピーを保持できます。セカンダリ・ゾーンのノードはマスター選択に参加したり承認をコミットしたりしないため、セカンダリ・ゾーンは高遅延ネットワークで他のゾーンと接続することもできます。これは、余計な遅延がクリティカルな操作を妨害しないからです。
高いスループットで低遅延ネットワークを使用してプライマリ・ゾーンに接続することは、結果を改善し、パフォーマンスを向上します。一時的な中断がネットワーク・スループットを妨害せず、レプリケーションをサポートし、十分な信頼性を保つのに十分なスループットを接続が提供できているかぎりは、セカンダリ・ゾーンへの接続に高遅延ネットワークを使用できます。
ノート:
どのプライマリ・ゾーンでもマスター・ノードをホストできるため、スループットが制限されているか、高遅延のネットワーク・リンクを介してプライマリ・ゾーンに接続している場合、書込みパフォーマンスが低下する可能性があります。
次のステップでは、3つのプライマリ・ゾーンに6つのストレージ・ノードをデプロイするプロセスを示します。その後、すべてのゾーンで各シャードにレプリカがあることを確認できます。これで、ゾーンで障害が発生してもサービスを継続できます。
-
新しいストアの場合、
makebootconfig
ユーティリティを使用して、初期boot config構成ファイルを作成します。java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter1/KVROOT \ -host localhost \ -port 5100 \ -harange 5110,5120 \ -capacity 1 java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter2/KVROOT \ -host localhost \ -port 5200 \ -harange 5210,5220 \ -capacity 1 java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter3/KVROOT \ -host localhost \ -port 5300 \ -harange 5310,5320 \ -capacity 1 java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter4/KVROOT \ -host localhost \ -port 5400 \ -harange 5410,5420 \ -capacity 1 java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter5/KVROOT \ -host localhost \ -port 5500 \ -harange 5510,5520 \ -capacity 1 java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar makebootconfig \ -root Data/virtualroot/datacenter6/KVROOT \ -host localhost \ -port 5600 \ -harange 5610,5620 \ -capacity 1
-
次のようにして、セキュリティ・ディレクトリを作成してコピーします。
java -Xmx64m -Xms64m \ -jar KVHOME/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/
-
各構成ファイルを使用して、すべてのストレージ・ノード・エージェントを起動します。
java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar start \ -root Data/virtualroot/datacenter1/KVROOT & 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 & java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar start \ -root Data/virtualroot/datacenter4/KVROOT & java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar start \ -root Data/virtualroot/datacenter5/KVROOT & java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar start \ -root Data/virtualroot/datacenter6/KVROOT &
-
CLIを起動します。
java -Xmx64m -Xms64m \ -jar KVHOME/lib/kvstore.jar runadmin \ -host localhost -port 5100 \ -security Data/virtualroot/datacenter1/KVROOT/security/client.security
-
ストアに名前を付けます。
kv-> configure -name MetroArea Store configured: MetroArea
-
管理プロセスを持つ最初のストレージ・ノードをマンハッタン・ゾーンにデプロイします。
kv-> plan deploy-zone -name Manhattan -rf 1 -wait Executed plan 1, waiting for completion... Plan 1 ended successfully kv-> plan deploy-sn -znname Manhattan \ -host localhost -port 5100 -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
-
2番目のストレージ・ノードをマンハッタン・ゾーンにデプロイします。
kv-> plan deploy-sn -znname Manhattan \ -host localhost -port 5200 -wait 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
-
管理プロセスを持つ最初のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。
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 5300 -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
-
2番目のストレージ・ノードをジャージー・シティ・ゾーンにデプロイします。
kv-> plan deploy-sn -znname JerseyCity \ -host localhost -port 5400 -wait 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
-
管理プロセスを持つ最初のストレージ・ノードをクイーンズ・ゾーンにデプロイします。
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 5500 -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
-
2番目のストレージ・ノードをクイーンズ・ゾーンにデプロイします。
kv-> plan deploy-sn -znname Queens \ -host localhost -port 5600 -wait 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
-
トポロジを作成してデプロイします。
kv-> topology create -name Topo1 -pool SNs -partitions 100 Created: Topo1 kv-> plan deploy-topology -name Topo1 -wait Executed plan 13, waiting for completion... Plan 13 ended successfully
-
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:5100 capacity=1 RUNNING [rg1-rn1] RUNNING No performance info available sn=[sn2] zn:[id=zn1 name=Manhattan] node02:5200 capacity=1 RUNNING [rg2-rn1] RUNNING No performance info available sn=[sn3] zn:[id=zn2 name=JerseyCity] node03:5300 capacity=1 RUNNING [rg1-rn2] RUNNING No performance info available sn=[sn4] zn:[id=zn2 name=JerseyCity] node04:5400 capacity=1 RUNNING [rg2-rn2] RUNNING No performance info available sn=[sn5] zn:[id=zn3 name=Queens] node05:5500 capacity=1 RUNNING [rg1-rn3] RUNNING No performance info available sn=[sn6] zn:[id=zn3 name=Queens] node06:5600 capacity=1 RUNNING [rg2-rn3] RUNNING No performance info available numShards=2 shard=[rg1] num partitions=50 [rg1-rn1] sn=sn1 [rg1-rn2] sn=sn3 [rg1-rn3] sn=sn5 shard=[rg2] num partitions=50 [rg2-rn1] sn=sn2 [rg2-rn2] sn=sn4 [rg2-rn3] sn=sn6
-
すべてのゾーンの各シャードにレプリカがあることを確認します。
kv-> verify configuration Verify: starting verification of store MetroArea based upon topology sequence #117 100 partitions and 6 storage nodes Time: 2020-07-30 17:04:02 UTC Version: 20.2.15 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 total:2 Verify: Admin Status: healthy Verify: Zone [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false] RN Status: online:2 read-only:0 offline:0 Verify: Zone [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false] RN Status: online:2 read-only:0 offline:0 maxDelayMillis:1 maxCatchupTimeSecs:0 Verify: Zone [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false] RN Status: online:2 read-only:0 offline:0 maxDelayMillis:4 maxCatchupTimeSecs:0 Verify: == checking storage node sn1 == Verify: Storage Node [sn1] on node01:5100 Zone: [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Admin [admin1] Status: RUNNING,MASTER Verify: Rep Node [rg1-rn1] Status: RUNNING,MASTER sequenceNumber:1,261 haPort:5111 available storage size:31 GB Verify: == checking storage node sn2 == Verify: Storage Node [sn2] on node02:5200 Zone: [name=Manhattan id=zn1 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Rep Node [rg2-rn1] Status: RUNNING,MASTER sequenceNumber:1,236 haPort:5210 available storage size:31 GB Verify: == checking storage node sn3 == Verify: Storage Node [sn3] on node03:5300 Zone: [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Admin [admin2] Status: RUNNING,REPLICA Verify: Rep Node [rg1-rn2] Status: RUNNING,REPLICA sequenceNumber:1,261 haPort:5311 available storage size:31 GB delayMillis:1 catchupTimeSecs:0 Verify: == checking storage node sn4 == Verify: Storage Node [sn4] on node04:5400 Zone: [name=JerseyCity id=zn2 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Rep Node [rg2-rn2] Status: RUNNING,REPLICA sequenceNumber:1,236 haPort:5410 available storage size:31 GB delayMillis:0 catchupTimeSecs:0 Verify: == checking storage node sn5 == Verify: Storage Node [sn5] on node05:5500 Zone: [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Admin [admin3] Status: RUNNING,REPLICA Verify: Rep Node [rg1-rn3] Status: RUNNING,REPLICA sequenceNumber:1,261 haPort:5511 available storage size:31 GB delayMillis:1 catchupTimeSecs:0 Verify: == checking storage node sn6 == Verify: Storage Node [sn6] on node06:5600 Zone: [name=Queens id=zn3 type=PRIMARY allowArbiters=false masterAffinity=false] Status: RUNNING Ver: 20.2.15 2020-07-24 09:50:01 UTC Build id: c8998e4a8aa5 Edition: Enterprise Verify: Rep Node [rg2-rn3] Status: RUNNING,REPLICA sequenceNumber:1,236 haPort:5610 available storage size:31 GB delayMillis:4 catchupTimeSecs:0 Verification complete, no violations.
-
リモート・アクセスでのセキュリティの構成に記載の手順に従って、複数ゾーンのデプロイの例でユーザーのアクセスを作成します。
前の例では、このクラスタ内に6個のレプリケーション・ノード(2つはマスター、4つはレプリカ)を持つ3つのゾーン(zn1 = マンハッタン、zn2 = ジャージー・シティ、zn3 = クイーンズ)があります。これは、このトポロジは各シャード内に3つのレプリカがあるため可用性が高いだけでなく、1つのゾーンで障害が起こってもリカバリできることを意味します。ゾーンに障害が発生した場合、新しいマスターを選択するには残りの2つのゾーンで十分なため、サービスは中断することなく続行します。