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 ブロックデバイスが作成されます。

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

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

推薦する

張一鳴は第二の点心を作ることができるか?

数日前、Douyinが「割引グループ購入」機能をテストしているというニュースがありました。これはMe...

天津のウェブサイト構築会社は、低コストのウェブサイト構築を選択すると大きな損失を被ることが多い

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

5 月の世界 Web サーバー市場シェア: Microsoft のみが市場シェアを 33.41% に増加

IDC Review Network (idcps.com) は 5 月 13 日に次のように報告し...

検索エンジンがより賢くなる方法

今日、私は王通氏の記事を見ました。その記事は主に検索エンジンのアルゴリズムの更新と調整、古い最適化方...

仮想マシンに Windows 11 をインストールするにはどうすればいいですか?

[[418362]] [51CTO.com クイック翻訳]ほとんどの人にとって、通常の PC に W...

企業はクラウドの回帰を必要としているのでしょうか?

クラウドの復帰とは、特定のワークロードとアプリケーションをパブリック クラウドからオンプレミスのデー...

ブランドマーケティング手法:ファッションのケース

ファッションブランドの価値は、強調することと隠すことの2つだけです。強調するということは、ファッショ...

inurlとintitleを組み合わせると、どの外部リンクツールよりも強力になります。

私は毎日多くのフォーラムにアクセスしていますが、どのフォーラムでも、SEO 関係者が同じ答えを求めて...

Ctrip の面接官は実際に Java 仮想マシン スタックについて質問しました。

[[393190]]みなさんこんにちは、私はいつまでも18歳のおばけです~ 「JVM メモリ領域の分...

5万元のオンラインマーケティングキャンペーンの企画経験を共有

多くのウェブマスターは、自分のウェブサイトのために何らかの活動を企画したいと考えていますが、これまで...

#推奨# BandwagonHost VPSはプライベートネットワーク機能を提供し、プライベートネットワークトラフィックは無料です

BandwagonHost は、同じコンピュータ ルーム内の VPS 間でイントラネットを確立できる...

タオバオオンラインストアの一般的なプロモーション方法の長所と短所を解読する

タオバオでオンラインストアを開設する販売者にとって、トラフィックはすべてを意味します。トラフィックが...

IT業界で稼げる女性になるには?成功からどれだけ離れているか見てみましょう。

「女性は、常に自分のことばかり考えている男性とは違います。有名な企業には、男性よりも女性が多いはずで...

ウェブサイトが含まれない問題の解決方法とその解決戦略

現在、新しい Web サイトの Web マスターにとって最も頭を悩ませている問題は、インクルードの問...

競合他社を分析してウェブサイトのランキングを向上させる方法

SEO で成功したいなら、競合相手の分析方法を学ばなければなりません。自分自身と敵を知ることで、あら...