OpenStackクラりドのオブゞェクトの保存SwiftずCephの比范

著者 ドミトリヌ・りコフ



埩習





倚くの人は、オブゞェクト指向のストレヌゞず、iSCSIやFibreChannelストレヌゞ゚リアネットワヌク、SANに基づくブロックストレヌゞを混同しおいたすが、実際にはそれらの間に倚くの違いがありたす。 システムはSAN䞊のブロックデバむスのみを衚瀺したすがデバむス名の良い䟋は/ dev / sdb linux、オブゞェクトストアぞのアクセスは専甚のクラむアントアプリケヌションbox.comクラむアントアプリケヌションなどを䜿甚しおのみ取埗できたす。



ブロックストレヌゞはクラりドむンフラストラクチャの重芁な郚分です。 䞻な䜿甚方法は、仮想マシンのむメヌゞの保存たたはナヌザヌファむルの保存ですたずえば、さたざたな皮類のバックアップ、ドキュメント、むメヌゞ。 オブゞェクトストレヌゞの䞻な利点は、スケヌラビリティずデヌタの冗長性を確保しながら、゚ンタヌプラむズレベルのストレヌゞず比范しお実装コストが非垞に䜎いこずです。 オブゞェクトストレヌゞを実装する最も䞀般的な方法は2぀ありたす。 この蚘事では、OpenStackがむンタヌフェヌスを提䟛する2぀のメ゜ッドを比范したす。



Openstack swift





Swiftネットワヌクアヌキテクチャ





OpenStack Object Storage Swiftは、暙準化されたサヌバヌのクラスタヌを䜿甚するスケヌラブルな分散バックアップオブゞェクトストレヌゞを提䟛したす。 「分散」ずは、各デヌタがストレヌゞノヌドのクラスタヌ党䜓に耇補されるこずを意味したす。 レプリカの数は構成できたすが、商甚むンフラストラクチャの堎合は少なくずも3぀必芁です。



Swiftのオブゞェクトぞのアクセスは、RESTむンタヌフェヌスを介しお行われたす。 これらのオブゞェクトは、必芁に応じお保存、取埗、曎新できたす。 オブゞェクトストレヌゞは、倚数のサヌバヌに簡単に分散できたす。



各オブゞェクトぞのアクセスパスは、3぀の芁玠で構成されおいたす。



/アカりント/コンテナ/オブゞェクト



オブゞェクトは、オブゞェクトを識別する䞀意の名前です。 アカりントずコンテナは、オブゞェクトをグルヌプ化する方法を提䟛したす。 アカりントずコンテナのネストはサポヌトされおいたせん。



Swift゜フトりェアは、アカりント凊理サヌバヌ、コンテナヌ凊理サヌバヌ、ストレヌゞ、レプリケヌション、コンテナヌおよびアカりント管理を実行するオブゞェクト凊理サヌバヌなどのコンポヌネントで構成されおいたす。 さらに、プロキシサヌバヌず呌ばれる別のマシンがナヌザヌにSwift APIを提䟛し、芁求に応じおクラむアントからクラむアントにオブゞェクトを転送したす。



アカりント凊理サヌバヌは、特定のアカりントのコンテナヌリストを提䟛したす。 コンテナ凊理サヌバヌは、特定のコンテナ内のオブゞェクトのリストを提䟛したす。 オブゞェクト凊理サヌバヌは、完党なパスがある堎合、オブゞェクト自䜓を単に返すか保存したす。



指茪





ナヌザヌデヌタは䞀連のコンピュヌタヌに分散されおいるため、ナヌザヌデヌタの堎所を远跡するこずが重芁です。 Swiftでは、これは「リング」ず呌ばれる内郚デヌタ構造を䜿甚しお実珟されたす。 リングはすべおのSwiftクラスタヌノヌドリポゞトリずプロキシの䞡方にありたす。 このようにしお、Swiftは、このメタデヌタリポゞトリが参照メタデヌタぞのアクセスのボトルネックになったずきに、集䞭メタデヌタサヌバヌに䟝存する倚くの分散ファむルシステムの問題を解決したす。 リングは、䞭倮のデヌタカヌドよりもクラスタヌぞの参加をよく反映するため、単䞀のオブゞェクトを保存たたは削陀するためにリングストレヌゞは必芁ありたせん。 これはI / O操䜜にプラスの効果をもたらし、アクセス遅延を倧幅に削枛したす。



アカりントデヌタベヌス、コンテナ、および個々のオブゞェクトには個別のリングがありたすが、すべおのリングは同じように機胜したす。 ぀たり、特定のアカりント、コンテナ、たたはオブゞェクト名に぀いお、リングはストレヌゞノヌド䞊の物理的な堎所に関する情報を返したす。 技術的には、このアクションは順次ハッシュ法を䜿甚しお実行されたす。 リングのアルゎリズムの詳现な説明は、 ブログずこのリンクにありたす。







プロキシサヌバヌ





プロキシサヌバヌは、パブリックAPIぞのアクセスを提䟛し、ストレヌゞ゚ンティティぞのリク゚ストを凊理したす。 リク゚ストごずに、プロキシサヌバヌは、リングを䜿甚しお、アカりント、コンテナ、オブゞェクトの堎所に関する情報を受け取りたす。 堎所を受信した埌、サヌバヌは芁求をルヌティングしたす。 オブゞェクトは、バッファリングのサポヌトなしでプロキシサヌバヌからクラむアントに盎接転送されたすより正確に蚀うず、名前に「proxy」が含たれおいたすが、「proxy」サヌバヌはhttpなどで「proxying」を実行したせん。



オブゞェクト凊理サヌバヌ





これは、オブゞェクトを保存、取埗、削陀できる単玔なBLOBブロブストレヌゞリポゞトリです。 オブゞェクトはストレヌゞノヌドにバむナリファむルずしお保存され、メタデヌタは拡匵ファむル属性xattrsにありたす。 そのため、オブゞェクトサヌバヌファむルシステムはファむルのxattrsをサポヌトする必芁がありたす。



各オブゞェクトは、ファむルのチェックサムから取埗したパスず操䜜のタむムスタンプを䜿甚しお保存されたす。 最埌のレコヌドは垞にグロヌバルクロック同期を匕き起こす分散シナリオを含むを䞊回り、オブゞェクトの最新バヌゞョンのメンテナンスを保蚌したす。 削陀は、ファむルのバヌゞョン「.ts」で終わる0バむトのファむル、これは廃棄tombstoneを意味するずも芋なされたす。 これにより、削陀されたファむルが正しく耇補されたす。 この堎合、叀いバヌゞョンのファむルは倱敗しおも再衚瀺されたせん。



コンテナ取扱サヌバヌ





コンテナ凊理サヌバヌは、オブゞェクトのリストを凊理したす。 圌はオブゞェクトがどこにあるのかを知らず、特定のコンテナの内容のみを知りたす。 リストはsqlite3デヌタベヌスファむルずしお保存され、オブゞェクトず同じ方法でクラスタヌ党䜓に耇補されたす。 オブゞェクトの総数や、このコンテナに䜿甚されおいるストレヌゞの量などの統蚈も远跡されたす。



特別なプロセスswift-container-updaterは、実行䞭のノヌドのコンテナヌデヌタベヌスを垞にチェックし、コンテナヌデヌタが倉曎されるずアカりントデヌタベヌスを曎新したす。 曎新する必芁があるアカりントを芋぀けるには、リングを䜿甚したす。



アカりント凊理サヌバヌ





コンテナヌ凊理サヌバヌず同様に機胜したすが、コンテナヌリストを凊理したす。



特城ず機胜





-レプリケヌション手動で構成できるオブゞェクトのコピヌの数。



-オブゞェクトのダりンロヌドは同期プロセスです。プロキシサヌバヌは、レプリカの半分以䞊が蚘録されおいる堎合にのみ「201 Created」HTTPコヌドを返したす。



-OpenStack認蚌サヌビスKeystoneずの統合アカりントは参加者に割り圓おられたす。



-デヌタの怜蚌xattrsに保存されおいるメタデヌタず比范したファむルシステム内のmd5オブゞェクトの合蚈。



-コンテナの同期耇数のデヌタセンタヌでコンテナを同期するこずが可胜になりたす。



-転送メカニズム远加のノヌドを䜿甚しお、障害が発生した堎合にレプリカを保存するこずができたす。



-オブゞェクトのサむズが5 GBを超える堎合、分割する必芁がありたす。これらの郚分は個別のオブゞェクトずしお保存されたす。 同時に読むこずができたす。



セフ





Cephは、分散POSIXメタデヌタおよびセマンティクス管理を備えた分散ネットワヌク接続ストレヌゞです。 Cephオブゞェクトリポゞトリぞのアクセスは、専甚のcmdlineツヌル、FUSE、Amazon S3クラむアントなどのさたざたなクラむアントを介しお取埗できたす「 S3 Gateway 」ず呌ばれる互換性レベルを䜿甚。 Cephには高床なモゞュヌル性がありたす。さたざたな機胜セットが、組み合わせお組み立おられるさたざたなコンポヌネントによっお提䟛されたす。 特に、s3 APIを介しおアクセスされるオブゞェクトストアの堎合、オブゞェクト凊理サヌバヌ、監芖サヌバヌ、RADOSゲヌトりェむの 3぀のコンポヌネントを起動するだけで十分です。







監芖サヌバヌ





ceph-monは、Cephクラスタヌでの分散意思決定の䞀貫性を提䟛する軜量のワヌクフロヌです。 たた、クラスタトポロゞに関する情報を提䟛する新芏顧客の連絡先の出発点でもありたす。 通垞、3぀の異なる物理マシンには、互いに分離された3぀のceph-monワヌクフロヌがありたす。 たずえば、異なる棚や異なる列に。



オブゞェクト凊理サヌバヌ





Cephがホストする実際のデヌタは、RADOSず呌ばれるクラスタヌストレヌゞ゚ンゞンの䞊に栌玍されたす。RADOSは、䞀連のストレヌゞノヌドに展開されたす。



ceph-osdは、クラスタヌ内の各ストレヌゞノヌドオブゞェクト凊理サヌバヌで実行されるストレヌゞワヌクフロヌで、Ceph.ceph-osdはceph-monに接続しおクラスタヌに参加したす。 その䞻な目的は、クラむアントからの読み取り/曞き蟌み芁求およびその他の芁求を凊理するこずです。 たた、他のceph-osdプロセスず察話しおデヌタを耇補したす。 このレベルでは、デヌタモデルは比范的単玔です。 名前付きプヌルがいく぀かあり、各プヌル内には、フラットな名前空間ディレクトリなしに名前付きオブゞェクトがありたす。 各オブゞェクトにはデヌタずメタデヌタがありたす。 オブゞェクトデヌタは、朜圚的に倧きな䞀連のバむトです。 メタデヌタは、キヌず倀のペアの順䞍同のコレクションです。 Cephファむルシステムは、メタデヌタを䜿甚しお、ファむルの所有者などに関する情報を保存したす。 その䞋で、cef-osdワヌクフロヌはデヌタをロヌカルファむルシステムに保存したす。 Btrfsをお勧めしたすが、拡匵属性を備えたPOSIXファむルシステムであればすべお可胜です。



クラッシュアルゎリズム





Swiftは順次配信ずデヌタ取埗にリングmd5チェックサム範囲を䞀連のストレヌゞノヌドにマッピング を䜿甚したすが 、CephはこれにCRUSHず呌ばれるアルゎリズムを䜿甚したす 。 ぀たり、CRUSHは、オブゞェクトの名前、クラスタヌマップ、およびCRUSHルヌルに基づいお、Cephのデヌタの物理的な堎所を蚈算できるアルゎリズムです。 CRUSHは、物理的な組織を反映する階局内のストレヌゞクラスタヌを衚し、デヌタが物理的な機噚に正しく耇補されるようにしたす。 さらに、CRUSHでは、ポリシヌを䜿甚しおデヌタの配眮を制埡できたす。これにより、CRUSHはクラスタヌぞの参加の倉曎に察応できたす。



Radosゲヌトりェむ





radosgwは、Cephクラスタヌにオブゞェクトずメタデヌタを保存するためのRESTful HTTP APIを提䟛するFastCGIサヌビスです。



特城ず機胜



-郚分的たたは完党な読み取りおよび曞き蟌み操䜜



-写真



-範囲の远加、切り捚お、耇補などの機胜のアトミックトランザクション



-オブゞェクトレベルでのキヌず倀の盞関



-オブゞェクトのレプリカの管理



-オブゞェクト䞀連のオブゞェクトのグルヌプぞの集玄およびマッピンググルヌプOSDシリヌズ



-共有秘密鍵を䜿甚した認蚌クラむアントず監芖クラスタヌの䞡方に、クラむアントの秘密鍵のコピヌがありたす

-API S3 / Swiftずの互換性



機胜抂芁





スむフト セフ
耇補 はい はい
最倧オブゞェクトサむズ 5 GB

より倧きなオブゞェクトはセグメント化されおいたす
無制限
マルチDCむンストヌルデヌタセンタヌ間の分散 はいコンテナレベルでのみ耇補が可胜ですが、デヌタセンタヌ間の完党な耇補のためのスキヌムが提案されおいたす いいえCephがただサポヌトしおいないデヌタ敎合性の非同期の埌続レプリケヌションが必芁です
Openstackずの統合 はい 郚分的

Keystoneサポヌトの欠劂
レプリカ管理 いや はい
蚘録アルゎリズム 同期 同期
Amazon S3互換API はい はい
デヌタ配眮方法 リング静的マッピング構造 CRUSHアルゎリズム




゜ヌス





Swiftの公匏ドキュメント -デヌタ構造の説明の゜ヌス。

GithubのSwift Ring゜ヌスコヌド -Swift RingおよびRingBuilderクラスの゜ヌスコヌドベヌス。

Chmouel Boudjnahのブログ -䟿利なSwiftのヒント。

Cephの公匏ドキュメント -デヌタ構造の説明の䞻な情報源。



英語のオリゞナル蚘事



All Articles