クラウド コンピューティングの発展により、Ceph はストレージ業界における Linux オペレーティング システムと同様に、最も人気のある分散ストレージ システムになりました。 Ceph はブロックストレージ、ファイルストレージ、オブジェクトストレージを統合しており、幅広いシナリオに適用でき、多くのユーザーが利用しています。この記事では、カーネルにおける Ceph クライアントの実装を紹介し、特別に中国語に翻訳されています。
Ceph は、Salesforce でブロック ストレージ サービスとして使用されているオープン ソースの統合分散ストレージ システムです。 Ceph のブロック ストレージは、データ デーモンから直接 (ゲートウェイを経由せずに) データを読み書きできるクライアント モジュールを通じて実装されます。クライアント統合エコシステムに応じて、クライアントを実装する方法は 2 つあります。
Librbd は通常、仮想マシン環境 (KVM や QEMu など) で使用され、krbd はコンテナーやベアメタル環境で使用されます。 Salesforce では、Ceph を Docker コンテナとして使用し、アプリケーション コンテナが実行されるホストに krbd モジュールをインストールします。 この記事では、Ceph カーネル クライアントの内部について説明します。この記事で取り上げる内容は次のとおりです。
krbd 初期化 krbd はカーネル モジュールです。カーネル内にブロックデバイスとして実装されています。 Ceph クライアント全体はカーネル モジュールとして実装されています (ユーザー モードのプロセスやデーモンは関連付けられていません)。 Ceph クライアントは、クラスターへの接続方法を認識するための構成ファイル (ceph.conf) を必要とし、クラスターのプロパティを認識する必要があります。この構成ファイルには通常、モニターの IP アドレス、ユーザー証明書、および Ceph 認証 (Cephx) のセキュリティ プロパティが含まれます。これらのすべての構成は、初期化中にカーネル モジュールにロードする必要があります。これが完了すると、イメージまたはボリュームのライフサイクル、接続管理、認証、ステートマシンなどの残りの実装はすべてカーネル モジュールで実行できるようになります。 Ceph 設定をカーネルモジュールにプッシュする ceph-deploy を実行してクライアントをインストールすると、Ceph クライアント (rbd で始まるコマンド) CLI コマンドによって呼び出されるバイナリがインストールされます。 rbd CLI 最初のクライアント コマンドは次のとおりです。
デフォルトでは、rbd は設定ファイル /etc/ceph/ceph.conf から設定情報を読み取ります。ファイルには、モニター アドレス (クライアントはこのアドレスを使用してモニターに接続します)、OSD アイドル タイムアウト、OSD タイムアウト、OSD 要求タイムアウト、暗号化などの情報が含まれています。設定オプションの完全なリストは、http://docs.ceph.com/docs/jewel/man/8/rbd/#kernel-rbd-krbd-options にあります。 OSD krbd 初期化 rbd mapコマンドラインコマンドは、実際にceph.confファイルの内容を読み取り、Linuxの「バス」インターフェース(/sys/bus/)を介してceph.confファイルにマッピングします。 依存関係をここで定義します: https://github.com/torvalds/linux/blob/master/include/linux/device.h バスは、プロセッサと 1 つ以上のデバイス間のチャネルです。目的は、すべてのデバイスがバス (内部の仮想プラットフォーム バスも可能) で接続されるデバイス モデルを実装することです。バスは相互に接続できます。たとえば、USB コントローラーは通常、PCI デバイスです。デバイス モデルは、バスとそれが制御するデバイス間の実際の接続を表します。 Linux デバイス モデルでは、bus_type 構造体はバスを表し、linux/device.h で定義されます。構造は次のとおりです。 この実装のソースコードは、次の ceph/ceph git リポジトリにあります: https://github.com/ceph/ceph/blob/master/src/krbd.cc KRBD構成分析 カーネル モジュールでは、構成ファイルを処理するためのエントリ ポイントは drivers/block/rbd.c (https://github.com/ceph/ceph-client/blob/for-linus/drivers/block/rbd.c) で定義されています。 静的 ssize_t rbd_add(構造体 bus_type *bus、const char *buf、size_t カウント) 接続設定 カーネル モジュールは、モニターおよび OSD との TCP 接続の確立、これらの接続の検出、問題発生時の接続の再確立、および認証を完全に担当します。この作業はすべてカーネル内で実行されます。 月曜日クライアント初期化 エントリ関数: ceph_monc_init() この関数は、まずマウント時に提供された IP アドレスを使用して一時的な monmap (build_initial_monmap()) を構築します。この操作は、クライアントがモニターとの新しい接続を確立したときに発生します。その後、認証データ構造を初期化し、接続後の初期ハンドシェイクを完了するために次のメッセージをさらに準備します。
接続の初期化 エントリ関数: ceph_con_init() この時点で、ceph_con_init() 関数 (net/ceph/messenger.c 内) が呼び出され、モニターとの接続の初期化が完了し、接続はステート マシンを介して変換されます。 ceph_con_init() はソケットを初期化し、接続を非同期的に設定するワークキュー関数を開始します。 ceph_con_workfn() 関数は、接続を次のソケット状態 (ceph_connection -> sock_state) で処理し、ESTABLISHED 状態に移行します。
接続コールバック登録 次のデータ構造は、include/linux/ceph/messenger.h で定義されています。このデータ構造は、モニター接続 (OSD への接続を含む) で接続イベントを処理するためのコールバック関数を定義します。 クライアントが接続されると、次のようなメッセージが届きます。 Mon マップ (net/ceph/mon_client.c の ceph_monc_handle_map()) Osd マップ (net/ceph/osd_client.c の ceph_osdc_handle_map()) Ceph クライアント構成ファイルにクラスター内のすべてのモニターに関する情報が含まれている場合、クライアントはすべてのモニターとの接続を確立します。ただし、クラスター内に 5 つのモニターがあるが、構成ファイルにはモニターが 1 つしかない場合です。この時点で、クライアントは構成ファイル内のモニターとの接続を確立します。モニターとの接続が中断された場合、クライアントはモニターをランダムに選択して接続を確立します (クライアントは受信した monmap を通じてすべてのモニターのリストを取得します)。 モニター接続によって OSD クライアント データ構造と接続の作成がトリガーされると、クライアントは OSD マップに関する情報を受け取ります。 カーネルソースディレクトリ内のkrbd ソースファイル:
ヘッダーファイル: インクルード/Linux/Ceph パッケージ この記事では、Ceph クライアント krbd について詳しく説明し、カーネルでの実装について説明します。同時にカーネルに実装されている各種クライアント機能のエントリ関数も紹介します。 結論 この記事では、Ceph クライアントのブロック ストレージ部分の初期化と実装の詳細について説明します。 Ceph にはカーネル内の別の部分、有名な Ceph ファイル システムがあります。この部分の内容は比較的複雑なので、翻訳者は後ほど別の記事を書いて紹介する予定です。 さらに、Linux カーネルにおける Ceph の内容には主に 3 つの側面があることを付け加えておきます。 1 つ目は、ブロック デバイスの実装である krbd の実装 (drivers/block/rbd.c 内) です。 2 つ目は、NFS に似た Ceph ファイル システム (fs/ceph ディレクトリ内) の実装です。ネットワーク経由で Ceph クラスター分散ファイルシステムへのアクセスを実装します。 3 番目はネットワーク部分 (net/ceph ディレクトリ内) で、これはパブリックであり、ブロック デバイスとファイル システムの両方で使用されます。 |
<<: 分散システムにおける「ゴースト再発」を解決するにはどうすればよいでしょうか?
>>: DevOps がクラウド コンピューティングに影響を与える 5 つの領域
企業の事業運営の核となる結果は顧客の心の中にあり、顧客の選択に影響を与えます。この核となる結果がブラ...
みなさんこんにちは。私は徐子宇です。百度は最近、アルゴリズムを調整している。6月22日と28日に低品...
Baidu のアルゴリズムの調整により、私たちウェブマスターは方向を見失い、混乱しています。リンクだ...
Web2.0の代表的な存在であるブログは、ファンが自分の個人ブログを作成し、学習体験を共有したり、日...
サイトを取得すると、通常、どのように始めればよいかわかりません。外部リンクやコンテンツを作成する必要...
周知のとおり、電子商取引の活発な発展は、SEO 業界の促進に重要な役割を果たしてきました。このような...
多くの優秀なウェブサイトのSEO担当者がSEOウェブサイト最適化を実行するとき、彼らはまるで海を渡る...
ダブル11は終わったが、それをめぐる議論はまだ続いている。先週、私は「キャメルは3.8億元でダブル1...
ホスティング会社 sugarhost は 10 月のプロモーションを開始し、通常の仮想ホスティングと...
エッジ コンピューティングは製造業界において革命的なテクノロジーとなり、企業の運営方法を変え、プロセ...
8 月に、スピンサーバーは超高構成の米国独立サーバーを超格安で提供するプロモーションを開始しました。...
テンセントは3月23日、2021年第4四半期および通年の財務報告書を発表した。そのうち、「金融テクノ...
上海SEO小建は、中国のWordPressを使用するユーザーに対し、オールインワンSEOプラグインを...
Dede を使ってウェブサイトを構築する人は多いと思います。多くの場合、templates\defa...
SEO業界が中国に初めて導入されたとき、人々はSEOが不正行為であると誤解することが多かった。しかし...