web-dev-qa-db-ja.com

プロセスを再起動せずにMongoDBクラスターのマスターを変更するにはどうすればよいですか?

クラスターのマスタースレーブ構成を構成する方法に関するMongoDBのドキュメントを読んで(クラスターには12を超えるノードがあるため、残念ながらレプリカセット構成を作成することはできません)、スレーブをマスターに昇格させるにはどうすればよいですか?プロセスを停止する必要がありますか?

プロセスを再起動せずにスレーブをマスターに昇格できるRedisのslaveofコマンドのように、使用できるコマンドはありますか?

これは、MongoDBドキュメントで見つけたものです( http://docs.mongodb.org/manual/core/master-slave/ ):

使用できない、または破損したマスター(次の例ではA)からスレーブ(B)に永続的にフェイルオーバーするには:

Aをシャットダウンします。Bでmongodを停止します。バックアップして、Bのlocalで始まるすべてのデータファイルをdbpathから移動します。警告local。*の削除は取り消せないため、元に戻すことはできません。この手順は、細心の注意を払って実行してください。 --masterオプションを使用してBでmongodを再起動します。注これは1回限りの操作であり、元に戻すことはできません。 Aは、完全な再同期が完了するまでBのスレーブになることはできません。

これは本当に唯一の方法ですか?

4
Kico Lobo

コメントであなたの質問をクリアするためのsysadmins回答への補遺:

いいえ、現在(2.4の時点で)レプリカセット内の12ノードを超える方法はありません。考えられる解決策として、 Mongo Connector を使用して複数のセットを作成することを検討できます。コネクタを使用すると、基本的にoplogを調整することにより、あるセットから別のセットのopsを再生できます(これがレプリケーションの一般的な動作方法です)。ただし、これは、クラスター間の同期の問題の解決が自動的に行われるわけではなく、基本的にはユーザー次第であることを意味します。

参考までに、12ノードの制限を増やすために投票/監視するための関連する問題は SERVER-311 -現在2.5.x(現在の不安定な開発ブランチ)に予定されていますが、そのようなすべてのものと同様ですコミットされて安定したリリースになるまで、いつ完了するかはわかりません。

3
Adam C

はい、これは確かに役割を切り替えるための方法です。レプリカセットを優先してマスター/スレーブが非推奨になるのには理由があります。 Master/Slave のドキュメントでは、レプリカセットと2つのノードを使用してマスター/スレーブの動作をエミュレートする方法を示しています。このように設定すると、Mongoコンソールからの簡単なコマンドでモードのホットスワップを取得できます。

{ _id : 'replSet', members : [ { _id : 0, Host : "mongomaster", priority : 0},
                               { _id : 1, Host : "mongoslave", priority : 1 } ]
}

それはあなたに役割の交換を提供するでしょう。どのサーバーがプライマリとして機能し、どのサーバーがセカンダリとして機能するかを交換するようにレプリカセットに指示しています。

4
sysadmin1138