1

私は数週間mongoを使用しており、開発環境を構築しています。単一ノードから開始し、シャード クラスターに移行しました。次に、レプリケートされたシャード クラスターに移行したいと考えています。私が読んだところによると、レプリケートされたシャード クラスターは、スケーラビリティ、耐久性、パフォーマンスの向上など、最高のものです。

私は彼らのヘルプで (非常に良い) チュートリアルのほとんどを読みました。彼らのレッスンでは、単一ノードからレプリカ セット、シャード レプリカ セットに移行するようアドバイスされているようですが、残念ながら私が行った方法とは逆です。シャード クラスターをレプリケートされたシャード クラスターにアップグレードする方法が見つからないようです。

私が持っている5つのホストは次のとおりです。

  • アプリケーションサーバー
  • 構成サーバー
  • シャード1
  • シャード2
  • シャード3

各シャード サーバーを次のように起動しました。

mongod --shardsvr 

次に、構成サーバーを次のように起動しました。

mongod --configsvr 

次に、APPSERVERでmongosプロセスを開始しました:

mongos --configdb CONFIGSERVER

次に、mongos でシャードを追加し、データベースでシャーディングを有効にして、コレクションのシャードキーを定義しました。

sh.addShard("SHARD1:27018");//again for 2 and 3
sh.enableSharding("beacon");
sh.shardCollection("beacon.alpha2", {"ip":1});

各シャードを他の 2 つのそれぞれにレプリケートする必要があります。(右?) シャードの mongod プロセスを停止し、別の CL パラメータで再起動する必要がありますか? レプリケートするには、mongos シェルでどのコマンドを発行する必要がありますか? すべてのデータをエクスポートし、すべてを削除して再起動し、再インポートする必要がありますか? 繰り返しになりますが、レプリカ セットの作成方法に関するチュートリアルはたくさんありますが、最初にシャード システムを使用してレプリカ セットを作成する方法については何も見ていません。

ありがとう!

4

1 に答える 1

3

シャードごとに、現在のメンバーを再起動し、それと 2 つの新しいメンバー (または 1 つの新しいメンバーとアービター) の両方を--replsetコマンド ライン オプションで開始する必要があります。それ以上のメンバーを追加することもできますが、3 が実行可能な最低のセットです。次に、新しいプライマリになるもの (たとえば、現在の SHARD1) の内部から、次のことができます。

rs.add("newmember1:port")
rs.add("newmember2:port")
rs.initiate();

sh.status()次に、レプリカ セットの新しいメンバーを反映​​するように が更新されていることを確認する必要があります。2.2 では、これは自動的に行われるはずなので、少し簡単になりました。以前のバージョンでは、シャード情報を構成データベースに手動で保存する必要がありました。これは、シャード クラスターのドキュメントに反映されています。自動的に追加された場合は、sh.status()出力に次のようなレプリカ セットのリストが表示されます。

{  "_id" : "shard1",  "host" : "shard1/SHARD1:port,newmember1:port,newmember2:port" }

これが自動的に行われない場合は、上記のドキュメント リンクで概説されている手順に従う必要がありますmongos

db.getSiblingDB("config").shards.save({_id:"<name>", host:"<rsName>/member1,member2,..."})

上記の例に従うと、次のようになります。

db.getSiblingDB("config").shards.save({_id:"SHARD1", host:"shard1/SHARD1:port,newmember1:port,newmember2:port"})

この手順はシャードごとに実行する必要があります。一度に 1 つずつ実行して、SHARD1 のすべてをレプリカ セットにしてから SHARD2 に進む必要があります。また、最初の選択が行われている間は各レプリカ セットが読み取り専用になることにも注意する必要があるため、少なくともダウンタイムまたはメンテナンス ウィンドウでこれをスケジュールする必要があります。最初にステージング環境でテストするのが理想的です。

于 2012-09-19T01:28:01.150 に答える