0

実稼働サーバーと開発サーバーがあります。本番サーバーはmongodを実行しており、私の開発サーバーは2つのインスタンスを実行しています.1-本番用の「スレーブ」として(replicaSetを使用)。これにより、データが複製され、バックアップが容易になります。2 - 「マスター」。私の開発コレクション(slaveOkayなどに関して、スレーブインスタンスを使用できませんでした)。

どちらも独自のpidファイル、データフォルダー、すべてを持っています。これは、1年以上も問題なく機能しています。

残念ながら、最後のバージョン以降、1 つのインスタンスを開始するたびに、もう 1 つのインスタンス (製品スレーブ <> 開発マスター) が終了するようです。どちらが先に開始されても、もう一方は必ず停止します。

mongo が突然このように動作する理由と、問題の解決策を知っている人はいますか? マスター インスタンスを使用して開発コレクションを格納することは、さまざまな理由から、私にとって実際には選択肢ではありません。

これが物事をもう少し明確にすることを願っています:

production writes --> production [master] --[replicaSet]--> development instance 1 [slave]
development writes --> development instance 2 [master]

ありがとう!

4

1 に答える 1

0

後世のための私自身の質問に答える:

mongo バージョン 2.4.6 の init スクリプトには特殊性があるようです。次の式で PID ファイルを決定します。

PIDFILE=`awk -F= '/^dbpath\s=\s/{print $2}' "$CONFIGFILE"`

これは、等号の前後に空白がある dbpath を探します。デフォルトの構成ファイルには「dbpath=/var/lib/mongo」が含まれているため、この式の結果は空です。特定の .pid ファイルを指定せずに、init スクリプトがデフォルトの .pid ファイルの場所を使用しているだけだと思います。通常 (1 つのインスタンスの場合)、これによる影響はありません。私の場合、他のmongoインスタンスが終了します。

私はこれまで常に「pidfilepath」構成ディレクティブを使用してきました (最初にインストールしたときに既にそこにあったかどうかは覚えていません)。したがって、基本的には、初期化スクリプトを次のように更新しました (「\s」が欠落していることに注意してください)。

PIDFILE=`awk -F= '/^pidfilepath=/{print $2}' "$CONFIGFILE"`

次に、構成ステートメントにスペースが含まれていないことを確認しました。

 pidfilepath=/var/run/mongo/mongod-name.pid  

これは私の問題を解決します。同じ状況にある他の人にも同じことができることを願っています。

とにかく pid ファイルに dbpath を使用するのはなぜですか?

于 2013-09-05T14:01:28.633 に答える