mongosのクラッシュ後に再起動できない問題の解決法
前置き
公式ドキュメントです。 https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos
mongos は MongoDB シャードの略で、アプリケーションレイヤーにクエリーリクエストを提供し、MongoDB シャード内のデータの場所を決定するルーティングサービスです。アプリケーション層から見ると、mongos は MongoDB のインスタンスと変わらない振る舞いをします。
詳細な設定パラメータは、公式ドキュメントにざっと目を通し、必要なときに調べればよい。
最近、様々なユーザーがSERVER-52654に遭遇しているようなので、いくつか注意点を挙げておきます。
影響を受けるバージョン
すべてのクラスタはMongoDB 4.2.2+をシャーディングで使用しています。
問題現象
コンフィグノードの最後の再起動、または再選択から90日または180日経過すると、すべてのモンゴルが同時にクラッシュし、再起動できなくなります。
不具合の原因
この問題は、configノードが署名キーを適切に更新しないために発生します。通常、2つの鍵があり、1つは90日後に期限切れとなり、もう1つは180日後に期限切れとなります。server-52654はconfigが適切に鍵を更新しないため、既存の鍵の期限が切れた後にmongosがクラッシュします。
修正バージョン
この問題は、4.2.12で修正される予定です。4.2.12をリリースしました。
規約
90日以内に一度、プライマリノードをstepDownすることでこの問題を回避することができます。署名鍵の有効期限を正確に知りたい場合は、任意のconfigノードに接続し、以下のスクリプトを実行することができます。
db.getSiblingDB("admin").system.keys.find().map(k => { return { _id: k._id, purpose: k.purpose, expiresAt: new Date(k.expiresAt. getTime()*1000) }})
鍵が2つ存在する場合(1つは90日後、もう1つは180日後)、今のところ何もする必要はありません。鍵が1つしかない場合は、90日以内にconfigマスターノードを切り替えるためにstepDownを実行する必要があります。
system.keys コレクションにアクセスするには特別なパーミッションが必要なため、パーミッションの問題が発生した場合は、以下のスクリプトで必要なロールを作成する必要があります (ADMIN を使用しているユーザーに置き換えます)。
use admin;
db.createRole({
role: "query_keys",
privileges: [
{ resource: { db: "admin", collection: "system.keys"}, actions: [ "find" ] },
],
roles: [ ]
});
db.grantRolesToUser("ADMIN", ["query_keys"])
有効期限はconfig masterノードが再選択された後に新たに生成されますが、上記のスクリプトでリフレッシュされたかどうかを確認することは可能です。
概要
今回の記事は、mongosのクラッシュ後に再起動できない問題を解決する方法についてです。mongosのクラッシュ後に再起動できないことについては、スクリプトハウスの過去記事を検索するか、引き続き以下の関連記事を閲覧してください。
関連
-
springboot + mongodbによる緯度経度座標による平坦地マッチング方式
-
一括バックアップ・リストア インポート・エクスポート MongoDBデータ方式
-
Aliクラウドサーバーにmongodbを導入する詳細な流れ
-
mongodbデータベースの移行に伴う変更の解決策
-
MongoDB の一般的なクエリ文のサンプルコード
-
MongoDBでよく使われるcrudステートメント
-
MongoDBバランサーの使い方を解説
-
MongoDBのレンジスライスキーとハッシュスライスキーについて説明します。
-
Navicat Premiumでmongodbと接続する詳細チュートリアル
-
MongoDB監視ツール mongostat と mongotop の使用方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン