Ceph階層化の高性能
アーキテクチャー
講演者 : Vikter Pan
目次
Cephのご紹介
Ceph階層化(Tiering)アーキテクチャー
Cephの性能測定ツール
性能測定の結果
結論
Cephのご紹介
Cephとは?
分散ストレージソフトウェア
-障害耐性、単一障害点(SPoF)なし
汎用のX86サーバーを利用
-低コスト、柔軟性に優れる
大規模に拡張(スケール)する
-ノード 台数の増設でPBレベルの容量拡張が可能
統一されたストレージシステム
-オブジェクト/ブロック/ファイルのストレージを提供
オープンソース – ベンダー・ロックインなし
データを自動再バランス
データセキュリティ
-二つ以上のデータコピー(レプリカ)を異なる物理ストアに格納
Cephのアーキテクチャー
PG と Pools
単一OSD内のPG数: 30 ~ 300 (soft limit)、お勧めは256
PoolごとのPG数 =
OSD数 * 単一OSD内のPG数 / レプリカ数
この例では: 4 * 256 / 2 = 512
Object Size = 4KB ~ 32MB, default = 4MB
Object Sizeが増えるとスループットも増える場合がある
PG数をOSDに分散配置するとパフォーマンスが高くなる
CRUSH Maps
CRUSH Map Parameter
1. Setting : 基本の設定(Settingを変更する必要
はめったにない)
2. Device: 物理Device List(全てのOSD Deviceを
リストし、IDとNameのマッピングを定義す
る)
3. Type: Bucket Typeを定義(Root~OSD)
4. Bucket: OSD Group 及び 階層化構造を定義
5. Rule : CRUSH rule (object chunkを定義)
CRUSH Maps
Default OSD Tree
CRUSH Maps
Settings
Devices
CRUSH Maps
Types
CRUSH Maps
Buckets
CRUSH Maps
Rules
ruleset : rule_id
type : object chunkの種類 (レプリカ、 erasure)
min_size : レプリカ数がこの設定を下回る場合、PoolはこのRuleを選びません
max_size :レプリカ数がこの設定を上回る場合、PoolはこのRuleを選びません
step take :このRuleにマッピングするosd_treeのを設定
step chooseleaf : object chunkのレプリカのマッピング方法を設定。例えば、
“step chooseleaf firstn 0 type host” はHostでレプリカ数を設定(各Hostに配置され
たレプリカ数は1)
CRUSH Maps
OSD Tree(階層化後)
CRUSH Maps
CRUSH ruleset と Pool List
Ceph 階層化アーキテクチャー
Ceph 階層化アーキテクチャー
Storage
Node
SATA
SSD
SAS
Storage
Node
SATA
SSD
SAS
Storage
Node
SATA
SSD
SAS
Ceph-Mon
Node
ceph-mon
RGW
SSD Pool
SAS Pool
SATA Pool
1層
2層
3層
CephプールのOSDは異なるノード
から組み合わせることができる
Storage
node
ceph-osd
(SATA)
ceph-osd
(SSD)
ceph-osd
(SAS)
Storage
node
ceph-osd
(SATA)
ceph-osd
(SSD)
ceph-osd
(SAS)
Storage
node
ceph-osd
(SATA)
ceph-osd
(SSD)
ceph-osd
(SAS)
Ceph Monitor
ceph-mon
Ceph Deploy
Ceph Monitor
ceph-mon
Ceph Deploy
Ceph Monitor
ceph-mon
Ceph Deploy
SSD-journalSSD-journalSSD-journal Journal disk NVME
(Intel SSD 750)*1
SSD Tier disk*1
SAS Tier disk*1
SATA Tier disk*1
Client
ceph-client
FIO
NVME Tier
SSD Tier
SAS Tier
SATA Tier
ハードウェアアーキテクチャー
パフォーマンス測定ツール
パフォーマンス測定ツール
FIO
IOmeter
IOZone
dd
Radows-bench
Rest-bench
Cosbench
パフォーマンス測定ツール
ツール 測定シナリオ Command line/GUI OS Support 人気 レファレンス
FIO
(Flexible I/O Tester)
多数はBlock級ストレージ
ex.SAN、DAS
Command line Linux / Windows 高 fio github
IOmeter
多数はBlock級ストレージ
ex.SAN、DAS
GUI / Command line Linux / Windows 高
Iometer and
IOzone
iozone File級ストレージ ex.NAS GUI / Command line Linux / Windows 高
IOzone
Filesystem
Benchmark
dd File級ストレージ ex.NAS Command line Linux / Windows 高
dd over NFS
testing
rados bench Ceph RADOS Command line Linux only 普通
BENCHMARK A
CEPH STORAGE
CLUSTER
rest-bench CEPH RESTful Gateway Command line Linux only 普通
BENCHMARK A
CEPH OBJECT
GATEWAY
cosbench Cloud Object Storage Service GUI / Command line Linux / Windows 高
COSBench -
Cloud Object
Storage
Benchmark
IOPSとスループットの公式
IOPS
IOPS = (MBps スループット / KB per IO) * 1024
スループット
MBps = (IOPS * KB per IO) / 1024
パフォーマンステストの結果
スループット
IOPS
結論
Ceph階層化は単一システム内に様々なユース
ケースシナリオに対応できる
読み込み場合はどの階層でも良いパフォーマン
スと評価された
書き込み場合はNvmeがSSD、SAS、SATAよ
り良いパフォーマンスと評価された
ご清聴ありがとうございました
ご連絡・ご質問:
営業担当者:Jimmy Kao
TEL (オフィス):+886-2-7738-2858 #7105
TEL (携帯):+886-912-892-081
E-メール:jimmy.k@inwinstack.com

Ceph Day Tokyo - High Performance Layered Architecture

Editor's Notes

  • #3 crush mapを設定することで階層化を実現 階層化後のPerformance測定の結果
  • #5 こちらでCephの利点を簡単に説明します Cephは分散ソフトウェアなので、単一障害点はないです Open Sourceなのでベンダーロックインは一切なしです 汎用のサーバーを採用するので、コスト削減を達成します 大規模のスケールアウトができる。ノードの増設は何十台から何千台まで拡張できる Object -> Dropboxに相当するUse Case Block  -> OpenStackとの連携、ファイルシステムとの統合 File  ->  CephFs instead of NFS Cephの最新版Jewelがリリースされたら、 CephFsは安定 - Crush map allows customization, tiering, DR…. Big Dataの分散ストレージの話といえば、CephをHadoop HDFSと比較する人が多いです。確かに、基本の機能は似てますけど(Replication、分散ストレージ、スケールアウトなど)、CephはBlock、Object、FileのProtocolをサポートしています。 HDFSはFileしかサポートしてないです。 それに、CephはCrush Mapを利用しています。Crush Mapの設定でDRアーキテクチャー、三つのレプリカ数まで三つのクラスタ内に複製できる、っていう設定は可能になりますので、HDFSの場合はできないです。 
  • #6 こちらはCephのアーキテクチャーです 下のほうはCeph MonitorとOSDが配置されてます  (高可用性のため3台のモニターノードが必要) (OSDノード - ここでデータを格納する。使用者のニーズに応じて、OSDノードを増設すれば拡張できます) RADOSはCephの中核(ちゅうかく)で, データをオブジェクトとして分散管理する仕組みです 上のほうはLIBRADOSというAPIで、ここにてアプリケーションを直接に連携することが可能です LIBRADOSの上にはRADOSGW、RBD、CephFS 3種類のプロトコルを提供してます -RADOWSGWは、S3とOpenStack APIに対応します -RBDは、CinderとGlance APIに対応します。OpenStackと連携する場合は一番採用されてます。 -CephFSは、NFS/CIFSに対応します。Jewelがリリースされてから安定してきました。もともとNFS/CIFSと連携する時はRBDを採用
  • #7 CRUSH MAPを紹介する前に、まずPGとPoolという重要な概念を話したいと思います データはオブジェクトとしてPGやPoolに分散して格納されます 各オブジェクトのSizeは設定できますが、普段は4KB ~ 32MBまでという範囲です。Defaultは4MB。 状況によってObject Sizeが増えるとスループットも増える場合があります PGはPoolごとに入っています。高いパフォーマンスを確保するために、PGはできる限りOSD(HardDisk)に分散配置します。 PoolごとのPG数の算出するには、こちらの公式になります OSDごとのPG数は Soft Limit(制限の範囲)があります。普段は256をお勧めします 続きまして、Cephで利用したCRUSHマップというアルゴリズムを話したいと思います
  • #8 基本的にCephの中核(RADOS)はCRUSHマップというアルゴリズムで構成されてます。 CRUSHマップの設定により色々な機能ができます。そして良いパフォーマンスも達成します CRUSHマップについて、五つのパラメータを利用しています:Setting、Device、Type、Bucket、Rules Device: 物理Device、例えばハードディスク Type:Root、Host、OSDのLocationまですべて表示します Typeは色々なUse Caseに応じて設定が変わります Typeの設定はRuleで変更します Bucket: Tiering Structureの設定、OSD Groupの定義 続きまして、どういうふうにCRUSHマップの設定でTieringを達成するかを説明します
  • #9 こちらはDefaultのOSD Treeです Root=Cluster 3Hosts In this Ceph Cluster OSDノードが三つありまして、ノード毎にOSDハードディスクが6台(三台のSATAと三台のSSD)があります つまり、各OSDノードにSATA PoolとSSD Poolが入っています
  • #10 CRUSHマップのDefault Settingです。 普段は変える必要ないです。
  • #11 こちらはDeviceリストとそれぞれのMappingされてるOSDです Define how 3 replicas are distributed こちらはTypeリスト
  • #12 Bucketの設定です ここでbucket 定義内のOSDの重み付け(weight)を設定できます
  • #13 CRUSHルールには重要なパラメータが六つあります: まずは、Rule IDはRulesetで設定します Typeはオブジェクトチャンクの種類を定義します。ユースケース シナリオによって、レプリカ或いはErasureコードを設定できます min size と max sizeはPoolがこのRuleを選ぶかという判定基準になります step take はこのRuleにマッピングするosd_treeを設定 step chooseleaf はobject chunkのレプリカのマッピング方法を設定。この場合レプリカ数はHostで設定(Hostごとに配置されたレプリカ数は1)
  • #14 設定後のOSD Treeの状態です 二つのPoolにに分けています。 SSD PoolとSata Pool
  • #15 ceph OSD crush rule list というCommandでも現在のRulesetを確認できます ceph osd dump というCommandでPool Listを表示します
  • #17 ストレージ階層化とは、複数種類のHarddiskを使って階層を作り、データの特性に応じてそれぞれのストレージ階層に振り分けられる メリット:効率的にデータのストレージを管理する Cost Databaseのように性能を必要とするDataはSSDのような高性能のHarddiskに格納 VM、ApplicationなどはSASに格納 Snapshot、Backupのように容量が重要なDataはSATA Poolに格納 基本的にHarddiskの台数はポイントです 一台のSSDは4台のSATAより性能が低い Cephという分散システムでは、OSD数とかHost数が多ければ多いほど、性能が良くなる
  • #18 Performanceのテストは4種類のHarddiskに測定を行います。
  • #20 FIO、IOMETER、DD 一番よく使われてます
  • #21 人気あるツールはLinuxとWindows両方サポートしています 普段の場合はFIOが一番使われてます 単一のHardDriveに測定を行う場合はDDを利用することが多い RadosGWとかObjectを測定する時はRadosBench、Rest-Bench、CosBenchを採用します
  • #24 4種類のHarddrive(SATA、SAS、SSD、NVME SSD)に対してスループットの測定を実行しました 測定条件は128Kブロックサイズと4Kブロックサイズの読み書きがテストされます 測定結果によると、NVMEの書き込みパフォーマンスが一番良い、そしてSSD、SAS、SATA しかし、読み込みの部分は大抵同じです 128Kのスループットはずっと4Kより良いと評価されました
  • #25 IOPSについても一緒ですが、書き込みの場合はNVMEがダントツ一位です。 読み込みの場合もあんまり変わらなくて、測定結果は大抵一緒です
  • #26 階層化管理を通して、