[セファロ]

序文

コンテナの早期実現には、セファロは、貯蔵容器として使用する予定。コンテナへの相対的なストレージ仮想化、の母親は、店にも重要な役割を果たしたと述べました。

以下の理由のために選択されるようCEPH貯蔵容器。

  1. ポストスケールを促進します。
  2. セファロは同時に、高速ストレージ、オブジェクトストレージ、ファイルストレージ、ブロックストレージコンテナをサポートすることができ、後者は、OSSオブジェクトストレージサービスを置き換えるために使用されます。

これらの理由から、セファロ分散ストレージの使用は良い選択する必要があります。ストレージからコンテナの開始の最初のステップ。

 

セファロ公式文書(英語):https://docs.ceph.com/docs/master/start/intro/

セファロ公式文書(中国語):http://docs.ceph.org.cn/start/intro/

 

セファロについて

あなたはクラウドやブロックデバイスのためのセファロオブジェクト・ストレージ・プラットフォームを提供したい、または、セファロファイルシステムを展開するかどうかを1つのセファロノード、ネットワークおよびセファロストレージクラスタを持つすべてのセファロストレージクラスタ開始を展開します。

 

セファロストレージの作成、少なくとも次のサービス:

  1. Aセファロモニター
  2. OSDの2つのデーモン

 

あなたはセファロファイルシステムクライアントを実行したときと、あなたは多くてはならない、このような需要のシナリオとしてセファロファイルシステムを使用して、メタデータサーバ(メタデータサーバ)を持っている必要がありますが、このコンテナのプロジェクトは、ファイル・システム・ストレージを伴わないだろうしたがって、下に取得していません。

 

 

CEPHのOSD:CEPH OSDデーモン(CEPH OSD)機能データを格納する、処理する、回復データをコピーし、埋め戻し、リバランス、および他のOSDデーモンハートビートを調べることによってCEPHモニタに情報を監視提供します。セファロクラスタセットが(そこセファロデフォルトの3つのコピーがありますが、あなたはコピーの数を調整することができます)クリーン+アクティブな状態を達成するために2つのコピー、少なくとも二つのOSDデーモンクラスタを持っている場合。

理解することができます。データを格納するために1 OSDによるセファロは、セファロのデフォルトのOSDは3ですが、手動で2に設定することができ、少なくとも2健全な状態を達成するためのポッドを可能にするために利用可能であり、OSDデータを実現することができます高可用性。

 

モニター:セファロモニタ示すグラフは、OSD図は、図、CRUSH図1にセット基(PG)を正規化したモニタビューを含む様々なクラスター状態を維持します。CEPHは、すべての状態変化がモニター、OSD、およびPG(エポックと呼ばれる)で発生履歴情報を保存しました。

それは理解することができる。モニタはセファロのモニターで、セファロデータを格納し、記録されたインデックスデータが表示されます。PG /後でCURSHを議論する何のためとして。

 

セファロは、クライアントデータオブジェクト・ストレージ・プールを保存します。CRUSHアルゴリズムを用いて、セファロは、コロケーション基(PG)は、OSDデーモン帰国群を保持指定し、さらにアウトを保持するオブジェクト(Object)を算出することができます。CRUSHアルゴリズムは、セファロストレージクラスタが動的に、リバランスと復元を伸ばすことができます。

公式のワード文書は、セファロ原理をまとめたが、セファロとの最初の接触のために、単純にぎくしゃくして困難です。いくつかのキーワードを要約:オブジェクト、CRUSHアルゴリズム、帰国グループ(PG)、動的にスケーラブル

これは、我々は何が動作する全体的なセファロを理解する必要がありますか?そうでなければ、この質問には、常に私たちの周りになります。

 

データを照会し、この記事は非常に良好であること脂肪の弟の書き込みを発見したことで、それは価値が繰り返しが理解している:西セファロ- CRUSHその点物

[次の記事Pange理論的な知識源と、自分の理解の一部]

 

:まず、質問投げ数歩の合計離れ、セファロクラスタにデータのコピーを保存しますか?

セファロの答えは二つのステップです。

  1. グループ帰国の公式文書であるPGの計算、
  2. コンピューティングOSD

計算を述べたように、それは確かにアルゴリズムがCRUSHそれを呼ばれていないアルゴリズムを持っているでしょうか?

 

PG・コンピューティング

まず、セファロの明確な規定:真ん中のセファロは、すべてが対象です。(参照がオブジェクトに対して行われ、公式文書は、一貫性のあるすべてのオブジェクトが理解しやすい、Pythonのような、すべてが対象です)

例えば、それは簡単な、すべてが、それは、ビデオ、写真、テキストや他のフォーマットであるかどうか、オブジェクトです。

そのルーツを追いかけるために統一されたオブジェクトとしてのビデオデータ、テキスト、写真、セファロそれのすべての形式は、すべてのデータがオブジェクトとしてすべてのバイナリデータをそのディスクに格納されたバイナリデータを、あるかどうか、ではない彼らの形式に区別します。

それはオブジェクトなので、オブジェクトは、オブジェクト名を持つ必要があります。2つのオブジェクト間の区別は、そのオブジェクト名で区別されます。二つのオブジェクトのようなファイル名が、行う場合は?

質問は現在、非常に始まる次のようになります。離れていくつかの手順を彫るセファロクラスタにオブジェクトを格納するために?

既知:セファロクラスタは、正確には、ディスクの山サーバーの数です、しばらくセファロディスク上の各ブロックにOSDとして。

:として文書も簡略化オブジェクトは、数歩の距離OSD彫るに保存されていますか?

 

論理層セファロ

セファロへのオブジェクトを保存プールは中国のチェスボードに例えるならば、プール(プール)である論理層の構築のために、これは、オブジェクトを保存するために使用されるストレージ・プールの仮想化、として、理解することは難しいことではありません、その後、ゴマ配置チェス盤に似たオブジェクトを保存する工程。

:示すような単純な

 

 

プールは再びプールの周りで、破壊ボード上のグリッドに類似しているPG(帰国グループ)の数に分け、すべての正方形がボード全体を構成し、すべてのPGは、プールを構成することれる手段。

 

 

これらの図では、我々はまとめることができます:ファイルがオブジェクトである、オブジェクトは、各PGに保存されているが、より多くのPGは、プールを構成しています

ここでもう一度、質問あなたは何PGを知っているしたいオブジェクトを保存するにはどのように?ここでは、それぞれ、各番号に256 PG、PGの合計が呼び出され、プールRBD名前と仮定0、1、2、3、4

この問題を解決するために、何を初めて目があり、現在のですか?

  1. 別のオブジェクト名
  2. 異なるのPG番号

ここで最初のアルゴリズムセファロの導入について:HASH

オブジェクト名fooとbarのために2つのオブジェクトが、そのオブジェクト名を計算することができます:

  • HASH( 'バー')= 0x3E0A4162
  • HASH( 'FOO')= 0x7FE391A0
  • HASH( 'バー')= 0x3E0A4162

ハッシュアルゴリズムは、HASH後に最も一般的に使用されるアルゴリズムは、オブジェクト名で、我々はHASHによって数字の文字列にオブジェクトの名前を指定することを意味進出力値の文字列を、取得する必要があり、上記の最初の行と三行目は何点と同じですか?同じオブジェクト名のために、計算された結果は常に同じであることを意味するが、オブジェクトの名前は、ハッシュアルゴリズム乱数を計算しません。乱数この乱数は、例えば256のようなPGの総数で除算すると、残りは1〜256の間の1つ256 PGであり、落下し得なければなりません。

式:HASH( 'バー')%PG数

  • 0x3E0A4162%0xFFの===> 0x62
  • 0x7FE391A0%0xFFの===> 0xA0を

上記計算によって、オブジェクトバーが数0x62 PGを保存するために、PG番号は0xA0を中オブジェクトfooに格納されています。オブジェクトのバーは、常にでPG 0x62に格納されます!オブジェクトfooが常にPG 0xA0をの中に保存されます!

現時点では、オブジェクトがPGに保存されている方法をまとめることができます。

乱数を取得するために、オブジェクト名のHASH、その後、値の総数は1- PGの間に入る必要があります与えることを、乱数モジュロPGの総数を使用し、データは常にオブジェクト名を変更しますが、PGに保存されています。

オブジェクトの名前が決定されるので、したがって、そのオブジェクトはまた、決定されたデータPGが格納されています。

このような問題から生じる一意性を決定するために、オブジェクト名、まだかかわらず、オブジェクトデータのサイズのそれを行いますか?

答えはセファロは、コンテンツオブジェクトの実際の大きさだけでなく、フォーマットのいずれかの形式を区別しないである、イエスである、オブジェクト名のみを認識しました。

 

ここではもう少しセファロ説明セファロ実際には、複数のプール、いくつかのPG、以来?それを区別するためにどのようにPG番号、セファロ内部の2つのプールの場合と同じで、セファロがあるうち各プールがありますされます各プールは、例えば、単にRBDプールの番号を付けている第1号、次にセファロ、PGの実際の数を与えるためにプールを構築する数値0を与えられるpool_id+.+PG_idと言うだけで、からなるbarオブジェクトが保存されます0.62このPGは、fooオブジェクトが中に保存されます0.A0で、このPG。その他の名称は、池をPGこと1.12f, 2.aa1,10.aa1のように。

 

セファロの物理層

論理層において、それは、ファイルがPGにセファロに記憶されている方法た既知のショートで、オブジェクト名のハッシュによって、およびPGの総数を法とされ、得られた余りは、対応するPGであり、データは、このPGに記憶されていますホームグループを返します。

そして、物理層で見セファロを取ります。サーバーの数は、サーバー上のディスクの数があり、通常、セファロは、OSDとしてディスクに(実際には、OSDは、プログラム管理対象ディスクである)、OSDの数で構成さそう物理層、私たちの究極の目標は、ディスクにオブジェクトを保存することです、論理レベルで、オブジェクトは、タスクが今することであり、PGに格納されているPGとOSDの開放との間のトンネルを。複数のオブジェクトの組み合わせの束と同じ番号にPG相当、PGパッケージと呼ばれるオブジェクトのこの部分、今はすべてがCRUSHアルゴリズムを実行するために、各OSDの平均に置かれたパッケージの多くは、配置する必要があります:CRUSHはPGを計算します- > OSDマッピング関係

この場合、層だけPG論理アルゴリズムに連結されたオブジェクトは、その2つの式を結論付けることができます。

  • セルID + HASH( 'オブジェクト名')%PG_num - > PG_ID
  • CRUSH(PG_ID) - > OSD

ここでは2つのアルゴリズムのHASHとCRUSHの使用は、どのような違いは、これら2つのアルゴリズムを実行しますか?なぜそれが対応するOSDに直接HASH(PG_ID)を使用していませんか?

HASHへCURSH(PG_ID)==>(PG_ID)%OSD_num ==> OSD

以下は、脂肪の弟の推論です:

  1. あなたはOSDをハングアップする場合は、OSD_num = 1、そしてすべての残りは、この保存されたPGのディスクが変更されたことを、PGの%のOSD_numが変更されます、これは最も簡単な説明、PGからディスク転送のデータであります別のディスクまで、優れたストレージアーキテクチャは、データマイグレーションがCRUSHを行うことができ、ディスクに損傷の量を最小限に抑えるべきであることができます。
  2. あなたが複数のコピーを保存した場合、我々はより多くの出力OSD結果を得ることを期待、HASHは一つだけを得ることができますが、任意の数はCRUSHを取得することができます。
  3. OSDの数が増加した場合、OSD_numはOSDの間で同じPGランダム移動をもたらす、増加し、それは新しいマシンに均一な拡散CRUSHデータを確保することができます。

 

合計ハッシュアルゴリズムマッピングが一対一の関係にのみ適していると、2つの計算された値を変更することができないので、適切ではない場合にPG - > OSDのマップ計算。だから、ここCRUSHアルゴリズムを導入します。

 

CRUSHアルゴリズム

ここCRUSHは細部にソースコードを意図しますが、一例としてCRUSHアルゴリズムを理解していません。

何をすべきかを初めて目:

  • マッピング関係がPGにディスクに保存することができると共に、既存のPG_IDは、OSDにマッピングされました。
  • あなたは3のコピーを保存したい場合は、PGは、3つの異なるOSDにマッピングすることができ、PGは3つのOSD上でまったく同じ内容を保持しています。

 

何であるかを見てみましょう:

  • 互いにPG_ID異なります。
  • OSDはまた、数に言及する場合、互いに異なるOSD_IDあります。
  • 各OSD最大の違いは、それらの容量、容量の4Tまたは800ギガバイトであり、また、重量(質量)として知られる各OSDのOSD重量容量我々に、重量が4T 4,800G 0.8に規定され、それはTであります値ビット単位。

 

自重のOSDを持っているPG_IDをマッピングする方法:問題は今に変身します。ここに描くように変換わらアルゴリズムCRUSHアルゴリズムの直接使用は、それが、看板を拾うOSD重量の右側を指し、ここに署名を意味します。

それは関係なく、常に分のさらにに関して最大​​のOSDこと、データの完全である最大容量のOSDバーを選択することはできませんか?ですから、これらのOSDの摩擦に直接導入CRUSHアルゴリズム摩擦を選ぶ前に:

  • CRUSH_HASH(PG_ID、OSD_ID、R)===>ドロー
  • (ドロー&0xffffの)* osd_weight ===> osd_straw
  • high_osd_strawを拾います

最初の行は、我々は定数としてRを言うものとし、最初の行は、実際にこするこする事はやった:PG_ID、OSD_IDと六角出力を得るのR入力CRUSH_HASH、このHASHのように(オブジェクト名)が完全に類似しているが、二つ以上の入力。同じ3つの入力のために、計算、ことを強調しなければならないdraw値は、必ずしも同一です。

このdrawエンド薄暗い中?実際には、CRUSHはここにある乱数を取得したいdrawし、右一緒に右乱数とOSD重いこするように、この乱数は、OSDの重みを乗算取りに行く、あなたは長い間、各OSD本当の記号を取得し、各符号は、同じ長さ(最大確率)ではない、最長のいずれかから選択することが容易です。

 

端的に言えば、CRUSHはしたく随机重量にOSDの確率をピックする前に、各OSDを作るランダムの目的を達成するために選ばれる大きなをOSDのいずれかを選ぶだけでなく、より大きなを満たすために、自分の体重を保持することはaで乗算され、乱数は、その後、最大のものの製品を取ります。そこでここでは、再び小さな目標を設定されています万回をピックアップ!ビューのマクロ観点から、同じ乱数を乗じてサンプルサイズが十分な大きさになった後、結果を選択するための乱数は、もはや影響力のある、決定的な影響重量は言うことですOSDの重量、より多くの重量右OSDではありませんビューの大きな巨視的ポイントで採取される確率が大きくなります。

 

上記の内容は、事は簡単なソートでやってたときに、それはない問題は、どこPG OSDを選択しない理解していません。

  • これは、入力CRUSH_HASHとして、PG_IDを与えます。
  • CRUSH_HASH(PG_ID、OSD_ID、R)乱数を描く(乱数キーがハッシュではありません)。
  • その重量は各OSD_IDに対応する乱数を乗じた全てのOSDのために、生成物を得ました。
  • 最大のOSDの製品を選択します。
  • PGは、OSDに保存されます。

 

定数Rは、場合R + 1、再度乱数を見つけながら、上記した説明では、問題は、OSD PGの複数のマッピングされた最大値の各再び乗算のOSD重量、再度選択された製品を解決することができますOSD、および数は、前のOSDと同じでない場合、それを選択し、選挙は、私たちは、3つの異なる数字が必要になるまで、同じ数の前のOSD、その後、その後、R + 2、およびは、乱数を選択した場合日付のOSD!

もちろん、実際の選択プロセスだけでなく、もう少し複雑な、しかし、ここで私が行ったときに選択したOSD CRUSHで物事を説明するために、最も簡単な方法を使用します。

 

アプリケーションCRUSHアルゴリズム

CRUSHは、我々は実際の構造と結合しやすく、さらにCRUSHアルゴリズムをすることができ、上記のOSDを選択するプロセスを理解し、ここセージは彼の博士論文に塗らツリー図は以下のとおりです。

 

 

 

底青いバーは灰色円筒1のOSDとして見ることができるホストとして見ることができ、紫はまた、キャビネットキャビネットであり、緑色の行はキャビネットの列とみなすことができる、我々は、ルートのトップでありますルートノードは、本当の意味を持っていない、あなたはまた、手段ルームとして見られることが、唯一のツリー構造のルートに役割を果たしたことができ、意味のデータセンターとしてそれを見ることができます。

このような構造の選択OSDに基づいて、我々は前方に新たな要件を置きます:

  • 3つの選出されたOSDの合計。
  • OSDは、三が下の行に配置されている必要があり、
  • 各キャビネットの中で最もOSDでもあります。

このような要件、OSD分布がランダムであるため、OSDのCRUSH支出のセクションから選択される方法は、二百三十から二、要件を満たしていない場合。

そのような要求を達成するためにだから、何を見てみましょう:

  • OSD重量の各;
  • 各ホストは、重量、ホスト内のすべてのOSDの累積重量により得られた量を有することができます。
  • 各キャビネットは、OSD内のすべてのホスト、実際には、すべての重み値とキャビネットの重量によって得られた重量で蓄積されます。
  • 同様に、キャビネットの各行は合計重量を有するプッシュ。
  • 根重量は実際に右のすべてのOSD重いの合計です。

 

ツリーのツリー構造に、各ノードは、それ自身の重量、重いによって各ノードの重み有する下一层根ノードの右ルートは、すべてのOSD重のクラスタとの重みの重みがあるので、重量のノードの合計の重量をあなたはそんなに体重ができたら、どのように我々は3つのOSDを選出するのですか?

選挙OSDの方法をモデルにCRUSH:

  • ルートにおける全ての行からCRUSH一つ選択行。
  • すべてのキャビネットを以下のちょうど一行に、CRUSH三台のキャビネットを選出します。
  • ちょうど真ん中の下のすべてのOSD 3のキャビネットでは、CRUSHは、OSDを選出しました。

各行が自重を有するので、CRUSH選択された行と乱数を乗じの右行と全く同じ方法で選択されたOSDは、最大値をとることになります。次に、この行に以下の三つのキャビネットを選出し続け、次いで、以下の各キャビネットにOSDを選択します。

2台のマシンが重い重みであれば、すべてのOSDの内側に、クラスタ内のデータの平均分布ように基本的な意味を行うには午後4時32分で、2台のマシンの分布に関するデータの量は1:2です。同時に、その三つの異なるキャビネットの上に分布する3つの選択したOSDをしました。

だからここCRUSHアルゴリズムは、プロセスの伝説と結合されています。

  • 取る(ルート)============> [ルート]
  • (1行)========> [ROW2]を選び
  • (図3に示すように、キャビネット)=====>を選択し 、[cab21、cab23、cab24] で[ROW2]で
  • (1、OSD)========>を選択し 、[osd2107、osd2313、osd2437]を3つのキャブで
  • EMIT ================> [osd2107、osd2313、osd2437]

 

CRUSHアルゴリズムは、ここで与えられた2つの重要な概念です。

  • バケット/ OSD:OSDと当社のワンディスク、バケットOSDが等上記キャビネット、行、ルート、などのすべての非子ノードに追加されています。
  • RULE:CRUSHがルールであるパスを選択し、選択の道を歩むことを選択します。

 

一般的に3つのステップに分けRULE:テイク - > Nを選択してください - >放出します。 

このステップは、ルート・ノードを選択するための責任がある乗り、ルートノードはルートは必ずしもないが、それはバケツのいずれであってもよいです。

行うにはNを選択すると、各ステートメントのために重量の資格バケツバケツを選択し、それぞれ選択して、得られた結果で次のステップを選択するためのオブジェクトを選択することです。

最終結果は、スタックを放出する出力対応します。

 

ここに私たちの最も一般的な3つのホスト、各ホスト3つのOSD構造である単純な例を、引用:

 

 

我々OSD、次の3つのホストから選ばれ、それぞれが、ホスト上の秋の3つのコピーを作成し、この時間は、我々は2つのホストだけでなく、ランニングのコピーを掛ける保証することができ、これはルールを形作っていきます以下のような:

  • テイク(ルート)============> [デフォルト]は名前のルート音であります
  • (図3に示すように、ホスト)========> [CEPH-1、CEPH-2、CEPH-3]を選択
  • (1、OSD)========> [osd.3、osd.1、osd.8]選択
  • EMIT()

ここでは簡単に概要は、次のとおりです。

私たちは、ツリー構造に部屋に本番環境を塗装しました:

底部層は、OSD、自重とOSDそれぞれの層です。

上記OSD等、ホスト/ラック/行/部屋/ルート・ノードから構成され、各ノードの重みは、下位ノードから重量で蓄積されます。

各ノード選択アルゴリズムCRUSH(ストロー)量は、その請求最大取ら乱数を乗じて、我々は選択によって文の種類と数を決定するノードを選択して、同じです。

PG 0.a2 ---> [osd.3、osd.1、osd.8]およびPG 0.33 ---> [osd.0:最後に、結果PG-> OSDマッピングなどによって選出されたことを忘れないでください、osd.5、osd.7]、PGそれぞれがOSDに独自のマッピングを持って、この関係を式で要約される:CRUSH(pg_id)---> [osd.a、osd.b ... OSD。 N]。

 

これまでのところ、我々は、データグループのサーバーを保存するための第二のステップを完了しているし、このプロセス全体を振り返ります:

  • 各ファイルには、固有のオブジェクト名を持っています。
  • POOL_ID + HASH(オブジェクト名)%のPG_NUMはPG_IDを得ました。
  • PGを与えるCRUSH(PG_ID)は、そのOSDの組み合わせを格納することであろう。
  • このオブジェクトは、OSDに位置PGに保存されます(PGは、ディスク上のディレクトリです)これらの

だから、ハッシュアルゴリズムは、PGマッピング、OSDマッピングにPGを計算する責任CRUSHにオブジェクト名を計算するための責任がある、私たちはこのことを覚えてみましょう。

 

セファロアーキテクチャ

顔の原則を理解することにより、図セファロアーキテクチャを見て理解することは非常に能力。

 

おすすめ

転載: www.cnblogs.com/hukey/p/12588436.html