Ceph分散ストレージについて学びましょう

Ceph分散ストレージについて学びましょう

序文

最近、Kubernetes を学習しながら、ポッドデータの永続化を実現したいと考えています。調査の過程で、Ceph は近年急速に発展しており、企業で導入されている事例も多数あることがわかりました。選択に関しては、コミュニティで人気のあるプロジェクトを好みます。 GlusterFS と Ceph はどちらも検討範囲内ですが、GlusterFS はオブジェクト ストレージとファイル システム ストレージのみを提供するのに対し、Ceph はオブジェクト ストレージ、ブロック ストレージ、ファイル システム ストレージを提供します。新しいものへの憧れから、私は Ceph ブロック ストレージを実装し、Kubernetes に接続してポッド データの永続性を実現するために、Ceph を決定的に選択しました。

[[218717]]

1. 初期 Ceph

1.1 ブロック ストレージ/オブジェクト ストレージ/ファイル システム ストレージとは何かを理解していますか?

早速本題に入りましょう。 Ceph は現在、オブジェクト ストレージ (RADOSGW)、ブロック ストレージ RDB、CephFS ファイル システムの 3 つの機能を提供しています。 3 つの機能は次のように紹介されています。

1. オブジェクト ストレージ。これは、通常の意味でのキー値ストレージです。インターフェースはシンプルな GET、PUT、DEL およびその他の拡張機能です。主な代表例としては、Swift、S3、Gluster があります。

2. ブロックストレージ。このインターフェースは通常、QEMUDriver または KernelModule の形式で存在します。このインターフェースは、Sheepdog、AWS の EBS、QingCloud のクラウド ハードディスク、Alibaba Cloud の Pangu システムなどの Linux BlockDevice インターフェースまたは QEMU によって提供される BlockDriver インターフェース、および Ceph の RBD (RBD は Ceph のブロック ストレージ インターフェース) を実装する必要があります。一般的なストレージの中で、DAS と SAN もブロック ストレージを提供します。

3. ファイル ストレージは通常、POSIX インターフェイスをサポートすることを意味します。これは、Ext4 などの従来のファイルシステムと同じタイプですが、分散ストレージが Ceph の CephFS (CephFS は Ceph のファイルストレージ用インターフェース) などの並列化機能を提供する点が異なります。ただし、GlusterFS や HDFS などの非 POSIX インターフェース ベースのファイル ストレージ インターフェースもこのカテゴリに分類されることがあります。もちろん、NFS と NAS もファイル システム ストレージに属します。

1.2 Ceph コンポーネントの紹介

次の図から Ceph アーキテクチャ コンポーネントを簡単に見てみましょう。 (ヒント: これは勉強しながら描いたものです。何か問題が見つかった場合はメッセージを残してください。批判しないでください。)

モニターは、クラスター全体の動作状態を監視する役割を担います。情報は、各ノードのステータスやクラスター構成情報など、クラスター メンバーを管理するデーモンによって提供されます。 Cephmonitormap には主に OSDmap、PGmap、MDSmap、CRUSH などが含まれます。これらのマップは総称してクラスター マップと呼ばれます。 cephmonitor はデータを保存しません。これらのマップの機能は次のとおりです。

  • Monitormap: Ceph クラスター ID、監視ホスト名と IP、ポートなど、監視ノードに関するエンドツーエンドの情報が含まれます。また、現在のバージョン情報や最新の変更情報も保存されており、「cephmondump」を通じてモニターマップを閲覧することができます。
  • OSDmap: クラスター ID、OSDmap 作成のバージョン情報、最終変更情報などのよく使用される情報のほか、プール名、プール ID、タイプ、レプリカ数、PGP など主にプール関連の情報、数量、ステータス、重み、最新のクリーニング間隔、OSD ホスト情報などが含まれます。表示するには「cephosddump」コマンドを使用します。
  • PGmap: 現在の PG バージョン、タイムスタンプ、最新の OSDMap バージョン情報、スペース使用率、およびほぼ満杯の比率情報が含まれます。同時に、各 PGID、オブジェクト数、ステータス、OSD ステータス、ディープ クリーニングに関する詳細情報も含まれます。関連するステータスは、コマンド「cephpgdump」で確認できます。
  • CRUSHmap: CRUSHmap には、クラスター ストレージ デバイス情報、障害ドメイン階層、およびデータを保存するときに定義された障害ドメイン ルール情報が含まれます。表示するには、コマンド「cephosdcrushmap」を使用します。
  • MDSmap: MDSMap には、現在の MDSmap のバージョン情報、現在のマップの作成情報、変更時刻、データとメタデータの POOLID、クラスター MDS の数、および MDS ステータスが含まれており、「cephmdsdump」を通じて表示できます。

OSD、CephOSD は、物理ディスク ドライブ、その上の Linux ファイル システム、および CephOSD サービスで構成されます。 CephOSD は、クラスター内の各ノードの物理ディスク上にオブジェクトの形式でデータを保存します。データを保存する作業のほとんどは、OSDdaemon プロセスによって実行されます。 CephOSD を構築するときは、SSD ディスクと xfs ファイル システムを使用してパーティションをフォーマットすることをお勧めします。 BTRFS はパフォーマンスが優れていますが、現時点では本番環境での使用は推奨されません。しばらく様子を見ることをお勧めします。

Ceph メタデータ、MDS。 Ceph ブロック デバイスと RDB には MDS は必要ありません。MDS は CephFS のみをサポートします。

RADOS、ReliableAutonomicDistributedObjectStore。 RADOS は Ceph ストレージ クラスターの基盤です。 Ceph では、すべてのデータはオブジェクトの形式で保存され、RADOS オブジェクト ストレージはデータの種類に関係なくこれらのオブジェクトを保存する役割を担います。 RADOS レイヤーは、データの一貫性が常に保たれることを保証します。

librados(librados ライブラリ)は、アプリケーションへのアクセス インターフェイスを提供します。また、ブロック ストレージ、オブジェクト ストレージ、ファイル システム用のネイティブ インターフェイスも提供します。

ADOS ブロック デバイスはシンプロビジョニングされ、サイズ変更可能であり、複数の OSD にわたってデータを格納します。

ゲートウェイ インターフェイスである RADOSGW は、オブジェクト ストレージ サービスを提供します。 librgw と librados を使用して、アプリケーションが Ceph オブジェクト ストレージに接続できるようにします。また、S3 および Swift 互換の RESTful API インターフェースを提供します。

CephFS (Ceph ファイル システム) は、librados に基づくネイティブ インターフェイスをカプセル化する POSIX 互換のファイル システムです。

データストレージの分散選択アルゴリズムを表す CRUSH (Controlled Replication Under Scalable Hashing) について簡単に説明します。 Ceph の高パフォーマンス/高可用性は、このアルゴリズムを使用して実現されます。 CRUSH アルゴリズムは、クライアント要求ごとにメタデータ テーブルを検索する代わりに、システム内でデータの書き込み先または読み取り元となる場所を計算します。 CRUSH はインフラストラクチャを認識し、インフラストラクチャのさまざまなコンポーネント間の関係を理解できます。また、CRUSH はデータの複数のコピーを保存するため、障害ドメインの複数のコンポーネントに障害が発生しても、データは引き続き利用できます。 CRUSH により、Ceph は自己管理と自己修復を実現できます。

従来の分散ストレージと比較した RADOS 分散ストレージの利点は次のとおりです。

1. ファイルをオブジェクトにマッピングした後、ClusterMap を使用して、テーブル検索ではなく CRUSH 計算によってストレージ デバイス上のファイル データが保存されている特定の場所を見つけます。従来のファイルからブロックへのマッピングと BlockMAp 管理が最適化されています。

2.RADOS は OSD のインテリジェントな機能を最大限に活用し、一部のタスクを OSD に委任して、最大限のスケーラビリティを実現します。

2. Cephをインストールする

2.1 環境整備

##環境説明

ホストIP機能

セフノード01192.168.58.128 デプロイ、mon*1、osd*3

セフノード02192.168.58.129 mon*1、osd*3

セフノード03192.168.58.130 mon*1、osd*3

##yumソースを準備する

  1. cd /etc/yum.repos.d/ && sudo mkdir bak
  2. sudo mv *.repo をバックアップします。
  3. sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  4. sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  5. sudo sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
  6. sudo sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
  7. sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo

##Cephソースを追加

  1. sudo cat <<EOF > /etc/yum.repos.d/ceph.repo
  2. 【セフ】
  3. name = x86_64用のCeph パッケージ
  4. ベースURL=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
  5. 有効=1
  6. gpgcheck=1
  7. タイプ=rpm-md
  8. gpgkey=https : //mirrors.aliyun.com/ceph/keys/release.asc です。  
  9.   
  10. [セフノアーチ]
  11. name =Ceph noarch パッケージ
  12. ベースURL=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
  13. 有効=1
  14. gpgcheck=1
  15. タイプ=rpm-md
  16. gpgkey=https : //mirrors.aliyun.com/ceph/keys/release.asc です。  
  17.   
  18. [cephソース]
  19. name =Ceph ソースパッケージ
  20. ベースURL=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
  21. 有効=1
  22. gpgcheck=1
  23. タイプ=rpm-md
  24. gpgkey=https : //mirrors.aliyun.com/ceph/keys/release.asc です。  
  25. 終了

##キーフリーの設定(省略)

ヒント: 通常のユーザーを使用してインストールする場合は、次のようにしてユーザーに関連する権限を付与してください。

a. yangsheng ユーザーを sudo 権限に追加します (yangshengALL=(ALL)NOPASSWD:ALL)

b. /etc/sudoers の「Defaultsrequiretty」をコメントアウトします。

2.2 インストールを開始する

##デプロイメントツールをインストールします(192.168.58.128で次の操作を実行します)

  1. yum メイクキャッシュ
  2. yum -y ceph-deployをインストールします
  3.   
  4. ceph-deploy --version  
  5. 1.5.39

##モニターを初期化する

  1. mkdir ceph-cluster && cd ceph-cluster
  2. ceph-deploy 新しい ceph-node01 ceph-node02 ceph-node03

独自の IP 構成に応じて ceph.conf に public_network を追加し、mons 間の時間差の許容範囲をわずかに増やします (デフォルトは 0.05 秒ですが、現在は 2 秒に変更されています)。

  1. #デフォルトのレプリカ 32変更
  2. osd プールのデフォルト サイズ= 2
  3.   
  4. パブリックネットワーク = 192.168.58.0/24
  5. クラスターネットワーク = 192.168.58.0/24

##ceph をインストールする

  1. ceph-deployinstallceph-node01ceph-node02ceph-node03

##モニターのデプロイを開始する

  1. ceph-deploymoncreate -初期
  2.   
  3. [root@ceph-node01 ceph]# ls
  4. ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log rbdmap
  5. ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.mon.keyring

クラスターのステータスを確認する

  1. [root@ceph-node01 ceph]# ceph -s
  2. クラスター b5108a6c-7e3d-4295-88fa-88dc825be3ba
  3. 健康 HEALTH_ERR
  4. OSDなし
  5. monmap e1: {ceph-node01=192.168.58.128:6789/0、ceph-node02=192.168.58.129:6789/0、ceph-node03=192.168.58.130:6789/0}3 mons
  6. 選出エポック 6、クォーラム 0、1、2 ceph-node01、ceph-node02、ceph-node03
  7. osdmap e1: 0 osds: 0 アップ、0イン 
  8. フラグはビット単位でソートし、require_jewel_osds を使用します
  9. pgmap v2: 64 ページ、1 プール、0 バイト データ、0 オブジェクト
  10. 使用済み 0 kB、使用可能 0 kB / 0 kB
  11. 64 作成中

ヒント: モニターが正常に作成されたら、クラスターのステータスを確認します。現時点では、クラスターの状態は正常ではありません。

##OSDの展開を開始する

  1. ### ノードのすべてのディスク情報を一覧表示します
  2. ceph-deploy ディスクリスト ceph-node01 ceph-node02 ceph-node03
  3.   
  4. ### ディスクのパーティションと内容を消去する
  5. ceph-deploy ディスクを ceph-node01:sdb および ceph-node02:sdb にコピーします。ceph-node03:sdb にコピーします。
  6.   
  7. ### パーティションのフォーマットとアクティベーション
  8. ceph-deploy osd はceph-node01:sdb と ceph-node02:sdb と ceph-node03:sdbを作成します
  9. ceph-deploy osd をアクティブ化します。ceph-node01:sdb、ceph-node02:sdb、ceph-node03:sdb

この時点で、クラスタの状態を再度確認します

  1. [root@ceph-node01 ceph-cluster]# ceph -s
  2. クラスター 86fb7c8b-9ad1-4eaf-a24c-0d2d9f36ab29
  3. 健康 HEALTH_OK
  4. monmap e2: {ceph-node01=192.168.58.128:6789/0、ceph-node02=192.168.58.129:6789/0、ceph-node03=192.168.58.130:6789/0}3 mons
  5. 選出エポック 6、クォーラム 0、1、2 ceph-node01、ceph-node02、ceph-node03
  6. osdmap e15: 3 osds: 3 アップ、3イン 
  7. フラグはビット単位でソートし、require_jewel_osds を使用します
  8. pgmap v32: 64 ページ、1 プール、0 バイト データ、0 オブジェクト
  9. 使用済み 100 MB、使用可能 45946 MB / 46046 MB
  10. 64 アクティブ+クリーン

2.3 環境をきれいにする

以前のデプロイメントが失敗した場合は、ceph クライアントを削除したり、仮想マシンを再構築したりする必要はありません。 Ceph クライアントをインストールした直後の状態に環境をクリーンアップするには、各ノードで次の手順を実行するだけです。古いクラスター上に構築する前に環境をクリーンアップすることを強くお勧めします。そうしないと、さまざまな異常な状況が発生する可能性があります。

  1. sudo ps aux|grep ceph | grep -v "grep" | awk '{print $2}' |xargs kill -9
  2. sudo ps -ef | grep セフ
  3.   
  4. sudo umount /var/lib/ceph/osd/*
  5. sudo rm -rf /var/lib/ceph/osd/*
  6. sudo rm -rf /var/lib/ceph/mon/*
  7. sudo rm -rf /var/lib/ceph/mds/*
  8. sudo rm -rf /var/lib/ceph/bootstrap-mds/*
  9. sudo rm -rf /var/lib/ceph/bootstrap-osd/*
  10. sudo rm -rf /var/lib/ceph/bootstrap-rgw/*
  11. sudo rm -rf /var/lib/ceph/tmp/*
  12. sudo rm -rf /etc/ceph/*
  13. sudo rm -rf /var/run/ceph/*

3. クライアントを構成する

3.1 クライアントをインストールする

  1. sshコピーID 192.168.58.131
  2. ceph-deploy インストール 192.168.58.131

Ceph 設定ファイルを 192.168.58.131 にコピーします。

  1. ceph-deploy 設定を 192.168.58.131 にプッシュします

3.2 新しいユーザーキーを作成する

クライアントが Ceph クラスターにアクセスするには、Ceph キーが必要です。 Ceph は、Ceph クラスターにアクセスするための十分な権限を持つデフォルトのユーザー client.admin を作成します。ただし、client.admin を他のすべてのクライアント ノードと共有することはお勧めしません。ここでは、特定のストレージ プールにアクセスするための別のキーを持つ新しいユーザー (client.rdb) を作成します。

  1. cephauthget-または-createclient.rbdmon 'allowr' osd 'allowclass-readobject_prefixrbd_children,allowrwxpool=rbd'  

192.168.58.131 の client.rbd ユーザーのキーを追加します。

  1. cephauthget-または-createclient.rbd|ssh192.168.58.131tee/etc/ceph/ceph.client.rbd.keyring

クライアント(192.168.58.131)にアクセスして、クラスタのヘルスステータスを確認します。

  1. [root@localhost ~]# cat /etc/ceph/ceph.client.rbd.keyring >> /etc/ceph/keyring
  2. [root@localhost ~]# ceph -s --name client.rbd  
  3. クラスター 86fb7c8b-9ad1-4eaf-a24c-0d2d9f36ab29
  4. 健康 HEALTH_OK
  5. monmap e2: {ceph-node01=192.168.58.128:6789/0、ceph-node02=192.168.58.129:6789/0、ceph-node03=192.168.58.130:6789/0}3 mons
  6. 選出エポック 6、クォーラム 0、1、2 ceph-node01、ceph-node02、ceph-node03
  7. osdmap e15: 3 osds: 3 アップ、3イン 
  8. フラグはビット単位でソートし、require_jewel_osds を使用します
  9. pgmap v32: 64 ページ、1 プール、0 バイト データ、0 オブジェクト
  10. 使用済み 100 MB、使用可能 45946 MB / 46046 MB
  11. 64 アクティブ+クリーン

3.3 ブロックデバイスを作成する

  1. rbd create foo --size 4096 --name client.rbd # サイズが 4096MB の RADOS ブロックデバイスを作成します 
  2. rbd create rbd01 --size 10240 --name client.rbd # サイズが 10240MB の RADOS ブロックデバイスを作成します 

ブロックデバイスのマッピング

  1. [root@localhost ceph]# rbd create rbd02 --size 10240 --image-feature layering --name client.rbd  
  2. [root@localhost ceph]# rbd map --image rbd02 --name client.rbd /dev/rdb02  
  3. /dev/rbd0

ヒント: ブロック デバイスのマッピング時に次のエラーが発生しました。

  1. [root@localhost ceph]# rbd map --image rbd01 --name client.rbd /dev/rdb01  
  2. rbd: sysfs 書き込みに失敗しました
  3. RBD イメージ機能セットが一致しません。カーネルサポートされていない機能を無効にするには   「rbd 機能を無効にする」
  4.  場合によっては、syslog役立つ情報が見つかることがあります- 「dmesg | tail」を試してください あるいはそのくらい。
  5. rbd: マップ失敗: (6)そのようなデバイスまたはアドレスはありません

この問題を解決するには、次のようにいくつかの方法があります。

1. 作成プロセス中に次のパラメータ「--image-featurelayering」を追加しても問題は解決します。

2. 以下に示すように、関連するパラメータを手動で無効にします。

  1. rbdfeaturedisablefoo排他ロック、オブジェクトマップ、高速差分、ディープフラット化

3. 各 Ceph ノードの設定ファイルに設定項目「rbd_default_features=1」を追加します。

3.4 マップされたブロックデバイスを確認する

  1. [root@localhost ceph]# rbd showmapped --name client.rbd  
  2. ID プール イメージ スナップ デバイス
  3. 0 rbd rbd02 - /dev/rbd0

デバイスを作成してマウントする

  1. fdisk -l /dev/rbd0
  2. mkfs.xfs /dev/rbd0
  3. mkdir /mnt/ceph-disk1
  4. /dev/rbd1 /mnt/ceph-disk1 をマウントします。

確認する

  1. [root@localhost ceph]# df -h /mnt/ceph-disk1/
  2. ファイルシステムの使用済み容量 使用可能使用済み % マウントポイント
  3. /dev/rbd0 10G 33M 10G 1% /mnt/ceph-disk1

ceph ブロックデバイスが作成されます。

<<:  エッジコンピューティング市場は必ず成長します。クラウドコンピューティングに取って代わることは可能でしょうか?

>>:  エッジコンピューティングがクラウドコンピューティングに取って代わる可能性は低い

推薦する

vpdime-$7 ハイエンド VPS/6g メモリ/4 コア/10G ポート/30g SSD

今日は、3年前に非常に人気があった商人から得た「言葉では言い表せない」役立つ情報を皆さんにお伝えしま...

非営利のウェブサイトの価値はクリック数だけで測れるというのは本当ですか?

最近、私の友人が非営利のウェブサイトを売りたいと考えており、交渉中の買い手がいたものの、価格に合意で...

BAT はクラウド コンピューティング市場への参入に向けて協力しています。半分は海水、半分は火でしょうか?

5月23日、アリババクラウドは武漢オプティクスバレーにてアリババクラウドカンファレンス武漢サミットを...

Baidu のハイパーリンク アルゴリズムのアップグレード後に Web サイトの外部リンク構築を改善する方法

Baidu Webmaster Platform に「ハイパーリンク不正アルゴリズムのアップグレード...

リスクがますます深刻化する中、コンテナ クラウド プラットフォームはどのようにしてセキュリティ分離を実現できるのでしょうか?

1. クラウドネイティブの技術的背景現在、デジタルトランスフォーメーションはあらゆる業界に徐々に浸透...

中国の電子商取引B2C市場には、新たな春を生み出すチャンスがまだあるのでしょうか?

中国電子商取引の現在のB2C市場構造について、福清ウェブサイト建設は、全体的な状況は基本的に決定され...

分類情報ウェブサイトの変革:Ganji と 58.com の将来は不透明

2005年にCraigslistを模倣して設立された2つの分類情報ウェブサイト、Ganji.comと...

#苦情防止ホスト# ウェアーズホスト: オランダ、スウェーデン、ブルガリア、ロシアのサーバー/VPS

warez-host.com は 2007 年に設立されました。通常は hostplay というブラ...

2018年成豊会議が氷の都ハルビンにやって来て、中小企業のインテリジェントマーケティングを支援した

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています7月24日...

Googleカスタム設定を使用してブロガーを追跡する方法

Google アナリティクスのカスタム変数は、技術的な知識があまりない Web マーケティング担当者...

DIY SEOの4つのステップは一度きりの作業ではありません

簡単に言えば、SEO は 4 つのステップに分かれています。1 つ目は基本的な基準を確立すること、2...

マイナー/PT推奨: rytechhosting-15$/Windows/1G無制限/1.5gメモリ/85gハードディスク/

rytechhosting. は、トラフィック量の多いユーザーに適した、コスト効率に優れた 2 つの...

vpsunlimited-4 USD/1 GB RAM/XEN/50 GB ハードディスク/1 TB トラフィック

vpsunlimitedさん、私に最後に会ってから少なくとも1年経ちましたよね? 2010 年にホス...

クラウドベンダーがダブル11セールに参加

また11月がやってきて、また眠れない夜がやってきました。 「独身の日」にちなんで名付けられたダブル1...

justhost - ハロウィーンホスティング 3.3% オフ/月額 2.25 ドル、無料ドメイン名付き

Justhost では、毎年恒例のハロウィーン プロモーションも実施しています。無制限の仮想ホスティ...