オンラインにする前に Ceph オブジェクト ストレージについて理解する必要があります
Ceph は、オープンソースの分散ストレージ ソフトウェアとして、ストレージのローカル ストレージ リソースを使用でき、ストレージの高信頼性、高性能、高拡張性に対する企業のニーズを満たし、企業での支持が高まっています。数多くの制作実践を経て、Ceph の設計コンセプトは先進的で、機能が包括的で、使用が柔軟で柔軟性があることが証明されました。ただし、Ceph のこれらの利点は、企業にとっては諸刃の剣でもあり、適切に管理されていれば、十分なスキルがなく、Ceph の性質を理解していないと、場合によっては大きな問題を引き起こす可能性があります。以下にそのようなケースを共有したいと思います。
これらの現象から判断すると、これらはすべてlevelDBに関連しています。大量のメモリ割り当てはこれに関連していますか? levelDB に関連するコードをさらに確認したところ、トランザクションで levelDB イテレータが使用されると、イテレータによるレコードへのアクセス中にメモリが継続的に割り当てられ、イテレータが使い果たされるまですべてのメモリが解放されないことがわかりました。この観点から見ると、反復子によってアクセスされるレコードの数が非常に多い場合、反復処理中に大量のメモリが割り当てられることになります。これに基づいて、バケット内のオブジェクトの数を調べたところ、いくつかのバケット内のオブジェクトの数が 2,000 万、3,000 万、5,000 万に達しており、これらの大きなバケット インデックス オブジェクトの保存場所が偶然だったことがわかりました。問題が発生した場所の SSD ディスク OSD。大量のメモリ消費の原因が判明したはずです。これは大きな進歩です。ここ 2 日の 21:00 には、ユーザー全員が「」と感じています。大きな問題だ」。彼らは48時間近く戦い続けており、兄弟たちの目は赤く腫れている。立ち止まって休まなければ、夜明け前に倒れてしまう兄弟もいるだろう。
31日8時半、兄弟は再び戦闘に入った。
別の問題があります。それは、一部の OSD は長い起動プロセスを経て、load_pg が完了した後に最終的に自殺によって終了します。 cephのコードを読むと、長時間スケジュールされていないことによるタイムアウトにより一部のスレッドが自殺していることが確認されました(おそらくlevelDBスレッドが長時間CPUを占有するため)。 ceph 構成には filestore_op_thread_suicide_timeout パラメータがあります。テストと検証を通じて、このパラメータを大きな値に設定すると、この種の自殺を回避できます。再び少し明るくなり、時計は12時半を指していました。
一部のプロセスは開始後も最大 10GB のメモリを占有します。この問題が解決されない場合、SSD ディスク OSD がプルアップされても、同じサーバー上の他の SATA ディスク OSD の動作が影響を受けます。メモリが不足しています。兄弟たち、頑張ってください、これは夜明け前の暗闇です、あなたはそれを乗り越えなければなりません。情報をチェックする人もいれば、コードを調べる人もいて、最終的に 14 時 30 分に ceph 情報ドキュメントからメモリを強制的に解放するコマンドを見つけました: ceph Tell osd.* heap release このコマンドは、プロセスが終了した後に実行できます。 OSD プロセスによって占有されている過剰なメモリの解放を開始しました。誰もが非常に興奮し、すぐにテストして、実際に効果があることを確認しました。
SSD ディスク OSD が起動して実行されると、他の SSD ディスク OSD プロセスが終了します。これは主に、データが移行された OSD がその後に関連するレコード情報を削除するためです。データが移行され、levelDB がオブジェクトのメタデータ レコードを削除するようになります。大きすぎるバケット インデックス オブジェクトが見つかると、levelDB は反復子を使用してオブジェクトのメタデータ レコードを走査します。これにより、過剰なメモリ消費が発生し、サーバー上で OSD プロセスが発生します。異常であること。
上記の分析に基づいて、約 2 時間にわたる議論とデモンストレーションを繰り返した結果、次の緊急措置を策定しました:
1. クラスターに noout フラグを設定し、PG の移行を許可しません。 PG が移行される可能性があります。PG が移動された後、OSD は PG 内のオブジェクト データを削除し、PG 内に大きすぎるバケット インデックス オブジェクトがある場合、オブジェクト メタデータ レコードを削除します。イテレータがメタデータ レコードを走査するために消費されます。
2. SSD に対応する OSD を保存し、できるだけ早くシステムを復元するために、SSD に対応する OSD プロセスを開始するときに、起動パラメーター filestore_op_thread_suicide_timeout を追加し、大きな値を設定します。障害のある OSD がプルアップされると、一連の LevelDB プロセスが CPU を占有し、スレッドのスケジュールがブロックされます。Ceph には、このパラメータで設定された時間が経過してもスレッドがスケジュールされていない場合があります。スレッドのデッドロックであると判断されます。スレッドのデッドロックによるプロセスの自殺を回避するには、このパラメータを設定する必要があります。
3. メモリが限られている現在の状況では、OSD プロセスの起動を高速化するために、スワップ パーティションを SSD ディスクに調整します。
4. スケジュールされたタスクを開始し、コマンド ceph Tell osd.* heap release を定期的に実行して、OSD によって占有されているメモリを強制的に解放します。
5. SSD に対応する OSD に問題がある場合は、以下の手順に従ってください:
a) まず、サーバー上のすべての OSD プロセスを停止して、すべてのメモリを解放します。
b) 次に、OSD プロセスを開始し、filestore_op_thread_suicide_timeout パラメーターを実行し、72000 などの大きな値を指定します。
c) OSD の起動プロセスを観察します。load_pgs が実行されたら、すぐに ceph Tell osd.N heap release コマンドを手動で実行して、占有されているメモリを強制的に解放できます。
d) クラスターのステータスを観察し、すべての PG のステータスが正常に戻ったら、他の SATA ディスクに対応する OSD プロセスを開始します。
上記の手順に従って、17:30 から OSD プロセスを 1 つずつ再開しました。この間、非常に大きなバケット インデックス オブジェクトのバックフィルに時間がかかりました。がブロックされ、アプリケーションのビジネス リクエストがタイムアウトになります。これは、単一のバケットに多数のオブジェクトを保存することによる悪影響でもあります。
5 月 31 日 23:00 に、すべての OSD プロセスが最終的に復旧しました。障害からシステムの復旧に成功するまで、私たちは 72 時間にわたって懸命に働きました。全員が顔を見合わせ、興奮しすぎました。この問題に対する完全な解決策を検討し策定するために熱心に取り組んでください。 解決策:
1. サーバーのメモリを 64 GB に拡張します。
2. 新しいバケットの場合、ストレージ オブジェクトの最大数を制限します。
3. 十分なテストの後、過度に大きい単一バケットインデックスオブジェクトの問題を解決するために、Ceph バージョン 0.94 がバージョン 0.94 にアップグレードされました。
4. 大規模なトランザクションでは、セグメント化された反復を通じて、反復子は一定数のレコードの走査を完了した後にその現在の反復位置を記録し、それを解放し、走査を続ける新しい反復子を再作成します。最後の反復の位置から、反復子のメモリ使用量を制御します。
決して過去を忘れず、未来から学び、経験と教訓から学びましょう。以下の点をまとめます:
1. システムはオンラインにする前に完全にテストする必要があります
A 社のシステムをオンラインにする前に、ceph はすでにテストを行っています。完全な機能、パフォーマンス、および例外のテストは行われていますが、大量のデータを使用したストレス テストはありません。これまでに数千万のオブジェクトが 1 つのバケットでテストされていた場合、この隠れた危険性が事前に発見される可能性があります。
2. 運用保守プロセスのあらゆる異常には、時間内に注意を払う必要があります
この場合、残念なことに、問題が発生する少し前に、運用保守部門はすでに SSD の異常の問題を報告していました。もしその時点でそれが行われていなかったら、詳細な分析を通じて問題の根本原因を見つけ出し、事前に回避策を立てることができるかもしれません。
3. ceph の性質を確認する
どのソフトウェア製品にも対応する仕様制限があり、ceph も例外ではありません。 ceph アーキテクチャとその実装原理を事前に深く理解し、単一のバケットに多数のオブジェクトを過剰に保存することによる悪影響を理解し、事前に計画を立てることができれば、この場合に遭遇する問題は解決されます。起こらない。 RGW は、ユーザー レベルおよびバケット レベルのクォータを含むクォータを非常に包括的にサポートしており、単一のバケットに保存できるオブジェクトの最大数を設定できます。
4. コミュニティの最新の進捗状況を常に追跡します
Ceph バージョン 0.94 では、バケット インデックス オブジェクトのシャード機能がサポートされており、バケット インデックス オブジェクトを複数のシャード オブジェクトに分割して保存することができます。単一バケット インデックス オブジェクトが大きすぎる問題。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









このウェブサイトは3月7日、ファーウェイのデータストレージ製品ラインの社長である周岳峰博士が最近MWC2024カンファレンスに出席し、特にウォームデータ(WarmData)とコールドデータ(ColdData)用に設計された新世代のOceanStorArctic磁電ストレージソリューションをデモンストレーションしたと報じた。ファーウェイのデータストレージ製品ラインの社長である周岳峰氏は、一連の革新的なソリューションをリリースした 画像出典: このサイトに添付されているファーウェイの公式プレスリリースは次のとおりです: このソリューションのコストは磁気テープのコストより 20% 低く、そのコストは磁気テープのコストよりも 20% 低くなります。消費電力はハードディスクよりも90%低いです。外国のテクノロジーメディアのblocksandfilesによると、ファーウェイの広報担当者も磁気電子ストレージソリューションに関する情報を明らかにした:ファーウェイの磁気電子ディスク(MED)は磁気ストレージメディアの主要な革新である。初代ME

Vue3+TS+Vite 開発のヒント: データを暗号化して保存する方法 インターネット技術の急速な発展に伴い、データ セキュリティとプライバシー保護がますます重要になっています。 Vue3+TS+Vite 開発環境では、データをどのように暗号化して保存するかが、すべての開発者が直面する必要がある問題です。この記事では、開発者がアプリケーションのセキュリティとユーザー エクスペリエンスを向上させるのに役立つ、一般的なデータ暗号化とストレージのテクニックをいくつか紹介します。 1. データ暗号化 フロントエンド データ暗号化 フロントエンド暗号化は、データ セキュリティを保護するための重要な部分です。よく使われる

JSON (JavaScriptObjectNotation) は、Web アプリケーション間のデータ交換の一般的な形式となっている軽量のデータ交換形式です。 PHP の json_encode() 関数は、配列またはオブジェクトを JSON 文字列に変換できます。この記事では、PHPのjson_encode()関数の構文、パラメータ、戻り値、具体的な例などの使い方を紹介します。構文 json_encode() 関数の構文は次のとおりです。

MySQL クエリ結果の配列をオブジェクトに変換する方法は次のとおりです。 空のオブジェクト配列を作成します。結果の配列をループし、行ごとに新しいオブジェクトを作成します。 foreach ループを使用して、各行のキーと値のペアを新しいオブジェクトの対応するプロパティに割り当てます。新しいオブジェクトをオブジェクト配列に追加します。データベース接続を閉じます。

Git は、高速で信頼性が高く、適応性に優れた分散バージョン管理システムです。分散型の非線形ワークフローをサポートするように設計されており、あらゆる規模のソフトウェア開発チームに最適です。各 Git 作業ディレクトリは、すべての変更の完全な履歴を備えた独立したリポジトリであり、ネットワーク アクセスや中央サーバーがなくてもバージョンを追跡できます。 GitHub は、分散リビジョン管理のすべての機能を提供する、クラウド上でホストされる Git リポジトリです。 GitHub は、クラウド上でホストされる Git リポジトリです。 CLI ツールである Git とは異なり、GitHub には Web ベースのグラフィカル ユーザー インターフェイスがあります。これは、他の開発者との共同作業や、スクリプトへの変更の追跡などのバージョン管理に使用されます。

Python の __contains__() 関数を使用して、オブジェクトの包含操作を定義します。Python は、さまざまな種類のデータを処理するための多くの強力な機能を提供する、簡潔で強力なプログラミング言語です。その 1 つは、__contains__() 関数を定義してオブジェクトの包含操作を実装することです。この記事では、__contains__() 関数を使用してオブジェクトの包含操作を定義する方法とサンプル コードを紹介します。 __contains__() 関数は Pytho です

sessionStorage を正しく使用して機密情報を保存する方法には、特定のコード サンプルが必要です。Web 開発でもモバイル アプリケーション開発でも、ユーザーのログイン資格情報や ID 番号などの機密情報を保存して処理する必要があることがよくあります。フロントエンド開発では、sessionStorage の使用が一般的なストレージ ソリューションです。ただし、sessionStorage はブラウザベースのストレージであるため、保存されている機密情報が悪意を持ってアクセスされ、使用されないように、いくつかのセキュリティ問題に注意を払う必要があります。

PHP では、配列は順序付けられたシーケンスであり、要素はインデックスによってアクセスされます。オブジェクトは、new キーワードによって作成されたプロパティとメソッドを持つエンティティです。配列へのアクセスはインデックス経由で、オブジェクトへのアクセスはプロパティ/メソッド経由で行われます。配列値が渡され、オブジェクト参照が渡されます。