web-dev-qa-db-ja.com

MongoDBレプリカセットをスタンドアロンサーバーに変換する方法

4つのレプリケートセットがあり、構成は次のとおりであることを考慮してください。

{
 "_id": "rs_0",
 "version": 5,
 "members" : [
  {"_id": 1, "Host": "127.0.0.1:27001"},
  {"_id": 2, "Host": "127.0.0.1:27002"},
  {"_id": 3, "Host": "127.0.0.1:27003"},
  {"_id": 4, "Host": "127.0.0.1:27004"}
 ]
}

mongo --port <port>を使用してすべてのセットに接続できます

スタンドアロンをレプリカセットに変換する に関する情報を取得するためのドキュメントがありますが、レプリカセットからスタンドアロンに戻す方法を教えてください。

29
Amol M Kulkarni

レプリカセット(rs.remove('Host:port'))からホストを削除し、replSetパラメーターなしで再起動すると、再びスタンドアロンになります。

17

レプリカセット(rs.remove( 'Host:port'))からすべてのセカンダリホストを削除し、replSetパラメーターなしでmongoデーモンを再起動し(/etc/mongo.confを編集)、セカンダリホストがスタンドアロンモードで再び起動します。

プライマリホストは、rs.removeを使用してレプリカセットから削除できないため、扱いにくいものです。レプリカセットにプライマリノードのみを設定したら、mongoシェルを終了してmongoを停止する必要があります。次に、/ etc/mongo.confを編集してreplSetパラメーターを削除し、mongoを再起動します。 mongoを起動すると、すでにスタンドアロンモードになっていますが、mongoシェルは次のようなメッセージを表示します。

2015-07-31T12:02:51.112 + 0100 [initandlisten] **警告:mongodは--replSetなしで開始されましたが、local.system.replsetには1つのドキュメントが存在します

警告を削除するには、2つの手順を実行できます。1)ローカルデータベースを削除し、mongoを再起動します。

use local
db.dropDatabase();

/etc/init.d/mongod restart

2)またはあなたがとても過激になりたくない場合は、次のことができます:

use local
db.system.replset.find()

次のようなメッセージが表示されます。

{ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "Host" : "hostprimary:mongoport" } ] }

次を使用して消去します。

db.system.replset.remove({ "_id" : "replicaSetName", "version" : 1, "members" : [ { "_id" : 0, "Host" : "hostprimary:mongoport" } ] })

おそらくプロンプトが表示されます:

WriteResult({ "nRemoved" : 1 })

これで、mongoを再起動できます。警告は表示されなくなります。mongoは警告なしでスタンドアロンモードになります。

34
amvalente

MongoDB Documentation は、レプリカセットメンバーのメンテナンスを実行するために以下を提案します。これにより、レプリカセットメンバーは、さらなる操作のためにスタンドアロンモードになります。少し変更するだけで、スタンドアロンにできます。

  1. 問題のノードがシャード内の唯一のノードである場合、 MongoDBのドキュメント に従ってチャンクを他のシャードに排出します。そうしないと、シャードデータベースが破損します。つまり、
    • Mongosに接続してバランサーが有効になっていることを確認し、sh.startBalancer(timeout, interval)を実行します
    • 問題のシャードについては、管理データベースに移動し、db.adminCommand( { removeShard: "mongodb0" } )
    • 上記のremoveShardコマンドを繰り返して排出ステータスを確認し、排出が完了するまで待ちます
  2. 問題のノードがプライマリの場合、rs.stepDown(300)を実行します
  3. db.shutdownServer()を実行してノードを停止します
  4. 次の方法でyaml設定を変更します:
    • コメントアウトreplication.replSetName(コマンドラインで--replSetName)
    • シャードまたは構成サーバーのコメントアウトsharding.clusterRole(コマンドラインで--shardsvcおよび--configsvr)
    • net.portをコメントアウトしてから、別のポートに変更します(コマンドラインの--port)
  5. Mongodインスタンスを起動します
  6. 変更が永続的な場合は、他のmongodインスタンスに移動してrs.remove("Host:port")を実行します

この後、問題のノードは、スタンドアロンモードで稼働している必要があります。

3
Charles Lin

1)セカンダリサーバーのmongo Shellに移動します

2)以下のコマンドを使用して、セカンダリサーバーを停止します。

   use admin
   db.shutdownServer()

以下のコマンドを実行した後。プライマリは自動的にスタンドアロンサーバーになります。

詳細については、以下のリンクを確認してください。 http://www.tutespace.com/2016/03/stopping-and-starting-mongodb.html

Ubuntuマシンで

  1. Mongoサーバーを停止します
  2. /etc/mongod.confを開きます
  3. レプリケーションとreplSetName行をコメントします
#replication:
   #replSetName: rs0
  1. Mongoサーバーを起動し、mongo Shellに移動します
  2. ローカルデータベースを削除
use local

db.dropDatabase()
  1. Mongoを再起動します
1
Raj Sharma