第8回 Cinder, Swift

  • OpenStack

最終更新⽇:

掲載⽇:

 ICTインフラソリューション部のグエンです。前回は、Neutronについて説明しました。
 今回は、Cinder(仮想マシン向けのブロックストレージ)とSwift(ファイルやデータオブジェクト向けのオブジェクトストレージ) コンポーネントについて説明しようと思います。

Cinder

 Cinderは、OpenStackのブロックストレージサービスです。仮想マシン(コンピュートインスタンス)は、このサービスを使って永続的なディスクストレージを利用できます。データはブロック単位で保存されているため、必要な部分だけを簡単に更新することができます。この仕組みは、AWSのElastic Block Storage(EBS)に似ています。

 Cinderにはセカンダリアタッチという機能も含まれており、これは仮想マシンに後から追加のディスク(ボリューム)を接続する機能です。例えば、仮想マシンが作成された後でも、必要に応じて新しいブロックストレージをアタッチ(接続)し、データの保存や拡張に対応することができます。これにより、仮想マシンの容量不足などの問題に柔軟に対応することが可能です。

 また、CinderはNovaによって作成された仮想マシンやコンテナに対して、これらのボリュームを提供することができます。さらに、イメージをブロックストレージに書き込み、それを使って仮想マシンを起動する(ブート可能な永続的インスタンスを作成する)ことも可能です。

その機能には以下が含まれます:

・高可用性
・フォールトトレラント
・リカバリー可能
・コンポーネントベースのアーキテクチャ

openstack-0008_01.png


各コンポーネントの役割:

・cinder-volume:

ブロックストレージデバイスとのやり取りを管理します。必要に応じて仮想マシン用のストレージを割り当てます。

・cinder-api:

リクエストを処理し、メッセージキューに配置します。OpenStackのデプロイメントが拡張され、複数のサーバーでサービスが実行される場合、メッセージキューが重要になります。

・cinder-backup:

ボリュームを外部ストレージリポジトリにバックアップするために使用されます。

・cinder-scheduler:

リクエストを適切なボリュームサービスにスケジュールし、ルーティングします。構成に応じて、ラウンドロビンスケジューリングや最短ジョブ優先スケジューリングを行うことができます。

・データベース:

ブロックストレージシステム内のファイルに関するメタデータを提供します。

・RabbitMQサーバー:

AMQP(Advanced Messaging Queue Protocol)メッセージキューを提供します。OpenStackのトランザクション管理を処理します。

AMQPはメッセージング技術であり、ブローカーがCinderの各コンポーネント間に配置され、緩やかに結合された通信を可能にします。

ユーザーは以下の方法でCinderを利用できます:
1. REST APIを直接利用することで、Cinderの機能にプログラムからアクセスできます。これにより、詳細な操作やカスタマイズが可能です。
2. Horizonは、OpenStackのダッシュボードで、GUIを通じて簡単に操作ができ、Cinderのボリューム管理も視覚的に行えます。
3. Cinderクライアントは、コマンドラインツールで、Cinder専用の操作をCLIで実行したい場合に使います。
4. OpenStackクライアントもCLIツールですが、OpenStack全体の操作を一元的に行うことができ、Cinderを含む複数のサービスを一括で管理できます。

Swift

SwiftはOpenStackのオブジェクトストレージサービスであり、大量のデータを扱うための高可用性、分散型、一貫性のあるオブジェクトストレージシステムとして特徴づけられています。クラウド内で任意のデータの保存および取得の両方をサポートしており、ユーザーはHTTPSプロトコルを使用してオブジェクトストレージとやり取りできます。SwiftはネイティブAPIとAWSのS3(Simple Storage Service)互換APIの両方を提供します。

特徴:

・高可用性と耐障害性:

データのレプリケーションによって高い耐障害性を実現しています。通常、3つのレプリカを持つことが推奨されていますが、設定によって変更することも可能です。

・静的データの保存:

主に静的データ、メディアファイル、仮想マシンイメージのストレージとして使用されます。頻繁な更新が必要なデータには向いていません。

・コスト効率の良いストレージ:

低コストで大量のデータを安全かつ効率的に保存します。

・多用途のデータ保存:

ブロックストレージデバイスやイメージのバックアップ、ドキュメント、画像などをオブジェクトとして保存します。

オブジェクトストレージの概念:

・ストレージレプリカ:

障害が発生した場合にオブジェクトの状態を維持するため、最低3つのレプリカが推奨されます。

・ストレージゾーン:

ディスク、サーバー、データセンターなどが該当し、各レプリカを別々の物理的な場所に配置することでデータの可用性を確保します。

・ストレージリージョン:

ゾーンの集合で、通常は地理的に異なる場所にあります。各リージョンには独立したAPIエンドポイントがあります。

openstack-0008_02.png


Swiftの主なコンポーネント:

・プロキシサーバー (swift-proxy):

クライアントからのリクエストを受け取り、適切なストレージノードにルーティングする役割を担います。

・アカウント (swift-account):

管理者、テナント、ユーザーに属するアカウントを指します。アカウント データベースの検証にはKeystone認証が使用されます。

・コンテナ (swift-container):

あらゆる種類のオブジェクトを保存するために使用され、そのデータベースはコンテナ内のファイルに関連するメタデータを保持します。

・オブジェクト (swift-object):

Swiftに保存された全てのデータはオブジェクトに変換され、カスタムメタデータと共に保存されます。


Swiftには他にも swift-account、swift-container、swift-objectといったコンポーネントが含まれており、それぞれがデータの管理やメタデータの保存など異なる役割を果たします。


 第8回は以上になります。また、OpenStackのコラムはこれが最終回となります。
ここまでで、OpenStackの主要なコンポーネントについて一通り説明してきました。各回の内容が、OpenStackの理解に役立てば幸いです。

まだ他にもさまざまなコンポーネントがありますが、今回ご紹介したものが基本の要素となります。

最後までお読みいただき、ありがとうございました!
導入を検討されている方、興味を持たれた方は、是非、弊社のOpenStack導入サービスをご利用ください。