OpenStackのコンポーネント--cinderストレージサービス

1.cinderはじめに

1)ブロック・ストレージを理解します

収納スペースを得るために、システムを操作する、二つの一般的な方法があります。

(データベース)、または直接ハードディスクに格納された生データを用いて、(1)プロトコル(SAS、SCSI、SAN、iSCSIの、等)裸ハードディスク、および、パーティション、フォーマットによって取り付けられ、ファイルシステムを作成

(2)等NFS、CIFSプロトコルを介して、リモート・ファイル・システムをマウント

第1の方法はまた、一般的に裸ハードボリューム(体積)のそれぞれと呼ばれる、裸のハードブロックストレージ(メモリブロック)と呼ばれる第2のファイルシステムのストレージと呼ばれています。NASおよびNFSサーバー、および分散ファイル・ストレージ・システムの様々なこのすべてを提供します。

 

2)理解ブロック・ストレージ・サービス

ブロック・ストレージServicetは、ライフサイクル全体を削除するには、作成からボリュームの管理を提供します。ビュー・インスタンスの観点から、各ボリュームは、ハードドライブでマウントします。OpenStackのブロック・ストレージ・サービスは、その特定の機能である燃えがらを、提供されています。

(1)REST APIは、ボリューム、ボリュームスナップショットとボリューム・タイプを照会し、管理することができます提供

(2)ストレージ・リソースの割り当てを最適化し、ボリュームを作成するためのスケジューラのスケジューリング要求を提供

(3)このようなEMC、IBMおよび他の商業ストレージ製品とソリューションとしてLVM、NFS、セファロなどを含むドライバアーキテクチャによって、バックエンド(バックエンド)ストレージ、様々なサポート
 

3)シンダーアーキテクチャ

この図は、ロジックチャート噴石です

 

次のようにシンダーは、いくつかのコンポーネントを含みます

(1)燃えがら、火災

APIリクエストコール噴石ボリュームを受け取ります。燃えがらのアセンブリ全体は、すべての要求が最初の噴石噴石-APIによって処理され、ポータルサイトです。噴石-APIは、外の世界へのHTTP REST APIインターフェイスの数にさらされます。キーストーンでは、endponitsの噴石-APIを照会することができます。

クライアントは、指定されたアドレスendponits、要求操作の噴石-APIにリクエストを送信することができます。もちろん、エンドユーザーとして、私たちは直接のREST APIリクエストを送信しません。OpenStackのCLI、ダッシュボードおよびその他のコンポーネントは、これらのAPIを使用します燃えがらと交換する必要があります。

噴石-APIは次のようにHTTPのAPIリクエストが処理されます受け取りました。

a)は、クライアントヒト伝送パラメータが有効で確認

クライアントプロセスb)のコール噴石他のサブサービスリクエスト

C)燃えがら、他の子サービスは、シリアル番号を返し、結果がクライアントに返さ

それを受け入れることを要求した噴石-API?単純に限り、関連するボリュームのライフサイクル操作は、噴石-APIが対応できるよう、置きます。ほとんどの操作は、ダッシュボード上で見ることができます。

 

(2)噴石ボリューム

サービスボリューム、およびボリューム提供の調整、ボリューム管理のライフサイクルの管理。シンダーボリュームサービスを実行しているノードは、ストレージノードと呼ばれます。

シンダーボリュームは、ストレージノード、OpenStackのボリューム操作に実行され、最終的に燃えがらボリュームには、達成されます。実際にストレージデバイスを管理しない噴石、ボリューム自体は、ストレージデバイスは、ボリュームプロバイダによって管理されています。噴石・ボリュームとボリュームプロバイダとライフサイクル管理ボリュームを実装します。

a)のドライバアーキテクチャにより、ボリューム提供の様々なサポート

次の質問は次のとおりです。ストレージ製品とソリューション(ボリューム・プロバイダー)のように多くのブロックが存在することになります、噴石・ボリュームそれらを操作する方法?

ドライバアーキテクチャを採用します。シンダーボリュームを統一されたインタフェースの体積プロバイダとして定義され、ボリューム・プロバイダだけがプラグおよびドライバOpenStackのシステムの形に再生することができ、これらのインタフェースを実装する必要があります。

B)ノードの状態は、定期的にOpenStackのを計算し報告します

噴石ボリュームのスクリーニングは、ボリューム空き容量のストレージノード燃えがらのレポートを開始するために、定期的に行われます

C)ボリュームのライフサイクル管理を実現

最終容量のライフサイクルの噴石管理がように削除して、取り付け、拡張、作成したスナップショットのボリュームを含め、噴石ボリュームによって完成されます。

 

(3)シンダースケジューラ

スケジューラは、最も適切なストレージノードのスケジューリングアルゴリズムを選択することで、ボリュームを作成します。ボリュームを作成する場合は、噴石・スケジューラは、ストレージノードの容量に基づいて、最も適切なを選択するタイプボリューム条件、その後、ボリュームを作成することができます

 

(4)ボリューム・プロバイダ

データ記憶装置は、ボリュームの物理ストレージ容量を提供します。シンダーボリューム支持複数のボリューム・プロバイダー、各ボリューム・プロバイダ独自のドライバと燃えがらボリューム連携スルー。

 

(5)メッセージ・キュー

プロセス間通信及び相互協力燃えがらメッセージキューを介して各サブサービスの実装。メッセージキューは、サブサービス間のデカップリングを達成するため、この緩い構造は、分散システムの重要な特徴です。

 

(6)データベースの燃えがら 

いくつかのデータがありますが、データベースに格納されるのMySQLの一般的な使用を必要としています。データベースは、このようなテスト環境のように、制御ノードにインストールされている、あなたは名前「噴石」データベースにアクセスすることができます。

 

4)物理的な展開

シンダーサービスノード、制御ノードとストレージノードの2種類が展開されます。私たちは、制御ノードコントローラを見ては、*子サービスをcinder-何を実行してください。

 

制御ノード上に展開噴石-APIと噴石・スケジューラは、これは非常に合理的です。

噴石・ボリュームは、ストレージノード上に展開すべきではない操作を行います。噴石ボリュームのノードとしても、一部の学生が混同されることになる制御することができますか?

       この質問に答えるために、我々は最初の事実を把握しなければなりません:OpenStackのは、分散システムであり、各サブサービスがある限り、ネットワークが通信できるように、任意の場所に展開することができます。どのようなノード、限り、上記の噴石・ボリュームを実行すると、それはストレージノードであり、当然のことながら、そのノード上の他のOpenStackのサービスを実行することができます。

       シンダー容量ストレージノードは帽子、シンダー-APIの制御ノードは、帽子です。我々の環境、devstackコントローラ二つの帽子を着用しているので、制御ノードだけでなく、ストレージノードの両方です。もちろん、我々はまた、噴石・ボリュームを実行するために、特別なノードを使用することができます。

       これは、再び分散アーキテクチャのOpenStackの展開の柔軟性を示しています。あなたは、単一の物理マシン上のすべてのサービスを持つことができ、それは、オールインワンテスト環境として使用され、生産環境でマルチサービスで展開することができます物理マシン、優れたパフォーマンスと可用性。

一般的に、制御ノード上のRabbitMQのMySQLと。また、あなたはまた、噴石サービスcinder-でリストを表示することができます*子サービスは、どのノードに分散されています

       別の問題があります:ボリュームプロバイダがそこに?

       一般的には、ボリューム提供独立しました。シンダー容量通信ドライバプロバイダと使用量と連携。だから、ドライバや噴石・ボリュームにそれを一緒に置きます。ドライバのソースコードのディレクトリの多くは、異なるボリューム・プロバイダーのサポートは、噴石・ボリュームにあります。

その後、我々はNFSとLVMボリュームプロバイダの両方が、噴石・ボリュームを使用する例を議論するだろう、ボリュームプロバイダは、他のOpenStackのの設定ファイルを表示することができます。

 

2.燃えがらのデザイン哲学:

cinder-から1)ボリューム作成プロセス*子サービスがどのように連携するかを確認します

燃えがらはそれを学ぶために、ボリュームの作成はすべてcinder- *サブサービスをカバーし、非常に良いシーンです、次はフローチャートです。

 

(1)顧客(エンドユーザーは、OpenStackのことができ、また、他のプログラムでもよい)API(噴石-API)に要求を送信します:「私はボリュームを作成するのに役立ちます」

(2)いくつかの必要な治療を行うためのAPIリクエストは、メッセージング(RabbitMQの)にメッセージを送った:「スケジューラは、ボリュームを作成してみましょう」

(3)スケジューラ(シンダースケジューラ)メッセージングAPIをそれに送信されたメッセージ、およびその後のスケジューリング・アルゴリズムを実行することから得るため、ノードAは、ストレージカウント点複数から選択されます。

(4)スケジューラは、メッセージにメッセージを送信する:「このボリュームを作成するためにストレージノードをましょう」

ボリュームは、(5)ノードA(シンダーボリューム)に格納され、それに送られたメッセージスケジューラメッセージから取得され、その後、ドライバを介してボリュームプロバイダにボリュームを作成します。

 

2)燃えがらのデザインのアイデア

燃えがらの新星は、設計思想やその他のコンポーネントを続けています。

(1)APIのフロントエンドサービス

       顧客は、ボリューム関連の操作を実行する必要がある、とのみRESTの燃えがら-APIにリクエストを送信することができる場合にのみ、外部コンポーネントウィンドウとしてシンダーシンダー-API、露光シンダー機能は、顧客に提供することができます。エンドユーザクライアントは、ここでは、OpenStackのコマンドラインや他の構成要素を含みます。

給付設計APIフロントエンドサービス:

A)外部実装の詳細を非表示に統一されたインタフェースを提供します

b)のAPIは、標準のRESTコールサービス、サードパーティ製のシステムとの統合の容易さを提供します

c)のAPIを簡単に、このような複数のプロセスの噴石-APIを実行しているとして、複数のインスタンスのAPIサービスを実行することにより、高可用性を実現することができます

 

(2)スケジューラのスケジューリングサービス

Cinder 可以有多个存储节点,当需要创建 volume 时,cinder-scheduler 会根据存储节点的属性和资源使用情况选择一个最合适的节点来创建 volume。

调度服务就好比是一个开发团队中的项目经理,当接到新的开发任务时,项目经理会根据任务的难度,每个团队成员目前的工作负荷和技能水平,将任务分配给最合适的开发人员。

 

(3)Worker 工作服务

调度服务只管分配任务,真正执行任务的是 Worker 工作服务。

在 Cinder 中,这个 Worker 就是 cinder-volume 了。这种 Scheduler 和 Worker 之间职能上的划分使得 OpenStack 非常容易扩展:当存储资源不够时可以增加存储节点(增加 Worker)。 当客户的请求量太大调度不过来时,可以增加 Scheduler。

 

(4)Driver 框架

OpenStack 作为开放的 Infrastracture as a Service 云操作系统,支持业界各种优秀的技术,这些技术可能是开源免费的,也可能是商业收费的。

这种开放的架构使得 OpenStack 保持技术上的先进性,具有很强的竞争力,同时又不会造成厂商锁定(Lock-in)。 那 OpenStack 的这种开放性体现在哪里呢?一个重要的方面就是采用基于 Driver 的框架。

以 Cinder 为例,存储节点支持多种 volume provider,包括 LVM, NFS, Ceph, GlusterFS,以及 EMC, IBM 等商业存储系统。 cinder-volume 为这些 volume provider 定义了统一的 driver 接口,volume provider 只需要实现这些接口,就可以 driver 的形式即插即用到 OpenStack 中。下面是 cinder driver 的架构示意图:

 

 

在 cinder-volume 的配置文件 /etc/cinder/cinder.conf 中 volume_driver 配置项设置该存储节点使用哪种 volume provider 的 driver,下面的示例表示使用的是 LVM。

 

 

3.cinder服务搭建

1)环境准备

(1)数据库准备

    create database cinder;
    grant all privileges on cinder.* to 'cinder'@'localhost' identified by 'CINDER_DBPASS';
    grant all privileges on cinder.* to 'cinder'@'%' identified by 'CINDER_DBPASS';

 

(2)创建用户、服务

创建cinder用户

    openstack user create --domain default --password=cinder cinder
    +---------------------+----------------------------------+
    | Field               | Value                            |
    +---------------------+----------------------------------+
    | domain_id           | default                          |
    | enabled             | True                             |
    | id                  | b8b3fd44f25341b79da80dcaf5fd8383 |
    | name                | cinder                           |
    | options             | {}                               |
    | password_expires_at | None                             |
    +---------------------+----------------------------------+

将cinder用户设置为admin角色

    openstack role add --project service --user cinder admin

创建volume服务

    openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack Block Storage          |
    | enabled     | True                             |
    | id          | b193feeee389457cad58453c12f42453 |
    | name        | cinderv2                         |
    | type        | volumev2                         |
    +-------------+----------------------------------+


    openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | OpenStack Block Storage          |
    | enabled     | True                             |
    | id          | b2438b20776946ce918c1b54a36f3a22 |
    | name        | cinderv3                         |
    | type        | volumev3                         |
    +-------------+----------------------------------+

 

(3)创建cinder服务endpoint

    openstack endpoint create --region RegionOne volumev2 public http://node1:8776/v2/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | a84ae2d530d84f1988c478e46290f3df    |
    | interface    | public                              |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b193feeee389457cad58453c12f42453    |
    | service_name | cinderv2                            |
    | service_type | volumev2                            |
    | url          | http://node1:8776/v2/%(project_id)s |
    +--------------+-------------------------------------+


    openstack endpoint create --region RegionOne volumev2 internal http://node1:8776/v2/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | c8494d0ec1864f54a263cfe9d00b1167    |
    | interface    | internal                            |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b193feeee389457cad58453c12f42453    |
    | service_name | cinderv2                            |
    | service_type | volumev2                            |
    | url          | http://node1:8776/v2/%(project_id)s |
    +--------------+-------------------------------------+


    openstack endpoint create --region RegionOne volumev2 admin http://node1:8776/v2/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | 0cb2154bbcf14f57be74a50fbc86d231    |
    | interface    | admin                               |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b193feeee389457cad58453c12f42453    |
    | service_name | cinderv2                            |
    | service_type | volumev2                            |
    | url          | http://node1:8776/v2/%(project_id)s |
    +--------------+-------------------------------------+


    openstack endpoint create --region RegionOne volumev3 public http://node1:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | 3193d7e2959b41158df1a4780065bf34    |
    | interface    | public                              |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b2438b20776946ce918c1b54a36f3a22    |
    | service_name | cinderv3                            |
    | service_type | volumev3                            |
    | url          | http://node1:8776/v3/%(project_id)s |
    +--------------+-------------------------------------+


    openstack endpoint create --region RegionOne volumev2 internal http://node1:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | 864b120ab68645f19d286200d7b5be2d    |
    | interface    | internal                            |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b193feeee389457cad58453c12f42453    |
    | service_name | cinderv2                            |
    | service_type | volumev2                            |
    | url          | http://node1:8776/v3/%(project_id)s |
    +--------------+-------------------------------------+


    openstack endpoint create --region RegionOne volumev2 admin http://node1:8776/v3/%\(project_id\)s
    +--------------+-------------------------------------+
    | Field        | Value                               |
    +--------------+-------------------------------------+
    | enabled      | True                                |
    | id           | 08499c458d0b43e783def7b0d2a625c3    |
    | interface    | admin                               |
    | region       | RegionOne                           |
    | region_id    | RegionOne                           |
    | service_id   | b193feeee389457cad58453c12f42453    |
    | service_name | cinderv2                            |
    | service_type | volumev2                            |
    | url          | http://node1:8776/v3/%(project_id)s |
    +--------------+-------------------------------------+

 

2)配置控制节点

(1)安装相关软件

    yum install openstack-cinder -y

 

(2)修改配置文件

vim /etc/cinder/cinder.conf

[DEFAULT]
my_ip = 192.168.52.101
#glance_api_servers = http://node1:9292
auth_strategy = keystone
#enabled_backends = lvm
transport_url = rabbit://openstack:admin@node1
...
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@node1/cinder
...
[keystone_authtoken]
auth_uri = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
...
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
...

 

(3)同步数据库

    su -s /bin/sh -c "cinder-manage db sync" cinder

 

(4)启动服务

    systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
    systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

 

3)准备存储节点环境

(1)安装软件包

    yum install lvm2 -y

 

(2)添加一块硬盘并设置为SATA接口

    pvcreate /dev/sdb
      Physical volume "/dev/sdb" successfully created.
      
    vgcreate cinder-vol /dev/sdb
      Volume group "cinder-vol" successfully created

    修改配置文件
    vim /etc/lvm/lvm.conf
    devices {
    ...
    filter = [ "a/sdb/", "r/.*/"]
    ...

 

(3)启动服务

    systemctl enable lvm2-lvmetad.service
    systemctl start lvm2-lvmetad.service

 

4)配置存储节点

(1)安装相关软件包

    yum install openstack-cinder targetcli python-keystone

 

(2)修改配置文件

vim /etc/cinder/cinder.conf

[DEFAULT]
my_ip = 192.168.52.101
glance_api_servers = http://node1:9292
auth_strategy = keystone
enabled_backends = lvm
transport_url = rabbit://openstack:admin@node1
...
[database]
connection = mysql+pymysql://cinder:CINDER_DBPASS@node1/cinder
...
[keystone_authtoken]
auth_uri = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = cinder
...
[oslo_concurrency]
lock_path = /var/lib/cinder/tmp
... 
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-vol
volumes_dir = $state_path/volumes
iscsi_protocol = iscsi
iscsi_helper = lioadm
iscsi_ip_address = 192.168.52.103

 

(3)启动服务

    systemctl restart openstack-nova-api.service

    systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
    systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

 

おすすめ

転載: www.cnblogs.com/Agnostida-Trilobita/p/11302152.html