AvailabilityZoneandHostAggrigate 
(Havanaの場合) 
1発書いたきり確認してないです。間違ってたらごめん。 
@ishikawa84g
はじめに 
• 
本資料作成にあたり日本OpenStackユーザ会会長中島倫明様 の資料を参考にさせていただきました。ありがとうございまし た。 
•http://www.slideshare.net/irix_jp/josug-13thstudyregionandazahcells-v2 
• 
本資料はHavana時点での検証をまとめたものです。Icehouse, Junoでは 本内容と動作・仕様が異なる場合があります。 
• 
分散環境の対象はAvailabilityZone, HostAggregateのみとし、Region, Cellについて対象外としています。
もくじ 
• 
OpenStackにおける分散環境の区分 
• 
AvailabiltyZoneとHostAggregateの概要 
• 
Novaの設定 
• 
HostAggregateの利用方法 
• 
AvailabilityZoneの利用方法 
• 
AvailabilityZoneをまたがるHostAggregateの利用方法 
• 
CinderにおけるAvailabilityZone 
• 
Nova・CinderのAvailabiltyZone連携 
• 
未検証の事項について 
• 
今後期待する機能
OpenStackにおける分散環境の区分 
1. 
OpenStackそのものの分散 
• 
複数のOpenStackが別サイトで存在する。 
• 
コンピュートをはじめ、ネットワーク、イメージ共有、認証、 AMQP、データベースなどが分散される。 
• 
Region やCell 
2. 
仮想マシンの分散 
• 
ネットワーク、認証、AMQP、データベースはそのままに、 コンピュートだけが分散される。 
• 
分散の対象はコンピュートノード 
• 
Availability Zone (AZ) やHost Aggregate (AG) 
• 
主にNovaに実装された機能 
対象
RegionOne 
RegionTwo 
・Nova 
・Glance 
・Keystone 
など 
・MySQL 
・RabbitMQ 
・Memcached 
Shared Nothing 
TopCell 
nova-api 
Glance 
Keystone 
nova-cell 
DB 
Child Cells1 
AMQP 
nova-cell 
Child Cells2 
AMQP 
Grandchild Cells 
AMQP 
DB 
AMQP 
DB 
nova- scheduler 
AZ1 
AZ2 
compute 
compute 
compute 
compute 
compute 
compute 
compute 
compute 
AG1 
AG3 
AG2
AvailabiltyZoneの概要 
• 
管理者が明示的に指定する 
• 
ユーザは定義済みのAZを利用し、仮想マシンの配置先を指定する。 
• 
OpenStackクラスタ(リージョン)内での仮想マシンの配置を ユーザが選択できるようにする。 
• 
例えば、ラック単位、フロア単位、データセンター単位 
3F 
(AZ3) 
2F 
(AZ2) 
第2DC RACK1 
(AZ22A) 
第2DC RACK2 
(AZ22B)
HostAggregateの概要 
• 
管理者が明示的に指定する。 
• 
リージョン内で仮想マシンの配置に法則を与える。 
• 
どのマシンに配置するかをユーザは意識をしない。 
• 
インスタンスタイプを決めるだけで良い。 
• 
例えば、「チープなサーバ群とハイスペックなサーバ群の分割」 や「ハイパーバイザでの分割」 
AG1 
AG2 
AG3 
KVM: ロースペック 
KVM: ハイペック 
VMWare
Novaの設定 
• 
AvailabilityZibe, HostAggregateはどちらもスケジューラを利用する。 
• 
スケジューラのフィルタを設定することで利用可能になる。 
• 
nova.conf内、scheduler_default_filtersを設定 
• 
初期値 
• 
変更 
• 
初期値のComputeCapabilitiesFilterを指定しているとHostAggregate設定 時エラーとなる。 
scheduler_default_filters=RetryFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,AvailabilityZoneFilter 
scheduler_default_filters=RetryFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,AvailabilityZoneFilter,AggregateInstanceExtraSpecsFilter
Novaの設定 
• 
nova.conf内でAvailabilityZone, HostAggregateの設定に関わる オプションは以下の通り 
パラメータ 
初期値 
説明 
internal_service_availability_zone 
internal 
インターナルサービスのデフォルトゾーン 
nova-consoleauthなどのデフォルトゾーン名 
default_availability_zone 
nova 
コンピュートノードのデフォルトゾーン名 
default_schedule_zone 
(なし) 
ゾーンを指定していない場合に指定されるゾーン名 
nova boot 時、ゾーンを指定しなければこのゾーンが 利用される 
ゾーンが複数ある場合、ゾーン名を指定しないとエ ラーになる 
cinder_cross_az_attach 
true 
コンピュートノードが所属するゾーンとcinder- volumeが所属するゾーンが異なった場合、Attache を許可/拒否する 
true:Attacheを許可する 
false: Attacheを拒否する
HostAggregateの利用
HostAggregateの利用 
• 
HostAggregateを利用するためのコマンドについて解説を行う。 
• 
全ての操作はadmin roleを持ったユーザで行う。 
• 
一般ユーザは設定・参照を行えない。 
$ nova aggregate-list 
ERROR: Policy doesn‘t allow compute_extension:aggregatesto be performed. (HTTP 403) 
(Request-ID: req-c56d3e53-231c-41d3-8a4c-80d8a1cb48aa) 
$ nova aggregate-list 
+----+---------+-------------------+ 
| Id | Name | Availability Zone | 
+----+---------+-------------------+ 
| 1 | ag1-web | None | 
+----+---------+-------------------+ 
一般 
admin
zone name: nova 
HostAggregateの利用 
• 
参考に以下のような構成でHostAggregateを作成する。 
• 
Web用AGとDB用AGを作成し、それぞれのHostAggregateに2 台のコンピュートノードを紐付ける。 
ag1-web 
ag1-db 
com001 
com002 
com003 
com004
nova コマンドによる設定(1/6) 
• 
任意のHostAggregateを作成する 
• 
usage: nova aggregate-create <name> [<availability-zone>] 
• 
ここではWeb用HostAggregateとDB用HostAggregateを作成する 
$ nova aggregate-create ag1-web 
$ nova aggregate-create ag1-db 
+----+---------+-------------------+-------+----------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+-------+----------+ 
| 1 | ag1-web | None | [] | {} | 
| 2 | ag1-db | None | [] | {} | 
+----+---------+-------------------+-------+----------+
nova コマンドによる設定(2/6) 
• 
作成したHostAggregateとホストを紐付ける 
• 
usage: nova aggregate-add-host <aggregate> <host> 
• 
ここでは、AG ID(AGNameでも可)とホスト名を指定する。 
• 
ホスト名はnova-manage service list で表示されるホスト名 
$ nova aggregate-add-host 1 com001 
$ nova aggregate-add-host 1 com002 
$ nova aggregate-add-host 2 com003 
$ nova aggregate-add-host 2 com004 
+----+---------+-------------------+------------------------+----------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+------------------------+----------+ 
| 1 | ag1-web | None | [u'com001', u'com002'] | {} | 
| 2 | ag1-db | None | [u'com003', u'com004'] | {} | 
+----+---------+-------------------+------------------------+----------+ 
※ nova aggregate-detailsの結果を参考に出力した
nova コマンドによる設定(3/6) 
• 
HostAggregateを識別するためのメタデータを設定する 
• 
usage: nova aggregate-set-metadata <aggregate> <key=value> [<key=value> ...] 
$ nova aggregate-set-metadata 1 web=true 
$ nova aggregate-set-metadata 2 db=true 
Aggregate 2 has been successfully updated. 
+----+---------+-------------------+------------------------+-------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+------------------------+-------------------+ 
| 1 | ag1-web | None | [u'com001', u'com002'] | {u'web': u'true'} | 
| 2 | ag1-db | None | [u'com003', u'com004'] | {u'db': u'true'} | 
+----+---------+-------------------+------------------------+-------------------+
nova コマンドによる設定(4/6) 
• 
HostAggregateの詳細情報を表示する 
• 
usage: nova aggregate-details <aggregate> 
$ nova aggregate-details ag1-web 
$ nova aggregate-details ag1-db 
+----+---------+-------------------+------------------------+-------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+------------------------+-------------------+ 
| 1 | ag1-web | None | [u'com001', u'com002'] | {u'web': u'true'} | 
| 2 | ag1-db | None | [u'com003', u'com004'] | {u'db': u'true'} | 
+----+---------+-------------------+------------------------+-------------------+ 
※出力をまとめている。実際は指定したHostAggregateのみを表示する。
nova コマンドによる設定(5/6) 
• 
HostAggregate用のFlavorを作成する 
• 
usage: nova flavor-create [--ephemeral <ephemeral>] [--swap <swap>] [--rxtx-factor <factor>] [--is-public <is-public>] <name> <id> <ram> <disk> <vcpus>
nova コマンドによる設定(5/6) 
$ nova flavor-create ag1.web 6 1024 10 1 
$ nova flavor-create ag1.db 7 1024 20 1 
+----+---------+-----------+------+-----------+------+-------+-------------+-----------+ 
| ID | Name | Memory_MB| Disk | Ephemeral | Swap | VCPUs | RXTX_Factor| Is_Public| 
+----+---------+-----------+------+-----------+------+-------+-------------+-----------+ 
| 6 | ag1.web | 1024 | 10 | 0 | | 1 | 1.0 | True | 
| 7 | ag1.db | 1024 | 20 | 0 | | 1 | 1.0 | True | 
+----+---------+-----------+------+-----------+------+-------+-------------+-----------+ 
$ nova flavor-list 
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
| ID | Name | Memory_MB| Disk | Ephemeral | Swap | VCPUs | RXTX_Factor| Is_Public| 
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ 
| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True | 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| 
| 6 | ag1.web | 1024 | 10 | 0 | | 1 | 1.0 | True | 
| 7 | ag1.db | 1024 | 20 | 0 | | 1 | 1.0 | True | 
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
nova コマンドによる設定(6/6) 
• 
作成したHostAggregateとFlavorを関連付ける。 
• 
AG:メタデータとFlavorのキー同士を関連付けることができる。 
• 
usage: nova flavor-key <flavor> <action> <key=value> [<key=value> ...] 
• 
Flavorを選択すると同時に定義したHostAggregateを利用する ように設定を行う。 
• 
Flavorにkeyをセットすることで、ユーザがFlavorを指定するだけで事 前に定義したHostAggregateが自動的に選択されるようになる。 
• 
このkeyはHostAggregateのメタデータと比較が行われる。 
$ nova flavor-key 6 set web=true 
$ nova flavor-key 7 set db=true
nova コマンドによる設定(6/6) 
$ nova flavor-show 6 
+----------------------------+-------------------+ 
| Property | Value | 
+----------------------------+-------------------+ 
| name | ag1.web | 
| ram | 1024 | 
| OS-FLV-DISABLED:disabled| False | 
| vcpus| 1 | 
| extra_specs| {u'web': u'true'} | 
| swap | | 
| os-flavor-access:is_public| True | 
| rxtx_factor| 1.0 | 
| OS-FLV-EXT-DATA:ephemeral| 0 | 
| disk | 10 | 
| id | 6 | 
+----------------------------+-------------------+ 
$ nova flavor-show 7 
+----------------------------+-------------------+ 
| Property | Value | 
+----------------------------+-------------------+ 
| name | ag1.db | 
| ram | 1024 | 
| OS-FLV-DISABLED:disabled| False | 
| vcpus| 1 | 
| extra_specs| {u'db': u'true'} | 
| swap | | 
| os-flavor-access:is_public| True | 
| rxtx_factor| 1.0 | 
| OS-FLV-EXT-DATA:ephemeral| 0 | 
| disk | 20 | 
| id | 7 | 
+----------------------------+-------------------+
インスタンスの起動 
• 
作成したFlavorを指定することで任意のHostAggregateを指定 できるようになる。 
• 
ただし、ユーザからはHostAggregate(起動させるコンピュー トノード)を意識することはできず、あくまでFlavorを選択して いるだけに過ぎない。 
$ nova boot --flavor ag1.web--image IMAGE_UUID --num-instances 10  
--security-groups default --nicNW_UUID cirros 
$ sudo nova-manage vm list 2> /dev/null 
instance node type state 
cirros-afa67382-7fc2-43b8-afbd-e2c42f972a96 com002 ag1.webactive 
cirros-dabf3e5c-e501-4c3a-98f8-24ea13711a3a com001 ag1.webactive 
cirros-dd5441e6-2e66-4dca-8fb4-77552a8a37a8 com002 ag1.webactive 
(省略) 
・・・ 
・・・ 
・・・
nova コマンドによる設定(参考) 
• 
作成したHostAggregateを削除する。 
• 
usage: nova aggregate-remove-host <aggregate> <host> 
• 
以下の順番でHostAggregateに関係する設定を削除する 
1. 
Flavor削除する 
2. 
HostAggregateとホストの関連付けを解除する 
3. 
HostAggregate削除する
AailabilityZoneの利用
AailabilityZoneの利用 
• 
AvailabilityZoneを利用するためのコマンドについて解説を行う。 
• 
設定は管理者権限を持つユーザで行う。 
• 
一般ユーザは一部の情報について参照だけが行える。 
• 
AvailabilityZoneはNovaインストール時に、 
• 
internal_service_availability_zoneで定義されたゾーンが作成される。 
• 
default_availability_zoneで定義されたゾーンがデフォルトで作成される。 
internal_service_availability_zone 
(internal) 
nova-cert, nova-conductor, nova-scheduler, nova- consoleauth 
など 
default_availability_zone 
(nova) 
nova-compute
AailabilityZoneの利用 
• 
nova boot時、自動的に選択されるゾーンは default_schedule_zoneで指定する。 
• 
存在しないゾーンを指定しているまたはゾーンを指定していない場合 はインスタンス作成時にエラーとなる。 
• 
NovaのAvailabilityZoneとCinderのAvailabilityZoneが異なっ てもボリュームをアタッチできるようにするには cinder_cross_az_attach=trueを指定する
AailabilityZoneの利用 
$ nova availability-zone-list 
+------+-----------+ 
| Name | Status | 
+------+-----------+ 
| nova | available | 
+------+-----------+ 
一般
AailabilityZoneの利用 
$ nova availability-zone-list 
+-----------------------+----------------------------------------+ 
| Name | Status | 
+-----------------------+----------------------------------------+ 
| internal | available | 
| |-ctrl001 | | 
| | |-nova-conductor | enabled :-) 2014-08-06T06:13:40.000000 | 
| | |-nova-cert | enabled :-) 2014-08-06T06:13:42.000000 | 
| | |-nova-consoleauth| enabled :-) 2014-08-06T06:13:43.000000 | 
| | |-nova-scheduler | enabled :-) 2014-08-06T06:13:43.000000 | 
| nova | available | 
| |-com003 | | 
| | |-nova-compute | enabled :-) 2014-08-06T06:13:38.000000 | 
| |-com002 | | 
| | |-nova-compute | enabled :-) 2014-08-06T06:13:40.000000 | 
| |-com001 | | 
| | |-nova-compute | enabled :-) 2014-08-06T06:13:39.000000 | 
| |-com004 | | 
| | |-nova-compute | enabled :-) 2014-08-06T06:13:45.000000 | 
+-----------------------+----------------------------------------+ 
admin
ag-zone02 
ag-zone01 
AailabilityZoneの利用 
• 
参考に以下のような構成でAvailabilityZoneを作成する。 
• 
2つのAvailabilityZoneを作成し、それぞれのAvailabilityZone に2台のコンピュートノードを紐付ける。 
com001 
com002 
com003 
com004 
ag1-az1 
ag2-az2
nova コマンドによる設定(1/2) 
• 
AvailabilityZoneを定義する 
• 
usage: nova aggregate-create <name> [<availability-zone>] 
• 
HostAggregate作成時、HostAggregate名とあわせて AvailabilityZone名を指定することでAvailabilityZoneが作成される。 
• 
AvailabilityZoneの作成にaggregate-createを利用しているが、 これはAvailabilityZoneの機能がHostAggregateに統合された ためである。
nova コマンドによる設定(1/2) 
$ nova aggregate-create ag1-az1 ag-zone01 
$ nova aggregate-create ag2-az2 ag-zone02 
$ nova aggregate-list 
+----+---------+-------------------+ 
| Id | Name | Availability Zone | 
+----+---------+-------------------+ 
| 3 | ag1-az1 | ag-zone01 | 
| 4 | ag2-az2 | ag-zone02 | 
+----+---------+-------------------+
nova コマンドによる設定(2/2) 
• 
作成したHostAggregateとホストを紐付ける 
• 
usage: nova aggregate-add-host <aggregate> <host> 
• 
ここでは、AG ID(AGNameでも可)とホスト名を指定する。 
• 
ホスト名はnova-manage service list で表示されるホスト名 
$ nova aggregate-add-host 3 com001 
$ nova aggregate-add-host 3 com002 
$ nova aggregate-add-host 4 com003 
$ nova aggregate-add-host 4 com004
nova コマンドによる設定(2/2) 
$ nova aggregate-details 3 
$ nova aggregate-details 4 
+----+---------+-------------------+------------------------+--------------------------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+------------------------+--------------------------------------+ 
| 3 | ag1-az1 | ag-zone01 | [u'com001', u'com002'] | {u'availability_zone': u'ag-zone01'} | 
| 4 | ag2-az2 | ag-zone02 | [u'com003', u'com004'] | {u'availability_zone': u'ag-zone02'} | 
+----+---------+-------------------+------------------------+--------------------------------------+ 
※出力をまとめている。実際は指定したHostAggregateのみを表示する
nova コマンドによる設定(2/2) 
$ nova availability-zone-list 
+-----------------------+----------------------------------------+ 
| Name | Status | 
+-----------------------+----------------------------------------+ 
| internal | available | 
| |-ctrl001 | | 
| | |-nova-conductor | enabled :-) 2014-01-16T07:26:41.000000 | 
| | |-nova-cert | enabled :-) 2014-01-16T07:26:36.000000 | 
| | |-nova-consoleauth| enabled :-) 2014-01-16T07:26:36.000000 | 
| | |-nova-scheduler | enabled :-) 2014-01-16T07:26:36.000000 | 
| ag-zone01 | available | 
| |-com002 | | 
| | |-nova-compute | enabled :-) 2014-01-16T07:26:41.000000 | 
| |-com001 | | 
| | |-nova-compute | enabled :-) 2014-01-16T07:26:40.000000 | 
| ag-zone02 | available | 
| |-com003 | | 
| | |-nova-compute | enabled :-) 2014-01-16T07:26:39.000000 | 
| |-com004 | | 
| | |-nova-compute | enabled :-) 2014-01-16T07:26:36.000000 | 
+-----------------------+----------------------------------------+
インスタンスの起動 
• 
HostAggregateとは異なり、flavorは関係しない。 
• 
ただし、Zone を指定する必要がある。 
$ nova boot --flavor m1.tiny --image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone01cirros 
$ sudo nova-manage vm list 2> /dev/null 
instance node (省略) zone 
cirros-0cf0c695-2797-4c86-8daf-78f951735b9e com002 ・・・ag-zone01 
cirros-37d253bd-24e1-49d5-89e5-4e16fd2d45a3 com001・・・ag-zone01 
cirros-5b433557-7812-4c78-90f9-262b3c062563 com002・・・ag-zone01 
cirros-1623d65b-1359-4284-a737-b96e02baaa89 com001 ・・・ag-zone01
インスタンスの起動 
$ nova boot --flavor m1.tiny --image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone02cirros 
$ sudo nova-manage vm list 2> /dev/null 
instance node (省略) zone 
cirros-57e139aa-664b-439b-846a-2319885fe7e5 com004・・・ag-zone02 
cirros-7507c166-d0dc-4e27-a1ff-1f730922383f com003 ・・・ag-zone02 
cirros-be65cc97-fd7e-433c-bf9f-7ea44f0169e5 com004 ・・・ag-zone02 
cirros-79bee77d-90bf-44f7-a656-6360d25c368f com003 ・・・ag-zone02 
• 
ゾーンを指定しない場合は、default_schedule_zoneで指定したゾーン が自動的に選択される。 
• 
存在しないゾーンを指定した場合やdefault_schedule_zoneで指定した ゾーンが存在しない場合はエラーとなる。
AvailabilityZoneをまたがる HostAggregateの利用方法
AvailabilityZoneをまたがるHostAggregateの利用方法 
• 
HostAggregateはAvailabilityZoneをまたがることもできる。 
• 
FavorでHostAggregateを指定しつつ、AvailabilityZoneを指 定することで、指定したAvailabilityZone内で定義されている HostAggregateにだけインスタンスを配置することができる。
AvailabilityZoneをまたがるHostAggregateの利用方法 
• 
以下のような構成でAvailabilityZoneとHostAggregateを作成する。 
• 
2つのAvailabilityZoneを作成し、それぞれのAvailabilityZoneに2台 のコンピュートノードを紐付ける。 
• 
HostAggregate(ag1-web)を作成し、全ノードと紐付ける。 
ag-zone02 
ag-zone01 
com001 
com002 
com003 
com004 
ag1-az01 
ag2-az02 
ag1-web
novaコマンドによる設定(1/4) 
• 
1つのHostAggregateを作成する。 
• 
2つのAvailabilityZoneを作成する。 
$ nova aggregate-create ag1-az01 ag-zone01 
$ nova aggregate-create ag2-az02 ag-zone02 
$ nova aggregate-create ag1-web
nova コマンドによる設定(2/4) 
• 
HostAggregate識別用のメタデータを付与する。 
• 
Flavorを作成し、HostAggregateと紐付ける。 
$ nova aggregate-set-metadata 5 web=true 
Aggregate 5 has been successfully updated. 
+----+---------+-------------------+-------+-------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+---------+-------------------+-------+-------------------+ 
| 5 | ag1-web | None | [] | {u'web': u'true'} | 
+----+---------+-------------------+-------+-------------------+ 
$ nova flavor-create ag1.web 6 1024 10 1
nova コマンドによる設定(3/4) 
• 
HostAggregateの状態を確認する。 
$ nova aggregate-details 5 
$ nova aggregate-details 6 
$ nova aggregate-details 7 
+----+----------+-------------------+-------+--------------------------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+----------+-------------------+-------+--------------------------------------+ 
| 5 | ag1-web | None | [] | {u'web': u'true'} | 
| 6 | ag1-az01 | ag-zone01 | [] | {u'availability_zone': u'ag-zone01'} | 
| 7 | ag2-az02 | ag-zone02 | [] | {u'availability_zone': u'ag-zone02'} | 
+----+----------+-------------------+-------+--------------------------------------+ 
※出力をまとめている。実際は指定したHostAggregateのみを表示する
nova コマンドによる設定(4/4) 
• 
HostAggregateとホストを関連付ける 
$ nova aggregate-add-host 5 com001 
$ nova aggregate-add-host 5 com002 
$ nova aggregate-add-host 5 com003 
$ nova aggregate-add-host 5 com004 
$ nova aggregate-add-host 6 com001 
$ nova aggregate-add-host 6 com002 
$ nova aggregate-add-host 7 com003 
$ nova aggregate-add-host 7 com004
nova コマンドによる設定(4/4) 
$ nova aggregate-details 5 
$ nova aggregate-details 6 
$ nova aggregate-details 7 
+----+----------+-------------------+----------------------------------------------+--------------- -----------------------+ 
| Id | Name | Availability Zone | Hosts | Metadata | 
+----+----------+-------------------+----------------------------------------------+--------------- -----------------------+ 
| 5 | ag1-web | None | [u'com001', u'com002', u'com003', u'com004'] | {u'web': u'true'} | 
| 6 | ag1-az01 | ag-zone01 | [u'com001', u'com002'] | {u'availability_zone': u'ag-zone01'} | 
| 7 | ag2-az02 | ag-zone02 | [u'com003', u'com004'] | {u'availability_zone': u'ag-zone02'} | 
+----+----------+-------------------+----------------------------------------------+--------------- -----------------------+
novaコマンドによる設定(4/4) 
$ nova availability-zone-list 
+-----------------------+----------------------------------------+ 
| Name | Status | 
+-----------------------+----------------------------------------+ 
| internal | available | 
| |-ctrl001 | | 
| | |-nova-conductor | enabled :-) 2014-08-06T08:08:31.000000 | 
| | |-nova-cert | enabled :-) 2014-08-06T08:08:38.000000 | 
| | |-nova-consoleauth| enabled :-) 2014-08-06T08:08:38.000000 | 
| | |-nova-scheduler | enabled :-) 2014-08-06T08:08:39.000000 | 
| ag-zone01 | available | 
| |-com002 | | 
| | |-nova-compute | enabled :-) 2014-08-06T08:08:31.000000 | 
| |-com001 | | 
| | |-nova-compute | enabled :-) 2014-08-06T08:08:31.000000 | 
| ag-zone02 | available | 
| |-com003 | | 
| | |-nova-compute | enabled :-) 2014-08-06T08:08:30.000000 | 
| |-com004 | | 
| | |-nova-compute | enabled :-) 2014-08-06T08:08:37.000000 | 
+-----------------------+----------------------------------------+
インスタンスの起動 
• 
Flavor: ag1.web と合わせてZone: ag-zone01 を指定した場 合はag1.web で定義されたホストかつag-zone01に属すホス トのどこかにインスタンスが作成される。 
$ nova boot --flavor ag1.web--image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone01cirros 
$ sudonova-manage vmlist 2> /dev/null 
instance node type zone 
cirros-9cf59ffe-2a31-48c4-b081-e2b732004b70 com002 ag1.webag-zone01 
cirros-f283608c-14f0-4da0-a02f-8147f7c044c6 com001 ag1.webag-zone01 
cirros-9594b32a-6ff8-43db-ada3-106494bc3b85 com002 ag1.webag-zone01 
cirros-03861c7d-a356-4e88-9acb-f1980e2ea942 com001 ag1.webag-zone01 
• 
指定したHostAggregateが存在しないAvailabilityZoneを選択 すると起動時エラーとなる。
Cinderにおける AvailabilityZone
CinderにおけるAvailabilityZone 
• 
CinderでもAvailabilityZoneが利用できる。 
• 
ただし、Nova程多くのことができるわけではない。 
• 
過去にNovaからForkした時の引き継いだものが残っているだけ? 
• 
Cinder AvailabilityZoneはコマンドから作成することができな い。 
• 
サービス認識時にcinder.conf内storage_availability_zone(初期値: nova)に指定されたものが作成される。 
• 
後から変更できるかどうかは不明。 
• 
データベースに向けてupdate文を直接実行する必要がある。?
Cinderの設定 
パラメータ 
初期値 
説明 
default_availability_zone 
(なし) 
ボリューム作成時、AvailabilityZoneを指定して いない場合にデフォルトで指定されるゾーン名。 
storage_availability_zone 
nova 
cinder-volumeが所属するAvailabilityZone。 
サービス認識時に自動的に作成される。 
コマンド等で後から変更はできない。 
• 
cinder.conf内でAvailabilityZoneの設定に関わるオプションは 以下の通り
AvailabilityZoneの確認 
• 
ノード: vol001 のstorage_availability_zoneにvol001を指定 した場合の出力は以下の通り 
$ cinder availability-zone-list 
+--------+-----------+ 
| Name | Status | 
+--------+-----------+ 
| vol001 | available | 
+--------+-----------+ 
$ sudocinder-manage host list 2> /dev/null 
host zone 
vol001 vol001
ボリュームの作成 
• 
cinder create の際、アベイラビリティゾーンを指定すること で狙ったゾーンに対してボリューム作成をすることができる。 
$ cinder create --availability-zone vol0011 
$ cinder show 7775727e-8ee5-417f-91a5-f680d2b2ff34 
+---------------------+--------------------------------------+ 
| Property | Value | 
+---------------------+--------------------------------------+ 
| attachments | [] | 
| availability_zone| vol001| 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| 
| id | 7775727e-8ee5-417f-91a5-f680d2b2ff34 | 
| metadata | {} | 
| size | 1 | 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| 
| status | available | 
| volume_type| None | 
+---------------------+--------------------------------------+
ボリュームの作成 
• 
--availability-zoneで指定したゾーンが存在しない場合はエ ラーとなる。 
• 
Horizonを使用した場合、AvailabilityZoneの指定ができずエ ラーになる。
Nova・Cinderの AvailabiltyZone連携
Nova・CinderのAvailabiltyZone連携 
• 
NovaとCinderのAvailabilityZoneが連携できる機能はただ1つ。 
• 
インスタンスが所属するAvailabilityZoneと ボリュームが所属するAvailabilityZoneが異なった場合、 アタッチを許可するか、拒否するか。だけである。 
• 
設定はnova.confで行う。 
パラメータ 
初期値 
説明 
cinder_cross_az_attach 
true 
コンピュートノードが所属するゾーンとcinder- volumeが所属するゾーンが異なった場合、Attache を許可/拒否する 
true:Attacheを許可する 
false: Attacheを拒否する
Nova・CinderのAvailabiltyZone連携 
• 
cidner_cross_az_attache=trueの場合 
• 
それぞれのAvailabilityZoneを評価しない。すべてAttache可能。 
Zone01 
Zone02 
Zone01 
Zone02 
Nova 
Cinder 
Attach
Nova・CinderのAvailabiltyZone連携 
• 
cidner_cross_az_attache=falseの場合 
• 
それぞれのAvailabilityZoneを評価し、ゾーンが異なる場合はエラーとなる。 
• 
[Wed Aug 06 07:43:19.809457 2014] [:error] [pid1647:tid 140731145422592] Recoverable error: Invalid volume: Instance and volume not in same availability_zone(HTTP 400) (Request-ID: req-f8dba15b-6617-4500-ba3c-089c41154943) 
Zone01 
Zone02 
Zone01 
Zone02 
Nova 
Cinder 
Attach
今後期待する機能
今後期待する機能 
• 
AvailabilityZoneの柔軟性向上 
• 
AvailabilityZone単位で活性化/非活性化 
• 
大規模障害時など、対象AvailabilityZoneへのアクセスを禁止する等 
• 
プロジェクト単位で見えるAvailabilityZoneを指定 
• 
AvailabilityZone単位のQuota設定 
• 
Cinderに全うなAvailabilityZone機能実装を! 
• 
AvailabilityZone単位で利用するネットワークを選択する(Neutron 連携)
おしまい

AvailabilityZoneとHostAggregate

  • 1.
  • 2.
    はじめに • 本資料作成にあたり日本OpenStackユーザ会会長中島倫明様の資料を参考にさせていただきました。ありがとうございまし た。 •http://www.slideshare.net/irix_jp/josug-13thstudyregionandazahcells-v2 • 本資料はHavana時点での検証をまとめたものです。Icehouse, Junoでは 本内容と動作・仕様が異なる場合があります。 • 分散環境の対象はAvailabilityZone, HostAggregateのみとし、Region, Cellについて対象外としています。
  • 3.
    もくじ • OpenStackにおける分散環境の区分 • AvailabiltyZoneとHostAggregateの概要 • Novaの設定 • HostAggregateの利用方法 • AvailabilityZoneの利用方法 • AvailabilityZoneをまたがるHostAggregateの利用方法 • CinderにおけるAvailabilityZone • Nova・CinderのAvailabiltyZone連携 • 未検証の事項について • 今後期待する機能
  • 4.
    OpenStackにおける分散環境の区分 1. OpenStackそのものの分散 • 複数のOpenStackが別サイトで存在する。 • コンピュートをはじめ、ネットワーク、イメージ共有、認証、 AMQP、データベースなどが分散される。 • Region やCell 2. 仮想マシンの分散 • ネットワーク、認証、AMQP、データベースはそのままに、 コンピュートだけが分散される。 • 分散の対象はコンピュートノード • Availability Zone (AZ) やHost Aggregate (AG) • 主にNovaに実装された機能 対象
  • 5.
    RegionOne RegionTwo ・Nova ・Glance ・Keystone など ・MySQL ・RabbitMQ ・Memcached Shared Nothing TopCell nova-api Glance Keystone nova-cell DB Child Cells1 AMQP nova-cell Child Cells2 AMQP Grandchild Cells AMQP DB AMQP DB nova- scheduler AZ1 AZ2 compute compute compute compute compute compute compute compute AG1 AG3 AG2
  • 6.
    AvailabiltyZoneの概要 • 管理者が明示的に指定する • ユーザは定義済みのAZを利用し、仮想マシンの配置先を指定する。 • OpenStackクラスタ(リージョン)内での仮想マシンの配置を ユーザが選択できるようにする。 • 例えば、ラック単位、フロア単位、データセンター単位 3F (AZ3) 2F (AZ2) 第2DC RACK1 (AZ22A) 第2DC RACK2 (AZ22B)
  • 7.
    HostAggregateの概要 • 管理者が明示的に指定する。 • リージョン内で仮想マシンの配置に法則を与える。 • どのマシンに配置するかをユーザは意識をしない。 • インスタンスタイプを決めるだけで良い。 • 例えば、「チープなサーバ群とハイスペックなサーバ群の分割」 や「ハイパーバイザでの分割」 AG1 AG2 AG3 KVM: ロースペック KVM: ハイペック VMWare
  • 8.
    Novaの設定 • AvailabilityZibe,HostAggregateはどちらもスケジューラを利用する。 • スケジューラのフィルタを設定することで利用可能になる。 • nova.conf内、scheduler_default_filtersを設定 • 初期値 • 変更 • 初期値のComputeCapabilitiesFilterを指定しているとHostAggregate設定 時エラーとなる。 scheduler_default_filters=RetryFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,AvailabilityZoneFilter scheduler_default_filters=RetryFilter,RamFilter,ComputeFilter,ImagePropertiesFilter,AvailabilityZoneFilter,AggregateInstanceExtraSpecsFilter
  • 9.
    Novaの設定 • nova.conf内でAvailabilityZone,HostAggregateの設定に関わる オプションは以下の通り パラメータ 初期値 説明 internal_service_availability_zone internal インターナルサービスのデフォルトゾーン nova-consoleauthなどのデフォルトゾーン名 default_availability_zone nova コンピュートノードのデフォルトゾーン名 default_schedule_zone (なし) ゾーンを指定していない場合に指定されるゾーン名 nova boot 時、ゾーンを指定しなければこのゾーンが 利用される ゾーンが複数ある場合、ゾーン名を指定しないとエ ラーになる cinder_cross_az_attach true コンピュートノードが所属するゾーンとcinder- volumeが所属するゾーンが異なった場合、Attache を許可/拒否する true:Attacheを許可する false: Attacheを拒否する
  • 10.
  • 11.
    HostAggregateの利用 • HostAggregateを利用するためのコマンドについて解説を行う。 • 全ての操作はadmin roleを持ったユーザで行う。 • 一般ユーザは設定・参照を行えない。 $ nova aggregate-list ERROR: Policy doesn‘t allow compute_extension:aggregatesto be performed. (HTTP 403) (Request-ID: req-c56d3e53-231c-41d3-8a4c-80d8a1cb48aa) $ nova aggregate-list +----+---------+-------------------+ | Id | Name | Availability Zone | +----+---------+-------------------+ | 1 | ag1-web | None | +----+---------+-------------------+ 一般 admin
  • 12.
    zone name: nova HostAggregateの利用 • 参考に以下のような構成でHostAggregateを作成する。 • Web用AGとDB用AGを作成し、それぞれのHostAggregateに2 台のコンピュートノードを紐付ける。 ag1-web ag1-db com001 com002 com003 com004
  • 13.
    nova コマンドによる設定(1/6) • 任意のHostAggregateを作成する • usage: nova aggregate-create <name> [<availability-zone>] • ここではWeb用HostAggregateとDB用HostAggregateを作成する $ nova aggregate-create ag1-web $ nova aggregate-create ag1-db +----+---------+-------------------+-------+----------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+-------+----------+ | 1 | ag1-web | None | [] | {} | | 2 | ag1-db | None | [] | {} | +----+---------+-------------------+-------+----------+
  • 14.
    nova コマンドによる設定(2/6) • 作成したHostAggregateとホストを紐付ける • usage: nova aggregate-add-host <aggregate> <host> • ここでは、AG ID(AGNameでも可)とホスト名を指定する。 • ホスト名はnova-manage service list で表示されるホスト名 $ nova aggregate-add-host 1 com001 $ nova aggregate-add-host 1 com002 $ nova aggregate-add-host 2 com003 $ nova aggregate-add-host 2 com004 +----+---------+-------------------+------------------------+----------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+------------------------+----------+ | 1 | ag1-web | None | [u'com001', u'com002'] | {} | | 2 | ag1-db | None | [u'com003', u'com004'] | {} | +----+---------+-------------------+------------------------+----------+ ※ nova aggregate-detailsの結果を参考に出力した
  • 15.
    nova コマンドによる設定(3/6) • HostAggregateを識別するためのメタデータを設定する • usage: nova aggregate-set-metadata <aggregate> <key=value> [<key=value> ...] $ nova aggregate-set-metadata 1 web=true $ nova aggregate-set-metadata 2 db=true Aggregate 2 has been successfully updated. +----+---------+-------------------+------------------------+-------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+------------------------+-------------------+ | 1 | ag1-web | None | [u'com001', u'com002'] | {u'web': u'true'} | | 2 | ag1-db | None | [u'com003', u'com004'] | {u'db': u'true'} | +----+---------+-------------------+------------------------+-------------------+
  • 16.
    nova コマンドによる設定(4/6) • HostAggregateの詳細情報を表示する • usage: nova aggregate-details <aggregate> $ nova aggregate-details ag1-web $ nova aggregate-details ag1-db +----+---------+-------------------+------------------------+-------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+------------------------+-------------------+ | 1 | ag1-web | None | [u'com001', u'com002'] | {u'web': u'true'} | | 2 | ag1-db | None | [u'com003', u'com004'] | {u'db': u'true'} | +----+---------+-------------------+------------------------+-------------------+ ※出力をまとめている。実際は指定したHostAggregateのみを表示する。
  • 17.
    nova コマンドによる設定(5/6) • HostAggregate用のFlavorを作成する • usage: nova flavor-create [--ephemeral <ephemeral>] [--swap <swap>] [--rxtx-factor <factor>] [--is-public <is-public>] <name> <id> <ram> <disk> <vcpus>
  • 18.
    nova コマンドによる設定(5/6) $nova flavor-create ag1.web 6 1024 10 1 $ nova flavor-create ag1.db 7 1024 20 1 +----+---------+-----------+------+-----------+------+-------+-------------+-----------+ | ID | Name | Memory_MB| Disk | Ephemeral | Swap | VCPUs | RXTX_Factor| Is_Public| +----+---------+-----------+------+-----------+------+-------+-------------+-----------+ | 6 | ag1.web | 1024 | 10 | 0 | | 1 | 1.0 | True | | 7 | ag1.db | 1024 | 20 | 0 | | 1 | 1.0 | True | +----+---------+-----------+------+-----------+------+-------+-------------+-----------+ $ nova flavor-list +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ | ID | Name | Memory_MB| Disk | Ephemeral | Swap | VCPUs | RXTX_Factor| Is_Public| +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ | 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| | 6 | ag1.web | 1024 | 10 | 0 | | 1 | 1.0 | True | | 7 | ag1.db | 1024 | 20 | 0 | | 1 | 1.0 | True | +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
  • 19.
    nova コマンドによる設定(6/6) • 作成したHostAggregateとFlavorを関連付ける。 • AG:メタデータとFlavorのキー同士を関連付けることができる。 • usage: nova flavor-key <flavor> <action> <key=value> [<key=value> ...] • Flavorを選択すると同時に定義したHostAggregateを利用する ように設定を行う。 • Flavorにkeyをセットすることで、ユーザがFlavorを指定するだけで事 前に定義したHostAggregateが自動的に選択されるようになる。 • このkeyはHostAggregateのメタデータと比較が行われる。 $ nova flavor-key 6 set web=true $ nova flavor-key 7 set db=true
  • 20.
    nova コマンドによる設定(6/6) $nova flavor-show 6 +----------------------------+-------------------+ | Property | Value | +----------------------------+-------------------+ | name | ag1.web | | ram | 1024 | | OS-FLV-DISABLED:disabled| False | | vcpus| 1 | | extra_specs| {u'web': u'true'} | | swap | | | os-flavor-access:is_public| True | | rxtx_factor| 1.0 | | OS-FLV-EXT-DATA:ephemeral| 0 | | disk | 10 | | id | 6 | +----------------------------+-------------------+ $ nova flavor-show 7 +----------------------------+-------------------+ | Property | Value | +----------------------------+-------------------+ | name | ag1.db | | ram | 1024 | | OS-FLV-DISABLED:disabled| False | | vcpus| 1 | | extra_specs| {u'db': u'true'} | | swap | | | os-flavor-access:is_public| True | | rxtx_factor| 1.0 | | OS-FLV-EXT-DATA:ephemeral| 0 | | disk | 20 | | id | 7 | +----------------------------+-------------------+
  • 21.
    インスタンスの起動 • 作成したFlavorを指定することで任意のHostAggregateを指定できるようになる。 • ただし、ユーザからはHostAggregate(起動させるコンピュー トノード)を意識することはできず、あくまでFlavorを選択して いるだけに過ぎない。 $ nova boot --flavor ag1.web--image IMAGE_UUID --num-instances 10 --security-groups default --nicNW_UUID cirros $ sudo nova-manage vm list 2> /dev/null instance node type state cirros-afa67382-7fc2-43b8-afbd-e2c42f972a96 com002 ag1.webactive cirros-dabf3e5c-e501-4c3a-98f8-24ea13711a3a com001 ag1.webactive cirros-dd5441e6-2e66-4dca-8fb4-77552a8a37a8 com002 ag1.webactive (省略) ・・・ ・・・ ・・・
  • 22.
    nova コマンドによる設定(参考) • 作成したHostAggregateを削除する。 • usage: nova aggregate-remove-host <aggregate> <host> • 以下の順番でHostAggregateに関係する設定を削除する 1. Flavor削除する 2. HostAggregateとホストの関連付けを解除する 3. HostAggregate削除する
  • 23.
  • 24.
    AailabilityZoneの利用 • AvailabilityZoneを利用するためのコマンドについて解説を行う。 • 設定は管理者権限を持つユーザで行う。 • 一般ユーザは一部の情報について参照だけが行える。 • AvailabilityZoneはNovaインストール時に、 • internal_service_availability_zoneで定義されたゾーンが作成される。 • default_availability_zoneで定義されたゾーンがデフォルトで作成される。 internal_service_availability_zone (internal) nova-cert, nova-conductor, nova-scheduler, nova- consoleauth など default_availability_zone (nova) nova-compute
  • 25.
    AailabilityZoneの利用 • novaboot時、自動的に選択されるゾーンは default_schedule_zoneで指定する。 • 存在しないゾーンを指定しているまたはゾーンを指定していない場合 はインスタンス作成時にエラーとなる。 • NovaのAvailabilityZoneとCinderのAvailabilityZoneが異なっ てもボリュームをアタッチできるようにするには cinder_cross_az_attach=trueを指定する
  • 26.
    AailabilityZoneの利用 $ novaavailability-zone-list +------+-----------+ | Name | Status | +------+-----------+ | nova | available | +------+-----------+ 一般
  • 27.
    AailabilityZoneの利用 $ novaavailability-zone-list +-----------------------+----------------------------------------+ | Name | Status | +-----------------------+----------------------------------------+ | internal | available | | |-ctrl001 | | | | |-nova-conductor | enabled :-) 2014-08-06T06:13:40.000000 | | | |-nova-cert | enabled :-) 2014-08-06T06:13:42.000000 | | | |-nova-consoleauth| enabled :-) 2014-08-06T06:13:43.000000 | | | |-nova-scheduler | enabled :-) 2014-08-06T06:13:43.000000 | | nova | available | | |-com003 | | | | |-nova-compute | enabled :-) 2014-08-06T06:13:38.000000 | | |-com002 | | | | |-nova-compute | enabled :-) 2014-08-06T06:13:40.000000 | | |-com001 | | | | |-nova-compute | enabled :-) 2014-08-06T06:13:39.000000 | | |-com004 | | | | |-nova-compute | enabled :-) 2014-08-06T06:13:45.000000 | +-----------------------+----------------------------------------+ admin
  • 28.
    ag-zone02 ag-zone01 AailabilityZoneの利用 • 参考に以下のような構成でAvailabilityZoneを作成する。 • 2つのAvailabilityZoneを作成し、それぞれのAvailabilityZone に2台のコンピュートノードを紐付ける。 com001 com002 com003 com004 ag1-az1 ag2-az2
  • 29.
    nova コマンドによる設定(1/2) • AvailabilityZoneを定義する • usage: nova aggregate-create <name> [<availability-zone>] • HostAggregate作成時、HostAggregate名とあわせて AvailabilityZone名を指定することでAvailabilityZoneが作成される。 • AvailabilityZoneの作成にaggregate-createを利用しているが、 これはAvailabilityZoneの機能がHostAggregateに統合された ためである。
  • 30.
    nova コマンドによる設定(1/2) $nova aggregate-create ag1-az1 ag-zone01 $ nova aggregate-create ag2-az2 ag-zone02 $ nova aggregate-list +----+---------+-------------------+ | Id | Name | Availability Zone | +----+---------+-------------------+ | 3 | ag1-az1 | ag-zone01 | | 4 | ag2-az2 | ag-zone02 | +----+---------+-------------------+
  • 31.
    nova コマンドによる設定(2/2) • 作成したHostAggregateとホストを紐付ける • usage: nova aggregate-add-host <aggregate> <host> • ここでは、AG ID(AGNameでも可)とホスト名を指定する。 • ホスト名はnova-manage service list で表示されるホスト名 $ nova aggregate-add-host 3 com001 $ nova aggregate-add-host 3 com002 $ nova aggregate-add-host 4 com003 $ nova aggregate-add-host 4 com004
  • 32.
    nova コマンドによる設定(2/2) $nova aggregate-details 3 $ nova aggregate-details 4 +----+---------+-------------------+------------------------+--------------------------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+------------------------+--------------------------------------+ | 3 | ag1-az1 | ag-zone01 | [u'com001', u'com002'] | {u'availability_zone': u'ag-zone01'} | | 4 | ag2-az2 | ag-zone02 | [u'com003', u'com004'] | {u'availability_zone': u'ag-zone02'} | +----+---------+-------------------+------------------------+--------------------------------------+ ※出力をまとめている。実際は指定したHostAggregateのみを表示する
  • 33.
    nova コマンドによる設定(2/2) $nova availability-zone-list +-----------------------+----------------------------------------+ | Name | Status | +-----------------------+----------------------------------------+ | internal | available | | |-ctrl001 | | | | |-nova-conductor | enabled :-) 2014-01-16T07:26:41.000000 | | | |-nova-cert | enabled :-) 2014-01-16T07:26:36.000000 | | | |-nova-consoleauth| enabled :-) 2014-01-16T07:26:36.000000 | | | |-nova-scheduler | enabled :-) 2014-01-16T07:26:36.000000 | | ag-zone01 | available | | |-com002 | | | | |-nova-compute | enabled :-) 2014-01-16T07:26:41.000000 | | |-com001 | | | | |-nova-compute | enabled :-) 2014-01-16T07:26:40.000000 | | ag-zone02 | available | | |-com003 | | | | |-nova-compute | enabled :-) 2014-01-16T07:26:39.000000 | | |-com004 | | | | |-nova-compute | enabled :-) 2014-01-16T07:26:36.000000 | +-----------------------+----------------------------------------+
  • 34.
    インスタンスの起動 • HostAggregateとは異なり、flavorは関係しない。 • ただし、Zone を指定する必要がある。 $ nova boot --flavor m1.tiny --image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone01cirros $ sudo nova-manage vm list 2> /dev/null instance node (省略) zone cirros-0cf0c695-2797-4c86-8daf-78f951735b9e com002 ・・・ag-zone01 cirros-37d253bd-24e1-49d5-89e5-4e16fd2d45a3 com001・・・ag-zone01 cirros-5b433557-7812-4c78-90f9-262b3c062563 com002・・・ag-zone01 cirros-1623d65b-1359-4284-a737-b96e02baaa89 com001 ・・・ag-zone01
  • 35.
    インスタンスの起動 $ novaboot --flavor m1.tiny --image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone02cirros $ sudo nova-manage vm list 2> /dev/null instance node (省略) zone cirros-57e139aa-664b-439b-846a-2319885fe7e5 com004・・・ag-zone02 cirros-7507c166-d0dc-4e27-a1ff-1f730922383f com003 ・・・ag-zone02 cirros-be65cc97-fd7e-433c-bf9f-7ea44f0169e5 com004 ・・・ag-zone02 cirros-79bee77d-90bf-44f7-a656-6360d25c368f com003 ・・・ag-zone02 • ゾーンを指定しない場合は、default_schedule_zoneで指定したゾーン が自動的に選択される。 • 存在しないゾーンを指定した場合やdefault_schedule_zoneで指定した ゾーンが存在しない場合はエラーとなる。
  • 36.
  • 37.
    AvailabilityZoneをまたがるHostAggregateの利用方法 • HostAggregateはAvailabilityZoneをまたがることもできる。 • FavorでHostAggregateを指定しつつ、AvailabilityZoneを指 定することで、指定したAvailabilityZone内で定義されている HostAggregateにだけインスタンスを配置することができる。
  • 38.
    AvailabilityZoneをまたがるHostAggregateの利用方法 • 以下のような構成でAvailabilityZoneとHostAggregateを作成する。 • 2つのAvailabilityZoneを作成し、それぞれのAvailabilityZoneに2台 のコンピュートノードを紐付ける。 • HostAggregate(ag1-web)を作成し、全ノードと紐付ける。 ag-zone02 ag-zone01 com001 com002 com003 com004 ag1-az01 ag2-az02 ag1-web
  • 39.
    novaコマンドによる設定(1/4) • 1つのHostAggregateを作成する。 • 2つのAvailabilityZoneを作成する。 $ nova aggregate-create ag1-az01 ag-zone01 $ nova aggregate-create ag2-az02 ag-zone02 $ nova aggregate-create ag1-web
  • 40.
    nova コマンドによる設定(2/4) • HostAggregate識別用のメタデータを付与する。 • Flavorを作成し、HostAggregateと紐付ける。 $ nova aggregate-set-metadata 5 web=true Aggregate 5 has been successfully updated. +----+---------+-------------------+-------+-------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+---------+-------------------+-------+-------------------+ | 5 | ag1-web | None | [] | {u'web': u'true'} | +----+---------+-------------------+-------+-------------------+ $ nova flavor-create ag1.web 6 1024 10 1
  • 41.
    nova コマンドによる設定(3/4) • HostAggregateの状態を確認する。 $ nova aggregate-details 5 $ nova aggregate-details 6 $ nova aggregate-details 7 +----+----------+-------------------+-------+--------------------------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+----------+-------------------+-------+--------------------------------------+ | 5 | ag1-web | None | [] | {u'web': u'true'} | | 6 | ag1-az01 | ag-zone01 | [] | {u'availability_zone': u'ag-zone01'} | | 7 | ag2-az02 | ag-zone02 | [] | {u'availability_zone': u'ag-zone02'} | +----+----------+-------------------+-------+--------------------------------------+ ※出力をまとめている。実際は指定したHostAggregateのみを表示する
  • 42.
    nova コマンドによる設定(4/4) • HostAggregateとホストを関連付ける $ nova aggregate-add-host 5 com001 $ nova aggregate-add-host 5 com002 $ nova aggregate-add-host 5 com003 $ nova aggregate-add-host 5 com004 $ nova aggregate-add-host 6 com001 $ nova aggregate-add-host 6 com002 $ nova aggregate-add-host 7 com003 $ nova aggregate-add-host 7 com004
  • 43.
    nova コマンドによる設定(4/4) $nova aggregate-details 5 $ nova aggregate-details 6 $ nova aggregate-details 7 +----+----------+-------------------+----------------------------------------------+--------------- -----------------------+ | Id | Name | Availability Zone | Hosts | Metadata | +----+----------+-------------------+----------------------------------------------+--------------- -----------------------+ | 5 | ag1-web | None | [u'com001', u'com002', u'com003', u'com004'] | {u'web': u'true'} | | 6 | ag1-az01 | ag-zone01 | [u'com001', u'com002'] | {u'availability_zone': u'ag-zone01'} | | 7 | ag2-az02 | ag-zone02 | [u'com003', u'com004'] | {u'availability_zone': u'ag-zone02'} | +----+----------+-------------------+----------------------------------------------+--------------- -----------------------+
  • 44.
    novaコマンドによる設定(4/4) $ novaavailability-zone-list +-----------------------+----------------------------------------+ | Name | Status | +-----------------------+----------------------------------------+ | internal | available | | |-ctrl001 | | | | |-nova-conductor | enabled :-) 2014-08-06T08:08:31.000000 | | | |-nova-cert | enabled :-) 2014-08-06T08:08:38.000000 | | | |-nova-consoleauth| enabled :-) 2014-08-06T08:08:38.000000 | | | |-nova-scheduler | enabled :-) 2014-08-06T08:08:39.000000 | | ag-zone01 | available | | |-com002 | | | | |-nova-compute | enabled :-) 2014-08-06T08:08:31.000000 | | |-com001 | | | | |-nova-compute | enabled :-) 2014-08-06T08:08:31.000000 | | ag-zone02 | available | | |-com003 | | | | |-nova-compute | enabled :-) 2014-08-06T08:08:30.000000 | | |-com004 | | | | |-nova-compute | enabled :-) 2014-08-06T08:08:37.000000 | +-----------------------+----------------------------------------+
  • 45.
    インスタンスの起動 • Flavor:ag1.web と合わせてZone: ag-zone01 を指定した場 合はag1.web で定義されたホストかつag-zone01に属すホス トのどこかにインスタンスが作成される。 $ nova boot --flavor ag1.web--image IMAGE_UUID --num-instances 10 --security- groups default --nicnet-id=NETWORK_UUID --availability-zone ag-zone01cirros $ sudonova-manage vmlist 2> /dev/null instance node type zone cirros-9cf59ffe-2a31-48c4-b081-e2b732004b70 com002 ag1.webag-zone01 cirros-f283608c-14f0-4da0-a02f-8147f7c044c6 com001 ag1.webag-zone01 cirros-9594b32a-6ff8-43db-ada3-106494bc3b85 com002 ag1.webag-zone01 cirros-03861c7d-a356-4e88-9acb-f1980e2ea942 com001 ag1.webag-zone01 • 指定したHostAggregateが存在しないAvailabilityZoneを選択 すると起動時エラーとなる。
  • 46.
  • 47.
    CinderにおけるAvailabilityZone • CinderでもAvailabilityZoneが利用できる。 • ただし、Nova程多くのことができるわけではない。 • 過去にNovaからForkした時の引き継いだものが残っているだけ? • Cinder AvailabilityZoneはコマンドから作成することができな い。 • サービス認識時にcinder.conf内storage_availability_zone(初期値: nova)に指定されたものが作成される。 • 後から変更できるかどうかは不明。 • データベースに向けてupdate文を直接実行する必要がある。?
  • 48.
    Cinderの設定 パラメータ 初期値 説明 default_availability_zone (なし) ボリューム作成時、AvailabilityZoneを指定して いない場合にデフォルトで指定されるゾーン名。 storage_availability_zone nova cinder-volumeが所属するAvailabilityZone。 サービス認識時に自動的に作成される。 コマンド等で後から変更はできない。 • cinder.conf内でAvailabilityZoneの設定に関わるオプションは 以下の通り
  • 49.
    AvailabilityZoneの確認 • ノード:vol001 のstorage_availability_zoneにvol001を指定 した場合の出力は以下の通り $ cinder availability-zone-list +--------+-----------+ | Name | Status | +--------+-----------+ | vol001 | available | +--------+-----------+ $ sudocinder-manage host list 2> /dev/null host zone vol001 vol001
  • 50.
    ボリュームの作成 • cindercreate の際、アベイラビリティゾーンを指定すること で狙ったゾーンに対してボリューム作成をすることができる。 $ cinder create --availability-zone vol0011 $ cinder show 7775727e-8ee5-417f-91a5-f680d2b2ff34 +---------------------+--------------------------------------+ | Property | Value | +---------------------+--------------------------------------+ | attachments | [] | | availability_zone| vol001| |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| | id | 7775727e-8ee5-417f-91a5-f680d2b2ff34 | | metadata | {} | | size | 1 | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| | status | available | | volume_type| None | +---------------------+--------------------------------------+
  • 51.
    ボリュームの作成 • --availability-zoneで指定したゾーンが存在しない場合はエラーとなる。 • Horizonを使用した場合、AvailabilityZoneの指定ができずエ ラーになる。
  • 52.
  • 53.
    Nova・CinderのAvailabiltyZone連携 • NovaとCinderのAvailabilityZoneが連携できる機能はただ1つ。 • インスタンスが所属するAvailabilityZoneと ボリュームが所属するAvailabilityZoneが異なった場合、 アタッチを許可するか、拒否するか。だけである。 • 設定はnova.confで行う。 パラメータ 初期値 説明 cinder_cross_az_attach true コンピュートノードが所属するゾーンとcinder- volumeが所属するゾーンが異なった場合、Attache を許可/拒否する true:Attacheを許可する false: Attacheを拒否する
  • 54.
    Nova・CinderのAvailabiltyZone連携 • cidner_cross_az_attache=trueの場合 • それぞれのAvailabilityZoneを評価しない。すべてAttache可能。 Zone01 Zone02 Zone01 Zone02 Nova Cinder Attach
  • 55.
    Nova・CinderのAvailabiltyZone連携 • cidner_cross_az_attache=falseの場合 • それぞれのAvailabilityZoneを評価し、ゾーンが異なる場合はエラーとなる。 • [Wed Aug 06 07:43:19.809457 2014] [:error] [pid1647:tid 140731145422592] Recoverable error: Invalid volume: Instance and volume not in same availability_zone(HTTP 400) (Request-ID: req-f8dba15b-6617-4500-ba3c-089c41154943) Zone01 Zone02 Zone01 Zone02 Nova Cinder Attach
  • 56.
  • 57.
    今後期待する機能 • AvailabilityZoneの柔軟性向上 • AvailabilityZone単位で活性化/非活性化 • 大規模障害時など、対象AvailabilityZoneへのアクセスを禁止する等 • プロジェクト単位で見えるAvailabilityZoneを指定 • AvailabilityZone単位のQuota設定 • Cinderに全うなAvailabilityZone機能実装を! • AvailabilityZone単位で利用するネットワークを選択する(Neutron 連携)
  • 58.