アップグレード
MongoDB 1.8は標準の増分本番リリースであり、MongoDB 1.6のドロップイン置換として機能します。ただし、次の例外があります。
レプリカセットノードは、「 レプリカセットのアップグレード 」で説明されているように、特定の順序でアップグレードする必要があります。
mapReduceコマンドは1.8で変更されたため、以前のリリースとの互換性がなくなりました。mapReduceは一時コレクションを生成しなくなりました(つまり、keepTempは削除されました)。 今後は、outには常に値を指定する必要があります。mapReduceドキュメントでoutフィールド オプションを参照してください。 MapReduce を使用する場合は、クライアント ドライバーの最新バージョンも必要になる可能性が高くなります。
準備
アップグレードする前にすべてのリリースノートをお読みください。変更がデプロイに影響しないことを確認してください。
スタンドアロンのアップグレード mongod
v1.8.x をダウンロードMongoDBダウンロード ページからのバイナリ。
mongodインスタンスをシャットダウンします。既存のバイナリを1.8 .x
mongodバイナリ。MongoDB を再起動します。
レプリカセットのアップグレード
1.8 .x セカンダリは1.6から複製できます。x プライマリ。
1.6 .x セカンダリは1.8から複製できません。x プライマリ。
したがって、レプリカセットをアップグレードするには、最初にすべてのセカンダリを置き換え、次にプライマリを置き換える必要があります。
たとえば、プライマリ、アービタ、および複数のセカンダリを含むレプリカセットがあるとします。 セットをアップグレードするには、次の手順を行います。
アービタの場合:
アービタをシャットダウンします。
1.8.x で再起動MongoDBダウンロード ページ からのバイナリ。
新しいプライマリが選出されないように 構成を変更 (任意)。
セットのノードのシャットダウンを開始すると、新しいプライマリが選出される可能性があります。 これを防ぐために、アップグレードする前にすべてのセカンダリに優先順位を
0に付与し、その後、それらを元に戻すことができます。 その方法は、次のとおりです。現在の設定を記録します。
rs.config()を実行し、結果をテキストファイルに貼り付けます。すべてのセカンダリの優先順位が
0になるように構成を更新します。 例:config = rs.conf() { "_id" : "foo", "version" : 3, "members" : [ { "_id" : 0, "host" : "ubuntu:27017" }, { "_id" : 1, "host" : "ubuntu:27018" }, { "_id" : 2, "host" : "ubuntu:27019", "arbiterOnly" : true } { "_id" : 3, "host" : "ubuntu:27020" }, { "_id" : 4, "host" : "ubuntu:27021" }, ] } config.version++ 3 rs.isMaster() { "setName" : "foo", "ismaster" : false, "secondary" : true, "hosts" : [ "ubuntu:27017", "ubuntu:27018" ], "arbiters" : [ "ubuntu:27019" ], "primary" : "ubuntu:27018", "ok" : 1 } // for each secondary config.members[0].priority = 0 config.members[3].priority = 0 config.members[4].priority = 0 rs.reconfig(config)
各セカンダリ :
セカンダリをシャットダウンします。
1.8.x で再起動MongoDBダウンロード ページ からのバイナリ。
構成を変更した場合は、元の状態に戻します。
config = rs.conf() config.version++ config.members[0].priority = 1 config.members[3].priority = 1 config.members[4].priority = 1 rs.reconfig(config) プライマリ(最後の 1.6サーバー)をシャットダウンし、1.8.x で再起動します。MongoDBダウンロード ページ からのバイナリ。
シャーディングされたクラスターのアップグレード
バランサーをオフにします。
mongo <a_mongos_hostname> use config db.settings.update({_id:"balancer"},{$set : {stopped:true}}, true) シャードがレプリカセットである場合は、上記の「 レプリカセットのアップグレード 」の手順に従います。
シャードが単一の
mongodプロセスである場合は、シャットダウンしてから 1.8 で再起動します。xMongoDBダウンロード ページ からのバイナリ。
mongosプロセスをシャットダウンします。1.8.x で再起動MongoDBダウンロード ページ からのバイナリ。
各コンフィギュレーションサーバー:
コンフィギュレーションサーバー プロセスをシャットダウンします。
1.8.x で再起動MongoDBダウンロード ページ からのバイナリ。
バランサーをオンにします。
use config db.settings.update({_id:"balancer"},{$set : {stopped:false}})
1.6に戻る
何らかの理由で1.6に戻す必要がある場合は、上記の手順を逆方向に行います。 1.8で実行中に4 MB を超えるドキュメントを挿入していないことに注意してください(最大サイズが16 MB に増加しました)。 がある場合、サーバーがそれらのドキュメントを読み込もうとするときにエラーが発生します。
ジャーナリング
1.8を使用した後に1.6に戻る ジャーナリングは正常に機能します。ジャーナリングではデータファイルの形式は何も変更されないためです。 ジャーナリング を有効にして、 1.8 .x を実行していて、 1.6に切り替えるとします。 次の 2 つのシナリオがあります。
1.8 .x で正常に シャットダウンすると、 1.6 mongod バイナリを使用して再起動するだけ。
1.8 .x の場合 シャットダウンが正常に行われなかった場合、 1.8 .x を再度起動し、ジャーナル ファイルを実行させて、クラッシュ時に存在した可能性のある障害(不完全な書込み)を修正します。 次に1.8 .x をシャットダウンします 正常に実行され、 1.6 mongod バイナリを使用して再起動されます。
変更点
ジャーナリング
MongoDB は、ストレージ エンジンの高速クラッシュ回復と耐久性を確保するために、先行書き込みジャーナリングをサポートするようになりました。 ジャーナリング を有効にすると、mongod コレクション を修復する必要なく、クラッシュが発生した後にすぐに再起動できます。集計パイプラインを使用すると集計を実行できます。
スパース インデックスとカバード インデックス
スパース インデックスとは、インデックスで指定されたフィールドを含むドキュメントのみを含むインデックスです。 フィールドが欠落しているドキュメントはインデックスに表示されません。 これにより、コレクション内のドキュメントのサブセットのみを含むフィールドのインデックスのインデックス サイズを大幅に縮小できます。
カバード インデックスを使用すると、クエリがインデックスに含まれるフィールドのみを選択する場合に、MongoDB はインデックスから完全にクエリに答えることができます。
インクリメンタル mapReduce サポート
mapReduceコマンドは、既存のコレクションの段階的な更新を可能にする新しいオプションをサポートします。 以前は、mapReduce ジョブの出力は一時コレクションまたは名前付き永続コレクションに出力され、新しいデータで上書きされていました。
MapReduce ジョブの出力のいくつかのオプションが追加されました。
MapReduce の出力は既存のコレクションにマージできます。 reduce フェーズからの出力は、出力コレクション内の既存のキーが既に存在する場合は、置き換えます。 他のキーはコレクション内に残ります。
既存のコレクションの内容を使用して出力を再削減できるようになりました。 reduce フェーズによる各キー出力は、出力コレクション内の既存のドキュメントとともに削減されます。
既存の出力コレクションを MapReduce ジョブの新しい結果に置き換えることができます(以前のリリースで永続的な出力コレクションを設定するのと同じ)
ジョブの結果を保持せずに MapReduce をインラインで計算し、結果を呼び出し元に返すことができます。 これは、結果が8 MB に制限されることを除いて、以前のリリースで生成された一時コレクションと同様です。
詳しくは、 mapReduceドキュメントのoutフィールド オプションを参照してください。
追加の変更と機能の強化
1.8.1
より大きなチャンクを移動する場合のシャーディング移行を修正しました。
バックグラウンド インデックス作成で耐久性を修正しました。
多数の受信接続による mongos の同時実行の問題を修正しました。
1.8.0
1.7からのすべての変更 .x シリーズ。
1.7.6
バグ修正。
1.7.5
拡張割り当ての改善。
getLastErrorシャーディングの改善。
1.7.4
mongosはslaveOkクエリを レプリカセット 内の セカンダリ にルーティングします。新しい
mapReduce出力オプション。
1.7.3
最初にカバード インデックスのサポート。
個別の では、可能な場合、インデックスのデータを使用できます。
mapReduceは、結果を既存のコレクションにマージまたは削減できます。mongodはネットワーク使用量を追跡し、mongostatはネットワーク使用量を表示します。 mongostat を参照してください。シャーディング安定性の向上。
1.7.2
$rename演算子を使用すると、ドキュメント内のフィールドの名前を変更できます。db.eval()ブロックしないでください。シャーディングを持つ地理クエリ。
mongostat --discoverオプションチャンク分割の強化。
レプリカセット ネットワークの拡張機能は、nat の背後にあります。
1.7.1
多くのシャーディング パフォーマンスの機能強化。
埋め込み配列のプリミティブに対する
$elemMatchのサポートを強化しました。範囲クエリの クエリオプティマイザ の機能強化。
ウィンドウ サービスの機能強化。
レプリカセットのセットアップを改善しました。
$pull配列内のプリミティブを操作します。
1.7.0
重い挿入負荷でのシャーディング パフォーマンスの向上。
レプリカセットの遅延サポート。
local.system.replset.settings.getLastErrorDefaults(レプリカセット用)。shell でのオートコンプリート。
地理検索の球面距離。
1.6.1と1.6.2によるすべての修正。