RHEL-OSP6でのDVR環境構築手順
(9)Packstack実行(Controller Serverのみ)
(8)で修正したanswer fileを用いて、Packstackを実行します。環境によりますが、数十分~1時間程度かかります。
[Packstack実行] # packstack --answer-file=answer20150302
(10)全サーバ再起動
すべてのサーバを再起動します。
# reboot
DVRを利用しない環境では、ここまでで構築が完了です。いよいよここからがDVRを有効化するための設定です。
(11)FIP割当て不可の不具合を修正(Controller Serverのみ)
本検証の時点(2015年3月)では、Dashboard上でインスタンスにFIPを割り当てられない不具合がありました。下記を参考に修正します。
Juno dvr associate floating ip reported "No ports available"
(12)Controller+Network Serverの設定変更(Controller + Network Serverのみ)
Controller + Network Server側でDVRを有効化するために必要な変更箇所です。対象となる設定ファイルや変更箇所が多いので、気を付けて変更してください。なお、執筆時点ではneutron.confの「# dvr_base_mac = fa:16:3f:00:00:00」のコメントアウトを外すと正常に動作しませんでした。
[neutron.confの設定変更] # vi /etc/neutron/neutron.conf router_distributed = False ←削除 router_distributed = True ←追記(router_distributedフラグをTrueにする) [l3_agent.iniの設定変更] # vi /etc/neutron/l3_agent.ini agent_mode = legacy ←削除 agent_mode = dvr_snat ←追記(agent_modeをdvr_snatにする) [ovs_neutron_plugin.iniの設定変更] # vi /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini arp_responder = False ←削除 arp_responder = True ←追記(arp_responderをTrueにする) enable_distributed_routing = False ←削除 enable_distributed_routing = True ←追記(enable_distributed_routingをTrueにする)
(13)Compute Serverの設定変更(Compute Server1、2のみ)
続いて、Compute Server側の変更箇所です。
[l3_agent.iniの設定変更] # vi /etc/neutron/l3_agent.ini agent_mode = legacy ←削除 agent_mode = dvr ←追記(agent_modeをdvrにする) [ovs_neutron_plugin.iniの設定変更] # vi /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini arp_responder = False ←削除 arp_responder = True ←追記(arp_responderをTrueにする) enable_distributed_routing = False ←削除 enable_distributed_routing = True ←追記(enable_distributed_routingをTrueにする)
(14)全サーバ再起動
すべてのサーバを再起動します。これで、DVRが動作する環境ができました。
この後は、OpenStackのDashboard(本手順ではhttp://192.168.10.101/)にログインし、通常の手順でExternal Network作成、Tenant Network作成、仮想ルータ作成および各ネットワークとひもづけ、といった作業を行うことで、分散仮想ルータが作成されます。なお、筆者は以下の手順で作成しました。
- イメージの作成
- External Network作成
[プロジェクト]−[ネットワーク ]−[ネットワーク ]−[+ネットワークの作成]
- ネットワーク名:External 10.0.0.0/24
- サブネット名:External 10.0.0.0/24
- ネットワークアドレス:10.0.0.0/24
- ゲートウェイIP:10.0.0.1
- IPアドレス割当てプール:10.0.0.10,10.0.0.100 - Tenant Network1(192.168.210.0/24)作成
[プロジェクト]−[ネットワーク ]−[ネットワーク ]−[+ネットワークの作成]
- ネットワーク名:Tenant 192.168.210.0/24
- サブネット名:Tenant 192.168.210.0/24
- ネットワークアドレス:192.168.210.0/24
- ゲートウェイIP:192.168.210.1
- IPアドレス割当てプール:192.168.210.10,192.168.210.100 - Tenant Network2(192.168.220.0/24)作成
[プロジェクト]−[ネットワーク ]−[ネットワーク ]−[+ネットワークの作成]
- ネットワーク名:Tenant 192.168.220.0/24
- サブネット名:Tenant 192.168.220.0/24
- ネットワークアドレス:192.168.220.0/24
- ゲートウェイIP:192.168.220.1
- IPアドレス割当てプール:192.168.220.10,192.168.220.100 - 仮想ルータ作成
[プロジェクト]−[ネットワーク ]−[ルーター ]−[+ルーターの作成]
- ルーター名:router1 - External Networkの外部接続設定
[管理]-[システム]−[ネットワーク ]から[External 10.0.0.0/24]の[ネットワークの編集]で、[共有 ]と[外部ネットワーク]を有効化 - 仮想ルータへのExternal Networkひもづけ
[プロジェクト]−[ネットワーク ]−[ルーター ]の[router1 ]の[ゲートウェイの設定]で、[外部ネットワーク]に[External 10.0.0.0/24]を選択 - 仮想ルータへのTenant Networkひもづけ
[プロジェクト]−[ネットワーク ]−[ルーター ]の[router1 ]をクリックし、[+インタフェースの追加]で[サブネット ]に[Tenant 192.168.210.0/24]を選択
同様に、[Tenant 192.168.220.0/24]も追加 - セキュリティグループの作成
[プロジェクト]−[コンピュート ]−[アクセスとセキュリティー]−[セキュリティグループの作成]から新規セキュリティグループを作成。標準の送信ANYの他、[+ルールの追加]で以下を追加。
- [ALL ICMP]、[受信]、[CIDR]、[0.0.0.0/0]
- [ALL TCP]、[受信]、[CIDR]、[0.0.0.0/0]
- [ALL UDP]、[受信]、[CIDR]、[0.0.0.0/0] - インスタンスの起動
[プロジェクト]−[コンピュート ]−[インスタンス ]−[インスタンスの起動]から、上記のセキュリティグループを選択。ネットワークに[Tenant 192.168.210.0/24]を選択
同様に、[Tenant 192.168.220.0/24]を選択したインスタンスを起動
ここまでの作業を実施すると、ネットワークトポロジーは図3のようになります。
TIPS
RHEL-OSPは頻繁に更新されるため、構築時期によって今回ご紹介したものとは異なる手順が必要となる可能性もあります。その場合は、下記を試してみてください。
(1)サーバ及びDNSサーバ上でのhostnameを確認する
packstack実行時に、各サーバがhostnameを引けないとエラーが発生します。また、サーバ上のhostnameと、DNSサーバ上でのhostnameが異なる場合、管理コンソール上で一つのCompute Nodeが二つに見えてしまい、仮想マシンを配置できない場合があります。
(2)selinuxをpermissiveにする
/var/log/audit/audit.logにdenyログが出力されている場合、selinuxをpermissiveにして確認してください(筆者の環境では2015年3月に構築した際には不要でしたが、4月に構築した際はpermissiveへの変更が必要でした)。
(3)本構築手順に従って再起動する
本手順書では、一見必要がなさそうなタイミングで再起動していますが、この再起動を省略した場合、packstack実行に失敗する可能性があります。特にyum update直後の再起動は必ず行ってください。
(4)Dashboardから作成した部分を作り直す
一度External Network、Tenant Network、Router、インスタンスを削除し、全サーバをシャットダウン・起動後、再度作り直してみてください。
(5)neutron.conf、l3_agent.ini、ovs_neutron_plugin.iniの設定を変えてみる
次回、正常パターンにおける通信の流れをご説明します。比較しながら差異を見つけ、異なる部分に関連する設定を変えてみてください。
次回は、DVR環境におけるトラフィック処理を解説します。手元の環境を触りながらだと理解が深まりますので、今回ご紹介した手順を参考に、ぜひ実際に検証環境を構築してみてください。
なお、2015年4月30日にOpenStack Kiloがリリースされました。Red Hat社のコミュニティ版OpenStackディストリビューションのRDOでは現在(2015年5月7日)、Kiloはテストリリースとなっていますが、今回ご紹介した手順に準じて構築し、DVRが動作することを確認しています。
- Linuxは,Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
- OpenStack®の文字表記とOpenStackのロゴは,米国とその他の国におけるOpenStack Foundationの登録商標/サービスマークまたは商標/サービスマークのいずれかであり,OpenStack Foundationの許諾を得て使用しています。日立製作所は,OpenStack FoundationやOpenStackコミュニティの関連企業ではなく、また支援や出資を受けていません。
- OSCA™(Open Standard Cloud Association)は、デル株式会社の登録商標です。
- Red Hat および Red Hat をベースとしたすべての商標とロゴは、米国とその他の国におけるRed Hat, Inc. の登録商標もしくは商標です。
- その他、記載の商標やロゴは、各社の商標または登録商標です。
【参考文献】
- Neutron/DVR/HowTo(アクセス:2015/04)
https://wiki.openstack.org/wiki/Neutron/DVR/HowTo - 第20回 OpenStack勉強会 Neutron Deep Dive - DVR(アクセス:2015/04)
http://www.slideshare.net/ToruMakabe/20-openstack-neutron-deep-dive-dvr - Ask OpenStack:Q&A Site for OpenStack Users and Developers(アクセス:2015/04)
https://ask.openstack.org/en/questions/ - Schmaustech:Configuring DVR in OpenStack Juno(アクセス:2015/04)
http://schmaustech.blogspot.jp/2014/12/configuring-dvr-in-openstack-juno.html - Open Standard Cloud Association(OSCA™):技術情報・ソリューション(アクセス:2015/04)
http://www.osca-jp.com/solution.html
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- OpenStackの自動構築ツール、Packstackのインストール
- OpenStack Kilo(RDO版)でのMidoNet構築手順(1)
- OpenStack Kilo(RDO版)でのMidoNet構築手順(2)
- Neutron DVR環境でのパケット処理を探る
- MidoNetのパケット処理をDVRと比較してみる
- OpenStack Junoのネットワークコンポーネントの課題と分散仮想ルータ
- CentOS 7でのOpenStackの構築手順
- OpenStack Juno on SoftLayer by RDO
- OpenStack構築上の注意
- OpenDaylightでクラスタを組んでみよう