クラスターへのデータ・センターの追加
データ・センターを既存のクラスターに追加する手順。
データ・センターを既存のクラスターに追加する手順。
パッケージ・インストール | /etc/cassandra/cassandra.yaml |
tarボール・インストール | install_location/resources/cassandra/conf/cassandra.yaml |
Windowsインストール | C:\Program Files\DataStax Community\apache-cassandra\conf\cassandra.yaml |
手順
クラスターの他のノードにインストールされているバージョンと同じバージョンのCassandraがインストールされていることを確認してください。「以前のリリースのインストール」を参照してください。
- すべてのキースペースで必ずNetworkTopologyStrategyを使用します。
-
各ノードについて、cassandra.yamlファイル内の以下のプロパティを設定します。
-
auto_bootstrap: falseを追加(または編集)してください。
デフォルトでは、この設定はtrueで、cassandra.yamlファイルには記載されていません。このパラメーターをfalseに設定することにより、新しいノードがデータ・センターの他のノードのすべてのデータを取得しようとするのを防ぐことができます。最後のステップでnodetool rebuildを実行すると、各ノードは適切にマップされます。
-
クラスターの設定に合わせるため、-seedsおよびendpoint_snitchなどの他のプロパティを設定します。
詳細なガイダンスについては、「複数ノード・クラスター(複数データ・センター)の初期化」を参照してください。
注: すべてのノードをシードにしないでください。「ノード間のコミュニケーション(ゴシップ)」を参照してください。 -
vnodeを有効にするには、num_tokensを設定してください。
推奨値は256です。initial_tokenパラメーターは設定しないでください。
-
auto_bootstrap: falseを追加(または編集)してください。
-
すべてのサーバーで使用されるスニッチの関連プロパティ・ファイルを更新し、新しいノードを含めます。再起動する必要はありません。
- GossipingPropertyFileSnitch: cassandra-rackdc.properties
- PropertyFileSnitch:cassandra-topology.properties
-
新しいクラスターに対してクライアントを正しく構成していることを確認します。
- クライアントがDataStax Java、C#、またはPythonドライバーを使用する場合は、負荷バランス・ポリシーを
DCAwareRoundRobinPolicy
(Java、C#、 Python)に設定してください。 - Hectorなどの別のクライアントを使用している場合は、明示的に命令されるまではクライアントが新しいノードに問い合わせをしないよう、新しいノードが自動検出されないことを確認してください。たとえば、Hectorを使用している場合は、
sethostConfig.setAutoDiscoverHosts(false);
を使用します。Astyanaxを使用している場合は、ConnectionPoolConfigurationImpl.setLocalDatacenter("<データ・センター名">)
を使用して、指定されたデータ・センターに接続されるようにします。 - DataStax Java Driver 2.0と統合されたAstyanax 2.xを使用している場合は、
JavaDriverConfigBuilder.withLoadBalancingPolicy()
を呼び出すことにより、負荷バランス・ポリシーをDCAwareRoundRobinPolicy
に設定できます。AstyanaxContext<Keyspace> context = new AstyanaxContext.Builder() ....withConnectionPoolConfiguration(new JavaDriverConfigBuilder() .withLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy())) .build()) ...
- クライアントがDataStax Java、C#、またはPythonドライバーを使用する場合は、負荷バランス・ポリシーを
- QUORUM整合性レベルを読み取りおよび書き込みに使用している場合は、LOCAL_QUORUMまたはEACH_QUORUMの整合性レべルを調べ、そのレベルが複数のデータ・センターの要件に適合するかどうかを確認してください。
- 新しいノード上でCassandraを起動します。
-
クラスター内のすべてのノードを起動したら、以下の手順に従ってください。
-
キースペース・プロパティを変更して、新しいデータ・センターのレプリケーション係数を指定します。
たとえば、ストラテジ・オプションをDC1:2、DC2:2に設定します。
詳細については、ALTER KEYSPACEを参照してください。
-
新しいデータ・センターのすべてのノード上で、既存のデータ・センターを指定するnodetool rebuildを実行します。
$ nodetool rebuild -- name_of_existing_data_center
このコマンドを実行しないと、新しいデータ・センターへ整合性レベルLOCAL_ONEまたはONEを指定して要求を発行した場合は、既存のデータ・センターが完全に同期していないと失敗する可能性があります。
rebuildは、複数のノードで同時に実行できます。そうすべきかどうかは、クラスターが余分なI/Oとネットワーク負荷を複数のノードで処理できるかどうかによって異なります。ノードごとにrebuildを実行すると、既存のクラスターに与える影響は最小限に抑えられます。
重要: コマンドラインに既存のデータ・センターを指定しないと、新しいノードはあたかも再構築が成功したかのように見えますが、データは含まれていません。
-
キースペース・プロパティを変更して、新しいデータ・センターのレプリケーション係数を指定します。
-
trueに変更するか、auto_bootstrap:falseをcassandra.yamlファイルから削除します。
このパラメーターを通常の設定に戻し、再起動したときにノードがデータ・センターの他のノードからすべてのデータを取得できるようにします。