12

私は現在、大量のデータ(1日あたり1500万レコード)についてbigcouchをテストしています。

データのビューを生成する必要がある場合、2台のマシンの一方がもう一方よりもはるかに弱いため、バランスの問題が発生します。その結果、より良いマシンは完成し、何の関係もありませんが、より弱いマシンにはまだやるべきことがたくさんあります。(シングルコアとデュアルコア)

私の考えは、いくつかのシャードを弱いマシンから別のマシンに移動して、ほぼ同時に終了するようにすることです。

したがって、私の質問は、どうすればシャードをウィーカービッグカウチサーバーからより良いサーバーに移動できるかということです。

よろしくお願いします!

アンディ

4

1 に答える 1

23

Bigcouchシャードは単純なCouchDBデータベースであるため、それらを移動する手順は非常に簡単です。Bigcouchの将来のリリースではプロセスが自動化されますが、今のところはそれについて説明します。

少し背景が説明の根拠になります。Bigcouchノードは2つのポート5984と5986でリッスンしています。フロントポート5984は、CouchDBのように見えます(クラスター化され、フォールトトレラントです)。バックポート5986は、特定のノード上の基盤となるCouchDBサーバーと直接通信します。データベースのシャードの他に、localhost:5986/_all_dbsに2つの追加データベースが表示されていることに気付くでしょう。1つは「ノード」と呼ばれ、クラスターをセットアップするときにすでにそれと対話しています。もう1つは「dbs」と呼ばれ、データベースの各シャードの各コピーが実際に存在する場所を指定する、クラスター化された各データベースのドキュメントが含まれています。

したがって、シャードを移動するには、いくつかのことを行う必要があります。

  1. シャードファイルを識別します。
  2. シャードファイルを新しいサーバーにコピーします。
  3. Bigcouchに新しい場所について教えてください。
  4. 必要に応じてレプリケーションを追加します。

ステップ1

Bigcouchノードのデータディレクトリには、次のようなファイルがあります。

shards / a0000000-bfffffff / foo.1312544893.couch

すべてのシャードは、shards /ディレクトリの下に、次に範囲ごとに、最後に名前の後に乱数が続くように編成されています。

データベースのファイルの1つを選択し、その名前を覚えておいてください。

ステップ2

任意の方法を使用して、このファイルをターゲットサーバー上の同じパスにコピーします。rsyncとscpは、CouchDBレプリケーションと同様に適切な選択です(必ずポート5986からポート5986にレプリケートしてください)。

ステップ3

クラスタ化されたデータベースのレイアウトを管理する「dbs」内のドキュメントを変更する必要があります。少しこのように見えます。

{"_id": "baz"、 "_ rev": "1-912fe2dd63e0a570a4ceb26fd742dffd"、 "shard_suffix":[46,49,51,49,50,53,52,53,50,49,55]、 "changelog" :[["add"、 "00000000-7fffffff"、 "dev1@127.0.0.1"]、["add"、 "80000000-ffffffff"、 "dev1@127.0.0.1"]]、 "by_node":{"dev1 @ 127.0.0.1 ":[" 00000000-7fffffff "、" 80000000-ffffffff "]}、" by_range ":{"00000000-7fffffff ":[" dev1@127.0.0.1"]、" 80000000-ffffffff ":[" dev1@127.0.0.1"]}}

by_nodeとby_rangeの両方の値を更新して、移動したシャードが新しいホストに解決されるようにします。

この時点で、シャードを移動しました。ただし、ファイルのコピーを開始してから「dbs」ドキュメントを更新する前に更新があった場合、それらの書き込みは元のノードで行われ、表示されないため、手順4に進む必要があります。更新がない場合は、元のサーバーのシャードを削除できますが、ポート5984でデータベースをチェックして、すべてのドキュメントが正しく表示されることを確認することをお勧めします。

ステップ4

ソースシャードからターゲットシャードへのレプリケーションを実行します。ここでも、それぞれの5986ポートでこれを実行するように注意してください。これにより、すべての更新が再び利用可能になります。これで、元のサーバー上のこのシャードのコピーを削除できます。

HTH、ロバートニューソン-Cloudant。

于 2011-08-05T12:00:28.090 に答える