クライアントがmonitorからクラスターマップを取得することは分かりましたが、複数のクラスターマップの内容がクラスター内で差異を生じないようにする必要があります。このため、Ceph/RADOSではクラスターマップの変更に「Paxos」という合意アルゴリズムを使用して管理します。
Ceph/RADOSのmonitorのような状態を持つソフトウェアの冗長化では、命令の順序が変わるとレプリカの状態が異なってしまいます。そこで、常にi番目の命令として何を採用するかについて、冗長化したmonitor間で合意を取る必要があります。Ceph/RADOSでは、1つの値に対して合意を取る一連の処理をPaxosインスタンスと呼びます。
ここでは詳細を省きますが、Leslie Lamport氏の論文「Paxos made simple」*から、処理内容を要約すると、次のようになります。
* Leslie Lamport「Paxos made simple」,01 Nov 2001.(リンクはPDFデータ)
Paxosアルゴリズムの詳細は省略しますが、monitorはクラスターマップへの変更をPaxosインスタンスに書き出すことで、monitor間でクラスターマップの変更が同じになるようにしています。monitorはPaxosインスタンスに変更をWriteし、readはKVSを直接参照します。
オブジェクトはプール名とオブジェクト名の組み合わせで特定します。プールは、オブジェクトの用途ごとにオブジェクト名前空間を分ける仕組みです。
クラスター(Ceph Storage Cluster)の構築が完了した時点で、3つのデフォルトプール「data」「metadata」「rbd」が作成される他、新たなプールの作成や既存のプールの名前変更・削除、プールのスナップショットの取得・削除などが可能です。
プールの属性としてデータ冗長度(オブジェクトのレプリカ数)、クラスター内にオブジェクトおよびレプリカを配置する仕方(後述するPlacement Group数やCRUSHルール番号)、所有者などを設定することができます。
ここで言及しているオブジェクトやレプリカがどのようなものかというと、実体はいずれもOSD上のファイルとして扱われます。各オブジェクトには、可用性を持たせるためにレプリカを複数のOSD上に置いています。Ceph/RADOSでは、あるオブジェクトのレプリカを置くOSDセットのパターンをPlacement Group(PG)といいます。
PGはプールを作成するとOSD数に応じた数が自動的に定義されます。クラスター内でOSD間の負荷の偏りを減らすために、OSDごとに50〜100のPG(データ冗長度で割って最も近い2のべき乗に切り上げる)を定義することが推奨されています。PGの数は後から増やすことができますが減らすことはできません。PGはPG番号で特定します。
オブジェクトとOSDのマッピングは直接的ではなく間接的に行われます。つまり、オブジェクトはいったんPGにマッピングされ、PGがOSDにマッピングされます。これはオブジェクトごとにOSDとのマッピングを管理する方法に比べて、メタデータの量を減らし、スケーラビリティと性能を向上させるための工夫です。
オブジェクトとPGのマッピングは次のような順で行われます。
Copyright © ITmedia, Inc. All Rights Reserved.