問題タブ [mongodb-replica-set]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mongodb - mongo でレプリカ セットを停止すると、プライマリが回復状態になります
レプリカ セットのノードを停止して再起動すると、プライマリ ノードのステータスが「回復中」になります。
レプリカ セットを作成し、承認なしで実行しています。承認を使用するために、ユーザー「db.createUser(...)」を追加し、構成ファイルで承認を有効にしました。
レプリカ セットを停止する前 (セキュリティ パラメータを追加せずにクラスターを再起動しても)、rs.status() は次のように表示されます。
この構成の使用を開始するために、次のように各ノードを停止しました。
このシャットダウン後、 の出力を確認してプロセスが存在しないことを確認しましたps -ax | grep mongo
。
しかし、ノードを再起動して資格情報でログインすると、rs.status() は次のことを示します。
なんで?おそらく、シャットダウンは mongod を停止する良い方法ではありません。ただし、「kill pid」も使用してテストしましたが、再起動しても同じ状態になります。
この状態では、クラスターを修復する方法がわかりません。再び開始しました (dbpath ファイルの削除とレプリカ セットの再構成)。「--repair」を試しましたが、うまくいきませんでした。
私のシステムに関する情報:
- モンゴのバージョン: 3.2
- ルートとしてプロセスを開始しますが、おそらく「mongod」ユーザーとして開始する必要がありますか?
- これは私の開始コマンドです:
mongod --conf /etc/mongod.conf
- keyFile 構成が機能しません。「--keyFile /path/to/file」を追加すると、「
子プロセスをフォークしようとしています。サーバーの接続準備が整うまで待機しています。」このファイルにはすべての権限がありますが、keyFile を使用できません。 1 台のマシンの mongod.conf からの「net.bindIp」構成の例:
/li>
mongodb - 解析サーバー - シャーディングとレプリケーションを無視して MongoDB に接続できない
3 つのシャードを持つ MongoDB シャード クラスターを AWS にデプロイします。各シャードには、3 つのメンバー、1 つの構成サーバー、および 3 つの mongos を持つ replicaSet があります。
ここでは、シャードが 3 つの EC2 インスタンスにどのように分散されているかを示します
replicaSet メンバーが同じインスタンス上にないことがわかります。
しかし、たとえばmd0
ダウンした場合、API (解析サーバー) はクラスターとの接続を失いmd1
ますmd2
が、まだ生きていて、新しいプライマリを既に選出しています。すべての EC2 インスタンスは、複製により、シャード コレクションを含むすべてのコレクションのコピーを保持します。
接続文字列は次のようになります
クラスター/シャードの構成に問題があると思いますか、それとも他のmongosに接続しようとする代わりに接続を維持するAPIに関連する問題ですか?
mongodb - Mongodb 公式イメージ errno:111 レプリカセットを作成しようとしたときに接続が拒否されました
公式の MongoDB Docker イメージを使用して、1 つのコンテナー内に 3 セットのレプリケーション クラスターを作成しようとしています。
この公式ガイドに従って、次の dockerfile を作成しました。
しかし、実行すると、次のエラーが発生します。
元の mongo イメージを実行して同じ CMD を実行しようとすると、同じ結果が得られません。
Dockerfileに追加しようとしUSER root
ましたが、まったく役に立ちませんでした。
これを機能させるにはどうすればよいですか?
アップデート
- から始まるイメージを作成しようとしましたが
ubuntu
、同じ結果です - まあ、これはある種の docker ファイルのアクセス許可の問題のようです。コードを bash スクリプトに移動してそこから実行すると、すべてが正常に機能しました。これは、これが発生する理由に対する回答ではなく、必要な場合の解決策です。
mongodb - Meteor 1.4.1.1 のレプリカ セットの正しい MONGO_URL 設定は何ですか?
今朝、更新した Meteor プロジェクトを Heroku にデプロイしに行きました。
から にアップグレードし1.1.0.3
ていました1.4.1.1
。
Meteor Buildpack Horseを使用すると、すべてが正しくインストールされましたが、アプリケーションでエラーが発生しました。
MongoError: シード リストに mongos プロキシが含まれていません。レプリカセット接続では、URI またはオプション オブジェクトでパラメーター replicaSet を指定する必要があります。mongodb://server:port/db?replicaSet=name
私MONGO_URL
はmongodb://u:p@url1:port,url2:port/db
そうだったので、次のように変更しました。
mongodb://u:p@url1:port,url2:port/db?replicaSet=set-name
replicaSet パラメータを間違えると、このエラーが発生します。
MongoError: レプリカセットにプライマリが見つかりません
レプリカセットが存在しなかったため、これは賢明なようですが、正しい値を入力すると、シードリストにプロキシが含まれていないという元のエラーが再び表示されます。
私のレプリカ セットの名前にはダッシュが含まれていますが、それが関連しているかどうかはわかりません。
私が試したこと
Mongo クライアントでこのエラーをスローする URL を使用してみましたが、インスタンスに正常に接続できるため、すべての詳細が正しいことがわかります。
また、replicaSet をエスケープしようとしたため?replicaSet=set\-name
、MongoError: no primary found in replicaset
エラーが発生しました。
MongoDB プロバイダーとのオープン チケットを持っていますが、これは Meteor/me の問題であると思われます。
mongodb - MongoDB プライマリが戻ってこない
Windows で実行されている MongoDB 3 メンバー レプリカ セットがあります。プライマリ サーバー (S1) がダウンすると、セカンダリ サーバーが正しく選択されます。プライマリ サーバーが復旧すると、レプリカ メンバーは無効な状態のままになります。
その後、セカンダリが数秒ごとにプライマリとセカンダリを切り替え続けるため、アプリケーションが不安定になります。
プライマリ サーバーを元に戻す唯一の方法は、rs.reconfig(c) を実行することです。
設定ファイルに問題は見つかりませんでした。
どんな助けでも大歓迎です。
更新: 現在の構成は次のとおりです。
ホスト名ではなく IP アドレスを使用する必要がありますか?
更新 2:
これは、プライマリ (m3.companyName.com - IP 1.1.1.1) の再起動時から、他のサーバー (m2.companyName.com - IP 2.2.2.2) に移動して手動で rs を実行するまでのログです。 .reconfig()。
私が気づいた最も明白なことは、「そのようなホストは認識されていません」というエラーです。Windows が名前を解決する前に、Mongo が起動しようとしている可能性がありますか?
mongodb - Docker コンテナー内の MongoDB レプリカ セットの初期化中にエラーが発生しました
次のコマンドを使用して、レプリカ セットを使用して MongoDB Docker コンテナーを作成しました。
コンテナが実行を開始します。
次に、次のコマンドを使用して、レプリカ セットを開始しようとします。
しかし、「すでに初期化されています」というエラーメッセージが表示されます。
rs.status()コマンドでレプリカ セットの状態を確認すると、
レプリカ セットの構成が無効であると表示されます。
mongodb - mongo レプリケーション設定はどこに保存されますか?
mongo を完全に再インストールした後も、以前のレプリカ セットの構成が記憶されています。これはどこに保存されていますか?
プロジェクトのユーザーアカウントを使用して、Linuxサーバーにmongoをそのユーザーが所有するディレクトリにインストールしました。レプリケーションをセットアップし、正常に動作しました。次に、いくつかの細かいインストール ポイントをテストするために、mongo ディレクトリ全体を削除し、再インストールを行いました。mongo に入ると、以前のようにレプリケーションが既にセットアップされていることがわかりました。そのため、mongo が情報をどこかに保存しているように見えます。
レプリカ セットの構成を保持していた可能性のあるいくつかの領域を確認しました。
- まず、mongo ディレクトリにありましたが、それは削除されました。
- 一部の従来の Linux 構造では、おそらくルートが所有していますが、プロジェクト ユーザーにはルート アクセス権がなく、同じユーザーが実行する mongo にもアクセスできません。
- プロジェクト ユーザーのホーム ディレクトリ。現在、これにはコマンドライン履歴を含む .dbshell ファイルがありますが、それだけです。関連する他のファイルはありませんでした。
- mongo 構成で指定された場所。しかし、そこには 2 つのパスしか記載されていません。1 つはシステム ログ用 (
systemLog.path
) で、もう 1 つはストレージ用 (storage.dbPath
) で、両方とも削除された mongo ディレクトリを指しています。
mongo がこの構成情報を保存している場所を知っている人はいますか?
php - PHP MongoClient が Mongodb レプリカ セットに接続、接続文字列について
プライマリ ノードが削除された後、MongoDB レプリカ セットへの PHP 接続が失敗します。
5 つのノードを持つ mongodb レプリカ セットを作成しました。mongo1 がプライマリで、その他はすべてセカンダリです。
これが私の接続コードです:
接続文字列の最初のサーバー (今回は mongo1) のサービスを停止するたびに、php ドライバーが接続例外エラーをスローするか、エラーをスローせずに接続の「接続済み」プロパティをスローすることがわかりました。 object は false になります。
php ドライバーがレプリカ セットに正しく接続できなかったようです。
サーバーの位置を入れ替えて、別の実験を試みました。今回の接続文字列は次のとおりです。
この場合、mongo1 は依然としてプライマリです。mongo3 サービスを停止すると、エラーが再び発生します。リストの最初のサーバーのサービスを停止しない限り、すべて問題ないようです。
node.js - mongodb フェイルオーバー接続
mongodb に接続する nodejs アプリがあります。
Mongodb を使用すると、レプリカセット クライアント接続で一定レベルの回復力を提供できます。
たとえば " mongodb://localhost:50000,localhost:50001/myproject?replicaSet=foo
" の場合、クライアントは最初に localhost@50000 に接続し、それが停止した場合は localhost@50001 に切り替えます。
これは問題ありませんが、アプリケーションの起動時に 2 つの mongo のいずれかが停止している場合、アプリケーションは停止します - 接続できませんというエラーが発生します。
私が考えることができる唯一の解決策は、非アクティブなインスタンスを除外するようにURLを再フォーマットすることですが、これを避けたいと思います...
何か案は?
ありがとう