OpenStack 運用ガイド February 1, 2016 OpenStack 運用ガイド [FAMILY Given] 製作著作 © 2014 OpenStack Foundation Some rights reserved. 概要 本書は OpenStack クラウドの設計および運用に関する情報を提供します。 Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. http://creativecommons.org/licenses/by/3.0/legalcode i OpenStack 運用ガイド February 1, 2016 謝辞 OpenStack Foundationは、オースチンへの航空券、(暴風後の停電による ドキドキの夜を含む)宿、そして美味しい食事で、この本の作成をサポー トしました。約10,000USドルで、Rackspaceのオースチンオフィスの同じ 部屋の中で、私たちは1週間で集中的に共同作業をすることができまし た。著者たちはすべて OpenStack Foundation のメンバーであり、あな たも OpenStack Foundation に参加できます。Foundationのウェブサイ ト (http://openstack.org/join) に行ってみてください。 私たちは、オースチンの Rackspace での素晴らしいホスト Rackersに感 謝したい: • Rackspace ゲストリレーションズの Emma Richards は、私たちのラン チの注文を素晴らしく面倒を見てくれて、更に壁から剥がれ落ちた付 箋紙の山を脇においてくれました。 • 熱狂的なエグゼクティブアシスタントの Betsy Hagemeier は、部屋の 改造の面倒を見てくれて、1週間で解決する手助けをしてくれました。 • 「The Victors」としても知られている、オースチンの Rackspace の 不動産チームは、素晴らしい応答をしてくれました。 • Rackspace IT部門 の Adam Powell は、私たちに毎日のネットワー ク帯域を提供してくれました。また、より多くのスクリーンが必要と なったため、セカンドモニタを提供してくれました。 • 水曜日の夜、オースチン OpenStack ミートアップグループと楽しく幸 せな時間を過ごし、Racker Katie Schmidt は私たちのグループを素晴 らしい世話をしてくれました。 私たちは部屋の外から、いくつかの素晴らしいインプットを得ました。 • CERNの Tim Bell は、私たちが作業を開始する前に、その概要につい てフィードバックを与えてくれて、週の半ばにはレビューをしてくれ ました。 • Sébastien Han は素晴らしいブログを書いてくれて、寛大にも再利用 の許可を与えてくれました。 • Oisin Feeley は、このマニュアルを読んで、いくつかの編集をし、私 たちが問い合わせをした際には、E-mailでのフィードバックをくれま した。 iii OpenStack 運用ガイド February 1, 2016 私たちは、ブックスプリント部屋の中で、ファシリテーターの Adam Hyde と毎日過ごしました。彼の精力的なサポートと励ましがなければ、 この範囲のドキュメントを 5 日間で作成できなかったでしょう。Adam は、ブックスプリントの手法が効果的であることを何回も実証しまし た。彼は、www.booksprints.net にあるコラボレーションにおいて、 ツールと信念の両方を作成しました。 私たちは、これらの多大な協力的な援助と励まし無しには、これを成し 遂げることはできなかったでしょう。 iv OpenStack 運用ガイド February 1, 2016 目次 はじめに .................................................... xv OpenStack の概要 ....................................... xv はじめての OpenStack .................................. xvi この本の対象読者 ...................................... xvii この本の構成 ........................................... xix この本をなぜ書いたか?どうやって書いたか? ........... xxiii この本の作成に参加するには ........................... xxvii このドキュメントに使用される規則 ...................... xxix I. アーキテクチャー .......................................... 1 1. アーキテクチャー例 ................................... 3 アーキテクチャー例: レガシーネットワーク (nova) ...... 3 アーキテクチャー例: OpenStack Networking ........... 10 アーキテクチャー例についての章の結び ................ 27 2. プロビジョニングとデプロイメント ..................... 29 自動デプロイメント ................................. 29 自動環境設定 ....................................... 33 リモート管理 ....................................... 33 OpenStack のプロビジョニングおよびデプロイメントの 概念 ............................................... 34 まとめ ............................................. 34 3. クラウドコントローラーのデザインとクラウド管理 ....... 37 ハードウェアの考慮事項 ............................. 39 サービスの分離 ..................................... 40 データベース ....................................... 40 メッセージキュー ................................... 41 コンダクターサービス ............................... 41 Application Programming Interface (API) ............ 42 API 拡張 ........................................... 42 スケジューリング ................................... 43 イメージ ........................................... 43 ダッシュボード ..................................... 44 認証と認可 ......................................... 44 ネットワークの考慮事項 ............................. 45 4. コンピュートノード .................................. 47 CPU の選択 ......................................... 47 ハイパーバイザーの選択 ............................. 48 インスタンスストレージのソリューション .............. 49 オーバーコミット ................................... 53 ロギング ........................................... 54 ネットワーク ....................................... 55 まとめ ............................................. 55 v OpenStack 運用ガイド February 1, 2016 5. スケーリング ........................................ 57 出発点 ............................................. 57 クラウドコントローラーノードの追加 .................. 59 クラウドの分離 ..................................... 60 スケーラブルハードウェア ........................... 64 6. ストレージ選定 ...................................... 67 一時ストレージ ..................................... 67 永続ストレージ ..................................... 67 ストレージのコンセプト ............................. 72 ストレージバックエンドの選択 ....................... 73 まとめ ............................................. 80 7. ネットワーク設計 .................................... 81 管理ネットワーク ................................... 81 パブリックアドレスの選択肢 ......................... 82 IP アドレス計画 .................................... 82 ネットワークトポロジー ............................. 84 ネットワーク関係のサービス ......................... 86 まとめ ............................................. 87 II. 運用 .................................................... 89 8. 環境の把握 .......................................... 91 管理目的での OpenStack Dashboard の使用 ............ 91 コマンドラインツール ............................... 91 ネットワークの検査 ................................. 99 ユーザーとプロジェクト ............................ 100 稼働中のインスタンス .............................. 100 概要 .............................................. 101 9. プロジェクトとユーザーの管理 ........................ 103 プロジェクトかテナントか? ......................... 103 プロジェクトの管理 ................................ 104 クォータ .......................................... 106 ユーザー管理 ...................................... 116 新規ユーザーの作成 ................................ 116 プロジェクトへのユーザーの割り当て ................. 118 概要 .............................................. 123 10. ユーザーによる運用 ................................. 125 イメージ .......................................... 125 フレーバー ........................................ 128 セキュリティグループ .............................. 130 ブロックストレージ ................................ 140 Shared File Systems サービス ...................... 142 インスタンス ...................................... 157 セキュリティグループの割り当て .................... 162 Floating IP ....................................... 162 vi OpenStack 運用ガイド 11. 12. 13. 14. February 1, 2016 ブロックストレージの接続 .......................... スナップショットの取得 ............................ データベースにあるインスタンス .................... グッドラック! .................................... メンテナンス、故障およびデバッグ ................... クラウドコントローラーとストレージプロキシの故障と メンテナンス ...................................... コンピュートノードの故障とメンテナンス ............. ストレージノードの故障とメンテナンス ............... 完全な故障の対処 .................................. 構成管理 .......................................... ハードウェアの取り扱い ............................ データベース ...................................... HDWMY ............................................. 故障しているコンポーネントの特定 .................. アンインストール .................................. ネットワークのトラブルシューティング ............... 「ip a」を使ってインタフェース状態をチェックする ... クラウド上の nova-network 通信の仮想化 ............ クラウド上の OpenStack Networking サービス通信の仮 想化 .............................................. 経路上の障害を見つける ............................ tcpdump ........................................... iptables .......................................... nova-network 用データベースにあるネットワーク設定 .. nova-network の DHCP 問題の デバッグ .............. DNS の問題をデバッグする .......................... Open vSwitch のトラブルシューティング ............. ネットワーク名前空間への対応 ...................... 概要 .............................................. ロギングと監視 .................................... ログはどこにあるのか? ............................ ログの読み方 ...................................... インスタンスリクエストの追跡 ...................... カスタムログの追加 ................................ RabbitMQ Web管理インターフェイス および rabbitmqctl ................................................... ログの集中管理 .................................... 監視 .............................................. 概要 .............................................. バックアップとリカバリー ........................... バックアップ対象 .................................. データベースのバックアップ ........................ vii 163 164 169 170 171 171 173 180 181 182 183 184 185 186 189 191 191 192 193 201 201 203 204 205 209 210 212 213 215 215 215 217 218 219 219 221 229 231 231 232 OpenStack 運用ガイド February 1, 2016 ファイルシステムバックアップ ...................... バックアップのリカバリー .......................... 概要 .............................................. 15. カスタマイズ ...................................... OpenStack 開発環境の作成 .......................... Object Storage (Swift) ミドルウェアのカスタマイズ .. OpenStack Compute (nova) スケジューラーのカスタマイ ズ ................................................ Dashboard (Horizon) のカスタマイズ ................ まとめ ............................................ 16. OpenStack コミュニティー .......................... 助けを得る ........................................ バグ報告 .......................................... OpenStack コミュニティーに参加する ................ ドキュメント作成への貢献の仕方 .................... セキュリティー情報 ................................ さらに情報を見つける .............................. 17. 高度な設定 ........................................ ドライバーによる違い .............................. 定期タスクの実装 .................................. 設定に関する個別のトピック ........................ 18. アップグレード .................................... アップグレード前の考慮事項 ........................ アップグレード手順 ................................ 失敗したアップグレードのロールバック ............... A. 事例 .................................................... NeCTAR ................................................. MIT CSAIL ............................................. DAIR .................................................. CERN .................................................. B. ハリウッド^H^H^H^H^Hクラウドナイトメア ................... 二重 VLAN ............................................. 「あの問題」 ........................................... イメージの消失 ......................................... バレンタインデーのコンピュートノード大虐殺 ............. ウサギの穴に落ちて ..................................... Havana 死者の幽霊 ..................................... C. ロードマップの取り扱い .................................. 利用できる情報 ......................................... ロードマップへの影響 ................................... ウォッチの観点 ......................................... 分散仮想ルーター ....................................... viii 232 234 235 237 237 240 246 252 252 253 253 254 257 258 258 259 261 261 262 263 265 265 269 272 277 277 278 279 280 283 283 286 288 290 292 293 297 298 299 300 302 OpenStack 運用ガイド February 1, 2016 Modular Layer 2 プラグインによる Open vSwitch プラグイン の置換 ................................................. 新しい API ............................................ OpenStack on OpenStack (TripleO) ...................... Data processing service for OpenStack (sahara) ......... Bare metal Deployment (ironic) ........................ Database as a Service (trove) ......................... Message Service (zaqar) ............................... DNS service (designate) ............................... スケジューラーの改善 ................................... D. 情報源 .................................................. OpenStack .............................................. Cloud (General) ....................................... Python ................................................. ネットワーク ........................................... システム管理 ........................................... 仮想化 ................................................. 構成管理 ............................................... 用語集 ..................................................... 索引 ....................................................... ix 302 302 303 303 303 303 303 304 304 305 305 305 305 305 306 306 306 307 375 OpenStack 運用ガイド February 1, 2016 図の一覧 1. OpenStack 論理アーキテクチャー () ......................... 2 1.1. 基本ノードデプロイメント ............................... 17 1.2. パフォーマンスノードのデプロイメント .................... 18 1.3. コントローラーノード ................................... 19 1.4. コンピュートノード ..................................... 20 1.5. ネットワークノード ..................................... 21 1.6. ストレージノード ....................................... 22 2.1. ドライブのパーティション設定 ........................... 31 9.1. Dashboard のプロジェクトの作成フォーム ................ 105 9.2. プロジェクトメンバーの編集 タブ ....................... 119 12.1. ping パケットの通信ルート ............................ 192 12.2. Neutron ネットワーク経路 ............................. 195 C.1. リリースサイクル図 .................................... 298 xi OpenStack 運用ガイド February 1, 2016 表の一覧 1.1. ノードのタイプ ......................................... 13 1.2. サードパーティーコンポーネントの設定 .................... 22 1.3. OpenStack component configuration ...................... 25 3.1. クラウドコントローラーのハードウェアサイジングに関する 考慮事項 .................................................... 39 3.2. 構成シナリオ ........................................... 40 5.1. OpenStack デフォルトのフレーバー ....................... 58 5.2. OpenStack 分離の手法 ................................... 60 6.1. OpenStack ストレージ ................................... 72 6.2. 永続ファイルベースのストレージサポート .................. 74 7.1. ネットワーク構成オプション ............................. 84 9.1. Compute のクォータの説明 .............................. 107 9.2. Block Storage のクォータの説明 ........................ 113 10.1. フレーバーのパラメーター ............................. 129 11.1. サービス復旧優先度一覧の例 ........................... 181 13.1. OpenStack のログの場所 ............................... 215 xiii OpenStack 運用ガイド February 1, 2016 はじめに OpenStack の概要 ............................................ xv はじめての OpenStack ....................................... xvi この本の対象読者 .......................................... xvii この本の構成 ............................................... xix この本をなぜ書いたか?どうやって書いたか? ................ xxiii この本の作成に参加するには ............................... xxvii このドキュメントに使用される規則 ........................... xxix OpenStack はオープンソースプラットフォームで、OpenStack を使う と、コモディティハードウェア上で動作する Infrastructure as a Service (IaaS) クラウドを自分で構築できます。 OpenStack の概要 OpenStack は、オープンソース、オープン設計、オープン開発を信じて います。すべては、あらゆる人の参加を奨励するオープンコミュニティ により行われています。OpenStack の長期ビジョンは、規模によらず、 パブリッククラウドやプライベートクラウドのプロバイダーの要求を 満たす、ユビキタスなオープンソースのクラウドコンピューティングソ フトウェアを作成することです。OpenStack のサービスは、データセン ター全体のコンピュート、ストレージ、ネットワークの大規模なリソー スプールを制御します。 OpenStack の背後にある技術は、クラウドインフラストラクチャーソ リューション向けのさまざまなコンポーネントを提供する、一連の相互 に関連するプロジェクトから構成されます。各サービスは、これらのリ ソースをすべてダッシュボードから管理できるよう、オープンな API を 提供します。これは、権限を与えられたユーザーが、API をサポートす る Web インターフェース、コマンドラインクライアント、ソフトウェア 開発キット (SDK) 経由でリソースを配備する管理者権限を与えます。多 くの OpenStack API は拡張できます。API 拡張経由でより多くのリソー スにアクセスして革新しながら、コアなコール群の互換性を保つことが できます。OpenStack プロジェクトは、開発者とクラウドコンピュー ティング技術者のグローバルなコラボレーションです。プロジェクト は、パブリッククラウドおよびプライベートクラウド向けのオープン標 準なクラウドコンピューティングプラットフォームを生産します。実装 のしやすさ、大規模なスケーラビリティ、さまざまな豊富な機能、もの すごい拡張性に注力することにより、プロジェクトはあらゆる種類の組 織に対して実践的かつ信頼できるクラウドソリューションを提供するこ とを目指しています。 xv OpenStack 運用ガイド February 1, 2016 はじめての OpenStack OpenStack は、オープンソースプロジェクトとして、ユニークな点があ ります。その 1 つは、さまざまなレベルで OpenStack に携わりはじめ ることができる点です。すべてを自分自身で行う必要はありません。 OpenStack の使い方 「まだクラウドを構築する必要がありますか?」と質問したことでしょ う。クレジットカードを使うだけで、コンピュートサービスやスト レージサービスを使いはじめたい場合、eNovance、HP、Rackspace な どのパブリック OpenStack クラウドを使うことができます。それらの OpenStack クラウドのリソースを使うことは、パブリックにアクセスで きる Amazon Web Services Elastic Compute Cloud (EC2) や Simple Storage Solution (S3) にアクセスすることと同じです。 プラグアンドプレイ OpenStack しかしながら、OpenStack の魅力的な部分は、自分のプライベートクラ ウドを構築することかもしれません。この目標を達成するいくつかの 方法があります。おそらく最も簡単な方法は、アプライアンス形式の ソリューションです。アプライアンスを購入し、それを展開し、電源と ネットワークを接続します。そして、最小限の設定だけで OpenStack ク ラウドが構築されていくことを見ていてください。 また一方、ハードウェアの選択が多くのアプリケーションにとって 重要です。そのため、アプライアンスを適用する場合、自分で選択 したサーバー、ストレージ、ネットワークの製品で実行できる、ソ フトウェアディストリビューションがいくつかあることを考慮してく ださい。Canonical (2011 年に標準のクラウド製品を Eucalyptus か ら OpenStack に置き換えました)、Red Hat、SUSE は、エンタープラ イズレベルの OpenStack ソリューションとサポートを提供していま す。Rackspace、Piston、SwiftStack、Cloudscaling などの専門的な ディストリビューションも見たいかもしれません。 代わりに、ベースとするハードウェアやアプリケーション、いくつかの 新機能の追加、コンポーネントをくみ上げる方法を判断するために、誰 かに支援してほしい場合、Mirantis や Metacloud などの OpenStack の 経験豊富なシステムインテグレーターに連絡することを検討してくださ い。 自分たち内部の OpenStack 専門性を高めることを優先する場合、それ を始める良い方法は、トレーニングに参加または手配することかもし xvi OpenStack 運用ガイド February 1, 2016 れません。OpenStack Foundation は、お近くのイベントを見つけられ る Training Marketplace を開いています。また、OpenStack コミュニ ティーは、オープンソースのトレーニング教材を作成するグループがあ ります。 自分の OpenStack の展開 しかしながら、このガイドは別の想定読者もいます。独自の自作ソ リューションを導入することにより、OpenStack フレームワークの柔軟 性を求めている人々です。 OpenStack は水平的にスケールするよう設計されているため、クラウド の拡大に合わせて新しいコンピュート、ネットワーク、ストレージのリ ソースを簡単に追加できます。大規模 OpenStack パブリッククラウドの 広播性に加えて、PayPal、Intel、Comcast などの多くの組織が大規模な プライベートクラウドを構築しています。OpenStack は、クラウドを構 築するためのいくつかの異なる技術を統合できるので、一般的なソフト ウェアよりも多くのものを提供します。このアプローチにより、素晴ら しい柔軟性を提供しますが、始めは数多くのオプションにより圧倒され るかもしれません。 この本の対象読者 この本は、OpenStack クラウドの運用を始めようとして人も、運用中の OpenStack クラウドを引き継ぎ、うまく動かし続けようとしている人も 対象にしています。おそらく、あなたは devops チームの一員であった り、クラウドを始めたばかりのシステム管理者なのでしょう。あなたの 会社の OpenStack クラウドチームに入ろうとしているのかもしれませ ん。この本はそのような皆さん全員に向けたものです。 このガイドは、OpenStack をサポートする Linux ディストリビューショ ン、SQL データベースや仮想化に関してよく知っていることを前提にし ています。複数台の Linux マシンのネットワーク設定・管理にも慣れて いる必要があります。SQL データベースのインストールと管理を行い、 場合によってはデータベースに対してクエリーを実行することもありま す。 OpenStack クラウドの最も複雑な点の一つにネットワーク設定がありま す。DHCP、Linux ブリッジ、VLAN、iptables といった考え方をよく理解 していなければなりません。OpenStack クラウドで必要となるスイッチ やルータを設定できるネットワークハードウェアの専門家と話をする必 要もあります。 xvii OpenStack 運用ガイド February 1, 2016 ヒント クラウドコンピューティングは非常に高度な話題です。ま た、本書は多くの基礎知識を必要とします。しかしながら、 クラウドコンピューティングに慣れていない場合、本書の最 後にある用語集 [307]、OpenStack のオンラインドキュメン ト、付録D 情報源 [305]にある本書で参照されている参考資 料を使うことを推奨します。 参考資料 作業を完了するために役立つ、その他のガイドはOpenStack ドキュメン ト Web サイトにあります。 OpenStack の各種ガイド OpenStack インストールガイド 自動化せずに、手動で行う場合のイ ンストール手順について説明していま す。パッケージングシステムがある複 数のディストリビューション向けのイ ンストールガイドがあります。 • インストールガイド openSUSE 13.2、SUSE Linux Enterprise Server 12 版 • インストールガイド Red Hat Enterprise Linux 7、CentOS 7 版 • インストールガイド Ubuntu 14.04 (LTS) Server 版 OpenStack 設定レファレンス リリースバージョン毎に、OpenStack のコアサービス、統合されたサービ スのすべての設定オプションの一覧が 載っています OpenStack クラウド管理者ガイ ド あなたのユースケースに合わせ て、ストレージ、コンピューティン グ、Software-defined-networking な ど OpenStack クラウドを管理する方 法が書かれています xviii OpenStack 運用ガイド February 1, 2016 OpenStack 高可用性ガイド OpenStack サービス、関連するコント ローラやデータストアを高可用にする ために取りうる方策に説明しています OpenStack セキュリティガイド OpenStack クラウドを安全にするため のベストプラクティスと基本的な考え 方について書かれています 仮想マシンイメージガイド OpenStack で利用可能な仮想マシンイ メージを取得、作成、更新する方法に ついて説明されています OpenStack エンドユーザーガイ ド OpenStack のエンドユーザー が、OpenStack Dashboard と OpenStack クライアントコマンドを 使って、OpenStack クラウドのリソー スの作成・管理を行う方法を説明して います OpenStack 管理ユーザーガイド OpenStack の管理者が、OpenStack Dashboard と OpenStack クライアン トコマンドを使って、OpenStack クラ ウドのリソースの作成・管理を行う方 法を説明しています。 ネットワークガイド このガイドは、OpenStack Networking (neutron) を導入して管理する方法を 探している、OpenStack 管理者を対象 にしています。 OpenStack API Guide OpenStack サービスのエンドポイント に REST API リクエストをどのように 送信するかについての概要が説明され ています この本の構成 この本は 2つの部分から構成されています。1 つは OpenStack クラウド 設計においてアーキテクチャーの決定に関してで、もう 1 つは稼働中の OpenStack クラウドで繰り返し行う運用に関してです。 パート I: 1章アーキテクチャー例 [3] 他の章で議論するすべての判断によ り、本章はこのドキュメントのために xix OpenStack 運用ガイド February 1, 2016 行われる判断、アーキテクチャー例の 正当性について説明します。 2章プロビジョニングとデプロ イメント [29] 本書はインストールについて説明して いませんが、本章に記載されているよ うに、配備と設定を自動化することを 強く推奨します。 3章クラウドコントローラーの デザインとクラウド管理 [37] クラウドコントローラーとは、各ノー ドで実行するサービスを集約して説明 するための便宜的なものです。この章 は、ハードウェア、ネットワーク、お よびパフォーマンスとサービスの分離 のためにクラウドコントローラーを設 定する方法について議論します。 4章コンピュートノード [47] この章は、仮想マシンを実行するため のコンピュートノードについて記載し ます。いくつかのハードウェアの選択 肢があります。ロギングとネットワー クについても説明しています。 5章スケーリング [57] この章は、規模の拡張および分離にお ける検討を通して、クラウドの拡大に ついて議論します。 6章ストレージ選定 [67] 他のアーキテクチャーの判断と同じよ うに、OpenStack におけるストレージ の概念は、さまざまな選択肢がありま す。この章は選択肢を提示します。 7章ネットワーク設計 [81] OpenStack クラウドのネットワーク は、既存のネットワークに適合する必 要があります。また、ユーザーや管理 者にとって最良の設定をできる必要も あります。この章は、ネットワークの 判断に関する深い情報を提供します。 パート II: 8章環境の把握 [91] この章は、コマンドラインツールを用 いてお使いの OpenStack クラウド全 体を理解できるようにするために書か れました。また、お使いのクラウドに xx OpenStack 運用ガイド February 1, 2016 すでにセットアップされているものを 理解することもできます。 9章プロジェクトとユーザーの 管理 [103] この章は、すべての管理者がユーザー を管理し、リソースを小さくまとめる クォータを設定するために必ず直面す る、ユーザー有効化のプロセスを詳細 に説明します。 10章ユーザーによる運用 [125] この章は、OpenStack リソースの使用 方法、ユーザーの教育方法について説 明します。 11章メンテナンス、故障および デバッグ [171] この章は、執筆者がこれまで本番環境 を運用してきて、トラブルシューティ ングする中で見てきた、一般的な障害 について詳細に検討します。 12章ネットワークのトラブル シューティング [191] ネットワークのトラブルシューティン グは、仮想リソースでとくに難しくな ります。この章は、ネットワーク通信 の追跡、ネットワーク障害の根本原因 の調査、DHCP や DNS などの関連サー ビスのデバッグに関するヒントとコツ がたくさん詰まっています。 13章ロギングと監視 [215] この章は、OpenStack のログ保存場 所、監視目的にログを参照および管理 する最良の方法について説明します。 14章バックアップとリカバ リー [231] この章は、OpenStack 中でバックアッ プする必要があるもの、バックアップ のリカバリーのベストプラクティスに ついて説明します。 15章カスタマイズ [237] OpenStack に特別な機能を追加したい 読者向けに、この章は、カスタムミド ルウェアやカスタムスケジューラーを 書いて、リソースを再配置するため に、DevStack を使用する方法につい て説明します。 16章OpenStack コミュニ ティー [253] OpenStack は非常にオープンであるた め、この章は、コミュニティーを案内 する手助けになり、支援したり支援さ xxi OpenStack 運用ガイド February 1, 2016 れたりできる場所を見つけることに専 念します。 17章高度な設定 [261] ほとんどの OpenStack は、ドライ バーを用いて動作します。そのため、 サービスの基本セットに別のソリュー ションをプラグインできます。この章 は、いくつかの高度な設定に関する話 題を取り扱います。 18章アップグレード [265] この章は、本書で使用されるアーキテ クチャーに基づいて、アップグレード に関する情報を提供します。 xxii OpenStack 運用ガイド February 1, 2016 後付: 付録A 事例 [277] OpenStack コミュニティーのユース ケースをいくつか参照できます。少 しの技術的な詳細と参考資料もありま す。 付録B ハリウッド^H^H^H^H^Hク ラウドナイトメア [283] これらは、得がたい教訓や知見を得ら れた、イメージの消失、仮想マシンの 大虐殺、クレイジーなトラブルシュー ティング技術に関する伝説的な公開物 語です。 付録C ロードマップの取り扱 い [297] オープンかつ透明な OpenStack の開 発プロセスからロードマップを把握す る方法をまとめています。 付録D 情報源 [305] プロジェクトの急速な成熟のため、数 多くの OpenStack の情報源がオンラ インで利用可能ですが、執筆者が学習 している間に有用だったリソースを一 覧化しています。 用語集 [307] この本で使われている用語の一覧。オ ンライン上にある OpenStack 用語集 のサブセットです。 この本をなぜ書いたか?どうやって書い たか? 私たちは少なくとも1年以上 OpenStack クラウドを構築し運用してきま した。そこで得られた知識を多くの人と共有するために、この本を書き ました。 OpenStack クラウドの責任者として数ヶ月がたつと、そのド キュメントを渡しておけば、システム管理者に日々のクラウドの運用を どのように行なえばよいかが分かるようなドキュメントが欲しくなりま した。また、クラウドを構築する際に選択したやり方のより詳細な技術 情報を共有したいと思いました。 次のような場面であなたの助けとなるように、この本を書きました。 • 初めての本格的な OpenStack クラウドのアーキテクチャーの設計と構 築。この本を読み終えると、コンピュート、ネットワーク、ストレー ジのリソースを選ぶにはどんな質問を自分にすればよいのか、どのよ xxiii OpenStack 運用ガイド February 1, 2016 うに組み上げればよいのかや、どんなソフトウェアパッケージが必要 かが分かることでしょう。 • クラウドを管理する上で必要となる日々のタスクの実行。 私たちはこの本を Book Sprint で執筆しました。 Book Sprint は短 い期間で本を建設的に作成できるメソッドです。詳しい情報は、Book Sprint のサイト を参照して下さい。著者らは2013年2月の5日間でこの 本をまとめあげました。カフェインと、テキサス州オースティンの素晴 らしいテイクアウトの食事は力になりました。 最初の日に、アイデアを色とりどりのポストイットでホワイトボード いっぱいに書き出し、クラウドを設計し運用するという漠然とした話題 を扱った本の作成を開始しました。 私たちは一心不乱に自分たちの経験に基づき執筆を行い、互いに意見を ぶつけ合いました。一定の間隔で、本の現在の状況や構成をレビュー し、本を作り上げていき、今皆さんが見ているものができあがりまし た。 以下が執筆チームのメンバーです。 Tom Fifield CERN の Large Hadron Collider (LHC) で ATLAS のような素粒子物理学実験でコン ピューティングのスケーラビリティの経 xxiv OpenStack 運用ガイド February 1, 2016 験を積んだ後、現在はオーストラリアの 公的な研究部門を支援するプロダクション の OpenStack クラウドに携わっていまし た。現在は OpenStack のコミュニティマ ネージャーを務めており、空いた時間で OpenStack ドキュメントプロジェクトに参 加しています。 Diane Fleming Diane は OpenStack API ドキュメントプ ロジェクトで非常に熱心に活動していま す。このプロジェクトでは自分ができると ころであれば、どこでも取り組んでくれま した。 Anne Gentle Anne は OpenStack のドキュメントコー ディネーターで、2011年の Google Doc Summit では individual contributor (個人コントリビュータ) を努め Open Street Maps チームとともに活動しま した。Adam Hyde が進めていた FLOSS Manuals の以前の doc sprint にも参加し ています。テキサス州オースティンに住ん でいます。 Lorin Hochstein アカデミック出身のソフトウェア開発者・ 運用者である彼は、Nimbis Services で クラウドサービスの Lead Architect と して働いていました。Nimbis Service で は彼は技術計算アプリケーション用の OpenStack を運用しています。 Cactus リリース以来 OpenStack に携わってい ます。以前は、University of Southern California's Information Sciences Institute (USC-ISI) で OpenStack の high-performance computing 向けの拡張 を行いました。 Adam Hyde Adam は今回の Book Sprint をリードし ました。 Book Sprint メソッドを創設者 でもあり、一番経験豊富な Book Sprint のファシリテーターです。詳しい情報は http://www.booksprints.net を見てくだ さい。 3000人もの参加者がいるフリーソ フトウェアのフリーなマニュアルを作成 するコミュニティである FLOSS Manuals xxv OpenStack 運用ガイド February 1, 2016 の創設者です。また、Booktype の創設 者でプロジェクトマネージャーです。 Booktype はオンラインで本の執筆、編 集、出版を行うオープンソースプロジェク トです。 Jonathan Proulx Jon は MIT Computer Science and Artificial Intelligence Lab で上級技術 アーキテクトとして OpenStack クラウド を運用し、研究者が必要なだけの計算能力 を使えるようにしています。 OpenStack の勉強を加速しようと思い、OpenStack ド キュメントへの貢献とドキュメントのレ ビューを始めました。 Everett Toews Everett は Rackspace の Developer Advocate で、OpenStack や Rackspace Cloud を使いやすくする仕事をして います。ある時は開発者、ある時は advocate、またある時は運用者です。彼 は、ウェブアプリケーションを作成し、 ワークショップを行い、世界中で公演を 行い、教育界やビジネスでプロダクション ユースとして使われる OpenStack を構築 しています。 Joe Topjian Joe は Cybera で複数のクラウドの設計と 構築を行って来ました。 Cybera は、非営 利でカナダのアルバータ州の起業家や研究 者を支援する電子情報インフラを構築して います。また、システムアーキテクトとし てこれらのクラウドの維持・運用を活発に 行なっており、その経験からクラウド環境 でのトラブルシューティングの豊富な知識 を持っています。 OpenStack コミュニティー メンバー 数多くの方々の努力がコミュニティのド キュメントを維持しています。私たちの コミュニティーのメンバーは、一年を通 じて、このドキュメントの内容を更新し ました。また、最初のスプリントの 1 年 後、Jon Proulx さんが 2 回目となる 2 日間のミニスプリントを主催しました。 これは、MIT で行われ、最新リリースに 向けた更新を目標としました。ドキュメ xxvi OpenStack 運用ガイド February 1, 2016 ント作成以降、30 人以上の貢献者がこの ドキュメントをサポートしてきました。レ ビュー、継続的ビルド、翻訳のツールチェ インがあります。執筆者や開発者は継続的 に、パッチをレビューし、ドキュメントバ グを記入し、内容を編集し、そのバグを修 正します。その方々の努力を認めたいと思 います。 以下の方々がこのドキュメントに貢献し ています: Akihiro Motoki, Alejandro Avella, Alexandra Settle, Andreas Jaeger, Andy McCallum, Benjamin Stassart, Chandan Kumar, Chris Ricker, David Cramer, David Wittman, Denny Zhang, Emilien Macchi, Gauvain Pocentek, Ignacio Barrio, James E. Blair, Jay Clark, Jeff White, Jeremy Stanley, K Jonathan Harker, KATO Tomoyuki, Lana Brindley, Laura Alves, Lee Li, Lukasz Jernas, Mario B. Codeniera, Matthew Kassawara, Michael Still, Monty Taylor, Nermina Miller, Nigel Williams, Phil Hopkins, Russell Bryant, Sahid Orentino Ferdjaoui, Sandy Walsh, Sascha Peilicke, Sean M. Collins, Sergey Lukjanov, Shilla Saebi, Stephen Gordon, Summer Long, Uwe Stuehler, Vaibhav Bhatkar, Veronica Musso, Ying Chun "Daisy" Guo, Zhengguang Ou, ZhiQiang Fan. この本の作成に参加するには この本の元は人が集まったイベントで作成されましたが、今やこの本は みなさんも貢献できる状態になっています。 OpenStack のドキュメン ト作成は、バグ登録、調査、修正を繰り返して行うというコーディング の基本原則に基いて行われています。我々はこの本のソースコンテンツ を GitHub にも置いており、レビューシステムである OpenStack Gerrit 経由で協力をお待ちしています。この本の O'Reilly 版では、我々は O'Reilly の Atlas システムを使用していますが、ソースコンテンツは GitHub にも格納され、コントリビュータ間での共同作業ができるように なっています。 xxvii OpenStack 運用ガイド February 1, 2016 Learn more about how to contribute to the OpenStack docs at OpenStack Documentation Contributor Guide. バグを見つけたが、どのように直せばよいか分からない場合や本当にド キュメントのバグか自信が持てない場合は、OpenStack Manuals にバグ を登録して、バグの Extra オプションで ops-guide タグを付けて下さ い。 ops-guide タグは、そのバグがこのガイドに関するものであること を示します。どのように直せばよいか分かる場合には、そのバグの担当 者を自分に割り当てることもできます。また、OpenStack doc-core チー ムのメンバーがドキュメントバグを分類することもできます。 xxviii OpenStack 運用ガイド February 1, 2016 このドキュメントに使用される規則 以下の表記規則がこのドキュメントで使用されます。 斜体 新しい用語、URL、電子メール、ファイル 名、ファイルの拡張子を意味します。 等幅 プログラム一覧に使用されます。文中でも、 変数名、関数名、データベース、データ形 式、環境変数、宣言文、キーワードなどの プログラム要素を参照するために使用されま す。 Constant width bold ユーザーにより書いてあるとおりに入力され るべきコマンドや文字列を表します。 等幅・斜体 ユーザーが指定した値、または文脈により決 められる値で置き換えるべき文字列を表しま す。 コマンドプロンプト # プロンプトから始まるコマンドは、root ユーザーにより実行すべきです。これらの例 は、sudo コマンドが利用できる場合、それ を使用することもできます。 $ プロンプトから始まるコマンドは、root を含む、すべてのユーザーにより実行できま す。 ヒント この要素はヒントや提案を意味します。 注記 この要素は一般的な注記を意味します。 警告 この要素は警告や注意を意味します。 xxix パート I. アーキテクチャー OpenStack クラウドの設計は重要な作業です。クラウドのユーザーの要件とニーズ を確実に理解して、それらに対応するために可能な限り最良の構成を決定する必要 があります。OpenStack は、ユーザーのニーズを満たすための優れた柔軟性を提供 します。本セクションでは、このようなプロセスで行う必要のある数多くの決定事 項を明確に説明することを目的としています。 OpenStack の設計、デプロイ、および構成を行うにあたって、管理者は論理アーキ テクチャーを理解するが必要があります。OpenStack 内で統合される全サービスお よびそれらがどのように相互作用するかについての構想を立てるには、図が役立ち ます。 OpenStack のモジュールは、以下の種別のいずれかです。 デーモン バックグラウンドプロセスとして実行されま す。Linux プラットフォームでは、デーモンは通常 サービスとしてインストールされます。 スクリプト 仮想環境をインストールし、テストを実行します。 コマンドラインインター フェース (CLI) ユーザーはコマンドを使用して API コールを OpenStack サービスに送信できます。 下図に示したように、エンドユーザーはダッシュボード、CLI、および API を使用 して対話することができます。サービスはすべて、共通の Identity service を 介して認証を行い、またサービス相互間の対話は、特権のある管理者がコマンド を実行する必要がある場合を除いてパブリック API を使用して行われます。図 1「OpenStack 論理アーキテクチャー ()」 [2] には、OpenStack の最も一般的 な論理アーキテクチャーを示しています。ただし、これは唯一のアーキテクチャー ではありません。 OpenStack 運用ガイド February 1, 2016 図1 OpenStack 論理アーキテクチャー (http://docs.openstack.org/ openstack-ops/content/figures/2/figures/osog_0001.png) 2 OpenStack 運用ガイド February 1, 2016 第1章 アーキテクチャー例 アーキテクチャー例: レガシーネットワーク (nova) ............... 3 アーキテクチャー例: OpenStack Networking .................... 10 アーキテクチャー例についての章の結び ......................... 27 OpenStack が提供する可能性を理解するには、確実に信頼できる、本番 環境での検証済みの基本アーキテクチャーから開始するのが最善の方法 です。本ガイドでは、ベースオペレーティングシステム (Ubuntu および Red Hat Enterprise Linux) 上に基本ピボットとネットワークアーキテ クチャを備えた基本アーキテクチャーの例を 2 つ紹介しています。この ガイドは、それぞれの選択理由を提供します。 OpenStack は、多数の異なるバックエンドおよびネットワーク設定オプ ションを利用して高度に設定することが可能です。可能な OpenStack デ プロイメントをすべて網羅するドキュメントを執筆するのは難しいた め、本ガイドではアーキテクチャーの例を定義することによって文書 化の作業を簡素化すると共に、本書のスコープを規定します。以下に紹 介するアーキテクチャーの例はいずれも本番環境で現在実行中であり、 ユーザーにサービスを提供しています。 ヒント これらのアーキテクチャー例で言及されている用語が明確に 理解できない場合には、通常通り 用語集 [307] を参照して ください。 アーキテクチャー例: レガシーネット ワーク (nova) この特定のアーキテクチャー例は、Grizzly から Havana にアップグ レードされており、複数のインスタンスに割り当てるためのパブリック IP アドレスが多数利用可能な本番環境でテスト済みです。このセクショ ンの次には、OpenStack Networking (neutron) を使用する第 2 のアー キテクチャー例を紹介しています。各例では高可用性を提供していま す。これは、特定のノードが停止した場合には同じ設定の別のノードが タスクを引き継いでサービスを引き続き提供できることを意味します。 概要 Compute 用の基盤となる最もシンプルなアーキテクチャーは、単一 のクラウドコントローラーと複数のコンピュートノードで構成されま 3 OpenStack 運用ガイド February 1, 2016 す。Object Storage 用の最もシンプルなアーキテクチャーは、ユーザー を識別して API への要求をプロキシするノード 1 つと、最終的な一貫 性を確保するのに十分なレプリケーションを提供する、ストレージ自体 のためのノード 4つを合わせた 5 つのノードで構成されます。このアー キテクチャーの例では、特定のノード数は決まっていませんが、この アーキテクチャーを選択するにあたって考慮 および検討した点 (どのよ うな機能を提供するかなど) をお分かりいただけます。 コンポーネント コンポーネント 詳細 OpenStack リリース Havana ホストのオペレーティングシステム Ubuntu 12.04 LTS または Red Hat Enterprise Linux 6.5 (CentOS および Scientific Linux などの派生物を 含む) OpenStack パッケージリポジトリ Ubuntu Cloud Archive、RDO* ハイパーバイザー KVM データベース MySQL* メッセージキュー Ubuntu には RabbitMQ、Red Hat Enterprise Linux に は Qpid、 および派生物 ネットワークサービス nova-network ネットワークマネージャー FlatDHCP 単一の nova-network またはマルチ ホスト? マルチホスト* Image service (glance) バックエン file ド Identity (keystone) ドライバー SQL Block Storage (cinder) バックエン LVM/iSCSI ド ライブマイグレーションのバックエ ンド NFS を使用する共有ストレージ* オブジェクトストレージ OpenStack Object Storage (swift) アスタリスク (*) は、アーキテクチャーの例がデフォルトインストール の設定から逸脱している箇所を示しています。この逸脱については、次 のセクションで説明します。 注記 以下にあげる OpenStack の機能は、本ガイドに記載のアーキ テクチャーではサポートされていますが、必須項目ではあり ません。 4 OpenStack 運用ガイド February 1, 2016 • ダッシュボード: ダッシュボードの提供を考慮されている かもしれませんが、ユーザーは API アクセスのみの方に対 する関心の方が高い可能性があります。 • ブロックストレージ: ユーザーのユースケースでコン ピュートノード上などの一時的なストレージのみが必要と される場合は、ブロックストレージを提供する必要はあり ません。 • Floating IP アドレス: Floating IP アドレスとは、仮想 マシンの起動時に事前定義されたプールから確保される パブリック IP アドレスです。Floating IP アドレスによ り、インスタンスの起動時には常にパブリック IP アドレ スが利用できます。すべての組織が何千ものインスタンス に何千ものパブリック Floating IP アドレスを提供でき るとは限らないので、この機能はオプションと考えられま す。 • ライブマイグレーション: サービスをほとんどまたは全く 停止せずに実行中の仮想マシンをホスト間で移動する必要 がある場合には、ライブマイグレーションを有効化するこ とになりますが、この機能はオプションと考えられます。 • Object Storage: OpenStack Object Storage が提供するレ プリケーションと冗長化に必要な追加のハードウェアがな い場合には、マシンイメージをファイルシステムに保存す るように選択することが可能です。 設定指針 このアーキテクチャーの例は、OpenStack Havana の現在のデフォルト 機能セットをベースに、安定性に重点を置いて選択しています。現在 OpenStack を本番環境で実行しているクラウドの多くは、同様の選択を しているものと推定されます。 まず最初に、物理ノード上で実行するオペレーティングシステムを選択 する必要があります。OpenStack は複数の Linux ディストリビューショ ンでサポートされていますが、開発コミュニティの大半で使用されてい る Ubuntu 12.04 LTS (Long Term Support) を使用しました。このディ ストリビューションは、他のディストリビューションと比較した場合、 機能の完全性が高く、将来のサポートプランが明確に立てられていま す。 5 OpenStack 運用ガイド February 1, 2016 デフォルトの Ubuntu OpenStack インストールパッケージは使用せず に、Ubuntu Cloud Archive を使用することをお勧めします。Cloud Archive は、Canonical がサポートするパッケージリポジトリです。こ れにより、Ubuntu 12.04 を維持した状態で将来の OpenStack リリース にアップグレードすることができます。 KVM は ハイパーバイザー として Ubuntu の選択を補完します。これら はサポート面で対応する一対であり、OpenStack 開発コミュニティ (主 に KVM を使用する作成者) から集まる注目度が高いのも理由です。ま た、機能が完全で、ライセンスの料金や制限がありません。 MySQL も同様の傾向に沿っています。最近所有権が移転したにも関わら ず、このデータベースは OpenStack での使用では最も検証されており、 十分に文書化されています。SQLite は本番環境での使用には適してない ため、デフォルトのデータベースでは対象外とします。 OpenStack では AMQP 互換の選択肢として ZeroMQ や Qpid などのサ ポートが進んでいますが、RabbitMQ を選んだのは、その使いやすさと 本番環境で十分にテストされているのが理由です。また、RabbitMQ は Compute Cell といった機能でサポートされている唯一の選択肢です。 メッセージキューは OpenStack システムで不可欠のコンポーネント で、RabbitMQ 自体で元々サポートされているため、極めて簡単に実装で きます。このため、RabbitMQ は クラスター構成にすることを推奨しま す。 前章で述べたように、OpenStack Compute のネットワークにはいくつ かの選択肢がありますが、高可用性には FlatDHCP で マルチホスト ネットワークモードを使用して、OpenStack Compute ホスト毎に novanetwork デーモンを 1 つ実行することを推奨します。これにより、ネッ トワーク障害が確実に各コンピュートホスト内に隔離される堅牢性の高 いメカニズムが提供され、各ホストはハードウェアのネットワークゲー トウェイと直接通信することが可能となります。 ライブマイグレーション は、共有ストレージを使用することによってサ ポートされます。分散ファイルシステムには NFS を使用します。 多くの小規模なデプロイメントでは、 Object Storage を仮想マシン イメージのストレージのみに使用するとコストがかかり過ぎることが分 かっているため、OpenStack Image service (Glance) 内のファイルバッ クエンドを選択しました。設計対象のクラウド環境に Object Storage が含まれる場合には、バックエンドとして容易に追加できます。 Identity には SQL バックエンド を他のバックエンド (例: LDAP など) よりも優先して選択しました。このバックエンドは、インストールが簡 単な上、頑強です。本ガイドの執筆者は、多くのインストールで既存の 6 OpenStack 運用ガイド February 1, 2016 ディレクトリサービスをバインディングする必要があることを認識して おり、利用可能な数々の選択肢 に記載の内容を慎重に理解するように警 告しています。 Block Storage (cinder) は、外部ストレージノードにネイティブで インストールされ、LVM/iSCSI plug-in を使用します。大半の Block Storage プラグインは、特定のベンダーの製品や実装と関連付けられて おり、使用はそれらのハードウェアプラットフォームのユーザーに制限 されていますが、LVM/iSCSI はコモディティハードウェア上で堅牢性お よび安定性があります。 7 OpenStack 運用ガイド February 1, 2016 クラウドは OpenStack Dashboard がなくても稼働させることは可能です が、クラウドとの対話だけでなく運用担当者のツールとしても不可欠な 要素と判断しました。また、ダッシュボードに採用されている Django により、拡張機能 のための柔軟なフレームワークとなります。 OpenStack Networking を使用しない理由 このアーキテクチャー例では、OpenStack Networking は使用していませ ん。neutron はマルチホストネットワークをまだサポートしておらず、 また対象となる組織 (大学/政府機関) ではパブリックでアクセス可能な IPv4 アドレスを広範囲で利用できるのが理由です。 マルチホストネットワークを使用する理由 デフォルトの OpenStack デプロイメントでは、単一の nova-network サービスがクラウド内 (通常はクラウドコントローラー) で実行され、 ネットワークアドレス変換 (NAT)、DHCP、DNS などのサービスをゲスト インスタンスにd提供します。nova-network サービスを実行する単一の ノードが停止した場合には、インスタンスにアクセスできなくなり、 またインスタンスはインターネットにアクセスできません。クラウドで ネットワークトラフィックが過剰に送受信されると、nova-network サー ビスを実行する単一ノードがボトルネックとなる可能性があります。 ヒント マルチホスト とは、ネットワーク設定の高可用性オプション です。このオプションでは、nova-network サービスが単一 のノードだけではなく、各コンピュートノードで実行されま す。 詳細な説明 この参照アーキテクチャーは、複数のコンピュートノード、クラウドコ ントローラー 1 台、インスタンスストレージ用の外部 NFS ストレー ジサーバー 1 台、volume ストレージ用の OpenStack Block Storage サーバー 1 台で構成されます。 ネットワークタイムサービス (Network Time Protocol / NTP) は全ノードの時刻を同期します。ネットワークに は、マルチホストモードの FlatDHCPManager を使用しています。この アーキテクチャー例の論理図には、各ノードで実行されているサービス が示されています。 8 OpenStack 運用ガイド February 1, 2016 クラウドコントローラーは、ダッシュボード、API サービス、データ ベース (MySQL)、メッセージキューサーバー (RabbitMQ)、コンピュー トリソースを選択するスケジューラー (nova-scheduler)、Identity Service (keystone、nova-consoleauth)、Image Service (glance-api、 glance-registry)、ゲストのコンソールアクセスのためのサービス、 ストレージリソースのスケジューラーを含む Block Storage Service (cinder-api および cinder-scheduler) を実行します。 コンピュートノードには、コンピューティングリソースが保持されま す。このアーキテクチャー例では、コンピュートノードで、ハイパー バイザー (KVM)、libvirt (ノード間でのライブマイグレーションを可 能にするハイパーバイザー用ドライバー)、nova-compute、 nova-apimetadata (通常はマルチホストモードの場合のみ使用され、インスタン ス固有のメタデータを取得する)、nova-vncproxy、nova-network を実行 します。 9 OpenStack 運用ガイド February 1, 2016 ネットワークは、2 つのスイッチで構成され、1 つは管理/プライベート トラフィック用、もう 1 つは Floating IP を含むパブリックアクセス が対象です。この構成に対応するために、クラウドコントローラーおよ びコンピュートノードで NIC を 2 枚を装備します。OpenStack Block Storage および NFS ストレージサーバーは、プライベートネットワーク にのみアクセスする必要があるので、必要な NIC は 1 枚ですが、可能 な場合には複数の NIC をボンディング構成で動作させることを推奨しま す。Floating IP のアクセスは、インターネットに直結ですが、Flat IP のアクセスは NAT 経由となります。ネットワークトラフィックの構想に は、以下の図を利用してください。 さらなる拡張 この参照アーキテクチャーは、以下のように拡張することが可能です: • 追加でクラウドコントローラーを増やす (11章メンテナンス、故障お よびデバッグ [171] を参照)。 • OpenStack Storage Service を追加する (お使いのディストリビュー ション向けの OpenStack インストールガイド で Object Storage の 章を参照してください) • 追加で OpenStack Block Storage ホストを増やす (see 11章メンテナ ンス、故障およびデバッグ [171] 参照)。 アーキテクチャー例: OpenStack Networking 本章には、OpenStack Networking (別称: Neutron プロジェクト) を高 可用性環境で使用するアーキテクチャーの例を記載します。 10 OpenStack 運用ガイド February 1, 2016 概要 高可用性環境は、水平スケールが可能な環境が必要な場合や、ノードに 障害が発生した場合にもクラウドの稼働を継続させたい場合に設置する ことができます。以下のアーキテクチャー例では、 OpenStack Havana の現在のデフォルト機能セットをベースとし、高可用性に重点を置いて 記載しました。 コンポーネント コンポーネント 詳細 OpenStack リリース Havana ホストのオペレーティングシステム Red Hat Enterprise Linux 6.5 OpenStack パッケージリポジトリ Red Hat Distributed OpenStack (RDO) ハイパーバイザー KVM データベース MySQL メッセージキュー Qpid ネットワークサービス OpenStack Networking テナントネットワークの分離 VLAN Image service バックエンド GlusterFS Identity driver SQL Block Storage バックエンド GlusterFS 設定指針 このアーキテクチャ例は、OpenStack Havana の現在のデフォルト機能 セットをベースに、高可用性に重点を置いて選択しています。このアー キテクチャーは、現在 Red Hat の 企業内 OpenStack クラウドでデプロ イされており、ホステッド共有サービスの運用に使用されています。ホ ステッド共有サービスは、その性質上、高可用性が要求されます。 このアーキテクチャーコンポーネントは、以下のような理由で選択され ています。 Red Hat Enterprise Linux 全物理ノードで実行可能なオペレー ティングシステムを選択する必要が あります。このアーキテクチャー例 は、信頼性、長期的なサポート、認 定テストが提供され、セキュリティ 強化されている Red Hat Enterprise Linux をベースにしています。現 11 OpenStack 運用ガイド February 1, 2016 在、OpenStack の採用に向けて移行中 の企業顧客には、通常このような利点 が要求されます。 RDO Red Hat Distributed OpenStack パッ ケージは、Red Hat Enterprise Linux プラットフォーム用に構築された最新 の OpenStack リリースを容易にダウ ンロードする方法を提供します。 KVM KVM は、Red Hat Enterprise Linux に最適なサポート対象ハイパーバイ ザーです (また、ディストリビュー ションにも含まれます)。機能が完成 されており、ライセンスの料金や制限 は課せられません。 MySQL MySQL は、OpenStack 環境の全データ ベースのデータベースバックエンド として使用されます。MySQL は、Red Hat Enterprise Linux に最適なサ ポート対象データベースです (また、 ディストリビューションにも同梱さ れています)。このデータベースは、 オープンソースで、拡張が可能な上、 メモリーの処理を効率的に行います。 Qpid Apache Qpid は、Advanced Message Queuing Protocol の標準との 100% の互換性を提供し、ブローカーは C++ と Java の両方で利用可能です。 OpenStack Networking OpenStack Networking は、レイヤー 2 (L2) ネットワークの分離やプロバ イダーネットワークを含む高度なネッ トワーク機能を提供します。 VLAN 仮想ローカルエリアネットワークを使 用してブロードキャスト制御、セキュ リティ、物理レイヤーの透過性を提供 します。必要な場合には、VXLAN を使 用してアドレス空間を拡張します。 GlusterFS GlusterFS は拡張可能なストレージを 提供します。環境の拡大に応じて、 12 OpenStack 運用ガイド February 1, 2016 (高額なストレージアレイなどによる 制約を受けずに) ストレージノードを 継続的に追加することが可能です。 詳細な説明 ノードのタイプ 本セクションでは、OpenStack 環境を構成する異なるノードの内訳を記 載します。 ノードとは、オペレーティングシステムがプロビジョニング された物理マシンで、その上に定義済みソフトウェアスタックを実行し ます。 表1.1「ノードのタイプ」 [13] には、ノードの説明と仕様を記 載しています。 表1.1 ノードのタイプ 種別 説明 ハードウェアの例 コント コントローラーノードは、 OpenStack 環境が機能するた モデル: Dell R620 ローラー めに必要な管理ソフトウェアサービスを実行します。これ CPU: 2x Intel® Xeon® らのノードは、以下のような役割を果たします。 CPU E5-2620 0 @ 2.00 • ユーザーがアクセスするフロントドアに加えて、環境内 GHz その他すべてのコンポーネントが通信する API サービ メモリー: 32 GB スを提供します。 • 全コントローラーノードが使用されるように Pacemaker ディスク: 300 GB 10000 と HAProxy を利用して仮想 IP および負荷分散機能を RPM SAS ディスク x 2 提供して、多数のサービスを高可用性で実行します。 ネットワーク: 10G の ネットワークポート x 2 • 高可用性の「インフラストラクチャー」サービス (全 サービスの基盤となる MySQL や Qpid など) を提供し ます。 • ホストでも実行されるサービスを介して、いわゆる「永 続ストレージ」を提供します。この永続ストレージは、 信頼性のためにストレージノードにバッキングされま す。 図1.3「コントローラーノード」 [19] を参照してくださ い。 コン コンピュートノードは、OpenStack 内の仮想マシンインス モデル: Dell R620 ピュート タンスを実行します。コンピュートノードは、以下のよう CPU: 2x Intel® Xeon® な役割を果たします。 CPU E5-2650 0 @ 2.00 • それらのインスタンスを円滑に稼働するために必要な最 GHz 低限のサービスを実行します。 メモリー: 128 GB • ノードの障害発生時に仮想マシンの移行やインスタンス のリカバリができないように、仮想マシンにノード上の ディスク: 600 GB 10000 RPM SAS ディスク x 2 ローカルストレージを使用します。 ネットワーク: 10G ネッ トワークポート x 4 (将 13 OpenStack 運用ガイド 種別 February 1, 2016 説明 ハードウェアの例 図1.4「コンピュートノード」 [20] を参照してくださ い。 来を保証する拡張性のた め) ストレー ストレージノードは、環境に必要な全データを保管しま ジ す。これには、Image service ライブラリ内のディスク イメージや、Block Storage によって作成された永続ス トレージボリュームが含まれます。ストレージノードは GlusterFS テクノロジーを使用してデータの高可用性とス ケーラビリティを確保します。 図1.6「ストレージノード」 [22] を参照してください。 モデル: Dell R720xd CPU: 2x Intel® Xeon® CPU E5-2620 0 @ 2.00 GHz メモリー: 64 GB ディスク: 500 GB 7200 RPM SAS ディスク x 2 および 600 GB 10000 RPM SAS ディスク x 24 RAID コントローラー: PERC H710P Integrated RAID Controller、1 GB NV キャッシュ ネットワーク: 10G の ネットワークポート x 2 ネット ワーク ネットワークノードは、ユーザーがパブリックまたはプラ イベートネットワークを作成し、仮想マシンを外部ネット ワークにアップリンクするために必要なすべての仮想ネッ トワーキングを実行する役割を果たします。ネットワーク ノードは以下のような操作を実行します。 モデル: Dell R620 CPU: 1x Intel® Xeon® CPU E5-2620 0 @ 2.00 GHz • OpenStack 上で実行されているインスタンス用の唯一の メモリー: 32 GB 送受信ポイントを形成します。 ディスク: 300 GB 10000 • 環境の全ネットワークサービスを実行します。ただし、 RPM SAS ディスク x 2 ネットワーク API サービス (コントローラーノードで ネットワーク: 10G ネッ 実行される) を除きます。 トワークポート x 5 図1.5「ネットワークノード」 [21] を参照してくださ い。 ユーティ ユーティリティノードは、環境を稼働させ、その環境を実 モデル: Dell R620 リティ 行しているハードウェア/OS/ソフトウェアを維持管理する のに必要な多数の基本的なシステム管理機能を提供するた CPU: 2x Intel® Xeon® CPU E5-2620 0 @ 2.00 めに、内部管理スタッフのみが使用します。 GHz これらのノードは、プロビジョニング、設定管理、モニタ リング、GlusterFS 管理ソフトウェアなどのサービスを実 メモリー: 32 GB 行します。拡張の必要はありませんが、これらのマシンは ディスク: 500 GB 7200 通常バックアップされます。 RPM SAS ディスク x 2 ネットワーク: 10G の ネットワークポート x 2 ネットワークのレイアウト ネットワークには、環境内の全ハードウェア用の管理デバイスがすべて 含まれます (例: ハードウェアノード用の Dell iDrac7 デバイスやネッ 14 OpenStack 運用ガイド February 1, 2016 トワークスイッチ用の管理インターフェースの追加による) 。ネット ワークは、ハードウェア問題の診断またはリカバリを実行する場合にの み内部スタッフがアクセスします。 OpenStack 内部ネットワーク このネットワークは、OpenStack の管理機能およびトラフィックに使用 されます。これには、物理ノードのプロビジョニングに必要なサービス (pxe、tftp、kickstart)、OpenStack API およびメッセージを使用する 様々な OpenStack ノードタイプの間のトラフィック (例: nova-compute から keystone への通信や cinder-volume から nova-api への通信な ど)、 Gluster プロトコルによる配下のストレージ層へのストレージ データの全トラフィックなどが含まれます。全物理ノードで、少なくと も 1 つのネットワークインターフェース (通常は eth0) がこのネット ワークに設定されます。他の VLAN からのこのネットワークへのアクセ スは、ポート 22 でのみで可能です (マシンを管理するための ssh アク セス)。 15 OpenStack 運用ガイド February 1, 2016 パブリックネットワーク このネットワークは、以下の要素の組み合わせです: • コントローラーノード上のパブリックインターフェースの IP アドレ ス (エンドユーザーが OpenStack サービスにアクセスするのに使用) • OpenStack Networking が Floating IP に使用する、パブリックに ルーティング可能な IPv4 ネットワークアドレスの範囲。IPv4 アドレ スへのアクセスは制限される可能性があります。IPv4 アドレスの範囲 を大きくする必要はありません。 • OpenStack 内に作成されるプライベートネットワーク用のルーター このネットワークは、ユーザーが OpenStack インターフェースにアクセ スできるようするためにコントローラーノードに接続され、パブリック でルーティング可能なトラフィックの機能を仮想マシンに提供するため にネットワークノードに接続されます。また、このネットワークは、公 開する必要のある任意のユーティリティサービス (システムの監視など) にアクセスできるようにするために、ユーティリティマシンにも接続さ れます。 仮想マシントラフィックネットワーク これは、パブリックにはルーティングできない閉じたネットワークで、 単に OpenStack 内の仮想マシン間のトラフィックや、パブリックネット ワークへの外向きの L3 ルート (および仮想マシンに戻る接続のための Floating IP) を提供するネットワークノードと仮想マシンと間 のトラ フィックのためのプライベートの内部ネットワークに使用されます。こ のネットワークは閉じているため、他とは異なるアドレス空間を使用し て、その区別を明確に定義しています。このネットワークに接続する必 要があるのは、Compute ノードと OpenStack Networking ノードのみで す。 ノードの接続性 以下のセクションでは、ノードを異なるネットワークに接続する方法 ( 「ネットワークのレイアウト」 [14] を参照) と、ノードをネットワー クに接続する際に他に考慮すべき点 (例: ボンディング) について説明 します。 初期デプロイメント デプロイメントの複雑度と所要時間を最小限に抑えるためには、初め に、接続性を単純かつ簡潔に保つことを中心に接続の設定を展開する必 16 OpenStack 運用ガイド February 1, 2016 要があります。図1.1「基本ノードデプロイメント」 [17] に示したデ プロイメントでは、全コンピュートノードに 10G の接続を 1 つずつ提 供する一方で、適切なノードにはボンディングを活用してパフォーマン スを最大化することを目的としています。 図1.1 基本ノードデプロイメント パフォーマンスを最大化するための接続性 基本レイアウトのネットワークパフォーマンスが十分でない場合に は、図1.2「パフォーマンスノードのデプロイメント」 [18] に移行す ることができます。このレイアウトでは、環境内の全インスタンスに 10G のネットワークリンクを 2 つ提供するだけでなく、ストレージ層 にさらなるネットワーク帯域幅を提供し、パフォーマンスを最大化しま す。 17 OpenStack 運用ガイド February 1, 2016 図1.2 パフォーマンスノードのデプロイメント ノードの図 以下の図 (図1.3「コントローラーノード」 [19] through 図1.6「スト レージノード」 [22]) には、異なるタイプのノードについての論理的 情報が含まれます。この図には、実行されるサービスやそれらがどのよ うに相互に対話するかが示されています。また、サービスの可用性とス ケーラビリティがどのように実現されるかについても図示しています。 18 OpenStack 運用ガイド February 1, 2016 図1.3 コントローラーノード 19 OpenStack 運用ガイド February 1, 2016 図1.4 コンピュートノード 20 OpenStack 運用ガイド February 1, 2016 図1.5 ネットワークノード 21 OpenStack 運用ガイド February 1, 2016 図1.6 ストレージノード コンポーネントの設定例 表1.2「サードパーティーコンポーネントの設定」 [22] と 表 1.3「OpenStack component configuration」 [25] にサードパーティー と OpenStack のコンポーネント両方に関する設定例と考慮事項がありま す。 表1.2 サードパーティーコンポーネントの設定 コン ポーネ ント チューニング 可用性 拡張性 MySQL binlog-format = row マスター/マスターレプリ ケーション。しかしなが ら、両方のノードは同時 に使用されません。レプ リケーションは、すべて のノードができる限り最 新状態を維持します (非 同期のレプリケーション は、完全な状態が維持でき Not heavily considered. Once load on the MySQL server increases enough that scalability needs to be considered, multiple masters or a master/slave setup can be used. 22 OpenStack 運用ガイド コン ポーネ ント チューニング February 1, 2016 可用性 拡張性 ないことを意味します)。 データベースへの接続 は、Pacemaker の仮想 IP のみに行われます。これに より、マスター/マスター レプリケーションで発生す るほとんどの問題を避けら れます。 Qpid maxconnections=1000workerthreads=20connectionbacklog=10, sasl security enabled with SASL-BASIC authentication Qpid is added as a resource to the Pacemaker software that runs on Controller nodes where Qpid is situated. This ensures only one Qpid instance is running at one time, and the node with the Pacemaker virtual IP will always be the node running Qpid. Not heavily considered. However, Qpid can be changed to run on all controller nodes for scalability and availability purposes, and removed from Pacemaker. HAProxy maxconn 3000 HAProxy is a software layer-7 load balancer used to front door all clustered OpenStack API components and do SSL termination. HAProxy can be added as a resource to the Pacemaker software that runs on the Controller nodes where HAProxy is situated. This ensures that only one HAProxy instance is running at one time, and the node with the Pacemaker virtual IP will always be the node running HAProxy. Not considered. HAProxy has small enough performance overheads that a single instance should scale enough for this level of workload. If extra scalability is needed, keepalived or other Layer-4 load balancing can be introduced to be placed in front of multiple copies of HAProxy. MemcachedMAXCONN="8192" CACHESIZE="30457" Memcached is a fast in-memory key-value cache software that is used by OpenStack components for caching data and increasing performance. Memcached runs on all controller nodes, ensuring that should one go down, another instance of Memcached is available. Not considered. A single instance of Memcached should be able to scale to the desired workloads. If scalability is desired, HAProxy can be placed in front of Memcached (in raw tcp mode) to utilize multiple Memcached instances for scalability. However, 23 OpenStack 運用ガイド コン ポーネ ント チューニング February 1, 2016 可用性 拡張性 this might cause cache consistency issues. PacemakerConfigured to use corosync andcman as a cluster communication stack/quorum manager, and as a two-node cluster. Pacemaker とは、コント ローラーノードおよびネッ トワークノードで実行され ているサービスの可用性を 確保するために使用するク ラスタリングソフトウェア です: If more nodes need to be made cluster aware, Pacemaker can scale to 64 nodes. • Pacemaker は、クラスタ リングソフトウェアで あるため、基盤となる corosync および cman を活用して、ソフトウェ ア自体が自らの可用性を 処理します。 • GlusterFS ネイティブ クライアントを使用する 場合には、そのクライア ントは初回接続後にノー ドに関する全情報を認識 し、クライアント側の障 害を迂回するように自動 的にルーティングするた め、仮想 IP は必要あり ません。 • NFS または SMB のアダ プターを使用する場合に は、GlusterFS ボリュー ムをマウントする仮想 IP が必要となります。 GlusterFSglusterfs performance profile "virt" enabled on all volumes. Volumes are setup in two-node replication. Glusterfs is a clustered file system that is run on the storage nodes to provide persistent scalable data storage in the environment. Because all connections to gluster use the gluster native mount points, the gluster instances themselves provide availability and failover functionality. 24 The scalability of GlusterFS storage can be achieved by adding in more storage volumes. OpenStack 運用ガイド February 1, 2016 表1.3 OpenStack component configuration Component Node type Tuning Availability Scalability Dashboard Controller Configured to (horizon) use Memcached as a session store, neutron support is enabled, can_set_mount_point = False The dashboard is run on all controller nodes, ensuring at least one instance will be available in case of node failure. It also sits behind HAProxy, which detects when the software fails and routes requests around the failing instance. The dashboard is run on all controller nodes, so scalability can be achieved with additional controller nodes. HAProxy allows scalability for the dashboard as more nodes are added. Identity Controller Configured to (keystone) use Memcached for caching and PKI for tokens. Identity is run on all controller nodes, ensuring at least one instance will be available in case of node failure. Identity also sits behind HAProxy, which detects when the software fails and routes requests around the failing instance. Identity is run on all controller nodes, so scalability can be achieved with additional controller nodes. HAProxy allows scalability for Identity as more nodes are added. Image Controller /var/lib/glance/ service images is a (glance) GlusterFS native mount to a Gluster volume off the storage layer. The Image service is run on all controller nodes, ensuring at least one instance will be available in case of node failure. It also sits behind HAProxy, which detects when the software fails and routes requests around the failing instance. The Image service is run on all controller nodes, so scalability can be achieved with additional controller nodes. HAProxy allows scalability for the Image service as more nodes are added. ComputeController, Qpid を使用 (nova) Computeするように設 定、qpid_heartbeat = 10、 Memcached を キャッシュに使用する ように設定、 libvirt を使用するように設 定、 neutron を使用 するように設定 nova The nova API, scheduler, API、scheduler、objectstore、cert、consoleauth、conductor、 objectstore, cert, および vncproxy のサー consoleauth, conductor, ビスは、全コントロー and vncproxy services ラーノードで実行され、 are run on all ノードに障害が発生し controller nodes, た場合には少なくとも so scalability can 1 インスタンスが利用 be achieved with 可能となるようにしま additional controller す。Compute は、ソフ nodes. HAProxy allows nova-consoleauth が トウェアの障害を検出し scalability for Compute セッション管理に て、障害の発生したイン as more nodes are added. Memcached を使用す スタンスを迂回するよう The scalability of るように設定 (複数の に要求をルーティングす services running on the コピーが存在可能で、 る HAProxy の背後に配置 compute nodes (compute, ロードバランサーで実 されます。 conductor) is achieved 行できる)。 25 OpenStack 運用ガイド Component Node type February 1, 2016 Tuning Block Controller Configured to use Storage Qpid, qpid_heartbeat (cinder) = 10, configured to use a Gluster volume from the storage layer as the back end for Block Storage, using the Gluster native client. Availability Scalability コンピュートノード 上で実行される novacompute サービスと nova-conductor サービ スは、そのノード上での みサービスを実行する必 要があるので、これらの サービスの可用性はその ノードの稼働状態と密接 に連結しています。コン ピュートノードが稼働し ている限りは、そのノー ド上で必要なサービスが 実行されます。 linearly by adding in more compute nodes. Block Storage API, scheduler, and volume services are run on all controller nodes, ensuring at least one instance will be available in case of node failure. Block Storage also sits behind HAProxy, which detects if the software fails and routes requests around the failing instance. Block Storage API, scheduler and volume services are run on all controller nodes, so scalability can be achieved with additional controller nodes. HAProxy allows scalability for Block Storage as more nodes are added. OpenStack Controller, Configured OpenStack Networking Networking Compute, to use QPID, Service は、全コント (neutron) Networkqpid_heartbeat = ローラーノード上で実行 10, kernel namespace され、ノードの障害が発 support enabled, 生した場合に少なくとも tenant_network_type 1 インスタンスが利用可 = vlan, 能となるようにします。 allow_overlapping_ips また、このサービスは、 = true, ソフトウェアの障害を検 tenant_network_type 出して、障害の発生した = vlan, インスタンスを迂回する bridge_uplinks ように要求をルーティン = br-ex:em2, グする HAProxy の背後に bridge_mappings = 配置されます。 physnet1:br-ex OpenStack Networking の ovs-agent、l3agent、dhcp-agent、お よび metadata-agent の サービスは、ネットワー クノード上で Pacemaker 内の lsb リソースとし て稼働します。これは、 ネットワークノードに障 害が発生した場合にサー ビスが別のノードで稼働 26 The OpenStack Networking server service is run on all controller nodes, so scalability can be achieved with additional controller nodes. HAProxy allows scalability for OpenStack Networking as more nodes are added. Scalability of services running on the network nodes is not currently supported by OpenStack Networking, so they are not be considered. One copy of the services should be sufficient to handle the workload. Scalability of the ovsagent running on compute nodes is achieved by adding in more compute nodes as necessary. OpenStack 運用ガイド Component Node type February 1, 2016 Tuning Availability Scalability し続けることを意味しま す。最後に ovs-agent サービスも全コンピュー トノードで稼働し、コン ピュートノードに障害が 発生した場合に、その他 のノードが、そこで実行 されているサービスのコ ピーを使用して機能し続 けます。 アーキテクチャー例についての章の結び 数多くの考慮事項およびオプションがあるため、本セクションで は、OpenStack をお試しいただくための明確に記載した検証済みの方 法を提供するように構成しています。本セクションに記載した以外の情 報をお探しの場合には、付録A 事例 [277]、OpenStack Installation Guides、または OpenStack User Stories page をご確認ください。 27 OpenStack 運用ガイド February 1, 2016 第2章 プロビジョニングとデプロ イメント 自動デプロイメント .......................................... 自動環境設定 ................................................ リモート管理 ................................................ OpenStack のプロビジョニングおよびデプロイメントの概念 ....... まとめ ...................................................... 29 33 33 34 34 クラウドのスケーラビリティにおける重要な部分の一つは、クラウドを 運用するのに必要な労力にあります。クラウドの運用コストを最小化す るために、Puppet や Chef などの設定管理システムを使用して、自動化 されたデプロイメントおよび設定インフラストラクチャーを設定、使用 してください。これらのシステムを統合すると、工数やオペレーターの ミスを大幅に減らすことができます。 このインフラストラクチャーには、オペレーティングシステ ムの初期設定を自動にインストールするシステムや、全サー バーを自動的かつ一元的に連携、設定するシステムが含まれて おり、手作業やエラーの発生する可能性を減らします。例え ば、Ansible、CFEngine、Chef、Puppet、Salt などのシステムで す。OpenStack を使用して、OpenStack をデプロイすることも可能で す。これは、TripleO (OpenStack 上の OpenStack) という愛称で呼ばれ ています。 自動デプロイメント 自動のデプロイメントシステムは、物理ラッキング、MAC から IP アド レスの割当、電源設定など、必要最小限の手作業のみで、介入なしに新 規サーバー上にオペレーティングシステムのインストールと設定を行い ます。ソリューションは通常、PXE ブートや TFTP サーバー関連のラッ パーに依存して基本のオペレーティングシステムをインストールして、 次に自動設定管理システムに委譲されます。 Ubuntu と Red Hat Enterprise Linux にはいずれも、ネットワークブー ト後に使用可能なpreseed や kickstart といった、オペレーティングシ ステムを設定するための仕組みがあります。これらは、典型的には自動 環境設定システムのブートストラップに使用されます。他の方法として は、systemimager のようなイメージベースのオペレーティングシステ ムのデプロイメント手法を使うこともできます。これらの手法はどちら 29 OpenStack 運用ガイド February 1, 2016 も、物理インフラストラクチャーと制御サービスを分離するために仮想 マシンを実行する場合など、仮想化基盤と合わせて使用できます。 デプロイメントプランを作成する場合、デプロイメント後の修正は困難 であるため、いくつかの重要な分野にフォーカスを当ててください。次 の 2 章で以下の設定内容について説明していきます。 • スケーラビリティ確保に向けたディスクのパーティショニングおよび ディスク配列設定 • PXE ブート用のネットワーク設定 ディスクのパーティショニングと RAID オペレーティングシステムの基盤は、オペレーティングシステムがイン ストールされるハードドライブです。 サーバーのハードディスクに対して、以下の環境設定を完了させなけれ ばなりません。 • パーティショニング。以下に説明されている通り、オペレーティング システムと Swap 領域のレイアウトにおける柔軟性がはるかに高くに なります。 • 使用可能なディスクの数をもとに、RAID 配列 (RAID は Redundant Array of Independent Disks の略) に追加します。 こうすること で、クラウドが大きくなった場合も容量を追加できます。オプション は、以下で詳しく説明しています。 最もシンプルに使用を開始できるオプションは、1台のハードディスク を2つのパーティションに分割することです。 • ファイルやディレクトリを格納するファイルシステム。システムを起 動、実行する root パーティションなど、全データが設置される場 所。 • プロセス用にメモリーを空ける Swap 領域。物理ディスクから独立し た、スワップのみに使用される領域。 通常、本番環境のクラウドでは、1 つのディスクに問題が発生した場 合、別のディスクが必ず稼働するようにするため、RAID は、このシン プルな、ドライブ 1 つの設定では使用されません。本番環境では、ディ スクを 1 つ以上使用します。ディスク数により、どのようなタイプの RAID 配列を構築するか決定します。 30 OpenStack 運用ガイド February 1, 2016 以下に挙げる複数のディスクの選択肢から選ぶことを推奨します。 オプショ ン 1 図2.1「ドライブのパーティション設定」 [31] にあるよう に、すべてのドライブを同じように並列してパーティショニ ングにします。 このオプションでは、パーティションごとに異なる RAID ア レイにおくことができます。例えば、ディスク 1 とディス ク 2 のパーティション 1 を /boot パーティションのミラー として、すべてのディスクのパーティション 2 をルートパー ティションのミラーとして、すべてのディスクのパーティ ション 3 を RAID10 アレイの上の cinder-volumes の LVM パーティションとして割り当てることができます。 図2.1 ドライブのパーティション設定 この例では、ディスク 3 と 4 のパーティション 1 のように 未使用のパーティションが残る可能性もありますが、このオ プションにより、ディスク領域の使用状況を最大化すること ができます。すべてのディスクがすべてのタスクで利用され るため、I/O のパフォーマンスが問題になる可能性がありま す。 オプショ ン 2 すべてのローディスクを 1 つの大きな RAID 配列に追 加します。ここでは、ソフトウェアベースでもハード ウェアベースでも構いません。この大きなRAID 配列を boot、root、swap、LVM 領域に分割します。この選択肢はシ ンプルですべてのパーティションを利用することができます が、I/O性能に悪影響がでる可能性があります。 オプショ ン 3 全ディスク領域を特定のパーティションに割り当てます。 例えば、ディスク 1 と 2 すべてを RAID 1 ミラーとして boot、root、swapパーティションに割り当てます。そして、 ディスク 3 と 4 すべてを、同様に RAID 1 ミラーとしてLVM パーティションに割り当てます。I/O は専用タスクにフォー 31 OpenStack 運用ガイド February 1, 2016 カスするため、ディスクの I/O は良くなるはずです。しか し、LVM パーティションははるかに小さくなります。 ヒント パーティショニング自体を自動化可能であることが分かりま す。例えば、MIT は Fully Automatic Installation (FAI) を使用して、初期の PXE ベースのパーティション分割を行 い、min/max およびパーセントベースのパーティショニング を組み合わせてインストールしていきます。 多くのアーキテクチャーの選択肢と同様に、環境により適切なソリュー ションは変わって来ます。既存のハードウェアを使用する場合、サー バーのディスク密度を把握し、上記のオプションをもとに意思決定して いきます。調達プロセスを行っている場合、ユーザー要件などもハード ウェア購入決定の一助となります。ここでは AT&T の Web 開発者にカス タムの環境を提供するプライベートクラウドの例をあげています。この 例は、特定のデプロイメントであるため、既存のハードウェアや調達機 会はこれと異なる可能性があります。AT&T は、デプロイメントに 3 種 類のハードウェアを使用しています。 • コントローラーノードのハードウェア。ステートレスの OpenStack API サービスすべてに使用します。メモリー約 32-64GB、接続された 容量の小さいディスク、プロセッサー 1 つ、6-12 個程度のコア。 • コンピュートノードのハードウェア。通常、メモリー 256 GB または 144 GB、プロセッサー 2 個、コア 24 個、通常 RAID 5 設定のダイレ クトアタッチストレージ (DAS)。 • ストレージノードのハードウェア。通常、ラックスペース効率を確保 しつつも、ディスク容量のコストが GB ベースで最も低く最適化され ています。 ここでも、環境によって適したソリューションが変わります。スペース 使用状況、シンプルさ、I/O パフォーマンスの長所、短所をベースに意 思決定していく必要があります。 ネットワーク設定 ネットワーク設定は、本書でも複数の箇所で取り上げられている大きい トピックです。ここでは、お使いのサーバが PXEブートでき、デプロイ メントサーバと正常に通信できることを確認しておいてください。. 例えば、PXE ブートの際には、通常は VLAN の設定は行えません。さら に、通常は bonding された NIC から PXE ブートを行うこともできませ 32 OpenStack 運用ガイド February 1, 2016 ん。このような状況の場合、クラウド内でのみ通信できるネットワーク で、シンプルな 1Gbps のスイッチを使うことを検討してください。 自動環境設定 自動環境設定管理の目的は、人間の介在なしにシステムの一貫性を確 保、維持することにあります。毎回、同じクラウド環境を繰り返し作る ために、デプロイメントにおける一貫性を確保します。自動環境設定管 理ツールを正しく利用することによって、デプロイメントと環境設定の 変更を伝搬する作業を簡素化するだけでなく、クラウドシステムのコン ポーネントが必ず特定の状態にあるようにすることができます。 These tools also make it possible to test and roll back changes, as they are fully repeatable. Conveniently, a large body of work has been done by the OpenStack community in this space. Puppet, a configuration management tool, even provides official modules for OpenStack projects in an OpenStack infrastructure system known as Puppet OpenStack . Chef configuration management is provided within https://git.openstack.org/cgit/openstack/openstack-chefrepo. Additional configuration management systems include Juju, Ansible, and Salt. Also, PackStack is a command-line utility for Red Hat Enterprise Linux and derivatives that uses Puppet modules to support rapid deployment of OpenStack on existing servers over an SSH connection. 設定管理システムの不可欠な部分は、このシステムが制御する項目で す。自動管理をする項目、しない項目をすべて慎重に検討していく必要 があります。例えば、ユーザーデータが含まれるハードドライブは自動 フォーマットは必要ありません。 リモート管理 経験上、多くのオペレーターはクラウドを動かすサーバのそばにいるわ けではありませんし、多くの人が必ずしも楽しんでデータセンターに訪 問してるわけではありません。OpenStackは、完全にリモート設定できる はずですが、計画通りにいかないこともあります。 この場合、OpenStack が動くノードに対して外側からアクセスできるよ うにすることが重要です。ここでは、IPMIプロトコルが事実上標準と なっています。完全自動のデータセンタを実現するために、IPMIをサ ポートしたハードウェアを入手することを強く推奨します。 さらに、リモート電源管理装置も検討してください。通常、IPMI はサー バーの電源状態を制御しますが、サーバーが接続されている PDU にリ 33 OpenStack 運用ガイド February 1, 2016 モートアクセスできれば、すべてが手詰まりに見えるような状況で非常 に役に立ちます。 OpenStack のプロビジョニングおよびデ プロイメントの概念 作成するクラウドのユースケースを理解することで時間を節約すること あできます。OpenStack のユースケースはさまざまで、オブジェクト ストレージのみのもの、開発環境設定を加速するために事前設定された コンピュートリソースが必要なもの、プライベートネットワークでテナ ントごとにセキュリティが確保されたコンピュートリソースの迅速にプ ロビジョニングするものもあります。ユーザーは、レガシーアプリケー ションが継続して実行されるように、非常に冗長化されたサーバーが必 要な場合もあります。おそらく、時間をかけてこれらのクラスターを追 加するのが目的ではなく、クラウドの耐障害性を確保したかたちで、複 数のインスタンス上で実行するために、レガシーのアプリケーションを 構築するのが目的の場合もあります。ユーザーによっては、負荷の高い Windows サーバーを使用するため、スケーリングを考慮する必要がある と指定する場合もあるでしょう。 すでに設置済みのハードウェアに最適な方法で使用されていることを チェックすることで、リソースを節約することができます。高濃度のス トレージハードウェアがあるとします。このハードウェアをフォーマッ トして、OpenStack Object Storage 用にサーバーの用途を変更すること ができます。ユーザーからのこのような検討やインプットすべてをベー スにすることで、ユースケースやデプロイメントプランの作成が容易に なります。 ヒント OpenStack の導入に関する詳細は、Canonical, Cisco, Cloudscaling, IBM, Metacloud, Mirantis, Piston, Rackspace, Red Hat, SUSE, SwiftStack などの企業の、サ ポートされドキュメント化された事前設定およびパッケージ 化済みのインストーラーを確認してください。 まとめ プロビジョニングやデプロイメントでの意思決定は、クラウドの日次、 週次、月次のメンテナンスに影響を与えます。設定管理は時が経つにつ れ進化することができます。しかし、デプロイメント、ディスクのパー 34 OpenStack 運用ガイド February 1, 2016 ティショニング、ネットワーク設定を事前に選択するには、さらに検 討、設計が必要になります。 35 OpenStack 運用ガイド February 1, 2016 第3章 クラウドコントローラーの デザインとクラウド管理 ハードウェアの考慮事項 ...................................... サービスの分離 .............................................. データベース ................................................ メッセージキュー ............................................ コンダクターサービス ........................................ Application Programming Interface (API) ..................... API 拡張 .................................................... スケジューリング ............................................ イメージ .................................................... ダッシュボード .............................................. 認証と認可 .................................................. ネットワークの考慮事項 ...................................... 39 40 40 41 41 42 42 43 43 44 44 45 OpenStackはすべてのサービスが広く分散できるよう水平方向に大規模に スケーリングできるように設計されています。しかし、このガイドでは シンプルにクラウドコントローラーの利用についてより中心的な性質を 持つサービスについて議論する事にしました。クラウドコントローラー という言葉はその概念をシンプルに表現した物に過ぎません。実際には あなたはクラウドコントローラーは冗長構成としてどのノードが障害と なっても他のノードで運用ができるような設計にデザインします。実際 にはクラウドコントローラーのタスクは1つ以上のノードにまたがって展 開されます。 クラウドコントローラは、複数ノードで構成されるOpenStack構成に対す る集中管理機能を提供します。典型的には、クラウドコントローラは認 証および、メッセージキューを通じたメッセージのやりとりを管理しま す。 多くの構成では、クラウドコントローラーはシングルノードで構成され ています。しかし、高可用性のためには、この章で取り上げるいくつか の事項を考慮する必要があります。 クラウドコントローラーはクラウドの次のサービスを管理します: データベース ユーザとインスタンスの現在の状態をトラッ キングします。例えば、一般的なデータベー スでは1つのデータベースインスタンスは サービス毎に管理されます。 37 OpenStack 運用ガイド February 1, 2016 メッセージキューサービ ス サービスのためのすべてのAMQP(Advavnced Message Queue Protocol)メッセージは キューブローカーによって送受信されます。 コンダクターサービス データベースリクエストのプロクシ アイデンティティ管理の ための認証と認可 ある特定のクラウドリソースで誰が何をしよ うとしているか示します。しかし、クオータ 管理は全体のサービスに展開されます。 イメージ管理サービス クラウド内で起動するための各メタデータが 付属したイメージデータを蓄え、提供します スケジュールサービス どのリソースを最初に使用するかを示しま す。例えば、インスタンスをどこで起動する かをアルゴリズムに乗っ取って展開します。 ユーザーダッシュボード 利用ユーザ用のOpenStackクラウドサービス のウェブインターフェースを提供します。 APIエンドポイント それぞれのサービス用のAPIアクセスを提供 します。APIエンドポイントカタログの場所 は Identity サービスが管理しています。 我々の例では、クラウドコントローラはnova-* コンポーネントの集まり で、それらは認証のようなサービスとのやり取りや、データベース内の 情報の管理、キューを通したストレージ ワーカーコンピュートノードと のコミュニケーション、APIアクセス、などといったクラウド全体の状態 管理を受け持っています。それぞれのサービスは可用性やスケーラビリ ティを考慮して別々のノードへ分離する事ができます。 他の例として、コントローラーをクラスタとして構成し1つはアクティ ブ、もう一つはスタンバイとして冗長ノードが以下のような機能を提供 できるように複数のサーバを使用する事ができます。 • APIリクエスト用のフロントエンドウェブ、インスタンスをどのノード で起動するかを決定するスケジューラ、Identity サービス、ダッシュ ボード • データベースとメッセージキューサーバ(例:MySQL、RabbitMQ) • イメージ管理のための Image serviceイメージサービス クラウドコントローラの設計は無数にあります、クラウドコントローラ の設計の助けとして更なる考慮事項をお読みください。 38 OpenStack 運用ガイド February 1, 2016 ハードウェアの考慮事項 クラウドの大きさやタイプによってハードウェアを指定したいかもしれ ませんが、クラウドコントローラーのハードウェアはコンピュートノー ドと同じ物を利用する事ができます。 クラウドコントローラーが管理するすべての、または一部のサービス、 たとえばメッセージキューに対して仮想マシンを使うことも可能です。 このガイドでは、すべてのサービスが直接クラウドコントローラー上で 実行されるものと仮定します。 表3.1「クラウドコントローラーのハードウェアサイジングに関する考慮 事項」 [39] クラウドコントローラー設計のハードウェアサイジングに おける一般的な考慮事項 表3.1 クラウドコントローラーのハードウェアサイジングに関 する考慮事項 考慮事項 派生問題 同時に何インスタンス データベースサーバーを負荷に応じてサイジングしてください。も 実行されますか? し、多数のインスタンスが同時に状態を報告したり、CPU能力が必要な 新規インスタンス起動のスケジューリングを行う場合は、1台のクラ ウドコントローラーを超えてスケールアウトしてください。 同時にコンピュート メッセージキューが正しくリクエストを処理することを保証し、適切 ノードが何ノード実行 にサイジングしてください。 されますか? どのくらいの数のユー もし多数のユーザが複数のリクエストを発行するのであれば、クラウ ザがAPIにアクセスし ドコントローラーがそれらを扱えるよう、CPU負荷を確認してくださ ますか? い。 REST APIに直接アクセ ダッシュボードは、APIアクセスよりもさらに多くのリクエストを発 スに対してどのくらい 行します。そのため、もしユーザに対するインタフェースがダッシュ 多くのユーザが ダッ ボードなのであれば、より多くのCPUを追加してください。 シュボードにアクセス しますか? あなたのクラウドで、 サービスごとに1コア割り当ててコントローラーをサイジングする必 何個のnova-apiサービ 要があります。 スを同時に実行します か? 1つのインスタンスが インスタンスの起動と停止は コンピュートノードに負荷をかけます どのくらい実行され続 が、それだけでなく、すべてのAPI処理とスケジューリングの必要性の けますか? ために、コントローラーノードにも負荷をかけます。 認証システムは外部に LDAPやActive Directoryのような外部認証システムを利用する場合ク 確認を行いますか? ラウドコントローラと外部認証システムとの間のネットワーク接続性 が良好である必要があります。また、クラウドコントローラがそれら のリクエストを処理するための十分のCPUパワーが必要です。 39 OpenStack 運用ガイド February 1, 2016 サービスの分離 この例ではすべての中心的なサービスが1つの場所にありますが、サービ スを分割してそれぞれ別の物理サーバに配置する事は可能であり、本当 に良いアイデアです。表3.2「構成シナリオ」 [40] は構築のシナリオ と設計の理由です。 表3.2 構成シナリオ シナリオ 理由 swift-proxy サーバ この構成ではオブジェクトストレージプロクシサーバのI/Oの空きが でglance-*サーバを稼 十分にあり、glance のイメージ配信部分は物理ハードウェアとオブ 働する ジェクトストレージのバックエンドに使用している良好なネットワー ク接続性の恩恵を十分に受ける事ができると感じた。 中央データベースサー この構成では、すべてのサービスに対するデータベースサービスを提 バを構成する 供する専用サーバを設置しました。これにより、データベースサー バーのアップデートを分離でき、運用がシンプルになりました。ま た、フェイルオーバーのためのスレーブデータベースサーバーの設置 が単純になりました。 1サービスにつき1つの この構成では中央サーバをKVM上のサーバで実行しました。専用のVMを VMを稼働させる それぞれのサービスで用意しました(nova-scheduler, RabbitMQ, デー タベースなど)。この構成はクラウド管理者が(インストール時によく 推測できないので)それぞれのサービスへの負荷のかかり具合によって 各バーチャルマシンへのリソース割当を変更する事ができる構成でし た。 外部ロードバランサー この構成は、組織内に高価なハードウェアロードバランサーを持って の使用 いました。彼らは複数の nova-api とswift-proxy サーバーを異なる 物理サーバーで動作させ、その振り分けにロードバランサーを利用し 増した。 仮想化するかどうかについてはいつも問題になります。 novacompute、swift-proxy 、 swift-object といったいくつかのサーバーは 仮想化にすべきではありません。しかし、制御系のサーバについては仮 想化にすると幸せになります。それによる性能のペナルティは単純によ り多くのサービスを動かす事で相殺する事ができます。 データベース OpenStackコンピュートはステートフルな情報を保存、取得するために SQLデータベースを使用します。MySQLはOpenStackコミュニティでポピュ ラーな選択です。 データベースの消失はエラーにつながります。結論としては、データ ベースを冗長化するためにクラスター構成とする事を推奨します。使ク ラウド環境で使用するデータベースをクラスタ化しをOpenStack外に配置 します。MySQLベースのデータベースではMySQL/Galeraが人気です。 40 OpenStack 運用ガイド February 1, 2016 メッセージキュー 多くのOpenStackサービスはメッセージキューを使用してお互いと通信を しています。例えば、コンピュートはメッセージキューを通じてブロッ クストレージサービスとネットワークサービスと通信をしています。ま た、どのようなサービスでも通知を有効にする事ができます。メッセー ジキューサービスの選択としてRabbitMQ、Qpid、0mqがポピュラーです。 一般的には、メッセージキューが障害あるいはアクセス不能となった場 合、クラスターはメッセージを最後に送信した状態のままスタックし た状態で停止しリードオンリーの状態となります。ですので、メッセー ジキューはクラスター公正にする事をお勧めします。クラスタ化された メッセージキューは多くのOpenStack構成で弱点になることを覚えておく 必要があります。RabbitMQは標準でクラスタ対応していますが大規模に なった場合にいくつかの問題が報告されています。0mqやQPIDといった他 のメッセージングソリューションも存在していますが、0mqはステートフ ルなキューを提供していません。QpidはRed Hat系ディストリビューショ ンでのメッセージングシステムの選択となります。Qpidは標準でクラス タをサポートしておらず、PacemakerやCorosyncといった補助的なサービ スが必要になります。メッセージキューに関しては、コンピュータの機 能を利用する際にするように許容範囲なデータ損失のレベルとイベント 失敗時に複数のMQホストを試行するOpenStackの機能を利用するかどうか を決める必要があります。 コンダクターサービス 以前のバージョンのOpenStackではすべてのnova-computeサービスはク ラウドコントローラーに搭載されたデータベースに直接アクセスする必 要がありました。これはセキュリティとパフォーマンスという2つの問 題を抱えていました。セキュリティに関してはもしコンピュートノード に侵入された場合、アタッカーはデータベースにアクセスできてしまい ます。パフォーマンスに関しては、nova-computeはデータベースの呼び 出しをシングルスレッドで行い、他の呼び出しをブロックする点です。 データベースリクエストはシリアルリクエストよりパラレルリクエスト の方が効率がいいのでこの点はパフォーマンスのボトルネックになりま す。 コンダクターサービスはnova-computeサービスのプロクシとして次の両 方の問題を解決します。現在は、 nova-computeが直接データベースに アクセスするのに変わってnova-conductorサービスにアクセスしnovaconductorサービスがnova-computeサービスの代理でデータベースにア クセスをします。これによりnova-computeはもう直接データベースにア クセスする必要はなくセキュリティ問題は解消されます。加えて nova41 OpenStack 運用ガイド February 1, 2016 conductor はノンブロッキングサービスなのですべてのコンピュートか らのリクエストが並列で処理できます。 注記 あなたのクラウド環境で、nova-networkとマルチホストネッ トワークを使用している場合、 nova-computeは現在もデータ ベースへの直接アクセスを必要とします。 nova-conductorサービスは水平方向にスケーラブルです。novaconductorを冗長構成になるためには、nova-conductor プロセスを同一 サーバまたは複数のサーバに渡って複数起動するだけです。 Application Programming Interface (API) すべてのパブリックアクセス(直接アクセス、コマンドライン、ウェブ ベースダッシュボード)はすべてAPIサービスを使用します。APIリファ レンスはhttp://api.openstack.org/です。 Amazon EC2 互換 API をサポートしたいか、OpenStack API だけなの か、選択しなければなりません。両方の API を運用する場合、イメージ とインスタンスを参照する際の見え方が違うことが一つの論点になりま す。 例えば、EC2 API では、16 進数を含む ID を使ってインスタンスを参 照するのに対して、OpenStack API では名前と数値を使います。同様 に、EC2 API は仮想マシンに接続するのに DNS エイリアスに頼る傾向が ありますが、OpenStack では典型的には IP アドレスを使います。 もしOpenStakcが正しく構成されていない場合、正しくないDNSエイリア スしな無いため、ユーザはインスタンスへアクセスできないというシン プルな事態が生じます。それにもかかわらず、EC2互換はユーザをあなた のクラウドへ移行することをアシストします。 データベースやメッセージキューのように、1台以上のAPI サーバー を 設置する事は良い案です。nova-api サービスを高可用にするために、 伝統的な HTTP 負荷分散技術を利用することができます。 API 拡張 API仕様にはOpenStack APIのコアアクション、ケイパビリティ、メタタ イプについて定義されています。クライアントはいつでもこのコアAPI の可用性に頼る事ができ、実装者は常にそれら全体をサポートする必要 42 OpenStack 運用ガイド February 1, 2016 があります。コアAPIの遵守を要求する事は同じAPIで複数の実装と相互 作用する際に、クライアントに機能の最小レベルに依存する事ができま す。 OpenStack Compute API は拡張可能です。ある拡張は、ある API にコ ア定義を超えたケイパビリティを追加します。新機能、新しい MIME タ イプ、アクション、状態、ヘッダ、パラメータ、そしてリソースの導 入は、コア API の拡張によって達成することができます。これによ り、API に対してバージョンを変更することなく新機能を導入すること ができ、ベンダー固有の特定の機能を導入することもできます。 スケジューリング スケジューリングサービスは仮想マシンやブロックストレージのボ リュームがどのコンピュートあるはストレージノードで生成されるか を決定する事に責任を持ちます。スケジューリングサービスはメッセー ジキューからそれらのリソースの生成リクエストを受け、どのリソース が適切かを決定するプロセスを起動します。このプロセスは利用可能な ノード郡からユーザが設定したフィルタを適用する事で実行されます。 現在のところ2つのスケジューラがあります:仮想サーバを受け持 つnova-scheduler とブロックストレージボリュームを受け持つcinderscheduler です。それぞれのスケジューラは高可用性目的や、高負荷環 境での実装のために水平方向にスケーリングが可能で、それぞれのスケ ジューラに対して複数のインスタンスを起動すべきです。スケジューラ はすべて共有されたメッセージキューをリスンするので特別な負荷分散 は必要ありません。 イメージ OpenStack Image service はglance-api とglance-registryの2つのパー トから成り立っています。前者はコンピュートノードがバックエンドか らイメージをダウンロードする際の、イメージの配信に責任を持ちま す。後者は仮想マシンに属し、データベースを必要とするメタデータの 情報をメンテナンスします。 glance-api部はバックエンドを選択する事ができる抽象的なレイヤーで す。現在、以下をサポートしています: OpenStack オブジェクトス トレージ イメージをオブジェクトとして格納する事 を許可します ファイルシステム イメージをファイルとして格納するために 一般的なファイルシステムを使用します。 43 OpenStack 運用ガイド February 1, 2016 S3 Amazon S3からイメージを取得する事を許 可します。 HTTP イメージをウェブサーバから取得する事を 許可します。このモードではイメージの書 き込みはできません。 OpenStack Storageサービスがある場合は、イメージを保存するためにス ケーラブルな場所を利用する事を推奨します。また、OpenStackをとおし て新しいイメージをアップロードする必要がない場合を除いて、十分な 性能を備えたファイルシステムかAmazon S3を使用する事もできます。 ダッシュボード OpenStackダッシュボード(horizon)は様々なOpenStackコンポーネントの ウェブベースユーザーインターフェースを提供します。ダッシュボード にはエンドユーザの仮想インフラを管理するための領域と、OpenStack環 境全体を管理するためのクラウド管理者のための管理者領域が含まれま す。 ダッシュボードはPythonのウェブアプリケーションとして実装され、通 常はApachehttpdサーバ上で稼働します。したがって、そこから ネット ワーク経由で (管理者 エンドポイントを含む) API サーバーにアクセス できるという条件の下、他の任意の Web アプリケーションと同じように 取り扱うことができます。 認証と認可 OpenStackの認証と承認は良く知られ、幅広いシステムで良く利用されて いる物から来ています。ユーザは認証のためにクレデンシャルを持ち、1 つ以上のグループ(プロジェクトまたはテナントと呼ばれます)のメン バーとなる事ができます。 例えば、クラウドのユーザは自分の現在のグループに属するインスタン スのみが見えるのに対して、クラウドの管理者はそのクラウドのすべ てのインスタンスの一覧をとることができるでしょう。利用可能なコア 数、ディスク容量等のリソースのクォータはプロジェクトに対して関連 づけられています。 OpenStack Identity は、認証の判定とユーザの属性情報を提供する場と なり、他の OpenStack サービスから認証のために使用されます。ポリ シーは policy.json で記述されます。これらを設定するための情報に ついては、9章プロジェクトとユーザーの管理 [103] を参照してくださ い。 44 OpenStack 運用ガイド February 1, 2016 Identity は、バックエンド認証と情報保持のために種々のプラグインを サポートしています。これらの選択肢は、現在は以下の物が含まれてい ます。 • メモリ内のキーバリュー型ストア(シンプルな内部ストレージ構造) • SQL データベース (MySQL や PostgreSQL など) • Memcached (分散メモリーオブジェクトキャッシュシステム) • LDAP (OpenLDAP や Microsoft の Active Directory) 多くのデプロイメントで SQL データベースが使われていますが、既存の 認証インフラとインテグレーションする必要のある環境では、LDAP もポ ピュラーな選択肢です。 ネットワークの考慮事項 クラウドコントローラーは非常に多くのサービスを取り扱うため、それ らすべてのトラフィックを処理できなければなりません。例えば、クラ ウドコントローラー上に OpenStack Image service を乗せることにした 場合、そのクラウドコントローラーは許容可能な速度でイメージの転送 できなければなりません。 他の例としては、クラウドコントローラーがすべてのインスタンスの ゲートウェイとなるような単一ホスト・ネットワークモデルを使うこと にした場合、クラウドコントローラーは外部インターネットとあなたの クラウドの間でやりとりされるすべてのトラフィックを支えられなけれ ばなりません。 10GbE のような高速な NIC を使うことを推奨します。また、10GbE NIC を2枚使って ボンディングすることもできます。束ねられた 20Gbps の 速度をフルに使うことはできないかもしれませんが、異なる送信スト リームは異なる NIC を使います。例えば、クラウドコントローラーが 2つのイメージを送信する場合、それぞれのイメージが別の NIC を使 い、10Gbps の帯域をフルに使うことができます。 45 OpenStack 運用ガイド February 1, 2016 第4章 コンピュートノード CPU の選択 .................................................. ハイパーバイザーの選択 ...................................... インスタンスストレージのソリューション ....................... オーバーコミット ............................................ ロギング .................................................... ネットワーク ................................................ まとめ ...................................................... 47 48 49 53 54 55 55 本章では、コンピュートノードの構築時に考慮する必要のある選択肢に ついて説明します。コンピュートノードは、OpenStack Compute クラ ウドのリソースコアを構成し、プロセッシング、メモリー、ネットワー ク、ストレージの各リソースを提供してインスタンスを実行します。 CPU の選択 コンピュートノードの CPU タイプを選択することは非常に重要です。ま ず、Intel チップには VT-x、AMD チップには AMD-v という風に、CPU が仮想化をサポートするようにします。 ヒント 仮想化サポートがあるかどうかについては、ベンダーの 文書を参照してください。Intel については “Does my processor support Intel® Virtualization Technology?” を確認してください。AMD については AMD Virtualization を確認してください。CPU が仮想化をサポートしていても 無効になっている場合があることに注意してください。ま た、CPU 機能を有効にする方法はお使いのシステムの BIOS の文書を参照してください。 CPU のコア数も選択に影響します。現在の CPU では最大 12 コアあるの が一般的です。さらに、Intel CPU がハイパースレッディングをサポー トしている場合、12 コアは 2 倍の 24 コアになります。複数の CPU を サポートするサーバーを購入する場合、コア数はさらに倍になっていき ます。 47 OpenStack 運用ガイド February 1, 2016 マルチスレッドの課題 ハイパースレッディングは、Intel 専用の同時マルチスレッド実装 で、CPU の並列化向上に使用されます。マルチスレッドアプリケー ションのパフォーマンスを改善するには、ハイパースレッディング を有効にすることを検討してください。 CPU のハイパースレッディングを有効にするかどうかは、それぞ れのユースケースにより変わってきます。例えば、ハイパースレッ ディングを無効にすると、負荷の高いコンピューティング環境で有 用です。ハイパースレッディングがオン、オフの両方の状態でロー カルのワークロードを使用してパフォーマンスのテストを実施し、 各ケースでいずれが適しているか決定するように推奨しています。 ハイパーバイザーの選択 ハイパーバイザーは、仮想マシンの基盤ハードウェアへのアクセスを管 理するソフトウェアを提供します。ハイパーバイザーは仮想マシンを作 成、管理、監視します。 OpenStack Compute は多くのハイパーバイザー を様々な度合いでサポートしています。 • KVM • LXC • QEMU • VMware ESX/ESXi • Xen • Hyper-V • Docker おそらく、ハイパーバイザーの選択で最も重要な要素は、現在の使用 法やこれまでの経験でしょう。それ以外では、同等の機能の実用上の懸 念、ドキュメント、コミュニティでの経験量などあると思います。 例えば、 KVM は OpenStack コミュニティーでは最も多く採用されてい るハイパーバイザーです。KVM 以外では、Xen、LXC、VMware、Hyper-V を実行するデプロイメントのほうが、他に リストされているハイパー バイザーよりも多くなっています。しかし、いずれのハイパーバイザー 48 OpenStack 運用ガイド February 1, 2016 も、機能のサポートがないか、OpenStack を併用する方法に関する文書 が古くなっています。 選択を行う上で参考になるベストな情報は、Hypervisor Support Matrix や configuration reference で確認いただけます。 注記 ホストアグリゲートやセルを使用すると、1 つのデプロイメ ントで複数のハイパーバイザーを実行することも可能です。 しかし、個別のコンピュートノードでは 1 度につき 1 つの ハイパーバイザーしか実行することができません。 インスタンスストレージのソリューショ ン コンピュートクラスターの調達の一部として、インスタンス化された インスタンスを実行するディスクのストレージを指定する必要がありま す。一時ストレージ提供のアプローチは主に 3 つあり、それぞれのアプ ローチの含意を理解することは重要です。 次の3つの方法があります。 • コンピュートノード外のストレージ (共有ファイルシステム) • コンピュートノード上のストレージ (共有ファイルシステム) • コンピュートノード上のストレージ (非共有ファイルシステム) 一般的に、ストレージを選択する際に以下の点を考慮する必要がありま す。 • 実現したいプラッター数(ディスク容量)はどれくらいか? • ネットワークアクセスがあったとしても、ディスク数が多い方が良い I/O 性能が得られるか? • 何があなたが目指すコストパフォーマンスのシナリオはどれか? • 運用上ストレージをどのように管理したいのか? 多くの運用者はコンピュートホストとストレージホストを分離して使用 しています。コンピュートサービスとストレージサービスには異なる 要件があり、コンピュートホストでは通常はストレージホストよりも 49 OpenStack 運用ガイド February 1, 2016 多くの CPU と RAM が必要です。そのため、一定の予算の中では、コン ピュートホストとストレージホストの構成が異なることは理にかなって います。コンピュートホストでは、CPU や RAM を、ストレージノードで はブロックストレージを多く使用します。 一方、クラウドの構築に使用できる物理ホスト数に制限があり、できる だけ多くのホストをインスタンスの実行に使えるようにしたい場合は、 同じマシンでコンピュートホストとストレージホストを動作させるのは 理にかなっています。 以降の数セクションでは、 3 つの主要アプローチについて説明します。 50 OpenStack 運用ガイド February 1, 2016 コンピュートノード外のストレージ (共有ファイ ルシステム) このオプションでは、実行中のインスタンスを格納するディスクはコン ピュートノード外のサーバーでホストされます。 コンピュートホストとストレージホストを分離して使用すると、コン ピュートホストを「ステートレス」として処理できます。コンピュート ホストで実行中のインスタンスがなければ、クラウドの他のアイテムに 影響を与えることなく、ノードをオフラインにしたり、完全に消去した りすることができます。これにより、コンピュートホストのメンテナン スが簡素化されます。 このアプローチには複数の利点があります。 • コンピュートホストが故障した場合、通常インスタンスは簡単に復旧 できます。 • 専用のストレージシステムを動作させることで、運用がシンプルにな ります。 • スピンドル数を何個にでもスケールすることができます。 • 外部ストレージを他の用途と共有できる可能性があります。 この方法の主なマイナス面は以下の点です。 • 設計次第では、一部のインスタンスの I/O が非常に多い場合に、無関 係のインスタンスに影響が出る場合があります。 • ネットワークを使用するため、性能低下が起こる可能性があります。 コンピュートノード上のストレージ (共有ファイ ルシステム) このオプションでは、各コンピュートノードに、多くのディスク容量が 指定されていますが、分散ファイルシステムにより、それぞれのコン ピュートノードからのディスクが 1 つのマウントとしてまとめられま す。 このオプションの主な利点は、追加ストレージが必要な場合、外部スト レージにスケールアウトできる点です。 しかし、この方法にはいくつかマイナス点があります。 51 OpenStack 運用ガイド February 1, 2016 • 分散ファイルシステムを実行すると、非共有ストレージに比べデータ の局所性が失われる可能性があります。 • 複数の物理ホストが関係するため、インスタンスの復旧が複雑になり ます。 • コンピュートノードの筐体サイズによって、コンピュートノードに搭 載できるディスク数が制限されます。 • ネットワークを使用するため、性能低下が起こる可能性があります。 コンピュートノード上のストレージ (非共有ファ イルシステム) このオプションでは、ホストするインスタンスを格納するのに十分な ディスク容量が各コンピュートノードに指定されます。 このアイデアが良いとされる理由は主に 2 点挙げられます。 • あるコンピュートノード上での I/O が非常に多い場合でも、他のコン ピュートノードのインスタンスに影響がありません。 • I/O アクセスが直接行われるので、性能向上が図れます。 この方法には次のようなマイナス点があります。 • コンピュートノードが故障すると、そのノードで実行中のインスタン スが失われてしまいます。 • コンピュートノードの筐体サイズによって、コンピュートノードに搭 載できるディスク数が制限されます。 • ノード間のインスタンスのマイグレーションがより複雑になり、今後 開発が継続されない可能性のある機能に依存することになります。 • 追加ストレージが必要な場合、このオプションはスケールしません。 信頼性と拡張性が最も重要な要因とするクラウドでは、コンピュート ノードと分離してストレージシステムで共有ファイルシステムを実行す ることが理想的です。仕様のコントロールをほぼできない、または全 くできない既存のサーバーにデプロイシなければならない場合などは、 コンピュートノード自体で共有ファイルシステムを実行するとベストで す。また、I/O 要件が高く、信頼性にあまり配慮しなくてもいいクラウ ドには、コンピュートノード上で非共有ファイルシステムを実行すると 良いでしょう。 52 OpenStack 運用ガイド February 1, 2016 ライブマイグレーションに関する問題 ライブマイグレーションは、クラウドの運用に不可欠であると考えられ ます。この機能により、物理ホストから別の物理ホストに、インスタ ンスをシームレスに移動し、コンピュートホストの再起動を必要とす るアップグレードができるようになります。しかし、ライブマイグレー ションは共有ストレージのみで正常に機能します。 ライブマイグレーションは、KVM ライブブロックマイグレーション とい う機能を使用して、非共有ストレージでも行うことができます。KVM や QEMU でのブロックベースのマイグレーションは当初、信頼できませんで したが、OpenStack との互換性もある QEMU 1.4 および libvirt 1.0.2 では、より新しく、信頼性の高いブロックベースのライブマイグレー ション実装ができるようになっています。ただし、本書の執筆者は、ラ イブブロックマイグレーションを実際に使用していません。 ファイルシステムの選択 共有ストレージのライブマイグレーションをサポートする場合、分散 ファイルシステムを設定する必要があります。 次のような選択肢があります。 • NFS (Linux でのデフォルト) • GlusterFS • MooseFS • Lustre すべてのファイルシステムを使用したデプロイメントに触れ、運用にな れているものを選択するように推奨しました。いずれのファイルシス テムにも馴染みがない場合は、設定が簡単で、コミュニティのナレッジ ベースが幅広く存在するため、NFS を選択するようにしてください。 オーバーコミット OpenStack は、コンピュートノードで CPU および RAM をオーバーコ ミットすることができます。これにより、インスタンスのパフォーマン スを落とすことでクラウドで実行可能なインスタンス数を増やすことが できます。 OpenStack Compute はデフォルトで以下の比率を使用しま す。 53 OpenStack 運用ガイド February 1, 2016 • CPU 割当比: 16:1 • RAM 割当比: 1.5:1 デフォルトの CPU 割当比は 16:1 で、これは、物理コア 1 つにつき仮 想コアが最大 16 個までスケジューラーにより割り当てることができる ことを意味します。例えば、物理ノードにコアが 12 個ある場合、スケ ジューラーには、使用可能な仮想コアが 192 個あることになります。イ ンスタンス 1 個に仮想コア 4 個という通常のフレーバーの定義では、 この比率をもとにすると、1 つの物理にインスタンスが 48 個割り当て らることになります。 コンピュートノード上の仮想インスタンス数の公式は、 (OR*PC)/VC で す。それぞれ以下を意味します。 OR CPU オーバーコミット比率 (物理コアごとの仮想コア) PC 物理コア数 VC インスタンスごとの仮想コア数 同様に、RAM 割当比のデフォルト1.5:1 は、インスタンスに関連づけら れた RAM の総量が物理ノードで利用できるメモリ量の1.5倍未満であれ ば、スケジューラーがその物理ノードにインスタンスを割り当てること を意味します。 例えば、物理ノードに 48GB の RAM がある場合、そのノード上のイン スタンスに割り当てられた RAM の合計が 72GB に達するまでは、スケ ジューラーはそのノードにインスタンスを割り振ることになります (例 えば、各インスタンスのメモリが 8GB であれば、9 インスタンス割り当 てられます)。 あなた自身のユースケースに合わせて、適切な CPU と RAM の割当比を 選択しなければなりません。 ロギング ロギングの詳細は、13章ロギングと監視 [215] で包括的に記載していま す。ただし、クラウドの運用を開始する前に、重要な設計に関する事項 について考慮していく必要があります。 OpenStack は、便利なロギング情報を多く生成しますが、運用目的でそ の情報を有効活用するには、ログの送信先となる中央ロギングサーバー や、ログの解析/分析システム (logstash など) の導入を検討する必要 があります。 54 OpenStack 運用ガイド February 1, 2016 ネットワーク OpenStack でのネットワークは複雑で、多くの課題があります。7章ネッ トワーク設計 [81]を参照してください。 まとめ コンピュートノードはクラウドの主なアイテムで、ユーザーのアプリ ケーションが実行される場所です。何をどのようにデプロイするかユー ザーの意思決定により、コンピュートノードは影響を受けます。これら の要件は、意思決定していく際に反映させる必要があります。 55 OpenStack 運用ガイド February 1, 2016 第5章 スケーリング 出発点 ...................................................... クラウドコントローラーノードの追加 ........................... クラウドの分離 .............................................. スケーラブルハードウェア .................................... 57 59 60 64 従来のアプリケーションでは、スケーリングするには、より大きいハー ドウェアが必要でした (垂直スケーリング) が、クラウドベースのアプ リケーションは通常、別のハードウェアを必要とします(水平スケーリン グ)。クラウドを正常に設定できた場合、需要が増すとそれに合うように リソースを追加する必要がでてきます。 クラウドのパラダイムに合わせるため、OpenStack は水平的にスケーリ ングできるように設計されています。容量の大きいサーバーに切り替 えるのではなく、サーバーを多く調達して同じように設定したサービス をインストールするだけです。理想としては、メッセージバスを通信す る、機能的に同じサービス (例: コンピュートノードや nova-api ノー ド) グループでスケールアウト、負荷分散します。 出発点 多くのアイテムでバランスを取りながら、クラウドのスケーラビリティ や改善方法を決定していきます。ソリューション 1 つだけでは、スケー ラビリティの目的を達成することはできません。しかし、複数のメトリ クスをトラッキングすると役に立ちます。仮想ハードウェアのテンプ レート (OpenStack ではフレーバーと呼ばれる) を定義できるため、用 意するフレーバーをもとにスケーリングの意思決定を行うことができま す。これらのテンプレートは、メモリーのサイズ (RAM)、root ディスク のサイズ、一時データディスクの空き容量、スターターのコア数を定義 します。 デフォルトの OpenStack フレーバーは 表5.1「OpenStack デフォルトの フレーバー」 [58] に表示されています。 57 OpenStack 運用ガイド February 1, 2016 表5.1 OpenStack デフォルトのフレーバー 名前 仮想コア数 メモリ ディスク エフェメラル m1.tiny 1 512 MB 1 GB 0 GB m1.small 1 2 GB 10 GB 20 GB m1.medium 2 4 GB 10 GB 40 GB m1.large 4 8 GB 10 GB 80 GB m1.xlarge 8 16 GB 10 GB 160 GB 多くの場合、クラウドのコア数から始めます。比率を適用することで、 • 実行する必要のある仮想マシン数。((overcommit fraction • 必要とされるストレージ容量(flavor disk size に関する情報を取得できます。これらの比率を使用して、クラウドのサ ポートに必要なインフラストラクチャーがどの程度必要か判断すること ができます。 ここでは、期待される仮想マシン数や必要なストレージ数などの拡張性 の情報を収集するために、これらの比率を使用した例を紹介していま す。以下の数では、 (200 / 2) × 16 = 1600 仮想マシンのインスタン スをサポートし、/var/lib/nova/instances のストレージ 80 TB が必要 となります。 • 物理コア 200 個 • ほとんどのインスタンスのサイズは m1.medium (仮想コア数2、スト レージ50GB) とします。 • デフォルトの CPU オーバーコミット比率 (cpu_allocation_ratio in nova.conf) は 16:1 とします。 しかし、APIサービスやデータベースサーバー、MQサーバーがおそらく遭 遇する負荷を見積もるためには、コア数以外の検討も行う必要がありま す。クラウドの利用パターンも考慮しなければなりません。 特定の例としては、マネージド Web ホスティングプラットフォームをサ ポートするクラウドと、コードコミットごとに仮想マシンを1つ作成す るような開発プロジェクトの統合テストを実行するクラウドを比較して みましょう。前者では、VMを作成する負荷の大きい処理は数か月に 一度 しか発生しないのに対して、後者ではクラウドコントローラに常に負荷 の大きい処理が発生します。一般論として、VMの平均寿命が長いという ことは、クラウドコントローラの負荷が軽いことを意味するため、平均 的なVMの寿命を検討する必要があります。 58 OpenStack 運用ガイド February 1, 2016 仮想マシンの作成、停止以外に、特に nova-api や関連のデータベース といったサービスにアクセスする際の影響について考慮する必要があり ます。インスタンスを一覧表示することで膨大な量の情報を収集し、こ の操作の実行頻度を前提として、ユーザー数の多いクラウドで負荷を大 幅に増加させることができます。これはユーザーには透過的に行われま す。OpenStack のダッシュボードをブラウザで開いた状態にすると、仮 想マシンの一覧が 30 秒毎に更新されます。 これらの要素を検討した後、クラウドコントローラにどのくらいのコ ア数が必要なのか決定することができます。上記で説明した留意事項の 下、典型的には、ラック 1 本分のコンピュートノードに対して8 コア、 メモリ 8GB のサーバで充分です。 また、仮想マシンのパフォーマンス、ストレージの性能 (スピンドル/コ ア)、メモリーの空き容量 (RAM/コア)、ネットワークの帯域幅など、予 算や性能のニーズに関して、主なハードウェアの仕様を考慮する必要も あります。 (Gbps/コア)、全体的な CPU のパフォーマンス (CPU/コア) ヒント クラウドからメトリクスを抽出する方法など、メトリクスの 追跡については、13章ロギングと監視 [215] を参照してくだ さい。 クラウドコントローラーノードの追加 ノードを追加することで、垂直に拡張するのが容易になります。コン ピュートノードの追加は単純で、既存のインストール環境から簡単に ピックアップすることができます。しかし、高可用性のクラスターを設 計するには、重要なポイントを考慮する必要があります。 クラウドコントローラは、異なるサービスを複数実行することを思い 出してください。拡張のための新しいサーバには、nova-scheduler や nova-console のようなメッセージキューのみを使用して内部通信を行う サービスをインストールすることができます。しかし、その他の不可欠 な部分はさらに細心の注意が必要です。 ダッシュボード、nova-api、Object Storage プロキシなどのユーザー が使用するサービスの負荷分散をする必要があります。標準の HTTP 負荷分散メソッド (DNS ラウンドロビン、ハードウェアロードバラン サー、Pound または HAProxy などのソフトウェア) を使用して下さい。 ダッシュボードに関しては、L7 ロードバランサーで大変困難となる可能 性があるため、VNC プロキシは注意が必要です。Horizon セッションス トレージも参照してください。 59 OpenStack 運用ガイド February 1, 2016 nova-api や glance-api などのサービスは、環境設定ファイルのフラ グを変更することによって複数プロセスで処理させるように設定できま す。これによって 1 台のサーバー上にある複数のコアの間で処理を共有 できるようになります。 ヒント MySQL の負荷分散には複数のオプションがあり、サポートさ れている AMQP ブローカーにはクラスタリングサポートが含 まれています。これらの設定方法やその他多くのサービスに 関する情報は、 パートII「運用」 [89] を参照してくださ い。 クラウドの分離 法的に考慮したデータストレージ、耐震ラインでの冗長性、低遅延の API コールを提供する様々なリージョンを提供するには、クラウドを分 割します。セル、リージョン、アベイラビリティゾーン、ホストアグリ ゲート のいずれかの OpenStack メソッドを使用して、クラウドを分割 します。 メソッド毎に異なる機能を提供しますが、このメソッドは 2 つのグルー プに分類すると良いでしょう。 • セルおよびリージョン。クラウド全体を分離し、個別にコンピュート デプロイメントを稼働します。 • アベイラビリティゾーン およびホストアグリゲート。コンピュートの デプロイメントの分割のみを行います。 表5.2「OpenStack 分離の手法」 [60] では、OpenStack Compute が現 在提供している各分割メソッドの比較ビューを提供しています。 表5.2 OpenStack 分離の手法 セル リージョン アベイラビリティ ホスト・アグリ ゾーン ゲート 用途 コンピュート資源 に対する単一の API エンドポイン ト、もしくは2段 階スケジューリン グが必要な場合 リージョンごと に別々のAPIエン ドポイントが必要 で、リージョン間 で協調する必要が ない場合 物理的な隔離 や冗長性のため に、Nova デプロ イメントの中で論 理的な分離が必要 な場合 例 複数サイトで構 複数サイトで構 分離された電源供 トラステッドコン 成されるクラウド 成されるクラウド 給ラインを持つ設 ピューティング機 60 共通の機能を持っ たホストのグルー プに対してスケ ジューリングした い場合 OpenStack 運用ガイド オーバーヘッド February 1, 2016 セル リージョン で、仮想マシンを 「任意のサイト」 または特定のサイ トにスケジューリ ングしたい場合 で、仮想マシンを 備で構成される、 能に対応したホス 特定のサイトに対 単一サイトのクラ ト群に対してスケ してスケジューリ ウド。 ジューリングした ングでき、かつ共 い場合 有インフラを利用 したい場合 試験として使用 リージョン毎に 別々のAPIエンド ポイントが必要 新規サービ ス、nova-cells アベイラビリティ ホスト・アグリ ゾーン ゲート nova.conf の設定 nova.conf の設定 を変更 を変更 各リージョンに 各セルには nova- フルセットのNova api 以外の全 サービスが必要 nova 設定が含ま れています。 共有サービス Keystone Keystone nova-api Keystone Keystone すべての Nova サービス すべての Nova サービス セルとリージョン OpenStack Compute のセルによって、より複雑な技術を持ち込むことな しに、また既存のNovaシステムに悪影響を与えることなしに、クラウド を分散された環境で運用することができます。1つのクラウドの中のホ ストは、セル と呼ばれるグループに分割されます。セルは、木構造に 構成されてます。最上位のセル (「API セル」) はnova-apiサービスを 実行するホストを持ちますが、nova-compute サービスを実行するホスト は持ちません。それぞれの子セルは、nova-apiサービス以外の、普通の Novaシステムに見られる他のすべての典型的な nova-* サービスを実行 します。それぞれのセルは自分のメッセージキューとデータベースサー ビスを持ち、またAPIセルと子セルの間の通信を制御する nova-cells サービスを実行します。 これによって、複数のクラウドシステムに対するアクセスを、1つのAPI サーバで制御することができます。通常のnova-schedulerによるホスト の選択に加えて、第二段階のスケジューリング(セルの選択)を導入する ことにより、仮想マシンを実行する場所の制御の柔軟性が大きく向上し ます。 単独の API エンドポイントを持つ場合と異なり、リージョンは、クラウ ドごとに別々のAPIエンドポイントを持ち、より細かい分離を実現できま す。複数の拠点にまたがってインスタンスを実行するユーザーは、明示 的にリージョンを指定しなければなりません。しかし、新規サービスを 実行するなど、複雑化しなくて済みます。 61 OpenStack 運用ガイド February 1, 2016 OpenStack dashboard (horizon) は、複数のリージョンを使用するよう 設定できます。これは、AVAILABLE_REGIONS パラメーターにより設定で きます。 アベイラビリティゾーンとホストアグリゲート アベイラビリティゾーン、ホストアグリゲート、または両方を使用し て、nova デプロイメントを分割することができます。 アベイラビリティゾーンは、ホストアグリゲートを利用して実装されて おり、ホストアグリゲートと同様の方法で設定します。 しかし、アベイラビリティゾーンとホストアグリゲートは別の用途で使 用します。 アベイラビリティゾーン アベイラビリティゾーンにより、OpenStack Compute ホストを論理グ ループにまとめて、(独立した電源系統やネットワーク装置を使うこと などで)他のアベイラビリティゾーンとの物理的な分離や冗長性を実現 できます。 指定したコンピュートホストがローカルでサーバー毎に所属するアベイ ラビリティゾーンを定義します。アベイラビリティゾーンは一般的に、 共通の属性を持つサーバーを識別するために使用されます。例えば、 データセンターのラックの一部が別の電源を仕様している場合、この ラックのサーバーを独自のアベイラビリティゾーンに入れることができ ます。アベイラビリティゾーンは、異なるハードウェアクラスを分割す ることもできます。 リソースのプロビジョニングの際には、インスタンスを作成するアベイ ラビリティゾーンを指定することができます。これによって、クラウド の利用者は、アプリケーションのリソースが異なるマシンに分散して配 置され、ハードウェア故障が発生した場合でも高可用性を達成すること ができます。 ホストアグリゲートゾーン これにより、OpenStack コンピュートデプロイメントを負荷分散やイン スタンスディストリビューション用の論理グループに分割することが できます。ホストアグリゲートを使用して、アベイラビリティゾーンを さらに分割することができます。例えば、ホストアグリゲートを使用し てアベイラビリティゾーンをストレージやネットワークなどの共通のリ 62 OpenStack 運用ガイド February 1, 2016 ソースを共有するか、信頼済みのコンピューティングハードウェアなど の特別なプロパティを持つホストグループに分割することができます。 ホストアグリゲートの一般的な用途は nova-scheduler で使用する情報 を提供することです。例えば、ホストアグリゲートを使って、特定の フレーバーやイメージを共有するホストの集合を作成することができま す。 この一般的なケースは、アグリゲートメタデータで key-value ペアを設定して、フレーバーの extra_specs メタデータで key-value ペアを一致させます。フィルタースケジューラーの AggregateInstanceExtraSpecsFilter は、強制的にインスタンスが、同 じ値に同じキーが定義されているアグリゲートのホストに対してのみス ケジューリングするようにします。 この一般的なコンセプトを高度なレベルで使用すると、集中度の高いコ ンピュートロードや負荷の低い開発やテストシステムが使用量の多いシ ステムのリソースが不足したり、使用量の低いシステムでリソースを無 駄にしたりしないで、同じクラウドを共有できるように、異なるフレー バーの種別が、異なる CPU および RAM 割当の比率で実行できるように なります。 これは、ホストアグリゲートに metadata を設定して、フ レーバー種別のextra_specs と一致させると機能します。 最初のステップは、cpu_allocation_ratio と ram_allocation_ratio のアグリゲートメタデータキーを浮動小数点の値に設定しま す。AggregateCoreFilter と AggregateRamFilter のフィルタースケ ジューラーは、アグリゲートのホストにスケジューリングしている場 合、nova.conf のグローバルの初期値を仕様するのではなく、この値を 使用します。各ホストは複数のアグリゲートに含まれていますがリソー スごとに 1 つの割当比率しか指定されていないため、この機能の使用時 は、注意が必要です。同じ リソース に対して別の値が定義されている 複数のアグリゲートにホストを設置しないように注意してください。 これは前半部分です。特定の比率を保証するフレーバー種別を取 得するには、フレーバー種別の extra_specs をアグリゲートで マッチする key-value ペアに設定する必要があります。たとえ ば、extra_specscpu_allocation_ratio を 1.0 に定義すると、その 種別のインスタンスは、メタデータキー cpu_allocation_ratio も 1.0 と定義されているアグリゲートのみで実行されます。実際は、 cpu_allocation_ratio または core_allocation_ratio で直接マッチ させるのではなく、マッチするアグリゲートメタデータに追加の keyvalue ペアを定義すると良いでしょう。これにより抽象化が改善されま す。たとえば、overcommit キーを定義して、高、中、低の値を設定する ことで、関連するフレーバー種別をすべて変更する必要なしに、アグリ ゲートの割合比を調節することができます。 63 OpenStack 運用ガイド February 1, 2016 注記 以前のバージョンでは、全サービスにアベイラビリティゾー ンがありました。現在は、nova-compute サービスには独自 のアベイラビリティゾーンがあります。 nova-scheduler、 nova-network、nova-conductor などのサービスは、常にすべ てのアベイラビリティゾーンに対応します。 以下の操作のいずれかを実行する場合、サー ビスは独自の内部アベイラビリティゾーン (CONF.internal_service_availability_zone) に表示されま す。 • nova host-list (os-hosts) • euca-describe-availability-zones verbose • nova-manage サービス一覧 内部のアベイラビリティゾーンは、euca-describeavailability_zones (nonverbose) に隠し設定されていま す。 CONF.node_availability_zone は、CONF.default_availability_zone に名前が変更さ れ、nova-api および nova-scheduler サービスのみで使用さ れます。 CONF.node_availability_zone は今も機能しますが、非推奨 扱いです。 スケーラブルハードウェア OpenStack のデプロイやインストールの助けとなるリソースがすでに複 数存在している場合でも、時間に余裕を持ってデプロイメントの系っ 買うを立てることは非常に重要です。本書は、OpenStack クラウド用の ラックを少なくとも 1 つ用意しているとの前提で、何を度のタイミング でスケールするかの提案をしていきます。 ハードウェア調達 「クラウド」とは、サーバーを自由に作成、終了でき、不安定な環境と 説明されてきました。これは真実ですが、サーバー自体が不安定なわ けではありません。クラウドのハードウェアは、安定して正しく設定さ 64 OpenStack 運用ガイド February 1, 2016 れているようにすることで、クラウド環境は稼動状態を保ちます。基本 的に、安定したハードウェア環境を構築するように努めることで、ユー ザーが不安定かつ変化しやすいものとして処理を行う可能性のあるクラ ウドをホストすることができます。 OpenStack は、OpenStack と互換性のある Linux ディストリビューショ ンによりサポートされているハードウェアにデプロイすることができま す。 ハードウェアに一貫性を持たせる必要はありませんが、インスタンスの マイグレーションをサポートできるように、最低限、CPU の種類は同じ にする必要があります。 OpenStack での使用に推奨しているハードウェアは一般的に、多くの ハードウェアベンダーが提供している、コストパフォーマンスの高い標 準オファリングです。調達すべきものをコンピュート、オブジェクト ストレージ、クラウドコントローラなどのビルディングブロックに分類 し、必要に応じ依頼していくと分かりやすいでしょう。また、投資額を これ以上かけられない場合、既存サーバーがありパフォーマンス要件や 仮想化技術に対応しているのであれば、高い確率で OpenStack をサポー トしているはずです。 キャパシティプランニング OpenStack は、直線的に規模が拡大するよう設計されています。本章で 議論したこと、とくにクラウドコントローラーのサイジングを考慮しな がら、追加のコンピュートノードやオブジェクトストレージノードを必 要に応じて調達できます。新しいノードは、既存のノードと同じ仕様・ ベンダーである必要がありません。 コンピュートノードについては、nova-scheduler がコア数やメモリ量の サイジングに関する違いを吸収しますが、CPUの速度が違うことによっ て、ユーザーの使用感が変わることを考慮するべきです。オブジェクト ストレージノードを追加する際には、 そのノードのcapability を反映 するweight を指定するべきです。 リソース利用状況の監視とユーザー増加の監視によって、(追加機材 の)調達時期を知ることができます。13章ロギングと監視 [215] でいく つかの有用な監視項目を詳しく解説します。 エージング試験 サーバーハードウェアの故障確率は、そのライフタイムの最初と最後に 高くなります。結論として、初期故障を誘発する適切なエージングテ 65 OpenStack 運用ガイド February 1, 2016 ストを行うことによって、運用中の故障に対応するための多くの労力を 避けることができます。一般的な原則は、限界まで負荷をかけることで す。エージング試験の例としては、数日間にわたってCPUやディスクベン チマークを走行させることが含まれます。 66 OpenStack 運用ガイド February 1, 2016 第6章 ストレージ選定 一時ストレージ .............................................. 永続ストレージ .............................................. ストレージのコンセプト ...................................... ストレージバックエンドの選択 ................................ まとめ ...................................................... 67 67 72 73 80 ストレージは、OpenStack のスタックの多くの箇所で使用されており、 ストレージの種別が異なると、経験豊かなエンジニアでも混乱する可能 性があります。本章は、お使いのクラウドで設定可能な永続ストレージ オプションにフォーカスします。一時 ストレージと 永続 ストレージの 相違点を理解することが重要です。 一時ストレージ OpenStack Compute Service (nova) のみをデプロイする場合、デフォル トでは、どのような形式の永続ストレージにもアクセスできません。仮 想マシンに関連付けされているディスクは一時的です。つまり、(ユー ザー視点から) 仮想マシンが終了されるとこのストレージは効率的に表 示がなくなります。 永続ストレージ 永続ストレージとは、実行中のインスタンスの状態が何であっても、ス トレージリソースが他のリソースよりも長く存在して、常に利用できる 状態のストレージを指します。 今日、OpenStack はオブジェクトストレージ、ブロックストレー ジ、ファイルシステムストレージという 3 種類の永続ストレージを明示 的にサポートします。 オブジェクトストレージ オブジェクトストレージでは、REST API を使用してバイナリオ ブジェクトにアクセスします。オブジェクトストレージで有名 な例として、Amazon S3 は知られています。オブジェクトスト レージは、OpenStack Object Storage (swift) プロジェクトによ り、OpenStack に実装されています。ユーザーが、大規模なデータセッ トをアーカイブまたは管理する場合オブジェクトストレージを提供しま す。さらに OpenStack では、ファイルシステムにイメージを格納する代 67 OpenStack 運用ガイド February 1, 2016 わりに、仮想マシン (VM) のイメージを、オブジェクトストレージシス テムの中に格納できます。 OpenStack Object Storage は、従来のファイルシステムの制約の一部を 緩和することで、高可用性かつ高拡張性のストレージソリューションを 提供します。このようなクラスターの設計、調達には、操作に関する主 なコンセプトを理解することが重要です。基本的に、このタイプのスト レージハードウェアはすべて、どこかの段階で、どのレベルであっても 故障するというコンセプトをベースに、この種類のストレージは構築さ れています。 RAID カードやサーバー全体での問題など、他のストレー ジシステムに影響を与える障害に遭遇することがまれにあります。この ような場合、OpenStack Object Storageでは滞りなく処理されます。 オブジェクトストレージのアーキテクチャーについて詳しく説明したド キュメントは the developer documentationにあります。これをまず参 照してください。アーキテクチャーを理解したら、プロキシサーバーの 役割やゾーンの機能について理解できるはずです。しかし、少し見ただ けでは、頻繁に重要なポイントを逃してしまうことがあります。 クラスターの設計時には、耐久性と可用性を考慮する必要があります。 耐久性や可用性は主に、ハードウェアの信頼性に頼るのではなく、デー タを分散して設置することで確保されることを理解してください。レプ リカの数のデフォルト値は 3 である点も考慮します。つまり、オブジェ クトが書き込みされたとマークされる前でも、少なくともコピーが 2 つ 存在します。1 つのサーバーが書き込みに失敗しても、書き込み操作が 最初に返された時点で、3 番めのコピーが存在する可能性があります。 この数字を変更することで、データの堅牢性を高めることができます が、利用可能なストレージ数が減少します。次に、サーバーの設置につ いて見ていきます。データセンターのネットワークや停電ゾーン全体に 設定するようにします。ゾーンには、ラック、サーバー、ディスクのい ずれを使用していますか? オブジェクトストレージのネットワークパターンは、最初は見慣れない かもしれません。これらのメイントラフィックの流れを見てみましょ う。 • object server 、 container server 、 account server 間 • object/container/account server と proxy server の間 • proxy server と 利用者の間 オブジェクトストレージは、データをホストするサーバーの中で非常に 呼び出しが多く、小さいクラスターでも一秒に MB 単位のトラフィック があります。「オブジェクトがありますか?はい、あります。」当然、 68 OpenStack 運用ガイド February 1, 2016 この質問に対する答えがNoの場合、または要求がタイムアウトした場 合、オブジェクトの複製が開始されます。 サーバー全体が停止し、24 TB 分のデータを即時に 3 つのコピーに残る ように移行するというシナリオを思い浮かべてください。これは、ネッ トワークに大きな負荷がかかる可能性があります。 69 OpenStack 運用ガイド February 1, 2016 また、新規ファイルがアップロードされると、プロキシサーバーはレプ リカの数だけ書き込みが行われ、複数のネットワークトラフィックが発 生するという点も頻繁に忘れられています。 レプリカが3つのクラス ターでは、受信トラフィックが 10 Gbps とすると、送信トラフィック は 30 Gbps ということになります。これを以前のレプリカの帯域幅の需 要が 高いことと合わせて考えると、パブリックネットワークよりもプラ イベートネットワークのほうがはるかに高い帯域幅が必要であることが 分かります。OpenStack Object Storage はパフォーマンスを保つために 内部では、暗号化なし、認証なしの rsync と通信します (プライベート ネットワークをプライベートに保つため)。 帯域幅に関する残りのポイントは、パブリック側の部分です。swiftproxy サービスは、ステートレスです。ステートレスとは、HTTP 負荷分 散メソッドを簡単に追加、使用して帯域幅や可用性を共有できるという 意味です。 ストレージ側の性能が十分であれば、proxy server の増加は帯域の増加 になります。 ブロックストレージ Block storage (ボリュームストレージと呼ばれる場合もある) は、ユー ザーがブロックストレージデバイスにアクセスできるようにします。 ユーザーは、実行中の仮想マシンインスタンスにボリュームを接続する ことで、ブロックストレージと対話します。 これらのボリュームは永続的であるため、インスタンスから切り離し て、データをそのまま維持しつつ、別のインスタンスに再接続すること ができます。ブロックストレージは、ドライバー形式で複数のバックエ ンドをサポートする、OpenStack Block Storage (Cinder) プロジェク トで OpenStack に実装されています。お使いのストレージバックエンド は、Block Storage ドライバーでサポートされている必要があります。 多くのストレージドライバはインスタンスが直接ストレージハードウェ アのブロックデバイスへアクセスできるようにします。これは リード/ ライト I/O 性能の向上に役立ちます。しかしながら、ボリュームとして のファイルの利用も、NFS、GlusterFS などの完全サポートとともに、確 立された手法です。 これらのドライバーは従来のブロックストレージドライバとは少々異な る動作をします。NFSやGlusterFSでは1つのファイルが作成され、イン スタンスに対して「仮想」ボリュームとしてマッピングされます。この マッピング/変換は/var/lib/nova/instances 下に保存される、QEMUの ファイルベースの仮想マシンの、OpenStackによる扱い方と同様です。 70 OpenStack 運用ガイド February 1, 2016 Shared File Systems サービス The Shared File Systems service provides a set of services for management of Shared File Systems in a multi-tenant cloud environment. Users interact with Shared File Systems service by mounting remote File Systems on their instances with the following usage of those systems for file storing and exchange. Shared File Systems service provides you with shares. A share is a remote, mountable file system. You can mount a share to and access a share from several hosts by several users at a time. With shares, user can also: • 容量、ファイル共有システムプロトコル、公開レベルを指定した共有 の作成 • 選択したバックエンドのモードに応じて、共有ネットワークの使用有 無を指定して、共有サーバーまたはスタンドアロンで共有を作成しま す。 • 既存の共有のアクセスルールおよびセキュリティーサービスを指定し ます。 • Combine several shares in groups to keep data consistency inside the groups for the following safe group operations. • Create a snapshot of a selected share or a share group for storing the existing shares consistently or creating new shares from that snapshot in a consistent way • スナップショットから共有を作成します。 • Set rate limits and quotas for specific shares and snapshots • 共有リソースの使用状況 • 共有を削除します。 Like Block Storage, the Shared File Systems service is persistent. It can be: • Mounted to any number of client machines. • Detached from one instance and attached to another without data loss. During this process the data are safe unless the Shared File Systems service itself is changed or removed. 71 OpenStack 運用ガイド February 1, 2016 Shares are provided by the Shared File Systems service. In OpenStack, Shared File Systems service is implemented by Shared File System (manila) project, which supports multiple back-ends in the form of drivers. The Shared File Systems service can be configured to provision shares from one or more back-ends. Share servers are, mostly, virtual machines that export file shares via different protocols such as NFS, CIFS, GlusterFS, or HDFS. ストレージのコンセプト 表6.1「OpenStack ストレージ」 [72] は、OpenStack で提供されてい るさまざまなストレージのコンセプトについて説明しています。 表6.1 OpenStack ストレージ エフェメラルスト レージ ブロックストレー ジ オブジェクトスト レージ Shared File System ストレージ 使用目的 OS を起動し、空き 永続的なストレー 領域に記録する ジを仮想マシン (VM)へ追加する データを保存する (VMイメージも含 む) 永続的なストレー ジを仮想マシン (VM)へ追加する アクセス 方法 ファイルシステム パーティション分 REST API 割、フォーマッ ト、マウントが可 能な ブロックデバ イス (/dev/vdc な ど) A Shared File Systems service share (either manila managed or an external one registered in manila) that can be partitioned, formatted and mounted (such as /dev/vdc) アクセス 可能な場 所 VM内 VM内 どこからでも VM内 管理元 OpenStack Compute OpenStack Block (nova) Storage (cinder) OpenStack Object Storage (swift) OpenStack Shared File System Storage (manila) データの 残存期間 VM終了まで ユーザーが削除す るまで ユーザーが削除す るまで 容量の指 定 フレーバー として 初回要求のユー 知られる管理者の ザー仕様 サイズ設定 利用可能な物理 ディスクの総量で 決まる • 初回要求のユー ザー仕様 ユーザーが削除す るまで • 延長申請 • 利用可能なユー ザーレベルの クォータ • 管理者により適 用される制限 72 OpenStack 運用ガイド February 1, 2016 エフェメラルスト レージ ブロックストレー ジ オブジェクトスト レージ 暗号化の 設定 … nova.conf のパラ メーター 管理者が 暗号化ボ まだ利用不可 リューム種別を設 定し、利用者が暗 号化ボリュームを 選択 Shared File Systems service does not apply any additional encryption above what the share’s back-end storage provides 典型的な 利用例 1 番目のディスク 10 GB、2 番目の ディスク 30 GB 1TBディスク Depends completely on the size of back-end storage specified when a share was being created. In case of thin provisioning it can be partial space reservation (for more details see Capabilities and Extra-Specs specification) 数十TBのデータ セットストレージ Shared File System ストレージ ファイルレベルのストレージ (ライブマイグレーション用) ファイルレベルのストレージでは、ユーザーは、オペレーティング システムのファイルシステムインターフェースを使用して保存した データにアクセスします。ネットワークストレージソリューション の使用経験のあるユーザーの多くは、この形式のネットワークスト レージを使用したことがあります。Unix の分野では、ネットワー クストレージで最も一般的なものが NFS で、Windows では CIFS (旧称 SMB) です。 OpenStack クラウドは、ファイルレベルのストレージはエンド ユーザーには見えませんが、クラウドの設計時に /var/lib/nova/ instances の配下にインスタンスを格納する、ファイルレベルのス トレージを検討してください。これは、ライブマイグレーションの サポートには、共有ファイルシステムが必要であるためです。 ストレージバックエンドの選択 クラウドのユースケースごとにニーズが異なります。頻繁に変更が発生 しない多数のオブジェクトに素早くアクセスする必要がある場合、ファ イルに Time-to-Live (TTL) の値を設定する場合、ファイルシステムの 73 OpenStack 運用ガイド February 1, 2016 みにマウントされているストレージのみにアクセスするが、新しいイン スタンスの起動時には即時にそのストレージを複製する場合などがあり ます。他のシステムの場合は、一時ストレージ (ストレージに接続され た仮想マシンがシャットダウンされている場合に開放されるストレージ) がより良い方法です。ストレージのバックエンドの選択時は、ユーザー の代わりに以下の質問を確認してください。 • ユーザがブロックストレージを必要とするか? • ユーザがオブジェクトストレージを必要とするか? • 管理者がライブマイグレーションを必要とするか? • 永続的ストレージをコンピュートノード内に持つべきか?それとも外 部ストレージに持つべきか? • 実現可能な容量は?ネットワークアクセスでも、より多くのディスク がより良い I/O 性能に繋がるか? • どちらが自分の意図した最高のコストパフォーマンスシナリオを実現 するか? • ストレージの運用管理をどうするか? • ストレージの冗長性と分散をどうするか?ストレージノード障害でど うなるか?災害時、自分のデータ消失をどの程度軽減できるのか? 表6.2「永続ファイルベースのストレージサポート」 [74]で記載されて いるように、コモディティハードウェアを使用してストレージをデプロ イする場合、オープンソースのパッケージを使用することができます。 表6.2 永続ファイルベースのストレージサポート オブジェクトストレー ブロックストレージ ジ a ファイルレベル Swift LVM Ceph テスト用 Gluster NFS ZFS Sheepdog a ####################################################################### (MooseFS)### #################################################################### 74 OpenStack 運用ガイド February 1, 2016 ストレージドライバーズサポート オープンソースのテクノロジーに加え、OpenStack Block Storage で正式にサポートされる専用ソリューションが多数存在します。以 下のベンダーによりサポートされています。 • IBM (Storwize family/SVC, XIV) • NetApp • Nexenta • SolidFire OpenStack wiki で、サポートされている全ブロックストレージド ライバーが提供する機能一覧を確認いただけます。 クラウド内でオブジェクトストレージの利用を検討する必要がありま す。コンピュートクラウドで提供されるオブジェクトストレージの一般 的な利用方法は以下の二つです。 • ユーザに永続的ストレージの仕組みを提供する • スケーラブルで信頼性のある仮想マシンイメージデータストアとして 利用する コモディティハードウェア上の ストレージ技術 このセクションでは、さまざまな商用ストレージバックエンドテクノロ ジーにおける相違点をカンタンにまとめます。クラウドユーザーのニー ズに合わせて、1 つまたは多数のテクノロジーを組み合わせて実装する ことができます。 OpenStack Object Storage (swift) 公式の OpenStack Object Store 実 装。Rackspace Cloud Filesのベース となる技術として、RackSpace によ り実稼動環境で数年間使用された成 熟テクノロジーです。拡張性が高い ため、ペタバイトレベルのストレー ジを管理するのに非常に適していま す。OpenStack Object Storage の利 点は OpenStack (OpenStack Identity と統合し、OpenStack Dashboard イ ンターフェースと連携) と統合でき、 75 OpenStack 運用ガイド February 1, 2016 非同期のイベントを一貫性を保ちなが ら複製できるため、複数のデータセン ターのデプロイメントへのサポートも 向上されています。 そのため、最終的に、複数のデータ センターにまたがってストレージク ラスターを分散するように計画した場 合、Compute およびオブジェクトスト レージ用に統合アカウントが必要な場 合、または OpenStack Dashboard で オブジェクトストレージを制御する場 合、OpenStack Object Storage を考 慮してみてください。以下のセクショ ンで OpenStack Object Storage iに ついて詳しく記載されています。 Ceph 商用ストレージノード全体でデータを 複製する拡張性の高いストレージソ リューション。Ceph は、DreamHost の創設者により開発され、現在は実稼 動環境で使用されています。 Ceph は、異なる種類のストレージイ ンターフェースをエンドユーザーに公 開するように設計されました。Ceph は、オブジェクトストレージ、ブロッ クストレージ、ファイルシステムイ ンターフェースをサポートしています が、ファイルシステムインターフェー スは、実稼動環境での使用にはまだ適 していません。Ceph は、オブジェク トストレージでは swift と同じ API をサポートしており、cinder ブロッ クストレージのバックエンド、glance イメージのバックエンドストレージと して使用することができます。Ceph は、copy-on-write を使用して実装さ れたシンプロビジョニングをサポート します。 新規ボリュームは非常に早くプロビ ジョニングされるため、ボリュームか らの起動に便利です。また、Ceph は 76 OpenStack 運用ガイド February 1, 2016 keystone ベースの認証 (バージョン 0.56 以降) もサポートするため、デ フォルトの OpenStack swift 実装と シームレスに切り替えることができま す。 Ceph の利点は、管理者がより細かく データの分散やレプリカのストラテ ジーを管理できるようになり、オブ ジェクトとブロックストレージを統合 し、シンプロビジョニングでボリュー ムから起動するインスタンスを非常 に早くプロビジョニングできるだけ でなく、分散ファイルシステムのイ ンターフェースもサポートしている点 です。ただし、このインターフェース は、Ceph プロジェクトによる実稼動 デプロイメントでの使用には、 推奨 されていません。 単一システムでオブジェクトストレー ジとブロックストレージを管理する場 合、またはボリュームから素早く起動 するサポートが必要な場合、Ceph の 使用を検討してください。 Gluster 分散型の共有ファイルシステ ム。Gluster バージョン 3.3 以 降、Gluster を使用して、オブジェ クトストレージとファイルストレー ジを1 つの統合ファイルとオブジェ クトストレージソリューションにまと めることができるようになりました。 これはGluster For OpenStack (GFO) と呼ばれます。GFO は、swift のカ スタマイズバージョンを使用してお り、Gluster がバックエンドストレー ジを使用できるようになっています。 通常の swift ではなく GFO を使用す るのは、主に、分散ファイルシステム のサポートや、共有ストレージのライ ブマイグレーションのサポートを提供 したり、エンドユーザーに個別サービ 77 OpenStack 運用ガイド February 1, 2016 スとして提供したりするためです。単 一システムでオブジェクトとファイル ストレージを管理する場合は、GFO の 使用を検討してください。 LVM 論理ボリュームマネージャー (LVM) は Linux ベースのシステムで、物理 ディスク上に抽象層を提供して論理 ボリュームをオペレーティングシス テムに公開します。LVM バックエンド は、LVM 論理パーティションとしてブ ロックストレージを実装します。 ブロックストレージを収容する各ホス トでは、管理者は事前にブロックスト レージ専用のボリュームグループを作 成しておく必要があります。ブロック ストレージはLVM論理ボリュームから 作られます。 注記 LVMはレプリケーション を提供しません。通常、管 理者はブロックストレージ としてLVMを利用するホス ト上にRAIDを構成し、ここ のハードディスク障害から ブロックストレージを保護 します。しかしRAIDではホ ストそのものの障害には対 応できません。 ZFS OpenStack Block Storage 用の Solaris iSCSI ドライバーは、ZFS エ ンティティーとしてブロックを実装し ます。ZFS は、ボリュームManagerの 機能が備わっているファイルシステ ムです。これは、ボリュームマネー ジャー (LVM) およびファイルシステ ム (ext3、ext4、xfs、btrfs など) が分離している Linux システムとは 違います。ZFS は、向上されたデータ 78 OpenStack 運用ガイド February 1, 2016 整合性チェックなど、ext4 よりも多 数利点があります。 OpenStack Block Storage の ZFS バックエンドは、Illumos などの Solaris ベースのシステムのみをサ ポートします。ZFS の Linux ポー トは存在するものの、標準の Linux ディストリビューションには含まれ ておらず、OpenStack Block Storage ではテストされていません。LVM で は、ZFS はこれだけではホスト間の複 製ができません。つまり、お使いのク ラウドでストレージノードの問題を処 理する機能が必要な場合、ZFS に複製 ソリューションを追加する必要があり ます。 本書は、Linux ベースシステムを 主に使用するユーザーを想定してお り、Block Storage の ZFS バック エンドには Solaris ベースのオペ レーティングシステムが必要であるた め、ZFS でのデプロイ経験がない場合 は、ZFS は推奨していません。 Sheepdog Sheepdog は、ユーザー空間の分散ス トレージシステムです。数百ノード までスケールします。スナップショッ ト、複製、ロールバック、シンプロビ ジョニングなどの高度な仮想ディスク 管理機能を持ちます。 ディスクを管理すること、コモディ ティーハードウェアでスマートに ハイパースケールするディスクの容 量および性能を集約することがオブ ジェクトストレージシステムの本質 です。そのオブジェクトストアの上 で、Sheepdog は伸縮自在なボリュー ムサービスと HTTP サービスを提供 します。Sheepdog は、カーネルバー ジョンについて何も前提無く、xattr 79 OpenStack 運用ガイド February 1, 2016 をサポートするファイルシステムでき ちんと動作します。 まとめ 今後のクラウドユーザーにストレージのユースケースに関する質問事項 および、懸念点など理解いただけたかと思います。ストレージの決定は パフォーマンスやセキュリティのニーズにあったネットワーク設計をす る際に影響を与えます。OpenStack クラウド 設計 について理解したう えで意思決定が行えるように、本書を読み進めてください。 80 OpenStack 運用ガイド February 1, 2016 第7章 ネットワーク設計 管理ネットワーク ............................................ パブリックアドレスの選択肢 .................................. IP アドレス計画 ............................................. ネットワークトポロジー ...................................... ネットワーク関係のサービス .................................. まとめ ...................................................... 81 82 82 84 86 87 OpenStackは様々なネットワーク環境を提供します。この章ではクラウド を設計する際に必要な事項と慎重に決定すべきオプションの詳細を説明 します。 警告 これがあなたの組織で初めてのクラウド基盤構築であれば、 この章を読んだ後、最初にあなたの(組織の)ネットワー ク管理チームと相談すべきです。クラウド運用におけるネッ トワークの使用は伝統的なネットワーク構築とはかなり異な り、接続性とポリシーレベルの両面で破壊的な結果をもたら す可能性があります。 例えば、管理インフラだけでなくゲストインスタンス用のIPアドレスの 数も計画しなければなりません。加えて、プロキシサーバーやファイア ウォールを経由してのクラウドネットワークの接続性を調査・議論する 必要があります。 この章では、いくつかのネットワーク構成の例を挙げながら、OpenStack を使用したネットワークレイアウトについての情報を提供します。最後 に、安定稼働のたの重要な音とトワークサービスに関する注意事項を記 載します。 管理ネットワーク 管理用ネットワーク (クラウド管理者用の別のネットワーク) は一般的 には別のスイッチ別のNIC(Network Interface Cards)で構成する事が推 奨されます。この構成ではゲストのトラフィックによって監視と管理の ためのアクセスが妨げられることを防ぎます。 メッセージキューや OpenStack コンピュート といった OpenStack 内部 のコンポーネント間の通信用に別のプライベートネットワークの作成を 検討して下さい。Virtual Local Area Network(VLAN) は1つの物理ネッ トワークに複数の仮想ネットワークを作成できるのでこのシナリオに非 常に適しています。 81 OpenStack 運用ガイド February 1, 2016 パブリックアドレスの選択肢 ゲストの仮想マシン用に主に2つのタイプのIPアドレス(固定IPアドレス とフローティングIPアドレス)があります。固定IPアドレスはインスタ ンス起動時に割り当てられ、フローティングIPアドレスは、ユーザ操作 によって割当が変更できます。どちらのタイプのIPアドレスも用途に合 わせてパブリックまたはプライベートにする事ができます。 固定 IP アドレスは必須ですが、フローティング IP アドレスはなくて も OpenStack を実行する事が出来ます。フローティング IP の最も一般 的な用法の1つは、利用可能なIPアドレス数が限られているプライベー トクラウドにパブリックIPアドレスを提供する事です。他にも、インス タンスがアップグレード又は移動した際に割り当て可能な「静的」 IP アドレスを持つパブリック・クラウドユーザ用です。 固定IPアドレスはプライベートクラウドではプライベートに、パブリッ ククラウドではパブリックにする事が出来ます。インスタンスが削除さ れる際、そのインスタンスの固定IPは割当を解除されます。クラウドコ ンピューティングの初心者が一時的にストレスを感じる可能性がある事 に注意しましょう。 IP アドレス計画 OpenStackのインストールでは潜在的に多くのサブネット(IPアドレスの 範囲) とそれぞれに異なるタイプのサービスを持つ可能性があります。 あるIPアドレスプランは、ネットワーク分割の目的とスケーラビリティ の共有された理解を手助けします。コントロールサービスはパブリック とプライベートIPアドレスを持つ事ができ、上記の通り、インスタンス のパブリックアドレスとして2種類のオプションが存在します。 IPアドレス計画としては次のような用途で分類されるでしょう: サブネットルーター パケットが出て行く際に通るIPアド レスで、これは専用のルータかnovanetwork サービスです。 コントロールサービス用パブ リックインターフェース swift-proxy, nova-api, glance-api, horizon へのパブリックアクセスはこ れらのアドレス宛にアクセスしてきま す。これらのアドレスはロードバラン サの片側か、個々の機器を指していま す。 82 OpenStack 運用ガイド February 1, 2016 Object Storage クラスタ内の 通信 オブジェクト/アカウント/コンテ ナサービスの間とこれらとプロクシ サーバーのインターフェイス間のト ラフィックはこのプライベートネット ワークを利用します。 コンピュートとストレージの通 信 一時ディスクまたはブロックストレー ジがコンピュートノード以外にある場 合、このネットワークが使用されま す。 帯域外管理リモート管理 専用のリモートアクセスコントロー ラーチップがサーバーに搭載されてい る場合、多くの場合、これらは独立し たネットワーク上に置かれます。 帯域内リモート管理 システム管理者や監視ツールがパブ リックインターフェース経由の代わ りにコンピュートノードやストレージ ノードのアクセスに使用するための追 加インターフェース(1GBなど) 将来のための余剰 パブリック側に置かれるコントロー ラーサービスやゲストインスタンスの IPの追加は、必ずアドレス計画の一部 として入れておくべきです。 例えば、OpenStack コンピュート と オブジェクトストレージ の両 方を使用し、プライベートアドレス範囲として 172.22.42.0/24 と 172.22.87.0/26 が利用できる場面を考えます。一例として、アドレス空 間を以下のように分割することができます。 172.22.42.0/24: 172.22.42.1 - 172.22.42.3 - subnet routers 172.22.42.4 - 172.22.42.20 - spare for networks 172.22.42.21 - 172.22.42.104 - Compute node remote access controllers (inc spare) 172.22.42.105 - 172.22.42.188 - Compute node management interfaces (inc spare) 172.22.42.189 - 172.22.42.208 - Swift proxy remote access controllers (inc spare) 172.22.42.209 - 172.22.42.228 - Swift proxy management interfaces (inc spare) 172.22.42.229 - 172.22.42.252 - Swift storage servers remote access controllers (inc spare) 172.22.42.253 - 172.22.42.254 - spare 172.22.87.0/26: 172.22.87.1 - 172.22.87.3 - subnet routers 172.22.87.4 - 172.22.87.24 - Swift proxy server internal interfaces (inc spare) 172.22.87.25 - 172.22.87.63 - Swift object server internal interfaces (inc spare) パブリックIPアドレスの場合でも同様のアプローチが取れます。但し、 ゲストインスタンス用のIPとして使用する場合には、大きなフラット なアドレスレンジの方が好まれることに注意した方がよいでしょう。ま 83 OpenStack 運用ガイド February 1, 2016 た、OpenStack のネットワーク方式によっては、ゲストインスタンス用 のパブリックIPアドレスレンジのうち一つが nova-compute ホストに割 り当てられることも考慮する必要があります。 ネットワークトポロジー nova-networkを使用したOpenStackコンピュートはいくつかのあらかじめ 定義されたネットワークの実装モデルを提供しますが、それぞれ強みと 弱みがあります。ネットワークマネージャの選択はあなたのネットワー クトポロジーを変更するので、慎重に選択するべきです。また、実証済 みでレガシーなnova-networkによる設定か、OpenStackネットワーキング のためのneutronプロジェクトを採用するか決定する必要があります。イ ンスタンスのネットワークの実装方法それぞれに異なる実装と要件があ ります。 neutronプロジェクトを使用したOpenStackネットワークのための代表的 な構成は物理ハードウェアを使った物、ソフトウェア定義の環境を使 用して再作成できるものを使ったセットアップ方法を文書化されていま す。それぞれのテナントはルータやDHCPサービスと言った一般的なネッ トワーク構成要素を提供する事ができます。 表7.1「ネットワーク構成オプション」 [84] レガシーな novanetworkおオプションとそれと同等なneutron構成オプションについて述 べます。 表7.1 ネットワーク構成オプション ネットワーク構成 モデル 長所 短所 Neutronでの実装 Flat 極めて単純なトポロ ジー。 ネットワークインター フェースの設定にはイン スタンスへのファイルの 注入が必須です。 インテグレーションブリッジ(brint)として1つのブリッジを構成 し、Open vSwitchをデフォルトとし て使うModuler Layer2(ML2)プラグ インでbr-intと物理ネットワークイ ンターフェースを接続します。 専用の DHCP ブロード キャストドメインが必 要。 DHCPエージェントとルーティ ングエージェントを構成しま す。Network Address Translation (NAT) によってコンピュートノード と外部を接続します。一般的に1つ 以上のネットワークノードで成り立 ちます。 少し複雑な構成。 独立テナントネットワークは個々 のネットワーク間のレイヤー2トラ フィックをいくつかの方法で分離す る事で実装します。タグVLANはキー コンセプトでトラフィックをどこに 流すかを”タグ”で決定します。独 DHCPによるオーバー ヘッドがありません。 FlatDHCP 比較的シンプルな構成 標準的なネットワー ク。 どんなゲストOSでも動 きます。 VlanManager それぞれのテナントは 自身のVLANによって独 立しています。 84 専用の DHCP ブロード キャストドメインが必 要。 OpenStack 運用ガイド ネットワーク構成 モデル February 1, 2016 長所 短所 Neutronでの実装 一つのポートに多数の VLAN をトランクが必 要。 立テナントネットワークにはDHCPや NAT、ルーティングと言った追加の サービスが含まれるかもしれません し、含まれないかもしれません。 標準的な VLAN 数の上 限。 802.1q VLAN タギングに 対応したスイッチが必 要。 高可用性(HA)のた めのフラットDHCP マルチホスト構成 ネットワーク障害は影 響を受けるハイパーバ イザーのVMに限定され ます。 DHCP トラフィックは 個々のホスト内に閉じ 込めることができる。 ネットワークトラ フィックをコンピュー トノード全体に分散で きる。 少し複雑な構成。 コンピュートノードは概 して外部ネットワークか らアクセス可能なIPアド レスが必要です。 ネットワークサービスが 正しく動くようにライブ マイグレーションを設定 するためには注意してオ プションを構成する必要 があります。 複数のDHCPおよびレイヤ-3エージェ ントを持つようなneutronの構成で は、ネットワークノードは互いに フェールオーバできませんのでコ ントローラはDHCPといったネット ワークサービスを実行します。コン ピュートノードはOpen vSwitchまた はLinux Bridgeといったエージェン トをサポートするML2プラグインを 実行します。 nova-networkとneutronサービスはVM間でのVLANといった似通った可用性 を提供します。また、それぞれのサービスで複数のNICを付与したVMも提 供する事ができます。 OpenStack VM内のVLAN設定 VLAN設定は要求によっては複雑であったり単純であったりする事ができ ます。VLANを使用すると互いのプロジェクトに専用のサブネットを提供 でき、ブロードキャストドメインを分割するという利点が得られます。 効果的にVLANを使用できるようにするには、VLANの範囲を(それぞれのプ ロジェクトに1つずつ)割り当て、各コンピュートノードのポートをトラ ンクポートに変更する必要があります。 例えば、あなたのクラウドでサポートする必要があるプロジェクト数が 最大で100と見込まれる場合、ネットワークインフラで現在使用されてい ない VLAN の範囲を選んで下さい (例えば VLAN 200 - 299)。この VLAN の範囲を OpenStack に設定するとともに、この範囲の VLAN トラフィッ クを許可するようにスイッチポートを設定しなければいけません。 マルチNICプロビジョニング neutron を用いた OpenStack Networking と nova-network を用いた OpenStack Compute は、インスタンスに複数の NIC を割り当てる機能 85 OpenStack 運用ガイド February 1, 2016 を持ちます。nova-network の場合、サブネットや VLAN 全体まで使用で きる追加 NIC をそれぞれ使用して、これはリクエストごとに実行できま す。これにより合計プロジェクト数を減らせます。 マルチホストあるいはシングルホストネットワー キング nova-networkはマルチホストまたはシングルホストモードで運用する事 ができます。マルチホスト構成はそれぞれのコンピュートノードでnovanetwork の複製とそのコンピュートノードのインスタンスが稼働してい る時、コンピュートノードをインターネットへのゲートウェイとして利 用します。また、そのコンピュートノードはそこで稼働しているインス タンスのフローティングIPアドレスとセキュリティグループを受け持ち ます。シングルホスト構成はクラウドコントローラと言った中央サーバ がnova-network サービスを受け持ちます。すべてのコンピュートノード はインターネットへのトラフィックをコントローラに転送します。クラ ウドコントローラがすべてのコントローラ上のすべてのインスタンスの フローティングIPアドレスとセキュリティグループを受け持ちます。 どちらのモードにもメリットがあります。シングルホストモードには、 単一障害点というマイナス面があります。クラウドコントローラーが 利用できなくなると、インスタンスはネットワークと通信できなくな ります。マルチホストモードでは、この状況にはなりませんが、各コン ピュートノードはインターネットと通信するためのパブリックIPアドレ スが必要となります。十分な大きさのパブリックIPアドレスブロックを 取得できない場合には、マルチホストモードは選択肢にならないかもし れません。 ネットワーク関係のサービス 多くのネットワークアプリケーションがそうであるようにOpenStackでも NTPやDNS と言った適用するための数多くの検討事項があります。 NTP 時刻同期はOpenStackコンポーネントを継続運用する上で非常に重要な要 素です。正確な時間はインスタンスのスケジューリング、ボブジェクト ストア内のオブジェクトのレプリケーションのエラーの回避や、さらに はデバッグのためにログのタイムスタンプの一致という意味合いで必要 です。 OpenStack コンポーネントが稼働しているすべてのサーバは適切な NTPサーバにアクセス可能であるべきです。 Network Time Protocol 86 OpenStack 運用ガイド February 1, 2016 projectが提供しているパブリックサーバかローカルにNTPサーバを構築 するか決定する必要があるでしょう。 DNS OpenStackは現在のところ nova-networkホストに起動しているdnsmasq デーモンに則したDNSサービスの提供はしていません。インスタンスの新 IPアドレスに対するDNSレコードの更新のためにダイナミックDNSの構成 を検討する事ができます。また、インスタンスのIPアドレスに対応する vm-203-0-113-123.example.comというような一般的な逆引きDNSサービス の構成も検討する事ができます。 まとめ IPアドレスレイアウトと利用できるトポロジーおよびサービスの知識を 武器にネットワークを構成する準備をする時が来ました。また、ネット ワークをセキュアに保つために OpenStack セキュリティガイドを確認す る事を忘れないでください。ネットワークチームと良い関係をとなる事 を願っています! 87 パート II. 運用 おめでとう!これでクラウドのための設計が固まりました。次は、OpenStack イン ストールガイド(http://docs.openstack.org/ja/index.html#install-guides) を 見ることをお薦めします。ここには、あなたのクラウドで OpenStack パッケージ や依存パッケージを手動でインストールする方法が手順を追って説明されていま す。 オペレーターは OpenStack のデプロイに必要な手順に精通していることは重要で すが、一方で、 Puppet や Chefといった構成管理ツールの検証評価をすることを 強くお勧めします。これらはデプロイ手順を自動化する手助けとなります。 このガイドの残りの部分では、OpenStack クラウドのデプロイが無事に行われ、イ メージの追加、インスタンスの起動、ボリュームの追加が行えるようになっている ものとします。 安定した運用に頭を切り替えるために、この文書の残りの部分をざっくりと読み、 感覚をつかんでおくことをお薦めします。これらの一部はあらかじめ読んでおく と、長期運用に向けてのベストプラクティスを実践するのに役に立つことでしょ う。その他の部分は、 (電源障害のような) 予期しないイベントが発生した場合や 特定の問題のトラブルシューティングをする場合に、リファレンスとして役に立つ でしょう。 OpenStack 運用ガイド February 1, 2016 第8章 環境の把握 管理目的での OpenStack Dashboard の使用 ..................... コマンドラインツール ........................................ ネットワークの検査 .......................................... ユーザーとプロジェクト ..................................... 稼働中のインスタンス ....................................... 概要 ....................................................... 91 91 99 100 100 101 本章では、作業環境を設定し、クラウドの全体像を概観するのに役立つ 内容を記載します。 管理目的での OpenStack Dashboard の使 用 クラウドの管理ユーザーとして OpenStack Dashboard を使用して、プ ロジェクト、ユーザー、イメージ、フレーバーの作成および管理を行う ことができます。ユーザーは Image service の設定に応じて、指定さ れたプロジェクト内でイメージを作成/管理したり、共有したりするこ とができます。通常、ポリシーの設定では、管理ユーザーのみがクォー タの設定とサービスの作成/管理を行うことができます。ダッシュボード には 管理 タブがあり、システムパネル と ユーザー管理タブ に分かれ ています。これらのインターフェースにより、システム情報と使用状況 のデータにアクセスすることができるのに加えて、エンドユーザーが実 行可能な操作を設定することもできます。管理ユーザーとしてダッシュ ボードを使用する方法についての詳しい説明は OpenStack 管理ユーザー ガイド を参照してください。 コマンドラインツール 管理には、OpenStack コマンドラインインターフェース (CLI) ツールと OpenStack Dashboard を組み合わせて使用することをお勧めします。他 のクラウドテクノロジーの使用経験のある一部のユーザーは、EC2 互換 API を使用している可能性があります。この API は、ネイティブの API とは若干異なる命名規則を採用しています。この相違点について以下に 説明します。 コマンドラインクライアントは、ディストリビューションのパッケージ からではなく、Python Package Index (PyPI) からインストールする ことを強く推奨します。これは、クライアントの開発が活発に行われて 91 OpenStack 運用ガイド February 1, 2016 おり、オペレーティングシステムのベンダーにより配布されたパッケー ジのバージョンが任意の時点で無効になってしまう可能性が高いためで す。 pip ユーティリティは、PyPI アーカイブからのパッケージインストール の管理に使用するツールで、大半の Linux ディストリビューションの python-pip パッケージに含まれています。各 OpenStack プロジェクト にはそれぞれ独自のクライアントがあります。サイトで実行するサービ スに応じて、以下のパッケージの一部またはすべてをインストールして ください。 • python-novaclient (nova CLI) • python-glanceclient (glance CLI) • python-keystoneclient (keystone CLI) • python-cinderclient (cinder CLI) • python-swiftclient (swift CLI) • python-neutronclient (neutron CLI) ツールの導入 pip を使用して PyPI アーカイブからパッケージをインストール (また はアップグレード) するには、root として以下のコマンドを実行しま す。 # pip install [--upgrade] <package-name> パッケージを削除するには、 # pip uninstall <package-name> もし新しいバージョンのクライアントが必要な場合、-eフラグを指定す ることで、アップストリームのgitリポジトリから直接導入できます。そ の際は、Python egg名を指定しなければいけません。例えば、 # pip install -e \ git+https://git.openstack.org/openstack/python-novaclient#egg=python-novaclient クラウド上で EC2 API をサポートする場合には、ユーザーと同じビュー を表示できるように、euca2ools パッケージまたはその他の EC2 API ツールもインストールする必要があります。EC2 API ベースのツールの 使用に関する内容の大半は本ガイドの対象範囲外となりますが、この ツールで使用する認証情報の取得方法についての説明は記載していま す。 92 OpenStack 運用ガイド February 1, 2016 管理系コマンドラインツール *-manage のコマンドラインツールも複数あります。これらは、プロジェ クトのサービスとともにクラウドコントローラーにインストールされる ので、別途インストールする必要はありません。 • nova-manage • glance-manage • keystone-manage • cinder-manage 前述の CLI ツールとは異なり、*-manage ツールは、/etc/nova/ nova.conf などの設定ファイルへの読み取りアクセスが必要で、かつ OpenStack に対してではなくデータベースに対して直接クエリーを実行 しなければならないため、クラウドコントローラーから root として実 行する必要があります。API エンドポイント. 警告 *-manage ツールの存在は、レガシーの問題です。OpenStack プロジェクトでは、最終的には *-manage ツールの残りの機 能をすべて API ベースのツールに移行することを目標として います。移行が完了するまで、*-manage ツール を必要とす るメンテナンス操作は、クラウドコントローラーノード に SSH 接続して実行する必要があります。 認証情報の取得方法 コマンドラインツールを使用して OpenStack クラウドに対してクエ リーを実行するには、適切な認証情報が必要です。コマンドラインク ライアントで使用する認証のクレデンシャルを取得する最も簡単な方法 は、OpenStack ダッシュボードを使用する方法です。プロジェクト を 選択し、プロジェクトタブをクリックし、コンピュートカテゴリーに あるアクセスとセキュリティ をクリックします。アクセスとセキュリ ティページにおいて、API アクセス タブをクリックして、OpenStack RC ファイルのダウンロード と EC2 認証情報のダウンロード の 2 つ のボタンを表示します。これらのボタンにより、コマンドラインツール がサービスエンドポイントと認証情報の場所を知るのに必要な環境変数 を読み込むために、シェルで元データとして使用することのできるファ イルを生成することができます。ダッシュボードにログインしたユー ザーによって、openrc ファイルのファイル名が決定します (例: demo93 OpenStack 運用ガイド February 1, 2016 openrc.sh)。admin としてログインした場合には、ファイル名は adminopenrc.sh となります。 出力は以下のようになります。 #!/bin/bash # With the addition of Keystone, to use an openstack cloud you should # authenticate against keystone, which returns a **Token** and **Service # Catalog**. The catalog contains the endpoint for all services the # user/tenant has access to--including nova, glance, keystone, swift. # # *NOTE*: Using the 2.0 *auth api* does not mean that compute api is 2.0. # We use the 1.1 *compute api* export OS_AUTH_URL=http://203.0.113.10:5000/v2.0 # With the addition of Keystone we have standardized on the term **tenant** # as the entity that owns the resources. export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57 export OS_TENANT_NAME="test-project" # In addition to the owning entity (tenant), openstack stores the entity # performing the action as the **user**. export OS_USERNAME=demo # With Keystone you pass the keystone password. echo "Please enter your OpenStack Password: " read -s OS_PASSWORD_INPUT export OS_PASSWORD=$OS_PASSWORD_INPUT 警告 この場合には、パスワードがプレーンテキスト形式で保存さ れないのがこの方法の利点となりますが、このスクリプト を元データとして使用したり、実行したりする際には、パス ワードが要求され、その回答は環境変数 OS_PASSWORD に保存 されます。この操作は対話的に実行される必要がある点は、 注意すべき重要なポイントです。 操作を非対話的に行う必要 がある場合には、値をスクリプトに直接に保存することも可 能ですが、その場合にはこのファイルのセキュリティとアク セス権を極めて慎重に管理する必要があります。, EC2 互換のクレデンシャルをダウンロードするには、プロジェクト、コ ンピュート 、アクセスとセキュリティ、API アクセス の順に選択 し、EC2 認証情報のダウンロード ボタンを表示します。このボタンをク リックすると、 サーバーの x509 証明書とシェルスクリプトフラグメン トが含まれた ZIP が生成されます。これらのファイルは、デフォルトの user-openrc とは異なり、クラウドのアイデンティティへのアクセスに 必要なすべての認証情報を含む有効なクレデンシャルなので、セキュリ ティ保護された場所に新規ディレクトリを作成して、そこで ZIP ファイ ルを展開します。cacert.pem、cert.pem、ec2rc.sh、および pk.pem が 含まれているはずです。ec2rc.sh には、以下と似たような内容が記述さ れています: #!/bin/bash 94 OpenStack 運用ガイド February 1, 2016 NOVARC=$(readlink -f "${BASH_SOURCE:-${0}}" 2>/dev/null) ||\ NOVARC=$(python -c 'import os,sys; \ print os.path.abspath(os.path.realpath(sys.argv[1]))' "${BASH_SOURCE:-${0}}") NOVA_KEY_DIR=${NOVARC%/*} export EC2_ACCESS_KEY=df7f93ec47e84ef8a347bbb3d598449a export EC2_SECRET_KEY=ead2fff9f8a344e489956deacd47e818 export EC2_URL=http://203.0.113.10:8773/services/Cloud export EC2_USER_ID=42 # nova does not use user id, but bundling requires it export EC2_PRIVATE_KEY=${NOVA_KEY_DIR}/pk.pem export EC2_CERT=${NOVA_KEY_DIR}/cert.pem export NOVA_CERT=${NOVA_KEY_DIR}/cacert.pem export EUCALYPTUS_CERT=${NOVA_CERT} # euca-bundle-image seems to require this alias ec2-bundle-image="ec2-bundle-image --cert $EC2_CERT --privatekey \ $EC2_PRIVATE_KEY --user 42 --ec2cert $NOVA_CERT" alias ec2-upload-bundle="ec2-upload-bundle -a $EC2_ACCESS_KEY -s \ $EC2_SECRET_KEY --url $S3_URL --ec2cert $NOVA_CERT" EC2 認証情報を環境に適用するには、ec2rc.sh ファイルを元データとし ます。 API コールの検査 コマンドラインツールに --debug フラグを渡すことにより、実行する OpenStack API コールを表示することができます。 例えば、以下のよう になります。 # nova --debug list この例は、クライアントからのHTTPリクエストとエンドポイントからの レスポンスを表示しています。これはOpenStack APIを使ったカスタム ツールを作る際に役立ちます。 cURL を使用したさらなる検査 コマンドラインツールの使用の根底にあるのは、HTTP を介して実行する RESTful API である OpenStack API です。API と直接対話を行いたい場 合や、CLI ツールにバグがあることが疑われるために使用する必要があ る場合があります。この場合の最善の対処方法は、 cURL と jq などの 他のツールを組み合わせて使用し、その応答から JSON を解析すること です。 まずはじめに、クラウドの認証が必要です。あなたの認証情報を用い て認証トークンを入手してください。 認証情報はユーザー名、パスワード、テナント (プロジェクト) の組み 合わせです。これらの値は、前述の openrc.sh から抽出することがで きます。トークンにより、要求ごとに再認証する必要なく他のエンドポ イントとの対話を行うことができます。トークンは通常 24 時間有効で す。期限が切れると、401 (Unauthorized) の応答で警告され、トークン をもう 1 つ要求することができます。 1. それではOpenStack サービスカタログを見てみましょう。 95 OpenStack 運用ガイド February 1, 2016 $ curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \ -d '{"auth": {"passwordCredentials": {"username":"test-user", \ "password":"test-password"}, \ "tenantName":"test-project"}}' \ -H "Content-type: application/json" | jq . 2. JSONレスポンスを読むことで、カタログを把握することができます。 次の要求での作業をより簡単に行うには、環境変数にトークンを保管 します。 $ TOKEN=`curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \ -d '{"auth": {"passwordCredentials": {"username":"test-user", \ "password":"test-password"}, \ "tenantName":"test-project"}}' \ -H "Content-type: application/json" | jq -r .access.token.id` これで、コマンドラインでトークンを $TOKEN として参照できるよう になりました。 3. サービスカタログから、サービスエンドポイント (例: コンピュート) を選択します。要求を試します。例えば、インスタンス (サーバー) の一覧表示を行います。 $ curl -s \ -H "X-Auth-Token: $TOKEN" \ http://203.0.113.10:8774/v2/98333aba48e756fa8f629c83a818ad57/servers | jq . API 要求の構成方法については、OpenStack API Reference を参照して ください。jq を使用した応答についての詳しい説明は jq Manual を参 照してください。 上記の cURL コマンドで使用している -s flag は、進行状況メーターが 表示されないようにするために使用します。cURL コマンドの実行で問題 が生じた場合には、このオプションを削除してください。また、cURL コ マンドのトラブルシューティングを行う場合には、-v フラグを指定して より詳細な出力を表示すると役立ちます。cURL には他にも多数の役立つ 機能があります。全オプションは、man ページで参照してください。 サーバーとサービス 管理者は、利用可能な OpenStack ツールを使用して、OpenStack クラウ ドが全体像を確認する方法がいくつかあります。本項では、クラウドの 概要、形態、サイズ、現在の状態についての情報を取得する方法につい て説明します。 まず、あなたのOpenStackクラウドに属し、稼働しているサーバーを把握 することができます。 # nova-manage service list | sort 96 OpenStack 運用ガイド February 1, 2016 出力は以下のようになります。 Binary nova-cert nova-compute nova-compute nova-compute nova-compute nova-compute nova-conductor nova-consoleauth nova-network nova-scheduler Host cloud.example.com c01.example.com c02.example.com c03.example.com c04.example.com c05.example.com cloud.example.com cloud.example.com cloud.example.com cloud.example.com Zone nova nova nova nova nova nova nova nova nova nova Status State Updated_At enabled :-) 2013-02-25 19:32:38 enabled :-) 2013-02-25 19:32:35 enabled :-) 2013-02-25 19:32:32 enabled :-) 2013-02-25 19:32:36 enabled :-) 2013-02-25 19:32:32 enabled :-) 2013-02-25 19:32:41 enabled :-) 2013-02-25 19:32:40 enabled :-) 2013-02-25 19:32:36 enabled :-) 2013-02-25 19:32:32 enabled :-) 2013-02-25 19:32:33 出力には、5 つのコンピュートノードと 1 つのクラウドコントローラー が表示されています。スマイリーフェイス :-) が見えます。これはサー ビスが稼働中であることを示しています。サービスが利用できなくなる と、:-) のシンボルが XXX に変わります。これは、サービスが停止し ている理由をトラブルシューティングする必要があることを示していま す。 cinder を使用している場合は、次のコマンドを実行して同様の一覧を表 示します。 # cinder-manage host list | sort host c01.example.com c02.example.com c03.example.com c04.example.com c05.example.com cloud.example.com zone nova nova nova nova nova nova これら2つの表で、どのサーバーとサービスがあなたのクラウドを構成し ているのか、概要を知ることができました。 また、Identity (keystone) を使用してクラウドで利用可能なサービス と、サービス用に設定済みのエンドポイントを確認することもできま す。 以下のコマンドを実行するには、管理系の変数を正しく設定したシェル 環境が必要です。 $ openstack catalog list +----------+------------+---------------------------------------------------------------------------------+ | Name | Type | Endpoints | +----------+------------+---------------------------------------------------------------------------------+ | nova | compute | RegionOne | | | | publicURL: http://192.168.122.10:8774/v2/9faa845768224258808fc17a1bb27e5e | | | | internalURL: http://192.168.122.10:8774/v2/9faa845768224258808fc17a1bb27e5e | | | | adminURL: http://192.168.122.10:8774/v2/9faa845768224258808fc17a1bb27e5e | | | | | | cinderv2 | volumev2 | RegionOne | | | | publicURL: http://192.168.122.10:8776/v2/9faa845768224258808fc17a1bb27e5e | | | | internalURL: http://192.168.122.10:8776/v2/9faa845768224258808fc17a1bb27e5e | | | | adminURL: http://192.168.122.10:8776/v2/9faa845768224258808fc17a1bb27e5e | | | | | 97 OpenStack 運用ガイド February 1, 2016 上記の出力は、2 つのサービスのみを表示するようにカットされていま す。クラウドが提供するサービスごとにサービスエントリーが 1 つ表示 されているのがわかります。エンドポイントタイプによってエンドポイ ントドメインが異なる場合がある点に注意してください。タイプによっ てエンドポイントドメインを別にする必要はありませんが、エンドポイ ントのプライバシーやネットワークトラフィックの分離などの異なる理 由で分けることができます。 インストールされている Compute のバージョンを確認するには、novamanagecommand を使用することができます: # nova-manage version コンピュートノードの診断 実行中の仮想マシンの CPU 使用状況、メモリー、ディスク I/O、ネット ワーク I/O などの追加情報を取得するには、nova diagnostics コマン ドにサーバー ID を指定して実行します: $ nova diagnostics <serverID> ハイパーバイザーによってサポートする属性が異なるため、コマンドの 出力はハイパーバイザーによって異なります。 以下の実例は、最もよく 使用されている 2 つのハイパーバイザーの間で出力がどのように異なる かを示しています。ハイパーバイザーが Xen の場合の例は以下のように なります: +----------------+-----------------+ | Property | Value | +----------------+-----------------+ | cpu0 | 4.3627 | | memory | 1171088064.0000 | | memory_target | 1171088064.0000 | | vbd_xvda_read | 0.0 | | vbd_xvda_write | 0.0 | | vif_0_rx | 3223.6870 | | vif_0_tx | 0.0 | | vif_1_rx | 104.4955 | | vif_1_tx | 0.0 | +----------------+-----------------+ このコマンドは、libvirt によって管理されている任意のハイパーバイ ザー (例: KVM、QEMU、LXC) で機能するはずですが、KVM でのみテスト 済みです。ハイパーバイザーが KVM の場合の例は以下のようになります 98 OpenStack 運用ガイド February 1, 2016 +------------------+------------+ | Property | Value | +------------------+------------+ | cpu0_time | 2870000000 | | memory | 524288 | | vda_errors | -1 | | vda_read | 262144 | | vda_read_req | 112 | | vda_write | 5606400 | | vda_write_req | 376 | | vnet0_rx | 63343 | | vnet0_rx_drop | 0 | | vnet0_rx_errors | 0 | | vnet0_rx_packets | 431 | | vnet0_tx | 4905 | | vnet0_tx_drop | 0 | | vnet0_tx_errors | 0 | | vnet0_tx_packets | 45 | +------------------+------------+ ネットワークの検査 クラウドでどの Fixed IP ネットワークが設定されているかを確認する には、 nova コマンドラインクライアントを使用して IP アドレスの範 囲を取得することができます: $ nova network-list +--------------------------------------+--------+--------------+ | ID | Label | Cidr | +--------------------------------------+--------+--------------+ | 3df67919-9600-4ea8-952e-2a7be6f70774 | test01 | 10.1.0.0/24 | | 8283efb2-e53d-46e1-a6bd-bb2bdef9cb9a | test02 | 10.1.1.0/24 | +--------------------------------------+--------+--------------+ nova-manage ツールは、追加の情報を提供することが可能です: # nova-manage network list id IPv4 IPv6 start address DNS1 DNS2 VlanID project 1 10.1.0.0/24 None 10.1.0.3 None None 300 2725bbd 2 10.1.1.0/24 None 10.1.1.3 None None 301 none uuid beacb3f2 d0b1a796 この出力は、2 つのネットワークが設定されており、各ネットワークに は 255 の IP アドレス (/24 サブネットが 1 つ) が含まれていること を示しています。1 番目のネットワークは、特定のプロジェクトに割り 当て済みですが、2 番目のネットワークはまだ割り当てができる状態で す。このネットワークは手動で割り当てることができます。手動での割 り当てを行わなかった場合には、プロジェクトで最初のインスタンスが 起動されたときに自動で割り当てられます。 99 OpenStack 運用ガイド February 1, 2016 クラウドに利用可能な Floating IP アドレスがあるかどうかを確認する には、以下のコマンドを実行します。 # nova-manage floating list 2725bb...59f43f 1.2.3.4 None nova vlan20 None 1.2.3.5 48a415...b010ff nova vlan20 この場合は、2 つの Floating IP アドレスが利用可能です。最初の IP アドレスはプロジェクトに確保されていますが、もう一方は確保されて いません。 ユーザーとプロジェクト クラウドに追加されたプロジェクトの一覧を確認するには、以下のコマ ンドを実行します: $ openstack project list +----------------------------------+--------------------+ | ID | Name | +----------------------------------+--------------------+ | 422c17c0b26f4fbe9449f37a5621a5e6 | alt_demo | | 5dc65773519248f3a580cfe28ba7fa3f | demo | | 9faa845768224258808fc17a1bb27e5e | admin | | a733070a420c4b509784d7ea8f6884f7 | invisible_to_admin | | aeb3e976e7794f3f89e4a7965db46c1e | service | +----------------------------------+--------------------+ ユーザーのリストを見るためには、 $ openstack user list +----------------------------------+----------+ | ID | Name | +----------------------------------+----------+ | 5837063598694771aedd66aa4cddf0b8 | demo | | 58efd9d852b74b87acc6efafaf31b30e | cinder | | 6845d995a57a441f890abc8f55da8dfb | glance | | ac2d15a1205f46d4837d5336cd4c5f5a | alt_demo | | d8f593c3ae2b47289221f17a776a218b | admin | | d959ec0a99e24df0b7cb106ff940df20 | nova | +----------------------------------+----------+ 注記 ユーザーとグループは、一対一でマッピングさ れる場合があります。このようなマッピングは cinder、glance、nova、swift などの標準システムアカウン トや、グループにユーザーが 1 人しかいない場合に発生しま す。 稼働中のインスタンス 実行中のインスタンスを確認するには、以下のコマンドを実行します: $ nova list --all-tenants 100 OpenStack 運用ガイド February 1, 2016 +-----+------------------+--------+-------------------------------------------+ | ID | Name | Status | Networks | +-----+------------------+--------+-------------------------------------------+ | ... | Windows | ACTIVE | novanetwork_1=10.1.1.3, 199.116.232.39 | | ... | cloud controller | ACTIVE | novanetwork_0=10.1.0.6; jtopjian=10.1.2.3 | | ... | compute node 1 | ACTIVE | novanetwork_0=10.1.0.4; jtopjian=10.1.2.4 | | ... | devbox | ACTIVE | novanetwork_0=10.1.0.3 | | ... | devstack | ACTIVE | novanetwork_0=10.1.0.5 | | ... | initial | ACTIVE | nova_network=10.1.7.4, 10.1.8.4 | | ... | lorin-head | ACTIVE | nova_network=10.1.7.3, 10.1.8.3 | +-----+------------------+--------+-------------------------------------------+ 残念ながら、このコマンドは、インスタンスを実行しているコンピュー トノードやインスタンスのフレーバーなどのような、実行中のインスタ ンスについての多様な情報は提供しません。個別のインスタンスについ ての詳しい情報を確認するには以下のコマンドを使用してください: $ nova show <uuid> 例えば、 # nova show 81db556b-8aa5-427d-a95c-2a9a6972f630 +-------------------------------------+-----------------------------------+ | Property | Value | +-------------------------------------+-----------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-SRV-ATTR:host | c02.example.com | | OS-EXT-SRV-ATTR:hypervisor_hostname | c02.example.com | | OS-EXT-SRV-ATTR:instance_name | instance-00000029 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2013-02-13T20:08:36Z | | flavor | m1.small (6) | | hostId | ... | | id | ... | | image | Ubuntu 12.04 cloudimg amd64 (...) | | key_name | jtopjian-sandbox | | metadata | {} | | name | devstack | | novanetwork_0 network | 10.1.0.5 | | progress | 0 | | security_groups | [{u'name': u'default'}] | | status | ACTIVE | | tenant_id | ... | | updated | 2013-02-13T20:08:59Z | | user_id | ... | +-------------------------------------+-----------------------------------+ この出力は、devstack という名前のインスタンスが Ubuntu 12.04 イ メージから m1.small のフレーバーで作成され、コンピュートノード c02.example.com でホストされていることを示しています。 概要 クラウドとの対話や有用な情報の抽出の方法など、作業環境の概観を確 認する手順を簡単にご紹介しました。役立てていただければ幸いです。 ここで説明した内容よりもさらに詳しい情報は、クラウドの全コマンド 101 OpenStack 運用ガイド February 1, 2016 ライン機能についての参考資料として管理ユーザーガイドを参照してく ださい。 102 OpenStack 運用ガイド February 1, 2016 第9章 プロジェクトとユーザーの 管理 プロジェクトかテナントか? .................................. プロジェクトの管理 ......................................... クォータ ................................................... ユーザー管理 ............................................... 新規ユーザーの作成 ......................................... プロジェクトへのユーザーの割り当て .......................... 概要 ....................................................... 103 104 106 116 116 118 123 OpenStack クラウドは、ユーザーなしでは特に価値はありません。本章 では、ユーザー、プロジェクト、クォータの管理に関するトピックを記 載します。また、OpenStack Identity API のバージョン 2 で説明され ているように、ユーザーとプロジェクトについても説明します。 警告 Identity API バージョン 3 が利用できますが、クライアン トツールにはこれらの呼び出しがまだ実装されておらず、多 くの OpenStack クラウドは Identity API v2.0 を実装して います。 プロジェクトかテナントか? OpenStack ユーザーインターフェースとドキュメントでは、ユーザーの グループは プロジェクト または テナント と呼ばれます。これらの用 語は同義です。 OpenStack Compute の初期実装は独自の認証システムを持ち、プロ ジェクトという用語を使用していました。認証が OpenStack Identity (Keystone) プロジェクトに移行したとき、ユーザーのグループを参照 するためにテナントという用語が使用されました。このような経緯のた め、いくつかの OpenStack ツールはプロジェクトを使用し、いくつかは テナントを使用します。 ヒント このガイドはプロジェクトという用語を使用します。テナン トという用語を使用するツールとやりとりする例もありま す。 103 OpenStack 運用ガイド February 1, 2016 プロジェクトの管理 ユーザーは、多数のプロジェクトに所属することは可能ですが、最低で も 1 つのプロジェクトと関連付ける必要があります。そのため、ユー ザー追加の前にプロジェクトを 1 つ追加しておく必要があります。 プロジェクトの追加 OpenStack Dashboard でプロジェクトを作成します。 1. 管理ユーザーとしてログインします。 2. 左側にあるナビゲーションバーの ユーザー管理 タブを選択します。 3. ユーザー管理タブの プロジェクト をクリックします。 4. プロジェクトの作成 ボタンをクリックします。 プロジェクト名および任意の説明 (推奨) が要求されます。フォームの 一番下のチェックボックスを選択してこのプロジェクトを有効にしま す。図9.1「Dashboard のプロジェクトの作成フォーム」 [105]のよう に、デフォルトでは、有効になっています。 104 OpenStack 運用ガイド February 1, 2016 図9.1 Dashboard のプロジェクトの作成フォーム プロジェクトメンバーの追加やプロジェクトのクォータの調節も可能で す。このようなアクションについては後ほど説明しますが、実際にこれ らの操作を扱うと非常に便利です。 コマンドラインからのプロジェクト追加する場合、OpenStack コマンド ラインクライアントを使用する必要があります。 # openstack project create demo このコマンドは、demo という名前のプロジェクトを作成します。オプ ションで、--description tenant-description を追加することで、説 105 OpenStack 運用ガイド February 1, 2016 明の文字列を追加することができ、非常に便利です。また、コマンド に --disable を追加して、グループを無効な状態で作成することもでき ます。デフォルトでは、有効化された状態でプロジェクトが作成されま す。 クォータ システムの容量が通知なしに完全に消費されないように、クォータ を 設定することができます。クォータとは、運用上の制限値です。たとえ ば、各テナントに許容される容量 (GB) を制御して、単一のテナントで 全ディスク容量すべてが消費されないようにします。現在、ユーザーレ ベルではなく、テナント (またはプロジェクト) レベルで、クォータを 有効にすることができます。 警告 妥当なクォータがないと、単一のテナントが利用可能なリ ソースをすべて使用してしまう可能性があるため、デフォル トのクォータが OpenStack には含まれています。お使いの ハードウェア機能には、どのクォータ設定が適切か注意して ください。 コマンドラインインターフェースを使って、OpenStack Compute と Block Storage のクォータを管理できます。 テナントには、10 個を超える Block Storage ボリュームまたはコン ピュートノードで 1 TB 以上が必要であるため、通常クラウドのオペ レーターはデフォルト値を変更します。 注記 全てのテナントを表示するには、以下のコマンドを実行しま す。 $ openstack project list +---------------------------------+----------+ | ID | Name | +---------------------------------+----------+ | a981642d22c94e159a4a6540f70f9f8 | admin | | 934b662357674c7b9f5e4ec6ded4d0e | tenant01 | | 7bc1dbfd7d284ec4a856ea1eb82dca8 | tenant02 | | 9c554aaef7804ba49e1b21cbd97d218 | services | +---------------------------------+----------+ 106 OpenStack 運用ガイド February 1, 2016 イメージクォータの設定 プロジェクトのイメージ保存容量を合計バイト数で制限できます。現 在、このクォータはクラウド全体に適用されます。そのため、イメージ のクォータを 5 GB に設定する場合、クラウドの全プロジェクトが、5 GB 以内のイメージやスナップショットのみを保存できます。 この機能を有効にするには、/etc/glance/glance-api.conf ファイルを 編集して [DEFAULT] セクションに以下を追加します。 user_storage_quota = <bytes> たとえば、プロジェクトのイメージストレージを 5GB に制限するには、 以下を実行します。 user_storage_quota = 5368709120 注記 イメージごとに許可されるメンバーの数を制限す る、glance-api.conf の設定オプションがあります。これ は、image_member_quota であり、デフォルトで 128 です。 その設定は、保存容量のクォータとは別のクォータです。 コンピュートサービスのクォータの設定 管理ユーザーは、既存のテナントの Compute のクォータを更新できま す。また、新規テナントのクォータのデフォルト値を更新することもで きます。 表9.1「Compute のクォータの説明」 [107] を参照してくださ い。 表9.1 Compute のクォータの説明 クォータ 説明 プロパティ名 固定 IP テナント毎の固定 IP アドレスの最大 数。この数はテナント毎の最大インスタ ンス数以上にしなければなりません。 fixed-ips Floating IP テナントごとの最大 Floating IP 数 floating-ips 注入ファイルの injected file あたりの最大バイト数 コンテンツ (バイ ト) injected-file-content-bytes 注入ファイルのパ injected file のパス長の最大バイト数 ス (バイト) injected-file-path-bytes 注入ファイル injected file の最大数 injected-files インスタンス テナントごとの最大インスタンス数 instances 107 OpenStack 運用ガイド February 1, 2016 クォータ 説明 プロパティ名 キーペア ユーザーごとの最大キーペア数 key-pairs メタデータ項目 インスタンスごとのメタデータ項目数 metadata-items メモリー テナントごとのインスタンスの RAM 容量 ram (メガバイト単位) セキュリティグ ループルール セキュリティグループごとのセキュリ ティルール数 security-group-rules セキュリティグ ループ テナントごとのセキュリティグループ数 security-groups 仮想 CPU テナントごとのインスタンスのコア数 cores テナント (プロジェクト) のコンピュートクォータの表示/ 更新 管理ユーザーは nova quota-* コマンドを使って、テナントのクォータ を表示したり更新したりできます。コマンドは python-novaclient パッ ケージに含まれます。 デフォルトのクォータ値の表示と更新 1. 全テナントに対するクォータのデフォルト値を全て表示するには、 以下のようにします。 $ nova quota-defaults 例えば $ nova quota-defaults +-----------------------------+-------+ | Property | Value | +-----------------------------+-------+ | metadata_items | 128 | | injected_file_content_bytes | 10240 | | ram | 51200 | | floating_ips | 10 | | key_pairs | 100 | | instances | 10 | | security_group_rules | 20 | | injected_files | 5 | | cores | 20 | | fixed_ips | -1 | | injected_file_path_bytes | 255 | | security_groups | 10 | +-----------------------------+-------+ 2. 新規テナントに対するクォータのデフォルト値を更新するには、以 下のようにします。 108 OpenStack 運用ガイド February 1, 2016 $ nova quota-class-update default key value 例えば $ nova quota-class-update default --instances 15 109 OpenStack 運用ガイド February 1, 2016 テナント (プロジェクト) のクォータ値の表示 1. テナント ID を変数に格納します。 $ tenant=$(openstack project list | awk '/tenantName/ {print $2}') 2. テナントの現在のクォータ値を一覧表示します。 $ nova quota-show --tenant $tenant 例えば $ nova quota-show --tenant $tenant +-----------------------------+-------+ | Property | Value | +-----------------------------+-------+ | metadata_items | 128 | | injected_file_content_bytes | 10240 | | ram | 51200 | | floating_ips | 12 | | key_pairs | 100 | | instances | 10 | | security_group_rules | 20 | | injected_files | 5 | | cores | 20 | | fixed_ips | -1 | | injected_file_path_bytes | 255 | | security_groups | 10 | +-----------------------------+-------+ テナント (プロジェクト) のクォータ値の更新 1. テナント ID を取得します。 $ tenant=$(openstack project list | awk '/tenantName/ {print $2}') 2. 指定したクォータ値を更新します。 # nova quota-update --quotaName quotaValue tenantID 例えば # nova quota-update --floating-ips 20 $tenant # nova quota-show --tenant $tenant +-----------------------------+-------+ | Property | Value | +-----------------------------+-------+ | metadata_items | 128 | | injected_file_content_bytes | 10240 | | ram | 51200 | | floating_ips | 20 | 110 OpenStack 運用ガイド February 1, 2016 | key_pairs | 100 | | instances | 10 | | security_group_rules | 20 | | injected_files | 5 | | cores | 20 | | fixed_ips | -1 | | injected_file_path_bytes | 255 | | security_groups | 10 | +-----------------------------+-------+ 注記 以下を実行して、quota-update コマンドのオプションリ ストを表示します。 $ nova help quota-update Object Storage のクォータの設定 現在、Object Storage に対する 2 種類のクォータがあります。 コンテナーの クォータ 1 つのコンテナーに保存できる、オブジェクトの容量 (バイト単位) や個数の合計を制限します。 アカウントの クォータ ユーザーが Object Storage サービス で利用できる合計 容量 (バイト単位) を制限します。 コンテナーのクォータやアカウントのクォータの利点を得るため に、Object Storage のプロキシーサーバーが container_quotas や account_quotas (または両方) を [pipeline:main] パイプラインに追 加するする必要があります。各クォータの種類は、proxy-server.conf ファイルにそれ自身のセクションも必要とします。 [pipeline:main] pipeline = catch_errors [...] slo dlo account_quotas proxy-server [filter:account_quotas] use = egg:swift#account_quotas [filter:container_quotas] use = egg:swift#container_quotas Object Storage クォータを表示および更新するためには、pythonswiftclient パッケージにより提供される swift コマンドを使用しま す。プロジェクト内のユーザーは誰でも、そのプロジェクトに設定さ れているクォータを表示できます。プロジェクトの Object Storage 111 OpenStack 運用ガイド February 1, 2016 クォータを更新する場合、クォータを適用するプロジェクトにおいて ResellerAdmin ロールを持つ必要があります。 112 OpenStack 運用ガイド February 1, 2016 プロジェクトのアカウントのクォータを表示します。 $ swift stat Account: AUTH_b36ed2d326034beba0a9dd1fb19b70f9 Containers: 0 Objects: 0 Bytes: 0 Meta Quota-Bytes: 214748364800 X-Timestamp: 1351050521.29419 Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes プロジェクトのアカウントのクォータを適用または更新します。 $ swift post -m quota-bytes: <bytes> 例として、アカウントに 5 GB のクォータを設定します。 $ swift post -m quota-bytes: 5368709120 再び swift stat コマンドを実行して、クォータを検証します。 $ swift stat Account: AUTH_b36ed2d326034beba0a9dd1fb19b70f9 Containers: 0 Objects: 0 Bytes: 0 Meta Quota-Bytes: 5368709120 X-Timestamp: 1351541410.38328 Content-Type: text/plain; charset=utf-8 Accept-Ranges: bytes Block Storage のクォータの設定 管理ユーザーは、既存のテナントの Block Storage のクォータを更新で きます。また、新規テナントのクォータのデフォルト値を更新すること もできます。表9.2「Block Storage のクォータの説明」 [113] を参照 してください。 表9.2 Block Storage のクォータの説明 プロパティ名 説明 gigabytes テナントごとのボリューム容量の最大値(単位はギガバイト) snapshots テナントごとのブロックストレージスナップショット数 volumes テナントごとのブロックストレージボリューム数 113 OpenStack 運用ガイド February 1, 2016 114 OpenStack 運用ガイド February 1, 2016 Block Storage サービスのテナント (プロジェクト) の クォータの表示と更新 管理ユーザーは cinder quota-* コマンドを使って、テナントのクォー タを表示したり更新したりできます。コマンドは python-cinderclient パッケージに含まれます。 Block Storage のデフォルトのクォータ値の表示と更新 1. 全テナントに対するクォータのデフォルト値を全て表示するには、 以下のようにします。 $ cinder quota-defaults 例えば $ cinder quota-defaults +-----------+-------+ | Property | Value | +-----------+-------+ | gigabytes | 1000 | | snapshots | 10 | | volumes | 10 | +-----------+-------+ 2. 新規テナントのクォータのデフォルト値を更新するには、/etc/ cinder/cinder.conf ファイルの対応する項目を更新します。 プロジェクトの Block Storage クォータの表示方法 • 特定のテナントのクォータを表示するには以下のようにします。 # cinder quota-show tenantName 例えば # cinder quota-show tenant01 +-----------+-------+ | Property | Value | +-----------+-------+ | gigabytes | 1000 | | snapshots | 10 | | volumes | 10 | +-----------+-------+ プロジェクトの Block Storage クォータの更新方法 1. テナント ID を変数に格納します。 115 OpenStack 運用ガイド February 1, 2016 $ tenant=$(openstack project list | awk '/tenantName/ {print $2}') 2. 指定したクォータ値を更新します。 # cinder quota-update --quotaName NewValue tenantID 例: # cinder quota-update --volumes 15 $tenant # cinder quota-show tenant01 +-----------+-------+ | Property | Value | +-----------+-------+ | gigabytes | 1000 | | snapshots | 10 | | volumes | 15 | +-----------+-------+ ユーザー管理 直接コマンドラインツールを使ってユーザーを管理することは面倒で す。一つの作業を完了するために、複数のコマンドを実行する必要があ ります。多くの項目に対して、シンボル名の代わりに UUID を使用しま す。現実的に、人間はこれらのツールをそのまま使用しません。幸運な ことに、OpenStack dashboard が便利なインターフェースを提供してい ます。さらに、多くのサイトは個別の要求を満たすために独自ツールを 作成し、サイト固有のポリシーを適用し、パッケージツールでは実現で きないレベルのセルフサービスをユーザーに提供しています。 新規ユーザーの作成 ユーザーを作成するには、以下の情報が必要です。 • ユーザー名 • 電子メールアドレス • パスワード • 主プロジェクト • 役割 ユーザー名と電子メールアドレスは見たとおりです。あなたのサイトは 従うべき独自ルールがあるかもしれません。主プロジェクトは単にユー 116 OpenStack 運用ガイド February 1, 2016 ザーが割り当てられる最初のプロジェクトです。ユーザーを作成する前 に存在している必要があります。役割は多くの場合ずっと "メンバー" のままになります。標準の状態で、OpenStack は次の 2 つの役割が定義 されています。 117 OpenStack 運用ガイド February 1, 2016 member 一般的なユーザー admin すべてのプロジェクトにわたり全権限を持つ管理ユーザー。非 常に注意して使用する必要があります。 他の役割を定義できますが、一般的にはそうしません。 一度この情報を収集すると、ダッシュボードでのユーザーの作成は、こ れまでに見てきた他の Web フォームと同じです。"ユーザー管理" ナビ ゲーションバーの "ユーザー" リンクにあります。そして、右上にある "ユーザーの作成" ボタンをクリックします。 ユーザー情報の変更は、この "ユーザー” ページから実行することも できます。かなり多くのユーザーがいるならば、このページにはたくさ んのユーザーが表示されることでしょう。ページの上部にある "フィル ター" 検索ボックスを使うと、表示されるユーザーの一覧を絞り込むこ とができます。変更しようとしているユーザーの行末にあるアクション ドロップダウンメニューの ”編集” を選択することにより、ユーザー 作成ダイアログと非常に似ているフォームを表示できます。 プロジェクトへのユーザーの割り当て 多くのサイトは一つのプロジェクトのみに割り当てられているユーザー で実行しています。これは、管理者にとってもユーザーにとっても、よ り保守的で分かりやすい選択です。管理の面では、ユーザーからインス タンスやクォータに関する問題の報告があった場合、どのプロジェクト に関するものかが明確です。ユーザーが一つのプロジェクトのみに所属 している場合、ユーザーがどのプロジェクトで操作しているのかを気に する必要がありません。ただし、既定の設定では、どのユーザーも同じ プロジェクトにいる他のユーザーのリソースに影響を与えることができ ることに注意してください。あなたの組織にとって意味があるならば、 ユーザーを複数のプロジェクトに割り当てることも可能です。 既存のユーザーを追加のプロジェクトに割り当てる、または古いプロ ジェクトから削除することは、図9.2「プロジェクトメンバーの編集 タ ブ」 [119] にあるとおり、ダッシュボードのプロジェクトページから、 アクション列のユーザーの変更を選択することにより実行できます。 このビューから、数多くの有用な操作、いくつかの危険な操作を実行で きます。 "すべてのユーザー (All Users)" という見出しが付けられた、この フォームの最初の列に、このプロジェクトにまだ割り当てられていな 118 OpenStack 運用ガイド February 1, 2016 い、クラウドのすべてのユーザーが一覧表示されます。2 列目には、 すべての割り当て済みユーザーが一覧表示されます。これらの一覧は非 常に長い可能性があります。しかし、それぞれの列の上部にあるフィル ターフィールドに、探しているユーザー名の部分文字列を入力すること により、表示を絞り込むことができます。 ここから、プロジェクトにユーザーを追加するには + アイコンをクリッ クします。削除するには - をクリックします。 図9.2 プロジェクトメンバーの編集 タブ 危険な点としては、メンバーの役割を変更する機能があることです。こ れはプロジェクトメンバー 一覧のユーザー名の後ろにあるドロップダ ウンリストです。事実上すべての場合で、この値はメンバーに設定され ています。この例では意図的に、この値が管理者になっている管理ユー ザーを示しています。 警告 管理者はプロジェクトごとではなく、グローバルです。その ため、ユーザーに管理者の役割を与えることにより、クラウ ド全体にわたるユーザー管理権限を与えることになります。 一般的な使用法は、一つのプロジェクトだけに管理ユーザーを所属させ ることです。慣例により、"admin" プロジェクトがクラウド環境のセッ トアップ中に標準で作成されます。管理ユーザーもクラウドを使用して インスタンスの起動、管理を行う場合には、管理アクセスと一般アクセ ス用に別々のユーザーアカウントを使用し、それらのユーザーを別々の プロジェクトにすることを強く推奨します。 119 OpenStack 運用ガイド February 1, 2016 権限のカスタマイズ デフォルトの認可設定では、管理ユーザーのみが他のプロジェクトのリ ソースを作成できます。OpenStack では以下の 2 種類の認可ポリシーを 使うことができます。 120 OpenStack 運用ガイド February 1, 2016 操作ベー ス 特定の操作に対するアクセス基準を指定するポリシー。特定 の属性に対する詳細な制御も可能です。 リソース ベース リソースに対して設定されたパーミッションに基づいて、特 性のリソースに対するアクセスを許可するかを決定する (今 のところネットワークリソースでのみ利用可能)。OpenStack により強制される実際の認可ポリシーは、導入の仕方により 異なります。 ポリシーエンジンは policy.json ファイルから項目を読み込みます。こ のファイルの実際の位置はディストリビューションにより異なります。 一般的に Nova 用の設定ファイルは /etc/nova/policy.json にありま す。システムの実行中に項目を更新でき、サービスを再起動する必要 がありません。今のところ、ポリシーファイルの編集がこのようなポリ シーを更新する唯一の方法です。 OpenStack サービスのポリシーエンジンがポリシーと直接照合を行いま す。ルールはそのようなポリシーの要素の評価を意味します。たとえ ば、compute:create: [["rule:admin_or_owner"]] 文において、ポリ シーは compute:create で、ルールは admin_or_owner です。 ポリシーのいずれかが OpenStack API 操作、もしくは指定された操作で 使用されている特定の属性に一致する場合、ポリシーが OpenStack ポリ シーエンジンにより呼び出されます。たとえば、ユーザーが POST /v2/ {tenant_id}/servers リクエストを OpenStack Compute API サーバー に送信したときに必ず、エンジンが create:compute ポリシーを評価し ます。ポリシーは特定の API 拡張に関連づけることもできます。たとえ ば、ユーザーが compute_extension:rescue のような拡張に対して要求 を行った場合、プロバイダー拡張により定義された属性は、その操作に 対するルールテストを呼び出します。 認可ポリシーは、一つまたは複数のルールにより構成できます。複数の ルールを指定すると、いずれかのルールが成功と評価されれば、評価エ ンジンが成功になります。API 操作が複数のポリシーに一致すると、す べてのポリシーが成功と評価される必要があります。認可ルールは再帰 的にもできます。あるルールにマッチした場合、これ以上展開できない ルールに達するまで、そのルールは別のルールに展開されます。以下の ルールが定義できます。 ロールに基づ いたルール リクエストを出したユーザーが指定された役割を持って いれば、成功と評価されます。たとえば、リクエストを 出しているユーザーが管理者ならば、"role:admin" が 成功します。 項目に基づい たルール 現在のリクエストに指定されたリソースの項目が指定さ れた値と一致すれば、成功と評価されます。たとえば、 121 OpenStack 運用ガイド February 1, 2016 ネットワークリソースの shared 属性が true に設定さ れている場合、"field:networks:shared=True" が成功 します。 一般的なルー ル リソースの属性をユーザーのセキュリティクレデンシャ ルから抽出した属性と比較し、一致した場合に成功と評 価されます。たとえば、リソースのテナント識別子がリ クエストを出したユーザーのテナント識別子と一致すれ ば、"tenant_id:%(tenant_id)s" が成功します。 これは標準の nova policy.json ファイルの抜粋です。 { "context_is_admin": [["role:admin"]], "admin_or_owner": [["is_admin:True"], \ ["project_id:%(project_id)s"]], "default": [["rule:admin_or_owner"]], "compute:create": [ ], "compute:create:attach_network": [ ], "compute:create:attach_volume": [ ], "compute:get_all": [ ], "admin_api": [["is_admin:True"]], "compute_extension:accounts": [["rule:admin_api"]], "compute_extension:admin_actions": [["rule:admin_api"]], "compute_extension:admin_actions:pause": [["rule:admin_or_owner"]], "compute_extension:admin_actions:unpause": [["rule:admin_or_owner"]], ... "compute_extension:admin_actions:migrate": [["rule:admin_api"]], "compute_extension:aggregates": [["rule:admin_api"]], "compute_extension:certificates": [ ], ... "compute_extension:flavorextraspecs": [ ], "compute_extension:flavormanage": [["rule:admin_api"]], } 現在のユーザーが、管理者、またはリクエストで指定されたリソー スの所有者 (テナント識別子が同じ) であれば、成功であると評価 されるルールを表します。 API 操作が policy.json のどのポリシーとも一致しなかった場合 に、必ず評価される規定のポリシーを表します。 インスタンスタイプを操作する権限を、管理 API を使用する管理者 だけに限定するポリシーを表します。 いくつかの場合では、いくつかの操作を管理者のみに制限すべきです。 そこで、次の例では、ユーザーが自分のフレーバーを作成できるように するシナリオの場合に、このサンプルのポリシーファイルをどのように 変更すればよいかを示します。 "compute_extension:flavormanage": [ ], 122 OpenStack 運用ガイド February 1, 2016 他のユーザーに悪影響を与えるユーザー クラウドのユーザーは他のユーザーに悪影響を与える場合があります。 意図的に悪意を持って行わる場合もあれば、偶然起こる場合もありま す。状況を理解することにより、このような混乱に対処する方法につい て、よりよい判断をできるようになります。 例えば、あるユーザーのグループが、非常に計算負荷の高い作業用に大 量のコンピュートリソースを使うインスタンスを持っているとします。 これにより、Compute ノードの負荷が高くなり、他のユーザーに影響を 与えます。この状況では、ユーザーのユースケースを精査する必要があ ります。計算負荷が高いシナリオがよくあるケースだと判明し、ホスト 集約やリージョンなど、クラウドを適切に分割することを計画すべき場 合もあるでしょう。 別の例は、あるユーザーが非常に多くの帯域を消費することです。繰り 返しですが、ユーザーが実行していることを理解することが重要です。 必ず多くの帯域を使用する必要があれば、他のユーザーに影響を与えな いように通信帯域を制限する、または、より多くの帯域を利用可能な別 の場所に移動させる必要があるかもしれません。一方、ユーザーのイン スタンスが侵入され、DDOS 攻撃を行っているボットネットの一部になっ ているかもしれません。この問題の解決法は、ネットワークにある他の サーバーが侵入された場合と同じです。ユーザーに連絡し、対応する時 間を与えます。もし対応しなければ、そのインスタンスを停止します。 最後の例は、ユーザーがクラウドのリソースに繰り返し悪影響を与える 場合です。ユーザーと連絡をとり、何をしようとしているのか理解しま す。ユーザー自身が実行しようとしていることを正しく理解していない 可能性があります。または、アクセスしようとしているリソースに問題 があり、リクエストがキューに入ったり遅れが発生している場合もあり ます。 概要 システム管理の見過ごされがちな大事な要素の一つに、エンドユーザの ためにシステム管理者が存在するという点があります。BOFH (Bastard Operator From Hell; 「地獄から来た最悪の管理者」) の道に入って、 問題の原因となっているユーザーを全員停止させるようなことはしない でください。ユーザーがやりたいことを一緒になって理解し、どうする とあなたの環境がユーザーが目的を達成するのにもっと支援できるかを 見つけてください。ユーザーをプロジェクトの中に組織して、ポリシー を適用して、クォータを管理して、彼らと一緒に作業することにより、 ユーザーのニーズを満たしてください。 123 OpenStack 運用ガイド February 1, 2016 第10章 ユーザーによる運用 イメージ ................................................... フレーバー ................................................. セキュリティグループ ....................................... ブロックストレージ ......................................... Shared File Systems サービス ............................... インスタンス ............................................... セキュリティグループの割り当て ............................. Floating IP ................................................ ブロックストレージの接続 ................................... スナップショットの取得 ..................................... データベースにあるインスタンス ............................. グッドラック! ............................................. 125 128 130 140 142 157 162 162 163 164 169 170 このガイドは OpenStack の運用者向けです。ユーザー向けの膨大なリ ファレンスを目指すものではありません。しかし運用者として、クラウ ド設備を使用する方法について基本的な理解を持つべきです。本章は、 基本的なユーザーの観点から OpenStack を見ていきます。ユーザーが必 要とすることを理解する手助けになります。また、トラブルのチケット を受け取ったときに、ユーザーの問題またはサービスの問題のどちらか を判断する手助けになります。取り扱っている主な概念はイメージ、フ レーバー、セキュリティグループ、ブロックストレージ、共有ファイル システムストレージおよびインスタンスです。 イメージ OpenStack のイメージはしばしば「仮想マシンテンプレート」と考える ことができます。イメージは ISO イメージのような標準的なインストー ルメディアの場合もあります。基本的に、インスタンスを起動するため に使用されるブート可能なファイルシステムを含みます。 イメージの追加 いくつかの構築済みイメージが存在します。簡単に Image service の中 にインポートできます。追加する一般的なイメージは、非常に小さく、 テスト目的に使用される CirrOS イメージです。このイメージを追加す るには、単に次のようにします。 $ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img $ glance image-create --name='cirros image' --is-public=true \ --container-format=bare --disk-format=qcow2 < cirros-0.3.4-x86_64-disk.img 125 OpenStack 運用ガイド February 1, 2016 glance image-create コマンドでは、イメージに指定できる多数のオプ ションが用意されています。たとえば、min-disk オプションは、特定 の容量のルートディスクを必要とするイメージ (例: 大きな Windows イ メージ) のために有用です。これらのオプションを表示するには、次の ようにします: $ glance help image-create location オプションは注意する意味があります。Image service にイ メージ全体のコピーを行わず、そのイメージがある元の位置への参照を 保持します。イメージのインスタンスを起動するとき、Image service が指定された場所からイメージにアクセスします。 copy-from オプションは、指定された位置から /var/lib/glance/images ディレクトリの中にコピーします。例に示されたように STDIN リダイレ クションを使用するときに、同じことが実行されます。 既存のイメージのプロパティを表示するために、以下のコマンドを実行 します。 $ glance image-show <image-uuid> プロジェクト間のイメージの共有 マルチテナントクラウド環境において、ユーザーはときどき、自分のイ メージやスナップショットを他のプロジェクトと共有したいことがあり ます。 これは、イメージの所有者がコマンドラインから glance ツール を使用することによりできます。 以下のように、イメージやスナップショットを他のプロジェクトと共有 します。 1. イメージの UUID を取得します。 $ glance image-list 2. イメージを共有したいプロジェクトの UUID を取得します。残念な がら、非管理者は、これを実行するために keystone コマンドを使 用できません。最も簡単な解決方法は、クラウドの管理者やそのプ ロジェクトのユーザーから UUID を教えてもらうことです。 3. 情報がそろったら、glance コマンドを実行します。 $ glance member-create <image-uuid> <project-uuid> 例えば $ glance member-create 733d1c44-a2ea-414b-aca7-69decf20d810 \ 126 OpenStack 運用ガイド February 1, 2016 771ed149ef7e4b2b88665cc1c98f77ca これで、プロジェクト 771ed149ef7e4b2b88665cc1c98f77ca がイ メージ 733d1c44-a2ea-414b-aca7-69decf20d810 にアクセスできま す。 イメージの削除 イメージを削除する場合、 次のようにします。 $ glance image-delete <image uuid> 注記 イメージを削除しても、そのイメージがベースになっている インスタンスやスナップショットには影響がありません。 他の CLI オプション すべてのオプションは、次のように確認できます。 $ glance help or the Command-Line Interface Reference . Image service とデータベース Image service がデータベースに保存しない唯一のものは、イメージ自 体です。Image service のデータベースは、主要なテーブルが 2 つあり ます。 • images • image_properties データベースと SQL クエリーを直接使うことで、イメージの独自のリス トやレポートを得ることができます。一般には、推奨されませんが、技 術的にはデータベース経由でイメージのプロパティを更新できます。 Image service のデータベースクエリーの例 興味深い例の一つは、イメージとそのイメージの所有者の表の表示内容 を変更することです。これは、所有者のユニーク ID を表示するように するだけで実現できます。この例はさらに一歩進め、所有者の読みやす い形式の名前を表示します: 127 OpenStack 運用ガイド February 1, 2016 mysql> select glance.images.id, glance.images.name, keystone.tenant.name, is_public from glance.images inner join keystone.tenant on glance.images.owner=keystone.tenant.id; もう一つの例は、特定のイメージに関するすべてのプロパティを表示す ることです。 mysql> select name, value from image_properties where id = <image_id> フレーバー 仮想ハードウェアのテンプレートは、OpenStack において「フレー バー」と呼ばれます。メモリー、ディスク、CPU コア数などを定義しま す。デフォルトインストールでは、5 つのフレーバーが存在します。 これらは管理ユーザーにより設定できます。nova-api サーバーにおいて /etc/nova/policy.json の compute_extension:flavormanage にあるア クセス制限を再定義することにより、この権限を他のユーザーに委譲す ることもできます。次のように、お使いのシステムで利用可能なフレー バーの一覧を取得できます。 $ nova flavor-list +-----+-----------+-----------+------+-----------+------+------+-------------+-----------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | | Is_Public | +-----+-----------+-----------+------+-----------+------+------+-------------+-----------+ | 1 | m1.tiny | 512 | 1 | 0 | | 1 | | True | | 2 | m1.small | 2048 | 20 | 0 | | 1 | | True | | 3 | m1.medium | 4096 | 40 | 0 | | 2 | | True | | 4 | m1.large | 8192 | 80 | 0 | | 4 | | True | | 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | | True | +-----+-----------+-----------+------+-----------+------+------+-------------+-----------+ RXTX_Factor 1.0 1.0 1.0 1.0 1.0 nova flavor-create コマンドにより、権限のあるユーザーが新しいフ レーバーを作成できます。さらなるフレーバーの操作コマンドは次のコ マンドを用いて表示できます: $ nova help | grep flavor 128 OpenStack 運用ガイド February 1, 2016 フレーバーは、数多くのパラメーターを定義します。これにより、ユー ザーが実行する仮想マシンの種類を選択できるようになります。ちょ うど、物理サーバーを購入する場合と同じようなことです。表10.1「フ レーバーのパラメーター」 [129] は、設定できる要素の一覧です。とく に extra_specs, に注意してください。これは、メモリー、CPU、ディス クの容量以外にもかなり柔軟に、自由形式で特徴を定義するために使用 できます。 表10.1 フレーバーのパラメーター 項目 説明 ID フレーバー向けの一意な ID (整数や UUID)。 名前 慣習として xx.size_name などの内容を表す名前を使用しますが、必 須ではありません。いくつかのサードパーティツールはその名称に依 存しているかもしれません。 Memory_MB メガバイト単位の仮想マシンメモリー。 ディスク ギガバイト単位の仮想ルートディスク容量。これはベースイメージが コピーされる一時ディスクです。永続的なボリュームからブートする とき、これは使用されません。「0」という容量は特別な値で、一時 ルートボリュームの容量としてベースイメージのネイティブ容量をそ のまま使用することを意味します。 エフェメラル 二次的な一時データディスクの容量を指定します。これは空の、 フォーマットされていないディスクです。インスタンスの生存期間だ け存在します。 スワップ インスタンスに割り当てられるスワップ空間。これはオプションで す。 仮想 CPU インスタンスに存在する仮想 CPU 数。 RXTX_Factor 作成したサーバーが接続されたネットワークにおける定義と異なる帯 域制限を持てるようにするプロパティ。これはオプションです。この 要素はネットワークの rxtx_base プロパティの倍数です。既定の値は 1.0 です (つまり、接続されたネットワークと同じです)。 Is_Public フレーバーがすべてのユーザーに利用可能であるか、プライベートで あるかを示す論理値。プライベートなフレーバーは、現在のテナント をそれらに割り当てません。デフォルトは True です。 extra_specs フレーバーを実行できるコンピュートノードに関する追加の制限。こ れはオプションです。これは、コンピュートノードにおいて対応する キーバリューペアとして実装され、コンピュートノードでの対応する キーバリューペアと一致するものでなければいけません。(GPU ハー ドウェアを持つコンピュートノードのみにおいて実行するフレーバー のように) 特別なリソースのようなものを実装するために使用できま す。 プライベートフレーバー ユーザーが、取り組んでいるプロジェクト向けに独自にチューニングし た、カスタムフレーバーを必要とするかもしれません。例えば、ユー ザーが 128 GB メモリーを必要とするかもしれません。前に記載した 129 OpenStack 運用ガイド February 1, 2016 とおり、新しいフレーバーを作成する場合、ユーザーがカスタムフレー バーにアクセスできるでしょう。しかし、クラウドにある他のすべての クラウドもアクセスできます。ときどき、この共有は好ましくありませ ん。この場合、すべてのユーザーが 128 GB メモリーのフレーバーにア クセスでき、クラウドのリソースが非常に高速に容量不足になる可能性 があります。これを防ぐために、nova コマンドを使用して、カスタムフ レーバーへのアクセスを制限できます。 $ nova flavor-access-add <flavor-id> <project-id> 以下のように、フレーバーのアクセスリストを表示します。 $ nova flavor-access-list <flavor-id> ベストプラクティス フレーバーへのアクセスが制限されると、明示的にアクセス を許可されたプロジェクト以外は、フレーバーを参照できな くなります。これには admin プロジェクトも含まれます。元 のプロジェクトに加えて、きちんと admin プロジェクトを追 加してください。 カスタムフレーバーとプライベートフレーバーに特別な数値 範囲を割り当てることも有用です。UNIX 系システムでは、シ ステムアカウント以外は通常 500 から始まります。同様の方 法をカスタムフレーバーにも使用できます。これは、フレー バーがカスタムフレーバー、プライベートフレーバー、パブ リックフレーバーであるかをクラウド全体で簡単に識別する 役に立ちます。 どのように既存のフレーバーを変更しますか? OpenStack dashboard は、既存のフレーバーを削除し、同じ名前の新し いものを作成することにより、フレーバーを変更する機能を模倣してい ます。 セキュリティグループ OpenStack の新しいユーザーがよく経験する問題が、インスタンスを 起動するときに適切なセキュリティグループを設定できず、その結果、 ネットワーク経由でインスタンスにアクセスできないというものです。 セキュリティグループは、インスタンスのネットワークに適用され る、IP フィルタールールの組です。それらはプロジェクト固有です。 プロジェクトメンバーがそれらのグループの標準ルールを編集でき、新 130 OpenStack 運用ガイド February 1, 2016 しいルールを追加できます。すべてのプロジェクトが "default" セキュ リティグループを持ちます。他のセキュリティグループが定義されてい ないインスタンスには "default" セキュリティグループが適用されま す。"default" セキュリティグループは、ルールを変更しない限り、す べての受信トラフィックを拒否します。 一般的なセキュリティグループの設定 nova.conf のオプション allow_same_net_traffic (標準で true) は、 同じネットワークを共有するホストにルールを適用するかを制御しま す。このオプションはシステム全体に影響するグローバルオプション です。true に設定したとき、同じサブネットにあるホストはフィル ターされず、それらの間ですべての種類の通信が通過できるようにな ります。フラットなネットワークでは、これにより、全プロジェクト の全インスタンスが通信をフィルターされなくなります。VLAN ネット ワークでは、これにより、同じプロジェクト内のインスタンス間でア クセスが許可されます。allow_same_net_traffic が false に設定さ れていると、セキュリティグループがすべての通信に対して強制されま す。この場合、既定のセキュリティグループをそれらのサブネットから のすべての通信を許可するよう設定することにより、プロジェクトが allow_same_net_traffic をシミュレートできます。 ヒント 前の章で述べたとおり、セキュリティグループごとのルール 数は quota_security_group_rules により制御されます。ま た、プロジェクトごとに許可されるセキュリティグループ数 は quota_security_groups クォータにより制御されます。 セキュリティグループのエンドユーザー設定 現在のプロジェクトのセキュリティグループが、OpenStack dashboard の アクセスとセキュリティ にあります。既存のグループの詳細を表示 するには、セキュリティグループの 編集 を選択します。自明ですが、 この 編集 インターフェースから既存のグループを変更できます。新し いグループを作成するための セキュリティグループの作成 ボタンが、 メインの アクセスとセキュリティ ページにあります。同等のコマンド ラインを説明するとき、これらの項目において使用される用語について 説明します。 nova コマンドを用いたセットアップ方法 コマンドラインからは、以下の nova コマンドを使って、現在のプロ ジェクトのセキュリティグループのリストを取得できます: 131 OpenStack 運用ガイド February 1, 2016 $ nova secgroup-list +---------+-------------+ | Name | Description | +---------+-------------+ | default | default | | open | all ports | +---------+-------------+ 「open」セキュリティグループの詳細を表示する方法: $ nova secgroup-list-rules open +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | icmp | -1 | 255 | 0.0.0.0/0 | | | tcp | 1 | 65535 | 0.0.0.0/0 | | | udp | 1 | 65535 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ 標準で拒否されるので、これらのルールはすべて「許可」形式のルール です。1 番目の項目は IP プロトコル (icmp, tcp, udp のどれか) で す。2 番目と 3 番目の項目は対象となるポート番号の範囲を指定しま す。4 番目の項目は CIDR 形式の IP アドレスの範囲を指定します。こ の例では、すべてのプロトコルの全ポート番号について、すべての IP からのトラフィックを許可しています。 新しいセキュリティグループを追加するとき、内容を表す簡潔な名前を つけるべきです。この名前はインスタンスの簡単な説明など、より長い 説明フィールドが使用されないところで使用されます。インスタンスが セキュリティグループ http を使っているのを見れば、bobs_group や secgrp1 よりはずっと理解しやすいことでしょう。 例のとおり、インターネットのどこからでも Web 通信を許可するセキュ リティグループを作成しましょう。このグループを global_http と呼ぶ ことにします。許可されるものと許可されるところを要約した、明白で 簡潔な名前になっています。コマンドラインから以下のようにします。 $ nova secgroup-create \ global_http "allow web traffic from the Internet" +-------------+-------------------------------------+ | Name | Description | +-------------+-------------------------------------+ | global_http | allow web traffic from the Internet | +-------------+-------------------------------------+ これにより、空のセキュリティグループが作成されます。やりたいこと を行うために、いくつかのルールを追加する必要があります。 $ nova secgroup-add-rule <secgroup> <ip-proto> <from-port> <to-port> <cidr> $ nova secgroup-add-rule global_http tcp 80 80 0.0.0.0/0 132 OpenStack 運用ガイド February 1, 2016 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 80 | 80 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ 引数の順番が決まっていることに注意してください。そして、from-port と to-port の引数は許可されるローカルのポート範囲を指定し、接続 の送信元ポートと宛先ポートではないことに注意してください。nova secgroup-add-rule を複数回呼び出すことで、より複雑なルールセット を構成できます。たとえば、http と https の通信を通過させたい場合: $ nova secgroup-add-rule global_http tcp 443 443 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 443 | 443 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ 新しく追加されたルールのみが出力されますが、この操作は追加操作で す: $ nova secgroup-list-rules global_http +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 80 | 80 | 0.0.0.0/0 | | | tcp | 443 | 443 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+ 逆の操作が secgroup-delete-rule です。secgroup-delete-rule のコ マンドラインは同じ形式です。セキュリティグループ全体を secgroupdelete を用いて削除できます。 インスタンスのクラスター向けにセキュリティグループのルールを作成 するために、SourceGroups を使用したいかもしれません。 ソースグループは許可されたソースの CIDR を動的に定義する特別な方 法です。ユーザーがソースグループ (セキュリティグループ名) を指定 します。これにより、指定されたソースグループを使用する、ユーザー の他のインスタンスが動的にすべて選択されます。この動的な選択によ り、クラスターのそれぞれの新しいメンバーを許可する、個別のルール の必要性を軽減できます。 コードはこのような形になります。nova secgroup-add-group-rule <secgroup> <source-group> <ip-proto> <from-port> <to-port>。使用 例は次のとおりです。 $ nova secgroup-add-group-rule cluster global-http tcp 22 22 133 OpenStack 運用ガイド February 1, 2016 "cluster" ルールにより、global-http グループを使用する他のすべて のインスタンスから SSH アクセスが許可されます。 neutron コマンドを用いたセットアップ方法 お使いの環境で Neutron を使用している場合、neutron コマンドを使用 して、セキュリティグループを設定できます。以下のコマンドを使用し て、作業しているプロジェクトのセキュリティグループの一覧を取得し ます。 $ neutron security-group-list +--------------------------------------+---------+-------------+ | id | name | description | +--------------------------------------+---------+-------------+ | 6777138a-deb7-4f10-8236-6400e7aff5b0 | default | default | | 750acb39-d69b-4ea0-a62d-b56101166b01 | open | all ports | +--------------------------------------+---------+-------------+ 「open」セキュリティグループの詳細を表示する方法: $ neutron security-group-show open +---------------------+------------------------------------------------------------------------------------------------+ | Field | Value | +---------------------+------------------------------------------------------------------------------------------------+ | description | all ports | id | | 750acb39-d69b-4ea0-a62d-b56101166b01 | name | open | | | security_group_rules | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "607ec981611a4839b7b06f6dfa81317d", "port_range_max": null, "security_group_id": "750acb39-d69b-4e0-a62d-b56101166b01", 134 OpenStack 運用ガイド February 1, 2016 "port_range_min": null, "ethertype": "IPv4", "id": "361a1b62-95dd-46e1-8639c3b2000aab60"} | | | {"remote_group_id": null, "direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "udp", "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": 65535, "security_group_id": "750acb9-d69b-4ea0-a62d-b56101166b01", "port_range_min": 1, "ethertype": "IPv4", "id": "496ba8b7d96e-4655-920f-068a3d4ddc36"} | | | {"remote_group_id": null, "direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "icmp", "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": null, "security_group_id": "750acb9-d69b-4ea0-a62db56101166b01", "port_range_min": null, "ethertype": "IPv4", "id": "50642a56-3c4e-4b31-9293-0a636759a156"} | | | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "607ec981611a4839b7b06f6dfa81317d", "port_range_max": null, "security_group_id": "750acb39-d69b-4e0-a62d-b56101166b01", "port_range_min": null, "ethertype": "IPv6", "id": "f46f35eb-8581-4ca1-bbc9cf8d0614d067"} | | | {"remote_group_id": null, "direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": 65535, "security_group_id": "750acb9-d69b-4ea0-a62d-b56101166b01", "port_range_min": 1, "ethertype": "IPv4", "id": "fb6f2d5e-8290-4ed8-a23bc6870813c921"} | | tenant_id | 607ec981611a4839b7b06f6dfa81317d | +---------------------+----------------------------------------------------------------------------------------+ デフォルトは拒否なので、これらのルールはすべて「許可」形式のルー ルです。この例は、すべての IP から、すべてのプロトコルの範囲全体 が許可されることを示しています。このセクションは、最も一般的な security-group-rule のパラメーターを説明します。 方向 セキュリティグループルールが適用される通信方 向。有効な値は ingress と egress です。 remote_ip_prefix この属性値は、IP パケットの送信元 IP アドレ スとして、指定された IP プレフィックスと一致 します。 プロトコル The protocol that is matched by the security group rule. Valid values are null, tcp, udp, icmp, and icmpv6. 135 OpenStack 運用ガイド February 1, 2016 port_range_min The minimum port number in the range that is matched by the security group rule. If the protocol is TCP or UDP, this value must be less than or equal to the port_range_max attribute value. If the protocol is ICMP or ICMPv6, this value must be an ICMP or ICMPv6 type, respectively. port_range_max The maximum port number in the range that is matched by the security group rule. The port_range_min attribute constrains the port_range_max attribute. If the protocol is ICMP or ICMPv6, this value must be an ICMP or ICMPv6 type, respectively. ethertype IPv4 または IPv6 である必要があります。CIDR 形式のアドレスが受信ルールまたは送信ルールに 一致する必要があります。 新しいセキュリティグループを追加するとき、内容を表す簡潔な名前を つけるべきです。この名前はインスタンスの簡単な説明など、より長い 説明フィールドが使用されないところで使用されます。インスタンスが セキュリティグループ http を使っているのを見れば、bobs_group や secgrp1 よりはずっと理解しやすいことでしょう。 この例は、インターネットのどこからでも Web 通信を許可するセキュリ ティグループを作成します。このグループを global_http と呼ぶことに します。許可されるものと許可されるところを要約した、明白で簡潔な 名前になっています。コマンドラインから以下のようにします。 $ neutron security-group-create \ global_http --description "allow web traffic from the Internet" Created a new security_group: +---------------------+------------------------------------------------------------------------------------------------+ | Field | Value | +---------------------+------------------------------------------------------------------------------------------------+ | description | allow web traffic from the Internet 136 OpenStack 運用ガイド February 1, 2016 | id | | c6d78d56-7c56-4c82-abcb-05aa9839d1e7 | name | | global_http | | security_group_rules | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": null, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": null, "ethertype": "IPv4", "id": "b2e56b3a-890b-48d3-9380-8a9f6f8b1b36"} | | | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": null, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": null, "ethertype": "IPv6", "id": "153d84ba-651d-45fd-9015-58807749efc5"} | | tenant_id | 341f49145ec7445192dc3c2abc33500d | +---------------------+----------------------------------------------------------------------------------------+ 作成後すぐでは、セキュリティグループは送信ルールのみを許可しま す。やりたいことを行うために、いくつかのルールを追加する必要があ ります。 $ neutron security-group-rule-create [-h] [-f {html,json,json,shell,table,value, yaml,yaml}] [-c COLUMN] [--max-width <integer>] [--noindent] [--prefix PREFIX] [--request-format {json,xml}] [--tenant-id TENANT_ID] [--direction {ingress,egress}] [--ethertype ETHERTYPE] [--protocol PROTOCOL] [--port-range-min PORT_RANGE_MIN] [--port-range-max PORT_RANGE_MAX] [--remote-ip-prefix REMOTE_IP_PREFIX] [--remote-group-id REMOTE_GROUP] 137 OpenStack 運用ガイド February 1, 2016 SECURITY_GROUP $ neutron security-group-rule-create --direction ingress --ethertype IPv4 -protocol tcp --port-range-min 80 --port-range-max 80 --remote-ip-prefix 0.0. 0.0/0 global_http Created a new security_group_rule: +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | direction | ingress | | ethertype | IPv4 | | id | 88ec4762-239e-492b-8583-e480e9734622 | | port_range_max | 80 | | port_range_min | 80 | | protocol | tcp | | remote_group_id | | | remote_ip_prefix | 0.0.0.0/0 | | security_group_id | c6d78d56-7c56-4c82-abcb-05aa9839d1e7 | | tenant_id | 341f49145ec7445192dc3c2abc33500d | +-------------------+--------------------------------------+ より複雑なルールセットは、neutron security-group-rule-create の複 数呼び出しにより構築できます。例えば、HTTP 通信と HTTPS 通信を通 過させたい場合、このようにします。 $ neutron security-group-rule-create --direction ingress --ethertype ipv4 -protocol tcp --port-range-min 443 --port-range-max 443 --remote-ip-prefix 0. 0.0.0/0 global_http Created a new security_group_rule: +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | direction | ingress | | ethertype | IPv4 | | id | c50315e5-29f3-408e-ae15-50fdc03fb9af | | port_range_max | 443 | | port_range_min | 443 | | protocol | tcp | | remote_group_id | | | remote_ip_prefix | 0.0.0.0/0 | | security_group_id | c6d78d56-7c56-4c82-abcb-05aa9839d1e7 | | tenant_id | 341f49145ec7445192dc3c2abc33500d | +-------------------+--------------------------------------+ 新しく追加されたルールのみが出力されますが、この操作は追加操作で す: $ neutron security-group-show global_http +---------------------+------------------------------------------------------------------------------------------------+ 138 OpenStack 運用ガイド | Field February 1, 2016 | Value | +---------------------+----------------------------------------------------------------------------------------+ | description | allow web traffic from the Internet | id | | c6d78d56-7c56-4c82-abcb-05aa9839d1e7 | name | global_http | | | security_group_rules | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": null, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": null, "ethertype": "IPv6", "id": "153d84ba-651d-45fd-9015-58807749efc5"} | | | {"remote_group_id": null, "direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": 80, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": 80, "ethertype": "IPv4", "id": "88ec4762-239e-492b-8583e480e9734622"} | | | {"remote_group_id": null, "direction": "egress", "remote_ip_prefix": null, "protocol": null, "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": null, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": null, "ethertype": "IPv4", "id": "b2e56b3a-890b-48d3-9380-8a9f6f8b1b36"} | | | {"remote_group_id": null, "direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "tenant_id": "341f49145ec7445192dc3c2abc33500d", "port_range_max": 443, "security_group_id": "c6d78d56-7c56-4c82-abcb-05aa9839d1e7", "port_range_min": 443, "ethertype": "IPv4", "id": "c50315e5-29f3-408eae15-50fdc03fb9af"} | | tenant_id | 341f49145ec7445192dc3c2abc33500d 139 OpenStack 運用ガイド February 1, 2016 | +---------------------+------------------------------------------------------------------------------------------------+ 逆の操作が security-group-rule-delete です。security-group-rule ID を指定します。セキュリティグループ全体を security-group-delete を使用して削除できます。 インスタンスのクラスター向けにセキュリティグループのルールを作成 するために、リモートグループ を使用します。 リモートグループは許可されたソースの CIDR を動的に定義する方法で す。ユーザーがリモートグループ (セキュリティグループ名) を指定し ます。これにより、指定されたリモートグループを使用する、ユーザー の他のインスタンスが動的にすべて選択されます。この動的な選択によ り、クラスターのそれぞれの新しいメンバーを許可する、個別のルール の必要性を軽減できます。 コードは、上の security-group-rule-create の例と似ていま す。RemoteGroup を使用するために、--remote-ip-prefix の代わりに --remote-group-id を指定します。例: $ neutron security-group-rule-create --direction ingress \ --ethertype IPv4 --protocol tcp --port-range-min 22 --port-range-max 22 --remote-group-id global_http cluster "cluster" ルールにより、global-http グループを使用する他のすべて のインスタンスから SSH アクセスが許可されます。 ブロックストレージ OpenStack のボリュームは、インスタンスから接続および切断できる、 永続的なブロックストレージデバイスです。ただし、一度に接続できる のは 1 インスタンスだけです。外部ハードディスクと似ています。ネッ トワークファイルシステムやオブジェクトストアがしているような共有 ストレージは提供されません。ブロックデバイス上にファイルシステム を構築し、それをマウントするかどうかは、インスタンス内のオペレー ティングシステムに任されます。 他のリムーバブルディスク技術と同じように、ディスクを取り外す前 に、オペレーティングシステムがそのディスクを使用しないようにする ことが重要です。Linux インスタンスにおいて、一般的にボリュームか らマウントされているすべてのファイルシステムをアンマウントする必 要があります。OpenStack Volume Service は、インスタンスから安全 140 OpenStack 運用ガイド February 1, 2016 にボリュームを取り外すことができるかはわかりません。そのため、指 示されたことを実行します。ボリュームに書き込み中にインスタンスか らボリュームの切断を、ユーザーが Volume Service に指示すると、何 らかのレベルのファイルシステム破損が起きる可能性があります。それ だけでなく、デバイスを使用していたインスタンスの中のプロセスがエ ラーを起こす可能性もあります。 ブロックデバイスにアクセスするために、インスタンスのオペレーティ ングシステムにおいて必要となる手順に、OpenStack 固有の事項はあり ません。初めて使用するときにフォーマットが必要になる、デバイスを 取り外すときに注意する、などが考えられます。固有の事項は、新しい ボリュームを作成し、それらをインスタンスに接続および切断する方法 です。これらの操作は、ダッシュボードの ボリューム ページからすべ て実行できます。または、cinder コマンドラインクライアントを使用し ます。 新しいボリュームを追加する際に必要なのは、名前とギガバイト単位の ボリューム容量だけです。これらを ボリュームの作成 Web フォームに 記入します。または、コマンドラインを使用します: $ cinder create --display-name test-volume 10 これは test-volume という名前の 10GB のボリュームを作成します。既 存のボリュームの一覧を表示するには以下のようにします。それらが接 続されているインスタンスがあれば、インスタンス情報も表示されます: $ cinder list +------------+---------+--------------------+------+------------+-------------+ | ID | Status | Display Name | Size | Volume Type | Attached to | +------------+---------+--------------------+------+------------+-------------+ | 0821...19f | active | test-volume | 10 | None | | +------------+---------+--------------------+------+------------+-------------+ OpenStack Block Storage では、ボリュームのスナップショットを作成 することもできます。これはブロックレベルのスナップショットであ ることを覚えておいてください。これはクラッシュに対する一貫性が あります。そのため、スナップショットが取得されるとき、ボリュー ムがインスタンスに接続されていないことが最良です。ボリュームが 接続されたインスタンスにおいて使用されていなければ、次に良いで す。ボリュームが高負荷にある場合、スナップショットによりファイ ルシステムの不整合が起こる可能性があります。実際、デフォルト設定 では、Volume Service はイメージに接続されたボリュームのスナップ 141 OpenStack 運用ガイド February 1, 2016 ショットを取得しません。ただし、強制的に実行することができます。 ボリュームのスナップショットを取得するには、ダッシュボードの "ボ リューム” ページにおいて、ボリューム名の隣にあるアクション項目か らスナップショットの作成を選択します。または、コマンドラインから 次のようにします: usage: cinder snapshot-create [--force <True|False>] [--display-name <display-name>] [--display-description <display-description>] <volume-id> Add a new snapshot. Positional arguments: <volume-id> ID of the volume to snapshot Optional arguments: --force <True|False> Optional flag to indicate whether to snapshot a volume even if its attached to an instance. (Default=False) --display-name <display-name> Optional snapshot name. (Default=None) --display-description <display-description> Optional snapshot description. (Default=None) 注記 Block Storage ボリュームの更新に関する詳細は、OpenStack エンドユーザーガイドを参照してください。 ブロックストレージの作成エラー ユーザーがボリュームを作成しようとし、すぐにエラー状態になれば、 トラブル解決のために最適な方法は cinder ログファイルをボリューム の UUID で grep することです。まずクラウドコントローラーにあるロ グファイルを調べます。次に、ボリュームを作成しようとしたストレー ジノードのログファイルを調べます: # grep 903b85d0-bacc-4855-a261-10843fc2d65b /var/log/cinder/*.log Shared File Systems サービス Similar to Block Storage, the Shared File System is a persistent storage, called share, that can be used in multi-tenant environments. Users create and mount a share as a remote file system on any machine that allows mounting shares, and has network access to share exporter. This share can then be used for storing, sharing, and exchanging files. The default configuration of the Shared File Systems service depends on the back-end driver 142 OpenStack 運用ガイド February 1, 2016 the admin chooses when starting the Shared File Systems service. For more information about existing back-end drivers, see section "Share Backends" of Shared File Systems service Developer Guide. For example, in case of OpenStack Block Storage based back-end is used, the Shared File Systems service cares about everything, including VMs, networking, keypairs, and security groups. Other configurations require more detailed knowledge of shares functionality to set up and tune specific parameters and modes of shares functioning. Shares are a remote mountable file system, so users can mount a share to multiple hosts, and have it accessed from multiple hosts by multiple users at a time. With the Shared File Systems service, you can perform a large number of operations with shares: • 共有の作成、更新、削除、強制削除 • 共有のアクセスルールの変更、共有状態のリセット • 既存のユーザまたはテナントのクォータを表示します • 共有ネットワークの作成 • 新しい共有種別の作成 • Perform operations with share snapshots: create, change name, create a share from a snapshot, delete • Operate with consistency groups • セキュリティサービスを指定する。 For more information on share management see section “Share management” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide. As to Security services, you should remember that different drivers support different authentication methods, while generic driver does not support Security Services at all (see section “Security services” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). You can create a share in a network, list shares, and show information for, update, and delete a specified share. You can also create snapshots of shares (see section “Share snapshots” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). 143 OpenStack 運用ガイド February 1, 2016 There are default and specific share types that allow you to filter or choose back-ends before you create a share. Functions and behaviour of share type is similar to Block Storage volume type (see section “Share types” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). To help users keep and restore their data, Shared File Systems service provides a mechanism to create and operate snapshots (see section “Share snapshots” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). A security service stores configuration information for clients for authentication and authorization. Inside Manila a share network can be associated with up to three security types (for detailed information see section “Security services” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide): • LDAP • Kerberos • Microsoft Active Directory Shared File Systems service differs from the principles implemented in Block Storage. Shared File Systems service can work in two modes: • Without interaction with share networks, in so called "no share servers" mode. • 共有ネットワークに接続する Networking service is used by the Shared File Systems service to directly operate with share servers. For switching interaction with Networking service on, create a share specifying a share network. To use "share servers" mode even being out of OpenStack, a network plugin called StandaloneNetworkPlugin is used. In this case, provide network information in the configuration: IP range, network type, and segmentation ID. Also you can add security services to a share network (see section “Networking” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). The main idea of consistency groups is to enable you to create snapshots at the exact same point in time from multiple file 144 OpenStack 運用ガイド February 1, 2016 system shares. Those snapshots can be then used for restoring all shares that were associated with the consistency group (see section “Consistency groups” of chapter “Shared File Systems” in OpenStack Cloud Administrator Guide). Shared File System storage allows administrators to set limits and quotas for specific tenants and users. Limits are the resource limitations that are allowed for each tenant or user. Limits consist of: • レートリミット • 絶対制限 Rate limits control the frequency at which users can issue specific API requests. Rate limits are configured by administrators in a config file. Also, administrator can specify quotas also known as max values of absolute limits per tenant. Whereas users can see only the amount of their consumed resources. Administrator can specify rate limits or quotas for the following resources: • Max amount of space awailable for all shares 共有の最大数 共有ネットワークの最大数 共有のスナップショットの最大数 すべてのスナップショットの合計数 Type and number of API calls that can be made in a specific time interval User can see his rate limits and absolute limits by running commands manila rate-limits and manila absolute-limits respectively. For more details on limits and quotas see subsection "Quotas and limits" of "Share management" section of OpenStack Cloud Administrator Guide document. このセクションは、主要な Shared File Systems サービスの機能を説明 するために、いくつかの重要なユースケースを示します。 • 共有の作成 • 共有の運用 145 OpenStack 運用ガイド February 1, 2016 • 共有へのアクセス権の管理 • スナップショットの作成 • 共有ネットワークの作成 • 共有ネットワークの管理 注記 Shared File Systems service cannot warn you beforehand if it is safe to write a specific large amount of data onto a certain share or to remove a consistency group if it has a number of shares assigned to it. In such a potentially erroneous situations, if a mistake happens, you can expect some error message or even failing of shares or consistency groups into an incorrect status. You can also expect some level of system corruption if a user tries to unmount an unmanaged share while a process is using it for data transfer. 共有の作成 In this section, we examine the process of creating a simple share. It consists of several steps: • Check if there is an appropriate share type defined in the Shared File Systems service • If such a share type does not exist, an Admin should create it using manila type-create command before other users are able to use it • Using a share network is optional. However if you need one, check if there is an appropriate network defined in Shared File Systems service by using manila share-network-list command. For the information on creating a share network, see 「共有ネット ワークの作成」 [154] below in this chapter. • Create a public share using manila create • Make sure that the share has been created successfully and is ready to use (check the share status and see the share export location) 146 OpenStack 運用ガイド February 1, 2016 Below is the same whole procedure described step by step and in more detail. 注記 Before you start, make sure that Shared File Systems service is installed on your OpenStack cluster and is ready to use. By default, there are no share types defined in Shared File Systems service, so you can check if a required one has been already created: $ manila type-list +------+--------+-----------+-----------+---------------------------------+----------------------+ | ID | Name | Visibility| is_default| required_extra_specs | optional_extra_specs | +------+--------+-----------+-----------+---------------------------------+----------------------+ | c0...| default| public | YES | driver_handles_share_servers:True| snapshot_support:True| +------+--------+-----------+-----------+---------------------------------+----------------------+ If the share types list is empty or does not contain a type you need, create the required share type using this command: $ manila type-create netapp1 False --is_public True This command will create a public share with the following parameters: name = netapp1, spec_driver_handles_share_servers = False You can now create a public share with my_share_net network, default share type, NFS shared file systems protocol, and 1 GB size: $ manila create nfs 1 --name "Share1" --description "My first share" --sharetype default --share-network my_share_net --metadata aim=testing --public +-----------------------------+--------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------+ | status | None | | share_type_name | default | | description | My first share | | availability_zone | None | | share_network_id | None | | export_locations | [] | 147 OpenStack 運用ガイド February 1, 2016 | share_server_id | None | | host | None | | snapshot_id | None | | is_public | True | | task_state | None | | snapshot_support | True | | id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | size | 1 | | name | Share1 | | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | created_at | 2015-09-24T12:19:06.925951 | | export_location | None | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 20787a7ba11946adad976463b57d8a2f | | metadata | {u'aim': u'testing'} | +-----------------------------+--------------------------------------+ To confirm that creation has been successful, see the share in the share list: $ manila list +----+-------+-----+------------+-----------+------------------------------+----------------------+ | ID | Name | Size| Share Proto| Share Type| Export location | Host | +----+-------+-----+------------+-----------+------------------------------+----------------------+ | a..| Share1| 1 | NFS | c0086... | 10.254.0.3:/shares/share-2d5.. | manila@generic1#GEN..| +----+-------+-----+------------+-----------+------------------------------+----------------------+ Check the share status and see the share export location. After creation, the share status should become available: $ manila show Share1 +-----------------------------+-------------------------------------------+ | Property | Value | +-----------------------------+-------------------------------------------+ | status | available | | share_type_name | default | | description | My first share | | availability_zone | nova | | share_network_id | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | | export_locations | 10.254.0.3:/shares/share-2d5e2c0a-1f84... | | share_server_id | 41b7829d-7f6b-4c96-aea5-d106c2959961 | | host | manila@generic1#GENERIC1 | | snapshot_id | None | | is_public | True | 148 OpenStack 運用ガイド February 1, 2016 | task_state | None | | snapshot_support | True | | id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | size | 1 | | name | Share1 | | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | created_at | 2015-09-24T12:19:06.000000 | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 20787a7ba11946adad976463b57d8a2f | | metadata | {u'aim': u'testing'} | +-----------------------------+-------------------------------------------+ The value is_public defines the level of visibility for the share: whether other tenants can or cannot see the share. By default, the share is private. Now you can mount the created share like a remote file system and use it for your purposes. ヒント See subsection “Share Management” of “Shared File Systems” section of Cloud Administration Guide document for the details on share management operations. 共有へのアクセス権の管理 Currently, you have a share and would like to control access to this share for other users. For this, you have to perform a number of steps and operations. Before getting to manage access to the share, pay attention to the following important parameters. To grant or deny access to a share, specify one of these supported share access levels: • rw: 読み書きアクセス。デフォルト。 • ro: 読み取り専用アクセス。 Additionally, you should also specify one of these supported authentication methods: • ip: authenticates an instance through its IP address. A valid format is XX.XX.XX.XX orXX.XX.XX.XX/XX. For example 0.0.0.0/0. • cert: authenticates an instance through a TLS certificate. Specify the TLS identity as the IDENTKEY. A valid value is 149 OpenStack 運用ガイド February 1, 2016 any string up to 64 characters long in the common name (CN) of the certificate. The meaning of a string depends on its interpretation. • user: authenticates by a specified user or group name. A valid value is an alphanumeric string that can contain some special characters and is from 4 to 32 characters long. 注記 Do not mount a share without an access rule! This can lead to an exception. Allow access to the share with IP access type and 10.254.0.4 IP address: $ manila access-allow Share1 ip 10.254.0.4 --access-level rw +--------------+--------------------------------------+ | Property | Value | +--------------+--------------------------------------+ | share_id | 7bcd888b-681b-4836-ac9c-c3add4e62537 | | access_type | ip | | access_to | 10.254.0.4 | | access_level | rw | | state | new | | id | de715226-da00-4cfc-b1ab-c11f3393745e | +--------------+--------------------------------------+ Mount the Share: $ sudo mount -v -t nfs 10.254.0.5:/shares/share-5789ddcf-35c9-4b64a28a-7f6a4a574b6a /mnt/ Then check if the share mounted successfully and according to the specified access rules: $ manila access-list Share1 +--------------------------------------+-------------+-----------+--------------+--------+ | id | access type | access to | access level | state | +--------------------------------------+-------------+-----------+--------------+--------+ | 4f391c6b-fb4f-47f5-8b4b-88c5ec9d568a | user | demo | rw | error | | de715226-da00-4cfc-b1ab-c11f3393745e | ip | 10.254.0.4 | rw | active | +--------------------------------------+-------------+-----------+--------------+--------+ 150 OpenStack 運用ガイド February 1, 2016 注記 Different share features are supported by different share drivers. In these examples there was used generic (Cinder as a back-end) driver that does not support user and cert authentication methods. ヒント For the details of features supported by different drivers see section “Manila share features support mapping” of Manila Developer Guide document. 共有の管理 There are several other useful operations you would perform when working with shares. 共有の更新 To change the name of a share, or update its description, or level of visibility for other tenants, use this command: $ manila update Share1 --description "My first share. Updated" --is-public False Check the attributes of the updated Share1: $ manila show Share1 +-----------------------------+--------------------------------------------+ | Property | Value | +-----------------------------+--------------------------------------------+ | status | available | | share_type_name | default | | description | My first share. Updated | | availability_zone | nova | | share_network_id | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | | export_locations | 10.254.0.3:/shares/share-2d5e2c0a-1f84-... | | share_server_id | 41b7829d-7f6b-4c96-aea5-d106c2959961 | | host | manila@generic1#GENERIC1 | | snapshot_id | None | | is_public | False | | task_state | None | | snapshot_support | True | | id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | size | 1 | | name | Share1 | 151 OpenStack 運用ガイド February 1, 2016 | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | created_at | 2015-09-24T12:19:06.000000 | | share_proto | NFS | | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 20787a7ba11946adad976463b57d8a2f | | metadata | {u'aim': u'testing'} | +-----------------------------+--------------------------------------------+ 共有状態のリセット Sometimes a share may appear and then hang in an erroneous or a transitional state. Unprivileged users do not have the appropriate access rights to correct this situation. However, having cloud administrator's permissions, you can reset the share's state by using $ manila reset-state [–state state] share_name command to reset share state, where state indicates which state to assign the share to. Options include: available, error, creating, deleting, error_deleting states. $ manila reset-state Share2 --state deleting の実行後、共有の状態を確認します。 $ manila show Share2 +-----------------------------+-------------------------------------------+ | Property | Value | +-----------------------------+-------------------------------------------+ | status | deleting | | share_type_name | default | | description | share from a snapshot. | | availability_zone | nova | | share_network_id | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | | export_locations | [] | | share_server_id | 41b7829d-7f6b-4c96-aea5-d106c2959961 | | host | manila@generic1#GENERIC1 | | snapshot_id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | is_public | False | | task_state | None | | snapshot_support | True | | id | b6b0617c-ea51-4450-848e-e7cff69238c7 | | size | 1 | | name | Share2 | | share_type | c0086582-30a6-4060-b096-a42ec9d66b86 | | created_at | 2015-09-25T06:25:50.000000 | | export_location | 10.254.0.3:/shares/share-1dc2a471-3d47-...| | share_proto | NFS | 152 OpenStack 運用ガイド February 1, 2016 | consistency_group_id | None | | source_cgsnapshot_member_id | None | | project_id | 20787a7ba11946adad976463b57d8a2f | | metadata | {u'source': u'snapshot'} | +-----------------------------+-------------------------------------------+ 共有の削除 共有が必要なくなった場合、次のように manila delete share_name_or_ID コマンドを使用して削除できます。 $ manila delete Share2 注記 If you specified the consistency group while creating a share, you should provide the --consistency-group parameter to delete the share: $ manila delete ba52454e-2ea3-47fa-a683-3176a01295e6 --consistency-group ffee08d9-c86c-45e5-861e-175c731daca2 Sometimes it appears that a share hangs in one of transitional states (i.e. creating, deleting, managing, unmanaging, extending, and shrinking). In that case, to delete it, you need manila force-delete share_name_or_ID command and administrative permissions to run it: $ manila force-delete b6b0617c-ea51-4450-848e-e7cff69238c7 ヒント For more details and additional information about other cases, features, API commands etc, see subsection “Share Management” of “Shared File Systems” section of Cloud Administration Guide document. スナップショットの作成 The Shared File Systems service provides a mechanism of snapshots to help users to restore their own data. To create a snapshot, use manila snapshot-create command like: $ manila snapshot-create Share1 --name Snapshot1 --description "Snapshot of Share1" +-------------+--------------------------------------+ | Property | Value | 153 OpenStack 運用ガイド February 1, 2016 +-------------+--------------------------------------+ | status | creating | | share_id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | name | Snapshot1 | | created_at | 2015-09-25T05:27:38.862040 | | share_proto | NFS | | id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | size | 1 | | share_size | 1 | | description | Snapshot of Share1 | +-------------+--------------------------------------+ Then, if needed, update the name and description of the created snapshot: $ manila snapshot-rename Snapshot1 Snapshot_1 --description "Snapshot of Share1. Updated." To make sure that the snapshot is available, run: $ manila snapshot-show Snapshot1 +-------------+--------------------------------------+ | Property | Value | +-------------+--------------------------------------+ | status | available | | share_id | aca648eb-8c03-4394-a5cc-755066b7eb66 | | name | Snapshot1 | | created_at | 2015-09-25T05:27:38.000000 | | share_proto | NFS | | id | 962e8126-35c3-47bb-8c00-f0ee37f42ddd | | size | 1 | | share_size | 1 | | description | Snapshot of Share1 | +-------------+--------------------------------------+ ヒント For more details and additional information on snapshots, see subsection “Share Snapshots” of “Shared File Systems” section of “Cloud Administration Guide” document. 共有ネットワークの作成 To control a share network, Shared File Systems service requires interaction with Networking service to manage share servers on its own. If the selected driver runs in a mode that requires such kind of interaction, you need to specify the share network when a share is created. For the information on share creation, see 「共 154 OpenStack 運用ガイド February 1, 2016 有の作成」 [146] earlier in this chapter. Initially, check the existing share networks type list by: $ manila share-network-list +--------------------------------------+--------------+ | id | name | +--------------------------------------+--------------+ +--------------------------------------+--------------+ If share network list is empty or does not contain a required network, just create, for example, a share network with a private network and subnetwork. $ manila share-network-create --neutron-net-id 5ed5a854-21dc-4ed3-870a-117b7064eb21 --neutron-subnet-id 74dcfb5ab4d7-4855-86f5-a669729428dc --name my_share_net --description "My first share network" +-------------------+--------------------------------------+ | Property | Value | +-------------------+--------------------------------------+ | name | my_share_net | | segmentation_id | None | | created_at | 2015-09-24T12:06:32.602174 | | neutron_subnet_id | 74dcfb5a-b4d7-4855-86f5-a669729428dc | | updated_at | None | | network_type | None | | neutron_net_id | 5ed5a854-21dc-4ed3-870a-117b7064eb21 | | ip_version | None | | nova_net_id | None | | cidr | None | | project_id | 20787a7ba11946adad976463b57d8a2f | | id | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | | description | My first share network | +-------------------+--------------------------------------+ The segmentation_id, cidr, ip_version, and network_type share network attributes are automatically set to the values determined by the network provider. Then check if the network became created by requesting the networks list once again: $ manila share-network-list +--------------------------------------+--------------+ | id | name | +--------------------------------------+--------------+ | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | my_share_net | +--------------------------------------+--------------+ Finally, to create a share that uses this share network, get to Create Share use case described earlier in this chapter. 155 OpenStack 運用ガイド February 1, 2016 ヒント See subsection “Share Networks” of “Shared File Systems” section of Cloud Administration Guide document for more details. 共有ネットワークの管理 There is a pair of useful commands that help manipulate share networks. To start, check the network list: $ manila share-network-list +--------------------------------------+--------------+ | id | name | +--------------------------------------+--------------+ | 5c3cbabb-f4da-465f-bc7f-fadbe047b85a | my_share_net | +--------------------------------------+--------------+ If you configured the back-end with driver_handles_share_servers = True (with the share servers) and had already some operations in the Shared File Systems service, you can see manila_service_network in the neutron list of networks. This network was created by the share driver for internal usage. $ neutron net-list +--------------+------------------------+-----------------------------------+ | id | name | subnets | +--------------+------------------------+-----------------------------------+ | 3b5a629a-e...| manila_service_network | 4f366100-50... 10.254.0.0/28 | | bee7411d-d...| public | 884a6564-01... 2001:db8::/64 | | | | e6da81fa-55... 172.24.4.0/24 | | 5ed5a854-2...| private | 74dcfb5a-bd... 10.0.0.0/24 | | | | cc297be2-51... fd7d:177d:a48b::/64 | +--------------+------------------------+-----------------------------------+ You also can see detailed information about the share network including network_type, segmentation_id fields: $ neutron net-show manila_service_network +---------------------------+--------------------------------------+ 156 OpenStack 運用ガイド February 1, 2016 | Field | Value | +---------------------------+--------------------------------------+ | admin_state_up | True | | id | 3b5a629a-e7a1-46a3-afb2-ab666fb884bc | | mtu | 0 | | name | manila_service_network | | port_security_enabled | True | | provider:network_type | vxlan | | provider:physical_network | | | provider:segmentation_id | 1068 | | router:external | False | | shared | False | | status | ACTIVE | | subnets | 4f366100-5108-4fa2-b5b1-989a121c1403 | | tenant_id | 24c6491074e942309a908c674606f598 | +---------------------------+--------------------------------------+ You also can add and remove the security services to the share network. ヒント For details, see subsection "Security Services" of “Shared File Systems” section of Cloud Administration Guide document. インスタンス インスタンスは OpenStack クラウドの中で実行中の仮想マシンです。こ のセクションは、インスタンス、インスタンスが使用するイメージ、イ ンスタンスのネットワークプロパティを扱うための方法について取り扱 います。また、それらがデータベースでどのように表現されているかに ついて取り扱います。 インスタンスの起動 インスタンスを起動するには、イメージ、フレーバーおよび名前を選択 する必要があります。名前は一意である必要がありませんが、名前が一 意である限りは、多くのツールが UUID の代わりに名前を使用できるの で、シンプルにできます。インスタンスの起動は、ダッシュボードにお いて、インスタンスページにある起動ボタン、またはイメージとスナッ プショットページにあるイメージまたはスナップショットの隣にある起 動アクションから実行できます。 コマンドラインで、このようにします。 $ nova boot --flavor <flavor> --image <image> <name> 157 OpenStack 運用ガイド February 1, 2016 指定できる多くのオプション項目があります。インスタンスを起動しよ うとする前に、このセクションを最後まで読んでください。しかし、こ れが今から説明する詳細の基本となるコマンドです。 ダッシュボードからインスタンスを削除するには、インスタンスページ においてインスタンスの隣にあるインスタンスの終了アクションを選択 します。または、コマンドラインから次のとおり実行します: $ nova delete <instance-uuid> 注意すべき大事な点は、インスタンスの電源オフは、OpenStack 的な意 味でのインスタンスの終了ではないということです。 インスタンスの起動失敗 インスタンスの開始に失敗し、すぐにエラー状態になるならば、何が問 題なのかを追跡するために、いくつかの異なる方法があります。いくつ かの方法は通常のユーザーアクセスで実行でき、他の方法ではログサー バーやコンピュートノードへのアクセスが必要です。 ノードが起動に失敗する最も簡単な理由は、クォータ違反、またはスケ ジューラーがインスタンスを実行するのに適したコンピュートノードを 見つけられなかった場合です。これらの場合、失敗したインスタンスに 対して nova show を実行するとエラーが表示されます。 $ nova show test-instance +------------------------+-----------------------------------------------------\ | Property | Value / +------------------------+-----------------------------------------------------\ | OS-DCF:diskConfig | MANUAL / | OS-EXT-STS:power_state | 0 \ | OS-EXT-STS:task_state | None / | OS-EXT-STS:vm_state | error \ | accessIPv4 | / | accessIPv6 | \ | config_drive | / | created | 2013-03-01T19:28:24Z \ | fault | {u'message': u'NoValidHost', u'code': 500, u'created/ | flavor | xxl.super (11) \ | hostId | / | id | 940f3b2f-bd74-45ad-bee7-eb0a7318aa84 \ | image | quantal-test (65b4f432-7375-42b6-a9b8-7f654a1e676e) / | key_name | None \ | metadata | {} / | name | test-instance \ | security_groups | [{u'name': u'default'}] / | status | ERROR \ | tenant_id | 98333a1a28e746fa8c629c83a818ad57 / | updated | 2013-03-01T19:28:26Z \ | user_id | a1ef823458d24a68955fec6f3d390019 / +------------------------+-----------------------------------------------------\ この場合、fault メッセージに NoValidHost が表示されていま す。NoValidHost はスケジューラーがインスタンスの要件を満たせな かったことを意味します。 158 OpenStack 運用ガイド February 1, 2016 nova show が十分な失敗の理由が表示されていない場合、そのインスタ ンスがスケジューリングされたコンピュートノードの nova-compute.log やスケジューラーホストの nova-scheduler.log を、インスタンスの UUID で検索するのが、より低レベルの問題を調査する良い出発点となり ます。 管理ユーザーとして nova show を使用すると、インスタンスがスケ ジュールされたコンピュートノードが hostId として表示されます。イ ンスタンスがスケジュール中に失敗していれば、この項目が空白です。 インスタンス固有データの使用 インスタンス固有のデータには 2 種類あります。メタデータとユーザー データです。 インスタンスメタデータ Compute では、インスタンスのメタデータはインスタンスと関連付 けられたキーバリューペアの集まりです。エンドユーザーがこれらの キーバリューペアを読み書きするために Compute API を使用すると き、Compute がインスタンスの生存期間中にインスタンスの内外からこ れらを読み書きします。しかしながら、Amazon EC2 メタデータサービス と互換性のあるメタデータサービスを用いて、インスタンスに関連付け られたキーバリューペアをクエリーできません。 インスタンスのメタデータの場合、ユーザーが nova コマンドを使用し て SSH 鍵を生成および登録できます。 $ nova keypair-add mykey > mykey.pem これにより、インスタンスと関連付けられる mykey という名前の鍵が生 成されます。mykey.pem というファイルが秘密鍵です。これは、mykey 鍵が関連付けられたインスタンスに root アクセスできるので、安全な 場所に保存すべきです。 このコマンドを使用して、既存の鍵を OpenStack に登録します。 $ nova keypair-add --pub-key mykey.pub mykey 注記 この鍵と関連付けられたインスタンスにアクセスするため に、対応する秘密鍵を持つ必要があります。 起動時にインスタンスに鍵を関連付けるには、たとえば、コマンドライ ンに --key_name mykey を追加します。例えば、 159 OpenStack 運用ガイド February 1, 2016 $ nova boot --image ubuntu-cloudimage --flavor 2 --key_name mykey myimage サーバーを起動するとき、他の実行中のインスタンスと区別しやすくす るために、メタデータを追加することもできます。--meta オプションを キーバリューペアとともに使用します。ここで、キーとバリューの両方 の文字列を指定することができます。たとえば、説明とサーバーの作成 者を追加できます。 $ nova boot --image=test-image --flavor=1 \ --meta description='Small test image' smallimage サーバーの情報を表示するとき、metadata 行に含まれるメタデータを参 照できます: 160 OpenStack 運用ガイド February 1, 2016 $ nova show smallimage +------------------------+-----------------------------------------+ | Property | Value | +------------------------+-----------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2012-05-16T20:48:23Z | | flavor | m1.small | | hostId | de0...487 | | id | 8ec...f915 | | image | natty-image | | key_name | | | metadata | {u'description': u'Small test image'} | | name | smallimage | | private network | 172.16.101.11 | | progress | 0 | | public network | 10.4.113.11 | | status | ACTIVE | | tenant_id | e83...482 | | updated | 2012-05-16T20:48:35Z | | user_id | de3...0a9 | +------------------------+-----------------------------------------+ インスタンスのユーザーデータ user-data 鍵は、メタデータサービス内の特別キーです。ゲストインス タンスにあるクラウド対応アプリケーションがアクセス可能なファイル を保持します。たとえば、cloudinit システムは、Ubuntu 発祥のオープ ンソースパッケージですが、ほとんどのディストリビューションで利用 可能です。このユーザーデータを使用するクラウドインスタンスの初期 設定を処理します。 このユーザーデータは、ローカルマシンのファイルに保存され、--userdata <user-data-file> フラグを用いてインスタンスの生成時に渡され ます。たとえば: $ nova boot --image ubuntu-cloudimage --flavor 1 --user-data mydata.file mydatainstance ユーザーデータとメタデータの違いを理解するために、インスタンスが 起動する前に、ユーザーデータが作成されることに気づいてください。 ユーザーデータは、インスタンスの実行時に、インスタンスの中からア クセスできます。設定、スクリプト、テナントが必要とするものを保存 するために使用できます。 161 OpenStack 運用ガイド February 1, 2016 ファイルインジェクション --file <dst-path=src-path> 使用することにより、任意のローカルファ イルを生成時にインスタンスのファイルシステムの中に置けます。5 ファイルまで保存できます。 例えば、何らかの理由で通常の SSH 鍵の注入ではな く、special_authorized_keysfile という名前の特別な authorized_keys ファイルをインスタンスに置きたいと言うとします。 この場合、以下のコマンドを使用できます: $ nova boot --image ubuntu-cloudimage --flavor 1 \ --file /root/.ssh/authorized_keys=special_authorized_keysfile authkeyinstance セキュリティグループの割り当て セキュリティグループは、前に記載したように、プロジェクトのデフォ ルトのセキュリティグループがより許可するよう変更されていない限 り、インスタンスへのネットワーク通信を許可するために一般的に必要 となります。 セキュリティグループの追加は、一般的にインスタンスの起動時に実行 されます。ダッシュボードから起動するとき、これはインスタンスの起 動ダイアログのアクセスとセキュリティタブにあります。コマンドライ ンから起動する場合には、--security-groups にセキュリティグループ のコンマ区切り一覧を指定します。 インスタンスを実行中にセキュリティグループを追加および削除するこ ともできます。現在、コマンドラインツールからのみ利用可能です。例: $ nova add-secgroup <server> <securitygroup> $ nova remove-secgroup <server> <securitygroup> Floating IP Floating IP はクラウド全体で設定されますが、各プロジェクトは クォータにより Floating IP 数を制限されているでしょう。使用する前 に中央プールからプロジェクトに確保する必要があります。一般的に、 プロジェクトの管理者により行われます。ダッシュボードのアクセスと セキュリティページのFloating IPタブのFloating IP の確保ボタンを使 用して、Floating IP をプロジェクトに確保します。コマンドラインを 使用することもできます。 $ nova floating-ip-create 162 OpenStack 運用ガイド February 1, 2016 一度確保すると、Floating IP を実行中のインスタンスに割り当てる ことができます。ダッシュボードでは、アクセスとセキュリティペー ジの Floating IPs タブにある IP の隣にある、アクションドロップ ダウンからFloating IP の割り当てを選択することにより実行できま す。または、インスタンスページにおいて割り当てたいインスタンス の隣にある、リストからこれを選択することにより実行できます。逆 の動作 Floating IP の割り当て解除はアクセスとセキュリティページ のFloating IPs タブから実行できます。インスタンスのページから利用 できません。 以下のコマンドを使用して、コマンドラインからサーバーに Floating IP アドレスを関連付けまたは関連付け解除します。 $ nova add-floating-ip <server> <address> $ nova remove-floating-ip <server> <address> ブロックストレージの接続 ダッシュボードの ボリューム ページから、インスタンスにブロックス トレージを接続できます。接続したいボリュームの隣にある 接続の編集 をクリックします。 このアクションをコマンドラインから実行するには、以下のコマンドを 実行します $ nova volume-attach <server> <volume> <device> nova コマンドラインクライアントに以下のようにオプションを付けて、 インスタンスの起動時にブロックデバイスのマッピングを指定すること もできます。 --block-device-mapping <dev-name=mapping> ブロックデバイスマッピングのフォーマットは <devname>=<id>:<type>:<size(GB)>:<delete-on-terminate>、それぞれ、 dev-name そのボリュームはシステムで /dev/dev_name に接続されます。 id 起動するボリュームの ID。nova volumelist の出力に表示されます。 type ボリュームがスナップショットから作成さ れたことを意味する snap、または snap 以 外の何か (空文字列も有効) です。上の例で は、ボリュームがスナップショットから作成 163 OpenStack 運用ガイド February 1, 2016 されていません。そのため、この項目を以下 の例において空白にしてあります。 size (GB) ボリュームのギガバイト単位の容量。この フィールドを空欄にして、Compute サービス に容量を推定させるのが安全です。 delete-on-terminate インスタンスが終了したときに、ボリューム が削除されるかどうかを指示する論理値で す。真は True または 1 として指定できま す。偽は False または 0 として指定できま す。 以下のコマンドは、新しいインスタンスを起動して、同時にボリューム を接続します。ID 13 のボリュームが /dev/vdc として接続されます。 これは、スナップショットではなく、容量を指定せず、インスタンスの 削除時に一緒に削除されます。 $ nova boot --image 4042220e-4f5e-4398-9054-39fbd75a5dd7 \ --flavor 2 --key-name mykey --block-device-mapping vdc=13:::0 \ boot-with-vol-test ブート可能なファイルシステムイメージでブロックストレージを事前に 準備していると、永続ブロックストレージからブートすることもでき ます。以下のコマンドは、指定したボリュームからイメージを起動しま す。前のコマンドに似ていますが、イメージが省略され、ボリュームが /dev/vda として接続されます。 $ nova boot --flavor 2 --key-name mykey \ --block-device-mapping vda=13:::0 boot-from-vol-test 詳細は、OpenStack エンドユーザーガイドの「ボリュームからのインス タンスの起動」にある説明を参照してください。 通常通りイメージから起動し、ブロックストレージを接続するため に、vda 以外のデバイスを対応付けます。OpenStack エンドユーザーガ イドに、インスタンスを起動して、それにボリュームを接続する方法、 接続されたボリュームにイメージをコピーする方法が説明されていま す。 スナップショットの取得 OpenStack のスナップショット機能により、実行中のインスタンスから 新しいイメージを作成することもできます。これは、ベースイメージを アップグレードするため、公開されているイメージをカスタマイズする ために、非常に便利です。このように CLI を使用して、実行中のインス タンスをイメージにスナップショットをとります。 164 OpenStack 運用ガイド February 1, 2016 $ nova image-create <instance name or uuid> <name of new image> ダッシュボードのインターフェースでは、スナップショットとイメージ が両方ともイメージのページに表示されるため、まぎらわしいかもし れません。しかしながら、インスタンスのスナップショットはイメー ジです。Image service に直接アップロードしたイメージと、スナップ ショットにより作成したイメージとの唯一の違いは、スナップショット により作成されたイメージが glance データベースにおいて追加のプロ パティを持つことです。これらのプロパティは image_properties テー ブルで確認でき、次の項目を含みます: 名前 値 image_type スナップショット instance_uuid <スナップショットされたインスタンスの UUID> base_image_ref <スナップショットされたインスタンスの元イ メージの UUID> image_location スナップショット ライブスナップショット ライブスナップショットは、ユーザーが実行中の仮想マシンのスナップ ショットを一時停止なしで取得できる機能です。このスナップショット は単にディスクのみのスナップショットです。現在はインスタンスのス ナップショットは停止時間なしで実行できます (QEMU 1.3+ と libvirt 1.0+ が使用されていることが前提です)。 ライブスナップショットの無効化 libvirt バージョン 1.2.2 を使用している場合、ライブス ナップショットの作成において、断続的な問題を経験するか もしれません。 問題が解決するまでは、libvirt のライブスナップショット を効果的に無効化するために、以下の設定を nova.conf に追 加します。 [workarounds] disable_libvirt_livesnapshot = True Linux ゲストのスナップショットの一貫性の保証 以下のセクションは、Sébastien Han さんの “OpenStack: Perform Consistent Snapshots” ブログ記事からの引用です。 165 OpenStack 運用ガイド February 1, 2016 スナップショットは、ファイルシステムの状態をキャプチャーしま すが、メモリーの状態をキャプチャーしません。そのため、スナッ プショットに期待するデータが含まれることを確実にするために、 次のことを確実にする必要があります。 • 実行中のプログラムがコンテンツをディスクに書き込んだこと • ファイルシステムが「ダーティー」バッファーを持たないこと: 「ダーティー」バッファーがあるとは、プログラムがディスクに 書き込むためにコマンドを発行しましたが、オペレーティングシ ステムがまだ書き込みを完了していないことです。 (データベースのような) 重要なサービスがコンテンツをディスク に書き込んだことを保証するために、それらのアプリケーションの ドキュメントを読んで、コンテンツをディスクに同期させるために どのコマンドを発行する必要があるかを調べることを推奨します。 ディスクに同期させるための方法がはっきり分からない場合、最も 安全な方法は単にこれらの実行中のサービスを通常通り停止するこ とです。 「ダーティー」バッファーの問題を解決するために、スナップ ショットの前に sync コマンドを使用することを推奨します。 # sync sync を実行することにより、ダーティーバッファー (変更された が、ディスクに書き込まれていないバッファー済みブロック) を ディスクに書き込みます。 ファイルシステムが一貫性を持つことを保証するためには、単に sync を実行するだけでは不十分です。fsfreeze ツールを使用する ことを推奨します。これは、ファイルシステムに対する新規アクセ スを停止し、スナップショットに適した安定したイメージをディス クに作成します。fsfreeze は ext3, ext4 および XFS を含むいく つかのファイルシステムをサポートします。仮想マシンのインスタ ンスが Ubuntu において実行されていれば、fsfreeze を取得する ために util-linux パッケージをインストールします: 注記 ベースとするスナップショットが LVM 経由で取得され ている非常に一般的な場合、ファイルシステムのフリー ズは、LVM により自動的に処理されます。 # apt-get install util-linux 166 OpenStack 運用ガイド February 1, 2016 お使いのオペレーティングシステムに利用可能なバージョン の fsfreeze がなければ、代わりに xfs_freeze を使用できま す。これは Ubuntu の xfsprogs パッケージにおいて利用可能で す。"xfs" という名前にもかかわらず、xfs_freeze は Linux カー ネル 2.6.29 またはそれ以降を使用していれば ext3 や ext4 にお いても動作します。それは 2.6.29 において開始された仮想ファイ ルシステム (VFS) レベルで動作するためです。この xfs_freeze のバージョンは fsfreeze と同じ名前のコマンドライン引数をサ ポートします。 永続ブロックストレージのスナップショットを取得したい例を検討 します。ゲストオペレーティングシステムにより /dev/vdb として 認識され、/mnt にマウントされているとします。fsfreeze コマン ドが 2 つの引数を受け取ります: -f システムをフリーズします -u システムを解凍 (フリーズ解除) します スナップショットの準備においてボリュームをフリーズするには、 インスタンスの中で root として次のとおり実行します: # fsfreeze -f /mnt fsfreeze コマンドを実行する前に、ファイルシステムをマウント する必要があります。 fsfreeze -f コマンドが発行された場合、ファイルシステム内で進 行中のすべてのトランザクションが完了することが認められます。 新規書き込みのシステムコールは停止されます。そして、ファイル システムを変更する他のコールは停止されます。最も重要なことと しては、すべてのダーティーデータ、メタデータ、およびログ情報 がディスクに書き込まれることです。 ボリュームがフリーズ状態になったら、ボリュームの読み書き命令 が止まってしまうので、ボリュームの読み書きを行わないようにし てください。オペレーティングシステムがすべての I/O 操作を停 止し、すべての I/O 試行がファイルシステムがフリーズ解除され るまで遅延させられます。 fsfreeze コマンドを発行すると、スナップショットを実行しても 安全です。たとえば、インスタンスが mon-instance という名前 で、mon-snapshot という名前のイメージにスナップショットを取 得したければ、以下のとおり実行します: $ nova image-create mon-instance mon-snapshot 167 OpenStack 運用ガイド February 1, 2016 スナップショットの作成が終わったら、インスタンスの中で root として以下のコマンドを用いて、ファイルシステムをフリーズ解除 できます。 # fsfreeze -u /mnt ルートファイルシステムをバックアップしたければ、プロンプトが フリーズしてしますので、上のコマンドを単純に実行できません。 代わりに、インスタンスの中で root として以下の 1 行を実行し ます。 # fsfreeze -f / && read x; fsfreeze -u / このコマンドの後、お使いの端末から nova image-create を呼び 出すことが一般的な慣習です。実行した後、インスタンスの中で Enter キーを押して、フリーズ解除します。もちろん、これを自動 化できますが、少なくとも適切に同期できるようになるでしょう。 Windows ゲストのスナップショットの一貫性の保証 Windows 仮想マシンの一貫性あるスナップショットの取得 は、Linux マシンのスナップショットの場合と同じようなもので す。ただし、一貫性バックアップを働かせるために、Windows 専用 のサブコマンドと調整するための追加機能を必要とします。 Windows XP 以降は、従順なアプリケーションが動作中のファイル システムで一貫性のあるバックアップを取得できるようにするフ レームワークを提供する Volume Shadow Copy Service (VSS) が 含まれます。このフレームワークを使用するために、VSS リクエス ターが、一貫性バックアップを必要とすることを VSS サービスに 対してシグナルを発行します。VSS サービスは、従順なアプリケー ション (VSS ライターと言います) に通知して、これらのデータ処 理を休止します。そして、VSS サービスがコピープロバイダーにス ナップショットを作成するよう指示します。スナップショットが作 成されると、VSS サービスが VSS ライターをフリーズ解除して、 通常の I/O アクティビティーが再開されます。 QEMU は、KVM ハイパーバイザーにおいて動作しているゲストで実 行できるゲストエージェントを提供しています。Windows 仮想マシ ンの場合、このゲストエージェントは、Windows VSS サービスと連 携して、スナップショットの一貫性を保証する流れを楽にします。 この機能は QEMU 1.7 以降を必要とします。関連するゲストエー ジェントのコマンドは次のとおりです。 168 OpenStack 運用ガイド February 1, 2016 guest-file-flush 「ダーティー」バッファーをディスク に書き出します。Linux の sync 処理 と似ています。 guest-fsfreeze ディスクへの I/O を一時停止しま す。Linux の fsfreeze -f 処理と似て います。 guest-fsfreeze-thaw ディスクへの I/O を再開しま す。Linux の fsfreeze -u 処理と似て います。 Windows 仮想マシンのスナップショットを取得する場合、以下のコ マンドを連続して実行するスクリプト化できます。ファイルシステ ムをフラッシュする、ファイルシステムをフリーズする、ファイ ルシステムのスナップショットを取得する、ファイルシステムをフ リーズ解除する。Linux 仮想マシンのワークフローと同じように、 そのようなスクリプトを書くときに、注意して使用すべきです。エ ラー処理を徹底して、ファイルシステムがフリーズ状態のままにな らないようにします。 データベースにあるインスタンス インスタンスの情報が数多くのデータベースのテーブルに保存されます が、ユーザーのインスタンスに関連して参照する必要がありそうなテー ブルは、instances テーブルです。 インスタンスのテーブルは、実行中および削除済みの両方のインスタン スに関連する情報のほとんどを保持しています。データベースで完全な リストを見ると、このテーブルには目が回るほどたくさんのフィールド があることがわかります。以下に、クエリーを行おうとしている運用者 にとって非常に有用なフィールドを挙げます。 • deleted フィールドは、インスタンスが削除されていると 1 がセット されます。削除されていなければ NULL です。このフィールドは、ク エリーから削除済みインスタンスを除外するために重要です。 • uuid フィールドはインスタンスの UUID です。データベースにある他 の表において外部キーとして使用されます。この ID は、インスタン スを一意に識別するために、ログ、ダッシュボードおよびコマンドラ インツールにおいて表示されます。 • 外部キーはインスタンスの関連を見つけるために利用可能です。これ らの中で最も有用なものは、user_id および project_id です。これ 169 OpenStack 運用ガイド February 1, 2016 らは、インスタンスを起動したユーザー、およびそれが起動されたプ ロジェクトの UUID です。 • host フィールドは、どのコンピュートノードがインスタンスをホスト しているかを示します。 • hostname フィールドは、インスタンスが起動したときのインスタン ス名を保持します。display-name は、最初は hostname と同じです が、nova rename コマンドを使って再設定することができます。 多くの時刻関連のフィールドは、いつ状態の変化がインスタンスに起 こったかを追跡する際に役に立ちます: • created_at • updated_at • deleted_at • scheduled_at • launched_at • terminated_at グッドラック! このセクションは、多くの OpenStack コマンドの中から、いくつかの最 も有用なものを簡単に説明することを意図していました。膨大なリスト は、管理者ユーザーガイドを参照してください。さらなるヒントやコツ は、Cloud Admin Guide を参照してください。ユーザーが幸せなままで あり、あなたのハードワークに気づくことを願います。(さらなるハー ドワークは、次の章にページを進んでください。システムが直面する運 用、メンテナンス、障害、デバッグについて議論しています。) 170 OpenStack 運用ガイド February 1, 2016 第11章 メンテナンス、故障および デバッグ クラウドコントローラーとストレージプロキシの故障とメンテナン ス ......................................................... コンピュートノードの故障とメンテナンス ...................... ストレージノードの故障とメンテナンス ........................ 完全な故障の対処 ........................................... 構成管理 ................................................... ハードウェアの取り扱い ..................................... データベース ............................................... HDWMY ...................................................... 故障しているコンポーネントの特定 ............................ アンインストール ........................................... 171 173 180 181 182 183 184 185 186 189 停止時間(計画的なものと予定外のものの両方)はクラウドを運用する ときに確実に発生します。本章は、プロアクティブまたはリアクティブ に、これらの出来事に対処するために有用な情報を提供することを目的 としています。 クラウドコントローラーとストレージプ ロキシの故障とメンテナンス 想定内の場合も想定外の場合も停止時間が発生した場合の挙動が、クラ ウドコントローラーとストレージプロキシは互いに似ています。クラウ ドコントローラーとストレージプロキシはそれぞれクラウドで一つ実行 されるので、動作していない場合、非常に目立ちます。 クラウドコントローラーの場合、良いニュースとしては、クラウドが FlatDHCP マルチホスト HA ネットワークモードを使用していれば、既 存のインスタンスとボリュームはクラウドコントローラーがオフライン の間も動作を継続するという点があります。しかしながら、ストレージ プロキシの場合には、サーバーが元に戻され動作状態になるまで、スト レージとの通信ができません。 計画メンテナンス クラウドコントローラーやストレージプロキシのメンテナンスを計画す る一つの方法は、単に午前 1 時や 2 時のような利用の少ない時間帯に 実行することです。この戦略はあまり多くのユーザーに影響を与えませ ん。クラウドコントローラーやストレージプロキシが、いかなる時間帯 171 OpenStack 運用ガイド February 1, 2016 においても、サービスが利用できないことによる影響が大きければ、高 可用性オプションについて検討する必要があります。 クラウドコントローラーとストレージプロキシの 再起動 大体の場合、単に「再起動」コマンドを発行します。オペレーティング システムがサービスを正常にシャットダウンして、その後、自動的に再 起動します。万全を期したい場合、再起動する前にバックアップジョブ を実行します。 クラウドコントローラーまたはストレージプロキ シの再起動後 クラウドコントローラーの再起動後、すべての必要なサービスが正常に 起動されたことを確認します。以下のコマンドは、ps と grep を使用 して、nova、glance、keystone が現在動作していることを確認していま す。 # # # # ps ps ps ps aux aux aux aux | | | | grep grep grep grep novaglancekeystone cinder また、すべてのサービスが正しく機能していることを確認します。以下 のコマンド群は、openrc ファイルを読み込みます。そして、いくつかの 基本的な glanec、nova、openstack コマンドを実行します。コマンドが 期待したとおりに動作すれば、それらのサービスが動作状態にあると確 認できます。 # # # # source openrc glance index nova list openstack project list ストレージプロキシの場合、Object Storage サービスが再開しているこ とを確認します。 # ps aux | grep swift また、正しく機能していることを確認します。 # swift stat 全体的なクラウドコントローラーの故障 クラウドコントローラーは、例えばマザーボードがおかしくなった場合 に、完全に故障するでしょう。これはクラウド環境の中核的な機能を提 供しているため、ユーザーはクラウドコントローラーの損失にすぐに気 172 OpenStack 運用ガイド February 1, 2016 づくでしょう。お使いのインフラ監視機能が、クラウド環境の障害のア ラートを上げなかった場合でも、ユーザーは絶対に気づきます。残念な がら、これは大まかな状況です。クラウドコントローラーは、クラウド の必須部分です。コントローラーが 1 つだけの場合、ダウンした際に多 くのサービスが失われるでしょう。 この状況を避けるために、高可用なクラウドコントローラークラ スターを作成します。このことは、このドキュメントの範囲外です が、OpenStack High Availability Guide に情報があります。 次に最も優れているアプローチは、クラウドコントローラーを自動的に 構築するために Puppet のような構成管理ツールを使用することです。 利用可能な予備サーバーがあれば、15 分もかかりません。コントロー ラーを再構築後、取得したすべてのバックアップを復元します (14章 バックアップとリカバリー [231] の章を参照してください)。 実際には、コンピュートノードの nova-compute サービスが、コント ローラー上で動作している rabbitmq に正しく再接続されない場合が あります。時間のかかるリブートから戻ってきた場合や、コンピュート ノードのnova サービスを再起動する必要がある場合です。 コンピュートノードの故障とメンテナン ス コンピュートノードは、予期せずクラッシュしたり、メンテナンスのた めに再起動が必要になったりすることがときどきあります。 計画メンテナンス (ソフトウェアやハードウェアのアップグレードのように) 計画されたメ ンテナンスのために、コンピュートノードを再起動する必要があれば、 まずホストしている全インスタンスがノード外に移動していることを 確認します。クラウドが共有ストレージを利用していれば、nova livemigration コマンドを使用します。初めに、移動させる必要があるイン スタンスの一覧を取得します。 # nova list --host c01.example.com --all-tenants 次に、それらを一つずつマイグレーションします。 # nova live-migration <uuid> c02.example.com 共有ストレージを使用していない場合、--block-migrate オプションを 使用できます。 # nova live-migration --block-migrate <uuid> c02.example.com 173 OpenStack 運用ガイド February 1, 2016 すべてのインスタンスをマイグレーションした後、nova-compute サービ スが停止していることを確認します: # stop nova-compute Puppet などの構成管理システムを使って、nova-compute サービスが確 実に実行されているようにしている場合、init ファイルを一時的に移動 します。 # mkdir /root/tmp # mv /etc/init/nova-compute.conf /root/tmp # mv /etc/init.d/nova-compute /root/tmp 続けて、コンピュートノードを停止し、メンテナンスを実行し、ノー ドを元に戻します。先のコマンドを逆に実行することにより、novacompute サービスを再び有効化できます: # mv /root/tmp/nova-compute.conf /etc/init # mv /root/tmp/nova-compute /etc/init.d/ そして nova-compute サービスを起動します。 # start nova-compute インスタンスを元のコンピュートノードにマイグレーションすることも できます。 コンピュートノードの再起動後 コンピュートノードを再起動した場合、まず正常に起動していることを 検証します。これには、nova-compute サービスの動作を確認することが 含まれます。 # ps aux | grep nova-compute # status nova-compute AMQP サーバーに正常に接続できることも確認します。 # grep AMQP /var/log/nova/nova-compute 2013-02-26 09:51:31 12427 INFO nova.openstack.common.rpc.common [-] Connected to AMQP server on 199. 116.232.36:5672 コンピュートノードが正常に実行された後、そのコンピュートノードで ホストされているインスタンスはどれも動作していないので、そのコン ピュートノードにおいてホストされているインスタンスを処理する必要 があります。ユーザーや顧客に対する SLA によっては、各インスタンス を開始し、正常に起動していることを確認する必要がある場合もあるで しょう。 インスタンス 以下のコマンドを実行して、コンピュートノードにホストしているイン スタンスの一覧を作成できます。 174 OpenStack 運用ガイド February 1, 2016 # nova list --host c01.example.com --all-tenants 一覧を取得した後、各インスタンスを起動するために nova コマンドを 使用できます。 # nova reboot <uuid> 注記 予期せずシャットダウンしたときは、ブートに問題があるか もしれません。たとえば、インスタンスがルートパーティ ションにおいて fsck を実行する必要があるかもしれませ ん。もしこうなっても、これを修復するためにダッシュボー ド VNC コンソールを使用できます。 インスタンスがブートしなければ、つまりブートしようとしても virsh list がインスタンスを表示しなければ、コンピュートノードにおいて以 下のとおり実行します。 # tail -f /var/log/nova/nova-compute.log 再び nova reboot コマンドを実行してみてください。インスタンスがな ぜブートできないかについて、エラーメッセージを確認すべきです。 多くの場合、エラーが libvirt の XML ファイル (/etc/libvirt/qemu/ instance-xxxxxxxx.xml) の何かになります。以下のコマンドを実行する ことにより、インスタンスを再起動するのと同時に、強制的に XML ファ イルを再作成できます: # nova reboot --hard <uuid> 故障したインスタンスからの検査とデータ復旧 いくつかのシナリオでは、インスタンスが実行中であるにも関わら ず、SSH 経由でアクセスできず、あらゆるコマンドに反応がありませ ん。VNC コンソールがブート失敗やカーネルパニックのエラーメッセー ジを表示している可能性があります。これは仮想マシン自身において ファイルシステム破損の意味する可能性があります。ファイルを復旧し たりインスタンスの中身を調査したりする必要があれば、qemu-nbd を 使ってディスクをマウントできます。 警告 ユーザーのコンテンツやデータを参照したい場合、まず許可 を得ましょう。 インスタンスのディスク (/var/lib/nova/instances/instance-xxxxxx/ disk) にアクセスするには、以下の手順を実行します。 175 OpenStack 運用ガイド February 1, 2016 1. virsh コマンドを使用して、インスタンスを一時停止します。 2. qemu-nbd デバイスをディスクに接続します。 3. qemu-nbd デバイスをマウントします。 4. 検査後にディスクをアンマウントします。 5. qemu-nbd デバイスを切断します。 6. インスタンスを再開します。 手順 4-6 を省略すると、OpenStack Compute がインスタンスを管理でき なくなります。OpenStack Compute により発行されるすべてのコマンド に対する応答が失敗し、シャットダウンしているように見えます。 ディスクファイルをマウントすると、それにアクセスでき、ファイルと ディレクトリ構造を持つ通常のディレクトリのように取り扱えます。し かしながら、どのファイルの編集も操作もしないことをお薦めします。 なぜなら、それによりアクセス制御リスト (ACL) が変更されたり、起動 できるインスタンスが起動できなくなる場合があるからです。ACL は、 アカウントがファイルやディレクトリーにどの操作を実行できるのか判 断するために使用されます。 1. virsh コマンドを使用してインスタンスを一時停止します。内部 ID を記録します。 # virsh list Id Name State ---------------------------------1 instance-00000981 running 2 instance-000009f5 running 30 instance-0000274a running # virsh suspend 30 Domain 30 suspended 2. qemu-nbd デバイスをディスクに接続します。 # cd /var/lib/nova/instances/instance-0000274a # ls -lh total 33M -rw-rw---- 1 libvirt-qemu kvm 6.3K Oct 15 11:31 -rw-r--r-- 1 libvirt-qemu kvm 33M Oct 15 22:06 -rw-r--r-- 1 libvirt-qemu kvm 384K Oct 15 22:06 -rw-rw-r-- 1 nova nova 1.7K Oct 15 11:30 # qemu-nbd -c /dev/nbd0 `pwd`/disk console.log disk disk.local libvirt.xml 3. qemu-nbd デバイスをマウントします。 qemu-nbd デバイスはインスタンスのディスクの個々のパーティショ ンを別々のデバイスとしてエクスポートしようとします。たとえば、 176 OpenStack 運用ガイド February 1, 2016 ディスクが vda で、ルートパーティションが vda1 の場合、qemu-nbd はそれぞれ /dev/nbd0 と /dev/nbd0p1 としてデバイスをエクスポー トします。 # mount /dev/nbd0p1 /mnt/ これで /mnt の中身にアクセスできます。これは、インスタンスの ディスクの 1 番目のパーティションに対応します。 セカンダリディスクや一時ディスクを調査する際に、プライマリディ スクとセカンダリディスクを同時にマウントしたければ、別のマウン トポイントを使用してください。 # umount /mnt # qemu-nbd -c /dev/nbd1 `pwd`/disk.local # mount /dev/nbd1 /mnt/ # ls -lh /mnt/ total 76K lrwxrwxrwx. 1 dr-xr-xr-x. 4 drwxr-xr-x. 2 drwxr-xr-x. 70 drwxr-xr-x. 3 lrwxrwxrwx. 1 lrwxrwxrwx. 1 drwx------. 2 drwxr-xr-x. 2 drwxr-xr-x. 2 drwxr-xr-x. 2 drwxr-xr-x. 2 dr-xr-x---. 3 drwxr-xr-x. 14 lrwxrwxrwx. 1 drwxr-xr-x. 2 drwxr-xr-x. 2 drwxrwxrwt. 9 drwxr-xr-x. 13 drwxr-xr-x. 17 root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root root 7 4.0K 4.0K 4.0K 4.0K 7 9 16K 4.0K 4.0K 4.0K 4.0K 4.0K 4.0K 8 4.0K 4.0K 4.0K 4.0K 4.0K Oct Oct Oct Oct Oct Oct Oct Oct Feb Feb Feb Oct Oct Oct Oct Feb Oct Oct Oct Oct 15 15 15 15 15 15 15 15 3 3 3 15 15 15 15 3 15 15 15 15 00:44 01:07 00:42 11:31 01:07 00:44 00:44 00:42 2012 2012 2012 00:42 21:56 01:07 00:44 2012 00:42 16:29 00:44 00:44 bin -> usr/bin boot dev etc home lib -> usr/lib lib64 -> usr/lib64 lost+found media mnt opt proc root run sbin -> usr/sbin srv sys tmp usr var 4. 調査を完了すると、マウントポイントをアンマウントし、qemu-nbd デ バイスを解放します。 # umount /mnt # qemu-nbd -d /dev/nbd0 /dev/nbd0 disconnected 5. virsh を使用して、インスタンスを再開します。 # virsh list Id Name State ---------------------------------1 instance-00000981 running 2 instance-000009f5 running 30 instance-0000274a paused # virsh resume 30 Domain 30 resumed 177 OpenStack 運用ガイド February 1, 2016 ボリューム 影響するインスタンスもボリュームを接続していた場合、まずインスタ ンスとボリュームの UUID の一覧を生成します。 mysql> select nova.instances.uuid as instance_uuid, cinder.volumes.id as volume_uuid, cinder.volumes.status, cinder.volumes.attach_status, cinder.volumes.mountpoint, cinder.volumes.display_name from cinder.volumes inner join nova.instances on cinder.volumes.instance_uuid=nova.instances.uuid where nova.instances.host = 'c01.example.com'; 以下のような結果を確認できます: +--------------+------------+-------+--------------+-----------+--------------+ |instance_uuid |volume_uuid |status |attach_status |mountpoint | display_name | +--------------+------------+-------+--------------+-----------+--------------+ |9b969a05 |1f0fbf36 |in-use |attached |/dev/vdc | test | +--------------+------------+-------+--------------+-----------+--------------+ 1 row in set (0.00 sec) 次に、ボリュームを手動で切断し、再接続します。ここで X は適切なマ ウントポイントです。 # nova volume-detach <instance_uuid> <volume_uuid> # nova volume-attach <instance_uuid> <volume_uuid> /dev/vdX 上記を実行する前に、インスタンスが正常に起動し、ログイン画面に なっていることを確認します。 コンピュートノード全体の故障 コンピュートノードは、クラウドコントローラーの障害と同じように故 障します。マザーボードや他の種類のハードウェア障害により、コン ピュートノード全体がオフラインになる可能性があります。これが発生 した場合、そのコンピュートノードで動作中のインスタンスがすべて利 用できなくなります。ちょうどクラウドコントローラーが発生した場合 のように、インフラ監視機能がコンピュートノードの障害を検知しなく ても、インスタンスが失われるので、ユーザーが気づくでしょう。 コンピュートノードが故障し、2〜3時間もしくはそれ以上たっても復旧 できないと見込まれる場合、/var/lib/nova/instances に共有ストレー ジを使用していれば、故障したノードで動作していたインスタンスをす べて再スタートすることができます。 これを実行するために、nova データベースにおいて以下のクエリーを実 行することにより、故障したノードにおいてホストされているインスタ ンスの UUID の一覧を生成します。 mysql> select uuid from instances where host = \ 'c01.example.com' and deleted = 0; 178 OpenStack 運用ガイド February 1, 2016 次に、c01.example.com においてホストされていたすべてのインスタ ンスが、今度は c02.example.com でホストされることを伝えるために nova データベースを更新します。 mysql> update instances set host = 'c02.example.com' where host = \ 'c01.example.com' and deleted = 0; その後、nova コマンドを使って、c01.example.com にあったすべてのイ ンスタンスを再起動します。起動する際にインスタンスの XML ファイル を再生成します: # nova reboot --hard <uuid> 最後に、ボリュームのセクションで説明されているのと同じ方法を用い て、ボリュームを再接続します。 /var/lib/nova/instances コンピュートノードの故障の話題に関連して、このディレクトリについ ては説明しておく価値があるでしょう。このディレクトリには、コン ピュートノードにホストされているインスタンス用の libvirt KVM の ファイル形式のディスクイメージが置かれます。共有ストレージ環境で クラウドを実行していなければ、このディレクトリはコンピュートノー ド全体で一つしかありません。 /var/lib/nova/instances には 2 種類のディレクトリがあります。 一つ目は _base ディレクトリです。ここには、そのコンピュートノード で起動されたそれぞれのイメージに関して、glance から取得したすべて のベースイメージのキャッシュが置かれます。_20 (または他の番号) で 終わるファイルは一時ディスクのベースイメージです。 もう一つのディレクトリは instance-xxxxxxxx という名前です。これら のディレクトリはコンピュートノードにおいて実行中のインスタンスと 対応します。中にあるファイルは _base ディレクトリにあるファイルの どれかと関連があります。これらは基本的に、元々の _base ディレクト リからの変更点のみ含む、差分ベースのファイルです。 /var/lib/nova/instances にあるすべてのファイルとディレクトリ は一意に名前が付けられています。_base にあるファイルは元となっ た glance イメージに対応する一意に名前が付けられています。ま た、instance-xxxxxxxx という名前が付けられたディレクトリは特定の インスタンスに対して一意にタイトルが付けられています。たとえば、 あるコンピュートノードにある /var/lib/nova/instances のすべての データを他のノードにコピーしたとしても、ファイルを上書きすること はありませんし、また同じ一意な名前を持つイメージにダメージを与え 179 OpenStack 運用ガイド February 1, 2016 ることもありません。同じ一意な名前を持つものは本質的に同じファイ ルだからです。 この方法はドキュメントに書かれておらず、サポートされていない方法 ですが、コンピュートノードが完全にオフラインになってしまったが、 インスタンスがローカルに保存されているときに、この方法を使用でき ます。 ストレージノードの故障とメンテナンス オブジェクトストレージの高い冗長性のため、オブジェクトストレージ のノードに関する問題を処理することは、コンピュートノードに関する 問題を処理するよりも簡単です。 ストレージノードの再起動 ストレージノードを再起動する必要がある場合、単に再起動します。そ のノードに配置されているデータへのリクエストは、そのサーバーが再 起動している間、別のコピーにリダイレクトされます。 ストレージノードのシャットダウン ストレージノードを少し長い間 ( 1 日以上) シャットダウンする必要が あれば、ノードをストレージリングから削除することを検討します。例: # # # # # # swift-ring-builder swift-ring-builder swift-ring-builder swift-ring-builder swift-ring-builder swift-ring-builder account.builder remove <ip address of storage node> container.builder remove <ip address of storage node> object.builder remove <ip address of storage node> account.builder rebalance container.builder rebalance object.builder rebalance 次に、ring ファイルを他のノードに再配布します。 # > > > for i in s01.example.com s02.example.com s03.example.com do scp *.ring.gz $i:/etc/swift done これらの操作はストレージノードをストレージクラスターから効率的に 外せます。 ノードがクラスターに参加できるようになったら、ただリングに再度追 加するだけです。swift-ring-builder を使用して swift クラスターに ノードを追加するための構文は、元々クラスターを作成したときに使用 した元々のオプションに強く依存します。作成時に使用したコマンドを もう一度見てください。 180 OpenStack 運用ガイド February 1, 2016 Swift ディスクの交換 Object Storage ノードのハードディスクが故障した場合、その交換は比 較的簡単です。Object Storage 環境が正しく設定され、故障したディス クに保存されているデータが Object Storage 環境内の他のディスクに も複製されていることを前提にしています。 この例では、/dev/sdb が故障したと仮定します。 まず、ディスクをアンマウントします。 # umount /dev/sdb 次に、ディスクを物理的にサーバーから取り外し、正常なディスクと入 れ替えます。 オペレーティングシステムが新しいディスクを認識していることを確認 します。 # dmesg | tail /dev/sdb に関するメッセージを確認したほうがいいです。 Swift ディスクではパーティションを使用しないことが推奨されるの で、単にディスク全体をフォーマットします。 # mkfs.xfs /dev/sdb 最後に、ディスクをマウントします。 # mount -a Swift は新しいディスクを認識します。また、データが存在しないこと を認識します。そうすると、他の既存の複製からディスクにデータを複 製しはじめます。 完全な故障の対処 データセンターの電源障害など、完全なシステム障害からリカバリーす る一般的な方法は、各サービスに優先度を付け、順番に復旧していくこ とです。表11.1「サービス復旧優先度一覧の例」 [181] に例を示しま す。 表11.1 サービス復旧優先度一覧の例 優先度 サービス 1 内部ネットワーク接続性 181 OpenStack 運用ガイド February 1, 2016 優先度 サービス 2 バックエンドのストレージサービス 3 ユーザーの仮想マシンに対するパブリック ネットワーク接続性 4 nova-compute、nova-network、cinder ホスト 5 ユーザーの仮想マシン 10 メッセージキューとデータベースのサービス 15 Keystone サービス 20 cinder-scheduler 21 イメージカタログとイメージ配信のサービス 22 nova-scheduler サービス 98 cinder-api 99 nova-api サービス 100 ダッシュボードサービス この例にある優先度一覧を使用すると、きちんと安定した状態になる前 であっても、できる限り早くユーザーに影響するサービスを復旧させる ことができます。もちろん、1 行の項目として一覧化されていますが、 各ステップは多大な作業が必要です。たとえば、データベースを開始し た後、その完全性を確認すべきです。また、nova サービスを開始した 後、ハイパーバイザーがデータベースに一致しているかを確認し、不一 致があれば修正すべきです。 構成管理 OpenStack クラウドをメンテナンスするには、複数の物理サーバーを管 理することが必要です。そして、この数は日々増えていきます。ノード を手動で管理することはエラーを起こしやすいので、構成管理ツールを 使用することを強く推奨します。これらのツールはすべてのノードが適 切に設定されていることを保証するプロセスを自動化します。また、こ れらを使うことで、(パッケージや設定オプションといった) 構成情報の バージョン管理されたリポジトリでの管理が行いやすくなります。 ヒント いくつかの構成管理ツールがあります。このガイドでは特定 のものを推奨しません。OpenStack コミュニティで人気が あるものは Puppet と Chef の 2 つで、OpenStack 用の設 定集がそれぞれ OpenStack Puppet modules と OpenStack Chef recipes にあります。比較的新しい他のツールとして は、Juju、Ansible や Salt があります。もう少し成熟した ツールとしては CFEngine や Bcfg2 があります。 182 OpenStack 運用ガイド February 1, 2016 ハードウェアの取り扱い 初期導入時と同じように、本番環境に追加する前に、すべてのハード ウェアについて適切な通電テストを行うべきでしょう。ハードウェア を限界まで使用するソフトウェアを実行します。RAM、CPU、ディスク、 ネットワークを限界まで使用します。多くのオプションが利用可能で あり、通常はベンチマークソフトウェアとの役割も果たします。そのた め、システムのパフォーマンスに関する良いアイディアを得ることもで きます。 コンピュートノードの追加 コンピューティングリソースのキャパシティ限界に達した、または達し そうとわかれば、さらなるコンピュートノードの追加を計画すべきで す。さらなるコンピュートノードを追加することは簡単です。ノードを 追加する手順は、最初にコンピュートノードをクラウドに導入したとき と同じです。自動配備システムを使ってベアメタルサーバーにオペレー ティングシステムのインストールと起動を行い、次に構成管理システム により OpenStack Compute サービスのインストールと設定を行います。 他のコンピュートノードと同じ方法で Compute サービスのインストール と設定が終わると、自動的にクラウドに接続されます。クラウドコント ローラーが新しいノードを検知し、そこにインスタンスを起動するよう スケジュールし始めます。 OpenStack ブロックストレージノードがコンピュートノードから分離い る場合、同じキュー管理とポーリングのシステムが両方のサービスで使 用されるので、同じ手順が適用できます。 新しいコンピュートノードとブロックストレージノードには、同じハー ドウェアを使用することを推奨します。最低限、ライブマイグレーショ ンが失敗しないように、コンピュートノードでは CPU は同様のものにし てください。 オブジェクトストレージノードの追加 新しいオブジェクトストレージノードの追加は、コンピュートノードや ブロックストレージノードの追加とは異なります。サーバーの設定は、 これまで通り自動配備システムと構成管理システムを使って行えます。 完了した後、オブジェクトストレージノードのローカルディスクをオブ ジェクトストレージリングに追加する必要があります。これを実行する コマンドは、最初にディスクをリングに追加するのに使用したコマンド と全く同じです。オブジェクトストレージプロキシサーバーにおいて、 このコマンドを、新しいオブジェクトストレージノードにあるすべての 183 OpenStack 運用ガイド February 1, 2016 ディスクに対して、再実行するだけです。これが終わったら、リングの 再バランスを行い、更新されたリングファイルを他のストレージノード にコピーします。 注記 新しいオブジェクトストレージノードのディスク数が元々の ノードのディスク数と異なる場合には、新しいノードを追加 するコマンドが元々のコマンドと異なります。これらのパラ メーターは環境により異なります。 コンポーネントの交換 クラウドインフラなどの大規模環境では、ハードウェアの故障はよくあ ることです。作業内容を考慮し、可用性と時間の節約のバランスを取り ます。たとえば、オブジェクトストレージクラスターは、十分な容量が ある場合には、ある程度の期間は死んだディスクがあっても問題なく動 作します。また、(クラウド内の) コンピュートノードに空きがある場 合には、問題に対処する時間が取れるまで、ライブマイグレーションで RAM が故障したホストから他のホストへインスタンスを移動させること も考慮するとよいでしょう。 データベース ほとんどすべての OpenStack コンポーネントは、永続的な情報を保存す るために内部でデータベースを使用しています。このデータベースは通 常 MySQL です。通常の MySQL の管理方法がこれらのデータベースに適 用できます。OpenStack は特別な方法でデータベースを設定しているわ けではありません。基本的な管理として、パフォーマンス調整、高可用 性、バックアップ、リカバリーおよび修理などがあります。さらなる情 報は標準の MySQL 管理ガイドを参照してください。 より迅速に情報を取得したり、データ不整合のエラーを修正したりする ために、データベースでいくつかの小技を実行できます。たとえば、 インスタンスが終了していたが、データベースの状態が更新されていな かった、という状況です。こうした小技がこのドキュメント全体を通し て議論されています。 データベース接続性 コンポーネントの設定ファイルを確認して、それぞれの OpenStack コン ポーネントが対応するデータベースにどのようにアクセスするかを把握 ください。sql_connection またはただの connection を探します。以下 184 OpenStack 運用ガイド February 1, 2016 のコマンドは、grep を使用して、nova、glance、cinder、keystone の SQL 接続文字列を表示します。 # grep -hE "connection ?=" /etc/nova/nova.conf /etc/glance/glance-*.conf /etc/cinder/cinder.conf / etc/keystone/keystone.conf sql_connection = mysql+pymysql://nova:[email protected]/nova sql_connection = mysql+pymysql://glance:[email protected]/glance sql_connection = mysql+pymysql://glance:[email protected]/glance sql_connection = mysql+pymysql://cinder:[email protected]/cinder connection = mysql+pymysql://keystone_admin:[email protected]/keystone connection 文字列は以下の形式をとります。 mysql+pymysql:// <username> : <password> @ <hostname> / <database name> パフォーマンスと最適化 クラウドが大きくなるにつれて、MySQL がさらに使用されてきま す。MySQL がボトルネックになってきたことが疑われる場合、MySQL 最適化の調査から始めるとよいでしょう。MySQL のマニュアルで は、Optimization Overview というセクションがあり、一つのセクショ ン全部をあててこの話題を扱っています。 HDWMY これらは、毎時間、日、週、月および年に実行する To Do 項目の簡単な 一覧です。これらのタスクは必要なものでも、絶対的なものでもありま せんが、役に立つものばかりです。 毎時 • 監視システムのアラートを確認し、それらに対処します。 • チケットキューの新しいチケットを確認します。 日次 • 故障または異常になっているインスタンスを確認し、理由を調査しま す。 • セキュリティパッチを確認し、必要に応じて適用します。 週次 • クラウドの使用量を確認します: • ユーザークォータ 185 OpenStack 運用ガイド February 1, 2016 • ディスク領域 • イメージ使用量 • 大きなインスタンス • ネットワーク使用量 (帯域および IP 使用量) • アラート機能が動作していることを確認します。 月次 • この 1 か月における使用量および傾向を確認します。 • 削除すべきユーザーアカウントを確認します。 • 削除すべきオペレーターアカウントを確認します。 四半期ごと • この四半期における使用量および傾向を確認します。 • 使用量と統計に関する四半期レポートを準備します。 • クラウドの追加の必要性を検討し、計画を立てます。 • OpenStack のメジャーアップグレードの内容を確認し、その計画を立 てます。 1 年に 2 回 • OpenStack をアップグレードします。 • OpenStack のアップグレード後に後始末を行います (未使用または新 しいサービスを把握していますか?)。 故障しているコンポーネントの特定 OpenStack は、異なるコンポーネント同士が互いに強く連携して動作し ています。たとえば、イメージのアップロードでは、nova-api, glanceapi, glance-registry, keystone が連携する必要があります。 swiftproxy も関係する場合があります。その結果、時として問題が発生して いる箇所を正確に特定することが難しくなります。これを支援すること がこのセクションの目的です。 186 OpenStack 運用ガイド February 1, 2016 最新ログの確認 最初に確認する場所は、実行しようとしているコマンドに関連するログ ファイルです。たとえば、nova list が失敗していれば、nova ログファ イルを tail 表示しながら、次のコマンドを再実行してください: 端末 1: # tail -f /var/log/nova/nova-api.log 端末 2: # nova list 何らかのエラーまたはトレースをログファイルで探します。詳細は 13章 ロギングと監視 [215] を参照してください。 エラーから問題が他のコンポーネントにあることが分かる場合には、 そのコンポーネントのログファイルに表示を切り替えます。nova が glance にアクセスできなければ、glance-api ログを確認します: 端末 1: # tail -f /var/log/glance/api.log 端末 2: # nova list 問題の根本となる原因を見つけるまで、洗い出し、精査し、繰り返しま す。 コマンドラインでのデーモンの実行 残念ながら、ときどきエラーがログファイルに表れない場合がありま す。このような場合、作戦を変更し、違うコマンドを使用します。おそ らくコマンドラインにおいて直接サービスを実行することです。たとえ ば、glance-api サービスが起動しなかったり、実行状態にとどまらない 場合は、コマンドラインからデーモンを起動してみます: # sudo -u glance -H glance-api これにより、エラーと問題の原因が表示されるかもしれません。 注記 sudo を用いてデーモンを実行するとき、-H フラグが必要 です。いくつかのデーモンは、ユーザーのホームディレクト 187 OpenStack 運用ガイド February 1, 2016 リーからの相対パスのファイルに書き込みを行うため、-H が ないと、この書き込みが失敗してしまいます。 複雑な例 ある朝、あるノードでインスタンスの実行がすべて失敗するように なりました。ログファイルがすこしあいまいでした。特定のインス タンスが起動できなかったことを示していました。これは最終的に 偽の手掛かりであることがわかりました。単にそのインスタンスが アルファベット順で最初のインスタンスだったので、nova-compute が最初に操作したのがそのインスタンスだったというだけでした。 さらなるトラブルシューティングにより、libvirt がまったく 動作していないことがわかりました。これは大きな手がかりで す。libvirt が動作していないと、KVM によるインスタンスの仮想 化ができません。libvirt を開始させようとしても、libvirt は何 も表示せずすぐに停止しました。libvirt のログでは理由がわかり ませんでした。 次に、libvirtd デーモンをコマンドラインにおいて実行しまし た。最終的に次のような役に立つエラーメッセージが得られまし た。d-bus に接続できませんでした。このため、滑稽に聞こえる かもしれませんが、libvirt 、その結果として nova-compute も D-Bus に依存していて、どういう訳か D-Bus がクラッシュしまし た。単に D-Bus を開始するだけで、一連のプログラムがうまく動 くようになり、すぐに全部が元に戻り動作状態になりました。 188 OpenStack 運用ガイド February 1, 2016 アンインストール 我々は常に、自動配備システムを使って、まっさらの状態からシステム を再インストールすることを進めていますが、時として OpenStack を地 道にシステムから削除しなければならない場合もあるでしょう。その場 合には以下の手順となります。 • すべてのパッケージを削除します。 • 残っているファイルを削除します。 • データベースを削除します。 これらの手順はお使いのディストリビューションにより異なります が、一般には aptitude purge ~c $package のようなパッケージマネー ジャーの「purge(完全削除)」コマンドを探すとよいでしょう。その後 で、このガイドの中に出てきたディレクトリにある不要なファイルを探 します。データベースを適切にアンインストールする方法については、 使用しているソフトウェアの適切なマニュアルを参照して下さい。 189 OpenStack 運用ガイド February 1, 2016 第12章 ネットワークのトラブル シューティング 「ip a」を使ってインタフェース状態をチェックする ............ クラウド上の nova-network 通信の仮想化 ..................... クラウド上の OpenStack Networking サービス通信の仮想化 ...... 経路上の障害を見つける ..................................... tcpdump .................................................... iptables ................................................... nova-network 用データベースにあるネットワーク設定 ........... nova-network の DHCP 問題の デバッグ ....................... DNS の問題をデバッグする ................................... Open vSwitch のトラブルシューティング ...................... ネットワーク名前空間への対応 ............................... 概要 ....................................................... 191 192 193 201 201 203 204 205 209 210 212 213 ネットワークのトラブルシューティングは、残念ながら、非常に難 しくややこしい作業です。ネットワークの問題は、クラウドのいく つかの場所で問題となりえます。論理的な問題解決手順を用いること は、混乱の緩和や迅速な切り分けに役立つでしょう。この章は、novanetwork、Linux ブリッジや Open vSwitch を用いた OpenStack Networking (neutron) に関する何らかの問題を識別するために必要とな る情報を提供することを目的とします。 「ip a」を使ってインタフェース状態を チェックする コンピュートノードおよび nova-network を実行しているノードにお いて、以下のコマンドを使用して、IP、VLAN、起動状態などのインター フェースに関する情報を参照します。 # ip a もしあなたがネットワークの問題に直面した場合、まず最初にするとよ いのは、インターフェイスがUPになっているかを確認することです。例 えば、 $ ip a | grep state 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 191 OpenStack 運用ガイド February 1, 2016 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br100 state UP qlen 1000 4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 5: br100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP virbr0 の状態は無視することができます。なぜならそれはlibvirtが作 成するデフォルトのブリッジで、OpenStackからは使われないからです。 クラウド上の nova-network 通信の仮想 化 インスタンスにログインして、外部ホスト (例えば Google) に ping する場合、ping パケットは図12.1「ping パケットの通信ルー ト」 [192]に示されたルートを通ります。 図12.1 ping パケットの通信ルート 1. インスタンスはパケットを生成し、インスタンス内の仮想NIC、例えば eth0にそれを渡します。 2. そのパケットはコンピュートホストの仮想NIC、例えば vnet1に 転送されます。vnet NICの構成は、/etc/libvirt/qemu/instancexxxxxxxx.xml を見ることで把握できます。 3. パケットはvnet NICからコンピュートノードのブリッジ、例え ばbr100に転送されます。 もしFlatDHCPManagerを使っているのであれば、ブリッジはコンピュー トノード上に一つです。VlanManagerであれば、VLANごとにブリッジが 存在します。 192 OpenStack 運用ガイド February 1, 2016 下記コマンドを実行することで、パケットがどのブリッジを使うか確 認できます。 $ brctl show vnet NICを探してください。ま た、nova.confのflat_interface_bridgeオプションも参考になりま す。 4. パケットはコンピュートノードの物理NICに送られます。このNIC はbrctlコマンドの出力から、もしくはnova.confのflat_interfaceオ プションから確認できます。 5. パケットはこのNICに送られた後、コンピュートノードのデフォルト ゲートウェイに転送されます。パケットはこの時点で、おそらくあ なたの管理範囲外でしょう。図には外部ゲートウェイを描いています が、マルチホストのデフォルト構成では、コンピュートホストがゲー トウェイです。 ping 応答のパスを確認するために、方向を反転させます。この経路説明 によって、あなたはパケットが4つの異なるNICの間を行き来しているこ とがわかったでしょう。これらのどのNICに問題が発生しても、ネット ワークの問題となるでしょう。 クラウド上の OpenStack Networking サービス通信の仮想化 OpenStack Networking は、バックエンドをプラグインできるの で、nova-network よりも自由度が大きいです。SDN ハードウェアを制 御するオープンソースやベンダー製品のプラグイン、ホストで動作する Open vSwitch や Linux Bridge などの Linux ネイティブの機能を使用 するプラグインを用いて設定できます。 OpenStack Cloud Administrator Guide のネットワークの章に、さまざ まな種類のネットワークのシナリオや接続パスがあります。このセク ションの目的は、どのようにお使いの環境に一緒に関わっているかによ らず、さまざまなコンポーネントをトラブルシューティングするための ツールを提供します。 この例のために、Open vSwitch (OVS) バックエンドを使用します。他 のバックエンドプラグインは、まったく別のフロー経路になるでしょ う。OVS は、最も一般的に配備されているネットワークドライバーで 193 OpenStack 運用ガイド February 1, 2016 す。2015 年 10 月の OpenStack User Survey によると、2 番目の Linux Bridge ドライバーよりも、41% 以上も多くのサイトで使用されて います。図12.2「Neutron ネットワーク経路」 [195] を参照しながら、 各手順を順番に説明していきます。 1. インスタンスはパケットを生成し、インスタンス内の仮想NIC、例えば eth0にそれを渡します。 2. そのパケットはコンピュートホストの Test Access Point (TAP)、例 えば tap690466bc-92 に転送されます。TAP の構成は、/etc/libvirt/ qemu/instance-xxxxxxxx.xml を見ることで把握できます。 TAP デバイス名は、ポート ID の先頭 11 文字 (10 桁の16進数とハイ フン) を使用して作られます。そのため、デバイス名を見つける別の 手段として、neutron コマンドを使用できます。これは、パイプ区切 りの一覧を返し、最初の項目がポート ID です。例えば、次のように IP アドレス 10.0.0.10 に関連づけられているポート ID を取得しま す。 # neutron port-list | grep 10.0.0.10 | cut -d \| -f 2 ff387e54-9e54-442b-94a3-aa4481764f1d この出力から最初の 11 文字をとり、デバイス名 tapff387e54-9e を 作ることができます。 194 OpenStack 運用ガイド February 1, 2016 図12.2 Neutron ネットワーク経路 195 OpenStack 運用ガイド February 1, 2016 3. TAP デバイスは統合ブリッジ br-int に接続されます。このブリッジ は、すべてのインスタンスの TAP デバイスや他のシステム上のブリッ ジを接続します。この例では、int-br-eth1 と patch-tun がありま す。int-br-eth1 は、ブリッジ br-eth1 に接続している veth ペアの 片側です。これは、物理イーサネットデバイス eth1 経由でトランク される VLAN ネットワークを処理します。patch-tun は、GRE ネット ワークの br-tun ブリッジに接続している Open vSwitch 内部ポート です。 TAP デバイスと veth デバイスは、通常の Linux ネットワークデバ イスです。ip や tcpdump などの通常のツールを用いて調査できるで しょう。patch-tun のような Open vSwitch 内部デバイスは、Open vSwitch 環境の中だけで参照できます。tcpdump -i patch-tun を実行 しようとした場合、デバイスが存在しないというエラーが発生するで しょう。 内部インターフェースにおいてパケットを監視することもできます が、少しネットワークを操作する必要があります。まず、通常の Linux ツールが参照できるダミーネットワークデバイスを作成する必 要があります。次に、監視したい内部インターフェースを含むブリッ ジにそれを追加する必要があります。最後に、内部ポートのすべての 通信をこのダミーポートにミラーするよう Open vSwitch に通知する 必要があります。これをすべて終えた後、ダミーインターフェースで tcpdump を実行して、内部ポートの通信を参照できます。 統合ブリッジ br-int の内部インターフェース patch-tun か らのパケットをキャプチャーする方法。 1. ダミーインターフェース snooper0 を作成して起動します。 # ip link add name snooper0 type dummy # ip link set dev snooper0 up 2. snooper0 デバイスを br-int ブリッジに追加します。 # ovs-vsctl add-port br-int snooper0 3. patch-tun のミラーを snooper0 に作成します (ミラーポートの UUID を返します)。 # ovs-vsctl -- set Bridge br-int mirrors=@m -- --id=@snooper0 \ get Port snooper0 -- --id=@patch-tun get Port patch-tun \ -- --id=@m create Mirror name=mymirror select-dst-port=@patch-tun \ select-src-port=@patch-tun output-port=@snooper0 select_all=1 196 OpenStack 運用ガイド February 1, 2016 4. これでうまくいきます。tcpdump -i snooper0 を実行し て、patch-tun の通信を参照できます。 5. br-int にあるすべてのミラーを解除して、ダミーインターフェー スを削除することにより、クリーンアップします。 # ovs-vsctl clear Bridge br-int mirrors # ovs-vsctl del-port br-int snooper0 # ip link delete dev snooper0 内部ブリッジにおいて、ネットワークサービスがどのように定義され ているかによらず、ネットワークは内部 VLAN を使用して区別され ます。これにより、同じホストにあるインスタンスが、仮想、物理、 ネットワークを転送することなく直接通信できるようになります。こ れらの内部 VLAN ID は、ノードにおいて作成された順番に基づき、 ノード間で異なる可能性があります。これらの ID は、ネットワーク 定義および物理結線において使用されるセグメント ID にまったく関 連しません。 VLAN タグは、ネットワーク設定において定義された外部タグといくつ かの場所にある内部タグの間で変換されます。br-int において、intbr-eth1 からの受信パケットは、外部タグから内部タグへと変換され ます。他の変換が他のブリッジにおいても発生します。これらのセク ションで議論されます。 4. 次の手順は、仮想ネットワークが 802.1q VLAN タグや GRE を使用す るよう設定しているかどうかに依存します。 a. VLAN ベースのネットワークは、仮想インターフェース int-breth1 経由で統合ブリッジを抜けて、仮想イーサネットペア phybr-eth1 の他のメンバーにあるブリッジ br-eth1 に届きます。こ のインターフェースのパケットは、内部 VLAN タグとともに届き、 上で説明したプロセスの逆順において外部タグに変換されます。 # ovs-ofctl dump-flows br-eth1|grep 2113 cookie=0x0, duration=184168.225s, table=0, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=4,in_port=1,dl_vlan=7 actions=mod_vlan_vid:2113,NORMAL パケットは、いま外部 VLAN タグを付けられ、eth1 経由で物理 ネットワークに出ていきます。このインターフェースが接続されて いる L2 スイッチは、使用される VLAN ID を持つ通信を許可する よう設定する必要があります。このパケットの次のホップも、同じ L2 ネットワーク上になければいけません。 197 OpenStack 運用ガイド February 1, 2016 b. GRE ベースのネットワークは、patch-tun を用いて、patch-int イ ンターフェースの br-tun トンネルブリッジに渡されます。このブ リッジは、各 GRE トンネルの 1 つのポートにも含まれます。つま り、ネットワーク上の各コンピュートノードとネットワークノード に対して 1 つです。ポートの名前は、gre-1 から順番に増えてい きます。 gre-<n> インターフェースとトンネルエンドポイントを一致させる ことは、おそらく Open vSwitch の状態を見ることになります。 # ovs-vsctl show |grep -A 3 -e Port\ \"grePort "gre-1" Interface "gre-1" type: gre options: {in_key=flow, local_ip="10.10.128.21", out_key=flow, remote_ip="10.10.128.16"} この場合、gre-1 が IP 10.10.128.21 からリモートの IP 10.10.128.16 へのトンネルです。これは、このノードのローカル インターフェースと一致します。 これらのトンネルは、ホストにおいて通常のルーティングテーブ ルを使用して、できあがった GRE パケットを中継します。そのた め、VLAN カプセル化と異なり、GRE エンドポイントがすべて同じ L2 ネットワークにあるという要件は必要ありません。 br-tun にあるすべてのインターフェースは、Open vSwitch 内部 のものです。それらの通信を監視する場合、br-int にある patchtun 向けに上で説明したようなミラーポートをセットアップする必 要があります。 このブリッジで GRE トンネルと内部 VLAN の相互変換が行われま す。 ovs-ofctl コマンドを使用することにより、GRE トンネル向 けに使用されている内部 VLAN タグを検索します。 1. 興味あるネットワークの provider:segmentation_id を探しま す。これは、VLAN ベースのネットワークにおける VLAN ID に使 用されるものと同じ項目です。 # neutron net-show --fields provider:segmentation_id <network name> +--------------------------+-------+ | Field | Value | +--------------------------+-------+ | provider:network_type | gre | 198 OpenStack 運用ガイド February 1, 2016 | provider:segmentation_id | 3 | +--------------------------+-------+ 2. この場合、ovs-ofctl dump-flows br-tun の出力で 0x<provider:segmentation_id>, 0x3 を grep します。 # ovs-ofctl dump-flows br-tun|grep 0x3 cookie=0x0, duration=380575.724s, table=2, n_packets=1800, n_bytes=286104, priority=1,tun_id=0x3 actions=mod_vlan_vid:1,resubmit(,10) cookie=0x0, duration=715.529s, table=20, n_packets=5, n_bytes=830, hard_timeout=300,priority=1, vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:a6:48:24 actions=load:0->NXM_OF_VLAN_TCI[], load:0x3->NXM_NX_TUN_ID[],output:53 cookie=0x0, duration=193729.242s, table=21, n_packets=58761, n_bytes=2618498, dl_vlan=1 actions=strip_vlan,set_tunnel:0x3, output:4,output:58,output:56,output:11,output:12,output:47, output:13,output:48,output:49,output:44,output:43,output:45, output:46,output:30,output:31,output:29,output:28,output:26, output:27,output:24,output:25,output:32,output:19,output:21, output:59,output:60,output:57,output:6,output:5,output:20, output:18,output:17,output:16,output:15,output:14,output:7, output:9,output:8,output:53,output:10,output:3,output:2, output:38,output:37,output:39,output:40,output:34,output:23, output:36,output:35,output:22,output:42,output:41,output:54, output:52,output:51,output:50,output:55,output:33 ここで、この GRE トンネルに関連する 3 つのフローを見つけら れます。1 番目は、このトンネル ID を持つ受信パケットから 内部 VLAN ID 1 に変換したものです。2 番目は、MAC アドレス fa:16:3e:a6:48:24 宛のパケットに対する送信ポート 53 番への ユニキャストフローです。3 番目は、内部 VLAN 表現から、すべ ての出力ポートにあふれ出した GRE トンネル ID に変換したもの です。フローの説明の詳細は ovs-ofctl のマニュアルページを参 照してください。前の VLAN の例にあるように、数値ポート ID は、ovs-ofctl show br-tun の出力を検査することにより、それ らの名前を付けた表現に対応付けられます。 5. 次に、パケットはネットワークノードで受信されます。L3 エージェン トや DHCP エージェントへのすべての通信は、それらのネットワーク 名前空間の中のみで参照できます。それらの名前空間の外部にあるす べてのインターフェースを監視することにより、ネットワーク通信を 転送している場合でも、ARP のようなブロードキャストパケットのみ が表示されます。しかし、ルーターや DHCP アドレスへのユニキャス ト通信は表示されません。これらの名前空間の中でコマンドを実行す る方法の詳細は、Dealing with Network Namespacesを参照してくださ い。 199 OpenStack 運用ガイド February 1, 2016 これとは別に、外部ルーターが同じ VLAN にあれば、ここの示されて いる L3 エージェントの代わりに外部ルーターを使用するよう、VLAN ベースのネットワークを設定できます。 a. VLAN ベースのネットワークは、この例にある物理ネットワークイ ンターフェース eth1 においてタグ付きパケットとして受信されま す。コンピュートノードでは、このインターフェースが br-eth1 ブリッジのメンバーです。 b. GRE ベースのネットワークは、トンネルブリッジ br-tun に転送 されます。これは、コンピュートノードにおいて GRE インター フェースのように動作します。 6. 次に、何かしらの入力パケットは統合ブリッジ経由で送信されます。 繰り返しますが、コンピュートノードと同じようなものです。 7. そして、パケットが L3 エージェントに到達します。これは実際に は、ルーターの名前空間の中にある別の TAP デバイスです。ルーター 名前空間は、qrouter-<router-uuid> という形式の名前です。名前空 間の中で ip a を実行することにより、TAP デバイスの名前を表示し ます。この例では qr-e6256f7d-31 です。 # ip netns exec qrouter-e521f9d0-a1bd-4ff4-bc81-78a60dd88fe5 ip a|grep state 10: qr-e6256f7d-31: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN 11: qg-35916e1f-36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 500 28: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 8. l3-agent のルーターの名前空間にある qg-<n> インターフェースは、 外部ブリッジ br-ex にある eth2 デバイス経由で次のホップにパケッ トを送信します。このブリッジは、br-eth1 と同じように作られ、同 じ方法で検査できるでしょう。 9. この外部ブリッジも物理ネットワークインターフェースに含まれま す。この例では eth2 です。これは、最終的に外部ルーターや送信先 に向けた外部ネットワークのパケットを受け取ります。 10.OpenStack ネットワークで動作している DHCP エージェントは、l3agent と同じような名前空間で動作します。DHCP 名前空間は、qdhcp<uuid> という名前を持ち、統合ブリッジに TAP デバイスを持ちま す。DHCP の問題のデバッグは、通常この名前空間の中での動作に関連 します。 200 OpenStack 運用ガイド February 1, 2016 経路上の障害を見つける ネットワーク経路のどこに障害があるかを素早く見つけるには、pingを 使います。まずあなたがインスタンス上で、google.comのような外部ホ ストにpingできるのであれば、ネットワークの問題はないでしょう。 もしそれができないのであれば、インスタンスがホストされているコン ピュートノードのIPアドレスへpingを試行してください。もしそのIPに pingできるのであれば、そのコンピュートノードと、ゲートウェイ間の どこかに問題があります。 もしコンピュートノードのIPアドレスにpingできないのであれば、問題 はインスタンスとコンピュートノード間にあります。これはコンピュー トノードの物理NICとインスタンス vnet NIC間のブリッジ接続を含みま す。 最後のテストは、2 つ目のインスタンスを起動して、2 つのインスタン スがお互いに ping できることを確認することです。もしできる場合、 問題はコンピュートノードのファイアウォールに関連するものでしょ う。 tcpdump ネットワーク問題の解決を徹底的に行う方法のひとつは、tcpdumpで す。tcpdumpを使い、ネットワーク経路上の数点、問題のありそうなと ころから情報を収集することをおすすめします。もしGUIが好みであれ ば、Wiresharkを試してみてはいかがでしょう。 例えば、以下のコマンドを実行します。 tcpdump -i any -n -v \ 'icmp[icmptype] = icmp-echoreply or icmp[icmptype] = icmp-echo' このコマンドは以下の場所で実行します。 1. クラウド外部のサーバー 2. コンピュートノード 3. コンピュートノード内のインスタンス 例では、この環境には以下のIPアドレスが存在します Instance 10.0.2.24 201 OpenStack 運用ガイド February 1, 2016 203.0.113.30 Compute Node 10.0.0.42 203.0.113.34 External Server 1.2.3.4 次に、新しいシェルを開いて tcpdump の動いている外部ホストへpingを 行います。もし外部サーバーとのネットワーク経路に問題がなければ、 以下のように表示されます。 外部サーバー上 12:51:42.020227 IP (tos 0x0, ttl proto ICMP (1), length 84) 203.0.113.30 > 1.2.3.4: ICMP 12:51:42.020255 IP (tos 0x0, ttl proto ICMP (1), length 84) 1.2.3.4 > 203.0.113.30: ICMP length 64 61, id 0, offset 0, flags [DF], echo request, id 24895, seq 1, length 64 64, id 8137, offset 0, flags [none], echo reply, id 24895, seq 1, コンピュートノード上 12:51:42.019519 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.2.24 > 1.2.3.4: ICMP echo request, id 24895, seq 1, length 64 12:51:42.019519 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 10.0.2.24 > 1.2.3.4: ICMP echo request, id 24895, seq 1, length 64 12:51:42.019545 IP (tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84) 203.0.113.30 > 1.2.3.4: ICMP echo request, id 24895, seq 1, length 64 12:51:42.019780 IP (tos 0x0, ttl 62, id 8137, offset 0, flags [none], proto ICMP (1), length 84) 1.2.3.4 > 203.0.113.30: ICMP echo reply, id 24895, seq 1, length 64 12:51:42.019801 IP (tos 0x0, ttl 61, id 8137, offset 0, flags [none], proto ICMP (1), length 84) 1.2.3.4 > 10.0.2.24: ICMP echo reply, id 24895, seq 1, length 64 12:51:42.019807 IP (tos 0x0, ttl 61, id 8137, offset 0, flags [none], proto ICMP (1), length 84) 1.2.3.4 > 10.0.2.24: ICMP echo reply, id 24895, seq 1, length 64 インスタンス上 12:51:42.020974 IP (tos 0x0, ttl 61, id 8137, offset 0, flags [none], proto ICMP (1), length 84) 1.2.3.4 > 10.0.2.24: ICMP echo reply, id 24895, seq 1, length 64 外部サーバーはpingリクエストを受信し、pingリプライを送信していま す。コンピュートノード上では、pingとpingリプライがそれぞれ成功し ていることがわかります。また、見ての通り、コンピュートノード上で 202 OpenStack 運用ガイド February 1, 2016 はパケットが重複していることもわかるでしょう。なぜならtcpdumpはブ リッジと外向けインターフェイスの両方でパケットをキャプチャーする からです。 iptables nova-network か neutron に関わらず、OpenStack Compute は自動的に iptables を管理します。コンピュートノードにあるインスタンスとの パケット転送、Floating IP 通信の転送、セキュリティグループルール の管理など。ルールの管理に加えて、(サポートされる場合) コメントが ルールに挿入され、ルールの目的を理解しやすくします。 以下のコメントが、適切にルールセットに追加されます。 • 送信方向にソース NAT 実行。 • 一致しない通信のデフォルト破棄ルール。 • 仮想マシンインスタンスからセキュリティグループチェインへの直接 通信。 • 仮想マシン固有チェインへのジャンプ。 • 仮想マシンからセキュリティグループチェインへの直接受信。 • 定義済み IP/MAC ペアからの通信許可。 • IP/MAC 許可ルールにない通信の破棄。 • DHCP クライアント通信の許可。 • 仮想マシンによる DHCP スプーフィングの防止。 • 一致しない通信のフォールバックチェインへの送信。 • どの状態にも関連付けられていないパケットの破棄。 • 既知のセッションに関連付けられたパケットの RETURN チェインへの 転送。 • RA パケットを許可するための IPv6 ICMP 通信の許可。 iptablesの現在の構成を見るには、以下のコマンドを実行します。 # iptables-save 203 OpenStack 運用ガイド February 1, 2016 注記 もしiptablesの構成を変更した場合、次のnovanetworkやneutron-serverの再起動時に前の状態に戻りま す。iptablesの管理にはOpenStackを使ってください。 nova-network 用データベースにあるネッ トワーク設定 nova-network を用いると、nova データベーステーブルは、いくつかの ネットワーク情報を持つテーブルがあります。 fixed_ips novaに登録されたサブネットで利用可能なIPアドレ ス。このテーブルは fixed_ips.instance_uuid 列で instances テーブルと関連付けられます。 floating_ips Compute に登録された各 Floating IP アドレス。 このテーブルは floating_ips.fixed_ip_id 列で fixed_ips テーブルと関連付けられます。 instances ネットワーク特有のテーブルではありません が、fixed_ipとfloating_ipを使っているインスタンス の情報を管理します。 これらのテーブルから、Floating IPが技術的には直接インスタンスにひ も付けられておらず、固定IP経由であることがわかります。 Floating IP の手動割り当て解除 しばしば、フローティングIPを正しく開放しないままインスタンスが終 了されることがあります。するとデータベースは不整合状態となるた め、通常のツールではうまく開放できません。解決するには、手動で データベースを更新する必要があります。 まず、インスタンスのUUIDを確認します。 mysql> select uuid from instances where hostname = 'hostname'; 次に、そのUUIDから固定IPのエントリーを探します。 mysql> select * from fixed_ips where instance_uuid = '<uuid>'; 関連する Floating IP のエントリーが見つかります。 mysql> select * from floating_ips where fixed_ip_id = '<fixed_ip_id>'; 204 OpenStack 運用ガイド February 1, 2016 最後に、floating IPを開放します。 mysql> update floating_ips set fixed_ip_id = NULL, host = NULL where fixed_ip_id = '<fixed_ip_id>'; また、ユーザプールからIPを開放することもできます。 mysql> update floating_ips set project_id = NULL where fixed_ip_id = '<fixed_ip_id>'; nova-network の DHCP 問題の デバッグ よくあるネットワークの問題に、インスタンスが起動しているにも関わ らず、dnsmasqからのIPアドレス取得に失敗し、到達できないという現象 があります。dnsmasqはnova-networkサービスから起動されるDHCPサーバ です。 もっともシンプルにこの問題を特定する方法は、インスタンス上のコン ソール出力を確認することです。もしDHCPが正しく動いていなければ、 下記のようにコンソールログを参照してください。 $ nova console-log <instance name or uuid> もしインスタンスがDHCPからのIP取得に失敗していれば、いくつかの メッセージがコンソールで確認できるはずです。例えば、Cirrosイメー ジでは、以下のような出力になります。 udhcpc (v1.17.2) started Sending discover... Sending discover... Sending discover... No lease, forking to background starting DHCP forEthernet interface eth0 [ [1;32mOK[0;39m ] cloud-setup: checking http://169.254.169.254/2009-04-04/meta-data/instance-id wget: can't connect to remote host (169.254.169.254): Network is unreachable インスタンスが正しく起動した後、この手順でどこが問題かを切り分け ることができます。 DHCPの問題はdnsmasqの不具合が原因となりがちです。まず、ログを確認 し、その後該当するプロジェクト(テナント)のdnsmasqプロセスを再起動 してください。VLANモードにおいては、dnsmasqプロセスはテナントごと に存在します。すでに該当のdnsmasqプロセスを再起動しているのであれ ば、もっともシンプルな解決法は、マシン上の全てのdnsmasqプロセスを killし、nova-networkを再起動することです。最終手段として、rootで 以下を実行してください。 205 OpenStack 運用ガイド February 1, 2016 # killall dnsmasq # restart nova-network 注記 RHEL/CentOS/Fedora の場合は openstack-nova-network を使 用しますが、Ubuntu/Debian の場合は nova-network を使用 します。 nova-networkの再起動から数分後、新たなdnsmasqプロセスが動いている ことが確認できるでしょう。 206 OpenStack 運用ガイド February 1, 2016 # ps aux | grep dnsmasq nobody 3735 0.0 0.0 27540 1044 ? S 15:40 0:00 /usr/sbin/dnsmasq --strictorder --bind-interfaces --conf-file= --domain=novalocal --pid-file=/var/lib/nova/networks/nova-br100.pid --listen-address=192.168.100.1 --except-interface=lo --dhcp-range=set:'novanetwork',192.168.100.2,static,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br100.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro root 3736 0.0 0.0 27512 444 ? S 15:40 0:00 /usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= --domain=novalocal --pid-file=/var/lib/nova/networks/nova-br100.pid --listen-address=192.168.100.1 --except-interface=lo --dhcp-range=set:'novanetwork',192.168.100.2,static,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br100.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro もしまだインスタンスがIPアドレスを取得できない場合、次はdnsmasqが インスタンスからのDHCPリクエストを見えているか確認します。dnsmasq プロセスが動いているマシンで、/var/log/syslogを参照し、dnsmasq の出力を確認します。なお、マルチホストモードで動作している場合 は、dnsmasqプロセスはコンピュートノードで動作します。もしdnsmasq がリクエストを正しく受け取り、処理していれば、以下のような出力に なります。 Feb 27 22:01:36 mynode dnsmasq-dhcp[2438]: DHCPDISCOVER(br100) fa:16:3e:56:0b:6f Feb 27 22:01:36 mynode dnsmasq-dhcp[2438]: DHCPOFFER(br100) 192.168.100.3 fa:16:3e:56:0b:6f Feb 27 22:01:36 mynode dnsmasq-dhcp[2438]: DHCPREQUEST(br100) 192.168.100.3 fa:16:3e:56:0b:6f Feb 27 22:01:36 mynode dnsmasq-dhcp[2438]: DHCPACK(br100) 192.168.100.3 fa:16:3e:56:0b:6f test もしDHCPDISCOVERが見つからなければ、dnsmasqが動いているマシンがイ ンスタンスからパケットを受け取れない何らかの問題があります。もし 上記の出力が全て確認でき、かついまだにIPアドレスを取得できないの であれば、パケットはインスタンスからdnsmasq稼働マシンに到達してい ますが、その復路に問題があります。 このようなメッセージも確認できるかもしれません。 Feb 27 22:01:36 mynode dnsmasq-dhcp[25435]: DHCPDISCOVER(br100) fa:16:3e:78:44:84 no address available 207 OpenStack 運用ガイド February 1, 2016 これはdnsmasqの、もしくはdnsmasqとnova-network両方の問題です。(例 えば上記では、OpenStack Compute データベース上に利用可能な固定IP がなく、dnsmasqがIPアドレスを払い出せない問題が発生しています) もしdnsmasqのログメッセージで疑わしいものがあれば、コマンドライン にてdnsmasqが正しく動いているか確認してください。 $ ps aux | grep dnsmasq 出力は以下のようになります。 108 1695 0.0 0.0 25972 1000 ? S Feb26 0:00 /usr/sbin/dnsmasq -u libvirt-dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/libvirt/network/default.pid --conf-file= --except-interface lo --listen-address 192.168.122.1 --dhcp-range 192.168.122.2,192.168.122.254 --dhcp-leasefile=/var/lib/libvirt/dnsmasq/default.leases --dhcp-lease-max=253 --dhcp-no-override nobody 2438 0.0 0.0 27540 1096 ? S Feb26 0:00 /usr/sbin/dnsmasq --strictorder --bind-interfaces --conf-file= --domain=novalocal --pid-file=/var/lib/nova/networks/nova-br100.pid --listen-address=192.168.100.1 --except-interface=lo --dhcp-range=set:'novanetwork',192.168.100.2,static,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br100.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro root 2439 0.0 0.0 27512 472 ? S Feb26 0:00 /usr/sbin/dnsmasq --strict-order --bind-interfaces --conf-file= --domain=novalocal --pid-file=/var/lib/nova/networks/nova-br100.pid --listen-address=192.168.100.1 --except-interface=lo --dhcp-range=set:'novanetwork',192.168.100.2,static,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br100.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro 出力は 3 種類の dnsmasq プロセスを示しています。192.168.122.0 の DHCP サブネット範囲を持つ dnsmasq プロセスが、libvirt に属してい ますが、無視できます。他の 2 つのプロセスは実際に関連します。1 つ は単純なもう一つの親プロセスです。dnsmasq プロセスの引数は、novanetwork に設定した詳細に対応するでしょう。 もし問題がdnsmasqと関係しないようであれば、tcpdumpを使ってパケッ トロスがないか確認してください。 DHCPトラフィックはUDPを使います。そして、クライアントは68番ポート からサーバーの67番ポートへパケットを送信します。新しいインスタン 208 OpenStack 運用ガイド February 1, 2016 スを起動し、機械的にNICをリッスンしてください。トラフィックに現れ ない通信を特定できるまで行います。tcpdumpでbr100上のポート67、68 をリッスンするには、こうします。 # tcpdump -i br100 -n port 67 or port 68 また、ip a や brctl show などのコマンドを使って、インターフェイス が実際にUPしているか、あなたが考えたとおりに設定されているか、正 当性を検査をすべきです。 DNS の問題をデバッグする あなたが SSH を使用してインスタンスにログインできるけれども、プロ ンプトが表示されるまで長い時間(約1分)を要する場合、DNS に問題があ るかもしれません。SSH サーバーが接続元 IP アドレスの DNS 逆引きす ること、それがこの問題の原因です。もしあなたのインスタンスで DNS が正しく引けない場合、SSH のログインプロセスが完了するには、DNS の逆引きがタイムアウトするまで待たなければいけません。 DNS問題のデバッグをするとき、そのインスタンスのdnsmasqが動いてい るホストが、名前解決できるかを確認することから始めます。もしホス トができないのであれば、インスタンスも同様でしょう。 DNSが正しくホスト名をインスタンス内から解決できているか確認する簡 単な方法は、hostコマンドです。もしDNSが正しく動いていれば、以下 メッセージが確認できます。 $ host openstack.org openstack.org has address 174.143.194.225 openstack.org mail is handled by 10 mx1.emailsrvr.com. openstack.org mail is handled by 20 mx2.emailsrvr.com. もしあなたがCirrosイメージを使っているのであれば、"host"プログラ ムはインストールされていません。その場合はpingを使い、ホスト名が 解決できているか判断できます。もしDNSが動いていれば、ping結果の先 頭行はこうなるはずです。 $ ping openstack.org PING openstack.org (174.143.194.225): 56 data bytes もしインスタンスがホスト名の解決に失敗するのであれば、DNSに問題が あります。例えば、 $ ping openstack.org ping: bad address 'openstack.org' OpenStackクラウドにおいて、dnsmasqプロセスはDHCPサーバに加えてDNS サーバーの役割を担っています。dnsmasqの不具合は、インスタンスに 209 OpenStack 運用ガイド February 1, 2016 おけるDNS関連問題の原因となりえます。前節で述べたように、dnsmasq の不具合を解決するもっともシンプルな方法は、マシン上のすべての dnsmasqプロセスをkillし、nova-networkを再起動することです。しかし ながら、このコマンドは該当ノード上で動いているすべてのインスタン ス、特に問題がないテナントにも影響します。最終手段として、rootで 以下を実行します。 # killall dnsmasq # restart nova-network dnsmasq再起動後に、DNSが動いているか確認します。 dnsmasqの再起動でも問題が解決しないときは、tcpdumpで問題がある場 所のパケットトレースを行う必要があるでしょう。DNSサーバーはUDP ポート53番でリッスンします。あなたのコンピュートノードのブリッジ (br100など)上でDNSリクエストをチェックしてください。コンピュート ノード上にて、tcpdumpでリッスンを開始すると、 # tcpdump -i br100 -n -v udp port 53 tcpdump: listening on br100, link-type EN10MB (Ethernet), capture size 65535 bytes インスタンスに SSH ログインして、ping openstack.org を試すと、以 下のようなメッセージが確認できるでしょう。 16:36:18.807518 IP (tos 0x0, ttl 64, id 56057, offset 0, flags [DF], proto UDP (17), length 59) 192.168.100.4.54244 > 192.168.100.1.53: 2+ A? openstack.org. (31) 16:36:18.808285 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 75) 192.168.100.1.53 > 192.168.100.4.54244: 2 1/0/0 openstack.org. A 174.143.194.225 (47) Open vSwitch のトラブルシューティング 前の OpenStack Networking の例で使用されていたように、Open vSwitch は、オープンソースの Apache 2.0 license にてライセンスさ れている、完全な機能を持つマルチレイヤー仮想スイッチです。ドキュ メント全体はプロジェクトの Web サイトにあります。実際のところ、前 述の設定を用いた場合、最も一般的な問題は、必要となるブリッジ (brint、br-tun、br-ex) が存在し、それらに接続される適切なポートを持 つことを確認することです。 Open vSwitch ドライバーは、これを自動的に管理すべきです。また、 一般的に管理します。しかし、ovs-vsctl コマンドを用いて、これを手 動で実行する方法を知ることは有用です。このコマンドは、ここで使用 210 OpenStack 運用ガイド February 1, 2016 している以上に、数多くのサブコマンドがあります。完全な一覧は、マ ニュアルページを参照するか、ovs-vsctl --help を使用してください。 ovs-vsctl list-br を使用して、システムにあるブリッジを一覧表示し ます。この例は、内部ブリッジと統合ブリッジを持つコンピュートノー ドを表します。VLAN ネットワークが eth1 ネットワークインターフェー ス経由でトランクされます。 # ovs-vsctl list-br br-int br-tun eth1-br 物理インターフェースより内側に取り組むと、ポートとブリッジのチェ インを確認できます。まず、物理インターフェース eth1 と仮想イン ターフェース phy-eth1-br を含むブリッジ eth1-br です。 # ovs-vsctl list-ports eth1-br eth1 phy-eth1-br 次に、内部ブリッジ br-int は int-eth1-br を持ちます。この inteth1-br は、phy-eth1-br とペアになり、前のブリッジ patch-tun で示 された物理ネットワークに接続されます。この patch-tun は、GRE トン ネルブリッジを接続するために使用され、システムにおいて現在動作し ているインスタンスに接続される TAP デバイスです。 # ovs-vsctl list-ports br-int int-eth1-br patch-tun tap2d782834-d1 tap690466bc-92 tap8a864970-2d トンネルブリッジ br-tun は、GRE 経由で接続するお互いの接続相手の ために patch-int インターフェースと gre-<N> インターフェース、ク ラスター内で各コンピュートノードとネットワークノードのためのもの を含みます。 # ovs-vsctl list-ports br-tun patch-int gre-1 . . . gre-<N> 211 OpenStack 運用ガイド February 1, 2016 これらのリンクのどれかが存在しない、または誤っている場合、設定エ ラーを暗示しています。ブリッジは ovs-vsctl add-br で追加できま す。ポートは ovs-vsctl add-port でブリッジに追加できます。これら を手動で実行することはデバッグに有用ですが、維持することを意図し た手動の変更が設定ファイルの中に反映されなければいけません。 ネットワーク名前空間への対応 Linux のネットワーク名前空間は、ネットワークサービスが、重複する IP アドレス範囲を持つ、複数の独立した L2 ネットワークをサポートす るために使用する、カーネルの機能です。この機能のサポートが無効化 されている可能性がありますが、デフォルトで有効になっています。お 使いの環境で有効化されている場合、ネットワークノードが DHCP エー ジェントと L3 エージェントを独立した名前空間で動作します。ネット ワークインターフェース、それらのインターフェースにおける通信は、 デフォルトの名前空間で見えなくなります。 ip netns を実行して、名前空間を使用しているかどうかを確認します。 # ip netns qdhcp-e521f9d0-a1bd-4ff4-bc81-78a60dd88fe5 qdhcp-a4d00c60-f005-400e-a24c-1bf8b8308f98 qdhcp-fe178706-9942-4600-9224-b2ae7c61db71 qdhcp-0a1d0a27-cffa-4de3-92c5-9d3fd3f2e74d qrouter-8a4ce760-ab55-4f2f-8ec5-a2e858ce0d39 qrouter-<router_uuid> という名前の L3 エージェントのルーター名前 空間および DHCP エージェントの名前空間は、qdhcp-<net_uuid> という 名前です。この出力は、DHCP エージェントを実行している 4 つのネッ トワークを持つネットワークノードを表しています。また、1 つは L3 エージェントルーターも実行しています。作業する必要のあるネット ワークを理解することは重要です。既存のネットワークおよび UUID の 一覧は、管理クレデンシャルを持って neutron net-list を実行するこ とにより得られます。 作業する必要のある名前空間を決めると、コマンドの前に ip netns exec <namespace> を付けることにより、前に言及したデバッグツールを すべて使用できます。例えば、上で返された最初の qdhcp 名前空間に存 在するネットワークインターフェースを参照する場合、このように実行 します。 # ip netns exec qdhcp-e521f9d0-a1bd-4ff4-bc81-78a60dd88fe5 ip a 10: tape6256f7d-31: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN link/ether fa:16:3e:aa:f7:a1 brd ff:ff:ff:ff:ff:ff 212 OpenStack 運用ガイド February 1, 2016 inet 10.0.1.100/24 brd 10.0.1.255 scope global tape6256f7d-31 inet 169.254.169.254/16 brd 169.254.255.255 scope global tape6256f7d-31 inet6 fe80::f816:3eff:feaa:f7a1/64 scope link valid_lft forever preferred_lft forever 28: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever ここから、そのネットワークにある DHCP サーバーが tape6256f7d-31 デバイスを使用していて、IP アドレス 10.0.1.100 を持つことを確認し ます。アドレス 169.254.169.254 を確認することにより、dhcp-agent が metadata-proxy サービスを実行していることも確認できます。こ の章の前の部分で言及したコマンドは、すべて同じ方法で実行できま す。bash などのシェルを実行して、名前空間の中で対話式セッションを 持つこともできます。後者の場合、シェルを抜けることにより、最上位 のデフォルトの名前空間に戻ります。 概要 執筆者は、この情報を読者のために蒸留するために、パケットダンプを 見ることに多大な時間を費やしました。本章に概略をまとめた方法に 従って、より簡単な時間を過ごせると信じています。このツールと上の 手順を扱うことから離れて、ときどき別の人が支援すれば十分であるこ とを忘れないでください。 213 OpenStack 運用ガイド February 1, 2016 第13章 ロギングと監視 ログはどこにあるのか? ..................................... ログの読み方 ............................................... インスタンスリクエストの追跡 ............................... カスタムログの追加 ......................................... RabbitMQ Web管理インターフェイス および rabbitmqctl ......... ログの集中管理 ............................................. 監視 ....................................................... 概要 ....................................................... 215 215 217 218 219 219 221 229 OpenStackクラウドは、様々なサービスから構成されるため、多くのロ グファイルが存在します。この章では、それぞれのログの場所と取り扱 い、そしてシステムのさらなる監視方法について説明します。 ログはどこにあるのか? 多くのサービスは、慣習に従い、ログファイルを /var/log ディレクト リーのサブディレクトリーに書き込みます。表13.1「OpenStack のログ の場所」 [215] に一覧化されています。 表13.1 OpenStack のログの場所 ノード種別 サービス ログの場所 クラウドコントローラー nova-* /var/log/nova クラウドコントローラー glance-* /var/log/glance クラウドコントローラー cinder-* /var/log/cinder クラウドコントローラー keystone-* /var/log/keystone クラウドコントローラー neutron-* /var/log/neutron クラウドコントローラー horizon /var/log/apache2/ 全ノード その他 (swift, dnsmasq) /var/log/syslog コンピュートノード libvirt /var/log/libvirt/ libvirtd.log コンピュートノード 仮想マシンインスタンスのコ ンソール (起動メッセージ): /var/lib/nova/instances/ instance-<instance id>/ console.log Block Storage ノード cinder-volume /var/log/cinder/cindervolume.log ログの読み方 OpenStack サービスは標準のロギングレベルを利用してい ます。重要度のレベルは次の通りです(重要度の低い順): 215 OpenStack 運用ガイド February 1, 2016 DEBUG、INFO、AUDIT、WARNING、ERROR、CRTICAL、TRACE。特定のログレ ベルより「重要」な場合のみメッセージはログに出力されます。ログレ ベルDEBUGの場合、すべてのログが出力されます。TRACEの場合、ソフト ウェアがスタックトレースを持つ場合にのみログに出力されます。INFO の場合、情報のみのメッセージも含めて出力されます。. DEBUG レベルのロギングを無効にするには、/etc/nova/nova.conf を以 下のように編集します。 debug=false Keystoneは少し異なる動作をします。ロギングレベルを変更するた めには、/etc/keystone/logging.confを編集し、 logger_root と handler_file を修正する必要があります。 horizon のロギング設定は /etc/openstack_dashboard/ local_settings.py で行います。horizon は Django web アプリケー ションですので、Django Logging framework conventions に従います。 エラーの原因を見つけるための典型的な最初のステップは、 CRTICAL、TRACE、ERRORなどのメッセージがログファイルの終わりで出力 されていないかを確認することです。 これは、トレース(Pythonのコールスタック)付きのCRITICALなログメッ セージの例です。 2013-02-25 21:05:51 17409 CRITICAL cinder [-] Bad or unexpected response from the storage volume backend API: volume group cinder-volumes doesn't exist 2013-02-25 21:05:51 17409 TRACE cinder Traceback (most recent call last): 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/bin/cinder-volume", line 48, in <module> 2013-02-25 21:05:51 17409 TRACE cinder service.wait() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/service.py", line 422, in wait 2013-02-25 21:05:51 17409 TRACE cinder _launcher.wait() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/service.py", line 127, in wait 2013-02-25 21:05:51 17409 TRACE cinder service.wait() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/eventlet/greenthread.py", line 166, in wait 2013-02-25 21:05:51 17409 TRACE cinder return self._exit_event.wait() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/eventlet/event.py", line 116, in wait 2013-02-25 21:05:51 17409 TRACE cinder return hubs.get_hub().switch() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/eventlet/hubs/hub.py", line 177, in switch 2013-02-25 21:05:51 17409 TRACE cinder return self.greenlet.switch() 216 OpenStack 運用ガイド February 1, 2016 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/eventlet/greenthread.py", line 192, in main 2013-02-25 21:05:51 17409 TRACE cinder result = function(*args, **kwargs) 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/service.py", line 88, in run_server 2013-02-25 21:05:51 17409 TRACE cinder server.start() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/service.py", line 159, in start 2013-02-25 21:05:51 17409 TRACE cinder self.manager.init_host() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/volume/manager.py", line 95, in init_host 2013-02-25 21:05:51 17409 TRACE cinder self.driver.check_for_setup_error() 2013-02-25 21:05:51 17409 TRACE cinder File "/usr/lib/python2.7/distpackages/cinder/volume/driver.py", line 116, in check_for_setup_error 2013-02-25 21:05:51 17409 TRACE cinder raise exception. VolumeBackendAPIException(data=exception_message) 2013-02-25 21:05:51 17409 TRACE cinder VolumeBackendAPIException: Bad or unexpected response from the storage volume backend API: volume group cinder-volumes doesn't exist 2013-02-25 21:05:51 17409 TRACE cinder この例では、ボリュームのバックエンドがストレージボリュームをセッ トアップができなかったため、cinder-volumes が起動に失敗し、スタッ クトレースを出力しています。おそらく、設定ファイルで指定された LVM ボリュームが存在しないためと考えられます。 これはエラーログの例です。 2013-02-25 20:26:33 6619 ERROR nova.openstack.common.rpc.common [-] AMQP server on localhost:5672 is unreachable: [Errno 111] ECONNREFUSED. Trying again in 23 seconds. このエラーでは、novaサービスがRabbitMQへの接続に失敗していまし た。接続が拒否されたというエラーが出力されています。 インスタンスリクエストの追跡 インスタンスが正しく動作していない場合、インスタンスに関連したロ グを調べる必要があります。これらのログは複数のnova-*サービスが出 力しており、クラウドコントローラーとコンピュートノードの両方に存 在します。 一般的な方法はインスタンスのUUIDをキーにして、各サービスのログを 追跡することです。 次のような例を考えてみましょう。 217 OpenStack 運用ガイド February 1, 2016 $ nova list +--------------------------------+--------+-------+--------------------------+ | ID | Name | Status | Networks | +--------------------------------+--------+-------+--------------------------+ | fafed8-4a46-413b-b113-f1959ffe | cirros | ACTIVE | novanetwork=192.168.100. 3| +--------------------------------------+--------+-------+--------------------+ ここで、インスタンスのUUIDは faf7ded8-4a46-413b-b113f19590746ffeです。クラウドコントローラー上の /var/log/nova*.logファイルをこの文字列で検索すると、nova-api.logと novascheduler.logで見つかります。同様にコンピュートノードで検索し た場合、nova-network.log と nova-compute.logで見つかります。も し、ERRORやCRITICALのメッセージが存在しない場合、最後のログエント リが、何が悪いかのヒントを示しているかもしれません。 カスタムログの追加 十分な情報が既存のログにない場合、独自のロギング宣言を nova-* サービスに追加する必要があるかもしれません。 ソースファイルは /usr/lib/python2.7/dist-packages/nova にありま す。 ログステートメントを追加するには、次の行をファイルの先頭に置きま す。ほとんどのファイルでは、これらは既に存在します。 from nova.openstack.common import log as logging LOG = logging.getLogger(__name__) DEBUGログステートメントを追加するには次のようにします。 LOG.debug("This is a custom debugging statement") 以下に例を示しますが、全てのログメッセージはアンダースコアで始ま り、括弧で括られていることに気づいたでしょうか? LOG.debug(_("Logging statement appears here")) このフォーマットは、ログメッセージを異なる言語に翻訳するために gettext 国際化ライブラリーを利用しているためです。カスタムログに は必要ありませんが、もし、OpenStackプロジェクトにログステートメ ントを含むコードを提供する場合は、アンダースコアと括弧でログメッ セージを囲わなければなりません。 218 OpenStack 運用ガイド February 1, 2016 RabbitMQ Web管理インターフェイス およ び rabbitmqctl 接続エラーは別として、RabbitMQ のログファイルは一般的に OpenStack 関連の問題をデバッグするために役立ちません。代わりに、RabbitMQ の Web 管理インターフェースを使用することを推奨します。 Enable it on your cloud controller: # /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management # service rabbitmq-server restart RabbitMQ Web管理インターフェイスは、クラウドコントローラーから http://localhost:55672 でアクセスできます。 注記 Ubuntu 12.04はRabiitMQのバージョン2.7.1を55672番ポート を使うようにインストールします。RabbitMQバージョン3.0 以降では15672が利用されます。Ubuntuマシン上でどのバー ジョンのRabbitMQが実行されているかは次のように確認でき ます。 $ dpkg -s rabbitmq-server | grep "Version:" Version: 2.7.1-0ubuntu4 RabbitMQ Web 管理インターフェイスを有効にするもう一つの方法と しては、 rabbitmqctl コマンドを利用します。例えば rabbitmqctl list_queues| grep cinder は、キューに残っているメッセージを表示し ます。メッセージが存在する場合、CinderサービスがRabbitMQに正しく 接続できてない可能性があり、再起動が必要かもしれません。 RabbitMQで監視すべき項目としては、各キューでのアイテムの数と、 サーバーでの処理時間の統計情報があります。 ログの集中管理 クラウドは多くのサーバーから構成されるため、各サーバー上にあるイ ベントログを繋ぎあわせて、ログをチェックしなければなりません。よ い方法は全てのサーバーのログを一ヶ所にまとめ、同じ場所で確認でき るようにすることです。 Ubuntuはrsyslog をデフォルトのロギングサービスとして利用しま す。rsyslog はリモートにログを送信する機能を持っているので、何か 219 OpenStack 運用ガイド February 1, 2016 を追加でインストールする必要はなく、設定ファイルを変更するだけで す。リモート転送を実施する際は、盗聴を防ぐためにログが自身の管理 ネットワーク上を通る、もしくは暗号化VPNを利用することを考慮する必 要があります。 rsyslog クライアント設定 まず始めに、全てのOpenStackコンポーネントのログを標準ログに加えて syslogに出力するように設定します。また、各コンポーネントが異なる syslogファシリティになるように設定します。これによりログサーバー 上で、個々のコンポーネントのログを分離しやすくなります。 nova.conf: use_syslog=True syslog_log_facility=LOG_LOCAL0 glance-api.conf、glance-registry.conf: use_syslog=True syslog_log_facility=LOG_LOCAL1 cinder.conf: use_syslog=True syslog_log_facility=LOG_LOCAL2 keystone.conf: use_syslog=True syslog_log_facility=LOG_LOCAL3 デフォルトで Object Storage は syslog にログを出力します。 次に、/etc/rsyslog.d/client.conf を作成して、以下の行を書き込みま す。 *.* @192.168.1.10 これは、rsyslogに全てのログを指定したIPアドレスに送るように命令し ています。この例では、IPアドレスはクラウドコントローラーを指して います。 rsyslog サーバー設定 集中ログサーバーとして使用するサーバーを決めます。ログ専用のサー バーを利用するのが最も良いです。/etc/rsyslog.d/server.conf を次の ように作成します。 220 OpenStack 運用ガイド February 1, 2016 # Enable UDP $ModLoad imudp # Listen on 192.168.1.10 only $UDPServerAddress 192.168.1.10 # Port 514 $UDPServerRun 514 # Create logging templates for nova $template NovaFile,"/var/log/rsyslog/%HOSTNAME%/nova.log" $template NovaAll,"/var/log/rsyslog/nova.log" # Log everything else to syslog.log $template DynFile,"/var/log/rsyslog/%HOSTNAME%/syslog.log" *.* ?DynFile # Log various openstack components to their own individual file local0.* ?NovaFile local0.* ?NovaAll & ~ これはnovaサービスのみを扱っています。はじめに rsyslog を UDP 514 番ポートで動作するサーバーとして設定します。次に一連のログテンプ レートを作成します。ログテンプレートは受け取ったログをどこに保管 するかを指定します。最後の例を用いると、c01.example.comから送られ るnovaのログは次の場所に保管されます。 • /var/log/rsyslog/c01.example.com/nova.log • /var/log/rsyslog/nova.log c02.example.comから送られたログはこちらに保管されます。 • /var/log/rsyslog/c02.example.com/nova.log • /var/log/rsyslog/nova.log 全てのノードからのnovaのログを含む集約されたログだけでなく、個々 のコンピュートノードのログも持つことになります。 監視 二つの監視のタイプがあります。問題の監視と、利用傾向の監視です。 前者は全てのサービスが動作していることを保証するものであり、後 者は時間に沿ったリソース利用状況を監視することで、潜在的なボトル ネックの発見とアップグレードのための情報を得るものです。 221 OpenStack 運用ガイド February 1, 2016 Nagios Nagios は、オープンソースソフトウェアの監視サービスです。任 意のコマンドを実行して、サーバーやネットワークサービスの状態 を確認できます。また、任意のコマンドをリモートのサーバーで直 接実行できます。サーバーが受動的な監視形態で通知を送信するこ ともできます。Nagios は 1999 年ごろにできました。より当たら し監視サービスがありますが、Nagios は実績豊富なシステム管理 ツールです。 プロセス監視 基本的なアラーム監視は、単に要求されたプロセスが稼働しているかど うかを確認することです。 例えば、nova-api サービスがクラウドコン トローラーで稼働しているかどうかを確認します。 # ps aux | grep nova-api nova 12786 0.0 0.0 37952 1312 ? Ss Feb11 0:00 su -s /bin/sh -c exec nova-api --config-file=/etc/nova/nova.conf nova nova 12787 0.0 0.1 135764 57400 ? S Feb11 0:01 /usr/bin/python /usr/bin/nova-api --config-file=/etc/nova/nova.conf nova 12792 0.0 0.0 96052 22856 ? S Feb11 0:01 /usr/bin/python /usr/bin/nova-api --config-file=/etc/nova/nova.conf nova 12793 0.0 0.3 290688 115516 ? S Feb11 1:23 /usr/bin/python /usr/bin/nova-api --config-file=/etc/nova/nova.conf nova 12794 0.0 0.2 248636 77068 ? S Feb11 0:04 /usr/bin/python /usr/bin/nova-api --config-file=/etc/nova/nova.conf root 24121 0.0 0.0 11688 912 pts/5 S+ 13:07 0:00 grep nova-api NagiosとNRPEを使って、クリティカルなプロセスの自動化されたアラー トを作成することが可能です。nova-compute プロセスがコンピュート ノードで動作していることを保証するために、Nagiosサーバー上で次の ようなアラートを作成します。 define service { host_name c01.example.com check_command check_nrpe_1arg!check_nova-compute use generic-service notification_period 24x7 contact_groups sysadmins service_description nova-compute } そして、対象のコンピュートノードにおいて、次のようなNRPE設定を作 成します。 \command[check_nova-compute]=/usr/lib/nagios/plugins/check_procs -c 1: \ -a nova-compute 222 OpenStack 運用ガイド February 1, 2016 Nagiosは常に 1 つ以上の nova-compute サービスが動作しているかを チェックします。 リソースのアラート リソースアラート機能は、1 つ以上のリソースが致命的に少なくなった 際に通知します。閾値監視がお使いの OpenStack 環境で有効化されてい るべきですが、リソース使用状況の監視は、まったく OpenStack 固有の ことではありません。あらゆる汎用のアラート機能が適切に動作するで しょう。 監視項目に含む幾つかのリソースをあげます。 • ディスク使用量 • サーバー負荷 • メモリー使用量 • ネットワーク I/O • 利用可能な vCPU 数 例として、コンピュートノード上のディスク容量をNagiosを使って監視 する場合、次のようなNagios設定を追加します。 define service { host_name c01.example.com check_command check_nrpe!check_all_disks!20% 10% use generic-service contact_groups sysadmins service_description Disk } コンピュートノード上では、次のようなNRPE設定を追加します。 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c \ $ARG2$ -e Naigosは、80%のディスク使用率でWARNING、90%でCRITICALを警告しま す。 StackTach StackTachはRackspaceによって作られたツールで、novaから送られた通 知を収集してレポートします。通知は本質的にはログと同じですが、よ 223 OpenStack 運用ガイド February 1, 2016 り詳細な情報を持ちます。通知の概要のよい資料は、System Usage Data にあります。 nova で通知の送信を有効化するには次の行を nova.conf に追加しま す。 notification_topics=monitor notification_driver=messagingv2 Once nova is sending notifications, install and configure StackTach. Since StackTach is relatively new and constantly changing, installation instructions would quickly become outdated. Please refer to the StackTach Git repo for instructions as well as a demo video. Additional details on the latest developments can be discovered at the official page OpenStack Telemetry OpenStack の統合プロジェクト (コード名 ceilometer) は、OpenStack のサービスに関連するメータリングとイベントデータを収集しま す。Telemetry モジュールにより収集されるデータは、課金のために 使用できます。環境の設定によっては、ユーザーが設定に基づいて収 集したデータにアクセスできるかもしれません。Telemetry サービス は、http://developer.openstack.org/api-ref-telemetry-v2.html に ドキュメント化されている REST API を提供します。このモジュー ルの詳細は、OpenStack Cloud Administrator Guide や developer documentation にあります。 OpenStack 固有のリソース メモリ、ディスク、CPUのような一般的なリソースは、全てのサーバー (OpenStackに関連しないサーバーにも)に存在するため、サーバーの状 態監視において重要です。OpenStackの場合、インスタンスを起動する ために必要なリソースが確実に存在するかの確認という点でも重要で す。OpenStackのリソースを見るためには幾つかの方法が存在します。 1 番目は nova コマンド経由です。 # nova usage-list このコマンドはテナント上で実行されるインスタンスのリストと、イン スタンス全体の簡単な利用統計を表示します。クラウドの簡単な概要を 得るのに便利なコマンドですが、より詳細な情報については表示しませ ん。 次に nova データベースは 利用情報に関して3つのテーブルを持ってい ます。 224 OpenStack 運用ガイド February 1, 2016 nova.quotas と nova.quota_usages テーブルはクォータの情報が保管 されています。もし、テナントのクォータがデフォルト設定と異なる場 合、nova.quotas テーブルに保管されます。以下に例を示します。 mysql> select project_id, resource, hard_limit from quotas; +----------------------------------+----------------------------+------------+ | project_id | resource | | +----------------------------------+----------------------------+------------+ | 628df59f091142399e0689a2696f5baa | metadata_items | | | 628df59f091142399e0689a2696f5baa | injected_file_content_bytes | | | 628df59f091142399e0689a2696f5baa | injected_files | | | 628df59f091142399e0689a2696f5baa | gigabytes | | | 628df59f091142399e0689a2696f5baa | ram | | | 628df59f091142399e0689a2696f5baa | floating_ips | | | 628df59f091142399e0689a2696f5baa | instances | | | 628df59f091142399e0689a2696f5baa | volumes | | | 628df59f091142399e0689a2696f5baa | cores | | +----------------------------------+----------------------------+------------+ hard_limit 128 10240 5 1000 51200 10 10 10 20 nova.quota_usagesテーブルはどのくらいリソースをテナントが利用して いるかを記録しています。 mysql> select project_id, resource, in_use from quota_usages where project_id like '628%'; +----------------------------------+--------------+--------+ | project_id | resource | in_use | +----------------------------------+--------------+--------+ | 628df59f091142399e0689a2696f5baa | instances | 1 | | 628df59f091142399e0689a2696f5baa | ram | 512 | | 628df59f091142399e0689a2696f5baa | cores | 1 | | 628df59f091142399e0689a2696f5baa | floating_ips | 1 | | 628df59f091142399e0689a2696f5baa | volumes | 2 | | 628df59f091142399e0689a2696f5baa | gigabytes | 12 | | 628df59f091142399e0689a2696f5baa | images | 1 | +----------------------------------+--------------+--------+ テナントのハード制限と現在の使用量を比較することにより、それらの 使用割合を確認できます。例えば、このテナントが Floating IP を 10 225 OpenStack 運用ガイド February 1, 2016 個中 1 個使用している場合、Floating IP クォータの 10% を使用して いることになります。手動で計算するより、SQL やお好きなスクリプト 言語を使用して、定型化されたレポートを作成できます。 +----------------------------------+------------+------------+---------------+ | some_tenant | +-----------------------------------+------------+-----------+---------------+ | Resource | Used | Limit | | +-----------------------------------+------------+-----------+---------------+ | cores | 1 | 20 | | | floating_ips | 1 | 10 | | | gigabytes | 12 | 1000 | | | images | 1 | 4 | | | injected_file_content_bytes | 0 | 10240 | | | injected_file_path_bytes | 0 | 255 | | | injected_files | 0 | 5 | | | instances | 1 | 10 | | | key_pairs | 0 | 100 | | | metadata_items | 0 | 128 | | | ram | 512 | 51200 | | | reservation_expire | 0 | 86400 | | | security_group_rules | 0 | 20 | | | security_groups | 0 | 10 | | | volumes | 2 | 10 | | +-----------------------------------+------------+-----------+---------------+ 5 % 10 % 1 % 25 % 0 % 0 % 0 % 10 % 0 % 0 % 1 % 0 % 0 % 0 % 20 % 前の情報は GitHub にあるカスタムスクリプトを使用して生成されまし た。 226 OpenStack 運用ガイド February 1, 2016 注記 このスクリプトは特定のOpenStackインストール環境向けなの で、自身の環境に適用する際には変更しなくてはいけません が、ロジックは簡単に変更できるでしょう。 インテリジェントなアラート インテリジェントなアラート機能により、ある種の運用の継続的インテ グレーションと考えることができます。例えば、glance-api プロセスと glance-registry プロセスが動作していること、または glace-api が 9292 ポートで応答していることを確認することにより、Image service が起動して動作していることを簡単に確認できます。 しかし、Image service にイメージが正しくアップロードされたことを どのように知ればいいのでしょうか? もしかしたら、Image service が 保管しているイメージのディスクが満杯、もしくは S3 のバックエンド がダウンしているかもしれません。簡易的なイメージアップロードを行 なうことでこれをチェックすることができます。 227 OpenStack 運用ガイド February 1, 2016 #!/bin/bash # # assumes that reasonable credentials have been stored at # /root/auth . /root/openrc wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img glance image-create --name='cirros image' --is-public=true --container-format=bare --disk-format=qcow2 < cirros-0.3.4-x8 6_64-disk.img このスクリプトを(Nagiosのような)監視システムに組込むことで、イ メージカタログのアップロードが動作していることを自動的に確認する ことができます。 注記 毎回テスト後にイメージを削除する必要があります。イメー ジサービスからイメージが削除できるかのテストにしてしま えば、さらによいです。 インテリジェントなアラートは、この章で述べられているの他のアラー トよりも計画、実装にかなり時間を要します。インテリジェントなア ラートを実装する流れは次のようになります。 • 構築したクラウドにおいて一般的なアクションをレビューする • それらのアクションに対して自動テストを作成する • それらのテストをアラートシステムに組み込む インテリジェントなアラートのその他の例としては以下があります。 • インスタンスの起動と削除が可能か? • ユーザの作成は可能か? • オブジェクトの保存と削除は可能か? • ボリュームの作成と削除は可能か? トレンド 傾向は、あなたのクラウドが日々どのように動作しているかについて、 素晴らしい洞察を与えられます。例えば、忙しい日が単純にほとんど発 生していないかどうか、新しいコンピュートノードを追加しはじめるべ きかどうかを学習できます。 228 OpenStack 運用ガイド February 1, 2016 トレンドはアラートとは全く異なったアプローチです。アラートは0か 1かの結果(チェックが成功するか失敗するか)に注目しているのに対し て、トレンドはある時点での状態を定期的に記録します。十分な量が記 録されれば、時系列でどのように値が変化するかを確認できます。 これまでに示した全てのアラートタイプは、トレンドレポートに利用可 能です。その他のトレンドの例は以下の通りです。 • 各コンピュートノード上のインスタンス数 • 使用中のフレーバー • 使用中のボリューム数 • 1時間あたりの Object Storage リクエスト数 • 1時間あたりの nova-api リクエスト数 • ストレージサービスの I/O の統計 例として、nova-apiの使用を記録することでクラウドコントローラーを スケールする必要があるかを追跡できます。nova-apiのリクエスト数に 注目することにより、nova-apiプロセスを追加するか、もしくは、novaapiを実行するための新しいサーバーを導入することまで行なうかを決定 することができます。リクエストの概数を取得するには/var/log/nova/ nova-api.logのINFOメッセージを検索します。 # grep INFO /var/log/nova/nova-api.log | wc 成功したリクエストを検索することで、更なる情報を取得できます。 # grep " 200 " /var/log/nova/nova-api.log | wc このコマンドを定期的に実行し結果を記録することで、トレンドレポー トを作ることができます。これにより/var/log/nova/nova-api.logの使 用量が増えているのか、減っているのか、安定しているのか、を知るこ とができます。 collectdのようなツールはこのような情報を保管することに利用できま す。collectdはこの本のスコープから外れますが、collectdでCOUNTER データ形として結果を保存するのがよい出発点になります。より詳しい 情報は collectd のドキュメント を参照してください。 概要 安定運用のために、障害を即座に検知して、原因を効率的に見つけたい と思います。分散システムを用いると、目標サービスレベルを満たす 229 OpenStack 運用ガイド February 1, 2016 ために、適切な項目を追跡することがより重要になります。ログが保 存されるファイルシステムの場所、API が与える利点を学びます。本章 は、OpenStack のサービスを効率的に監視できるよう、それらからの情 報を読み、解釈し、操作する方法も説明しました。 230 OpenStack 運用ガイド February 1, 2016 第14章 バックアップとリカバリー バックアップ対象 ........................................... データベースのバックアップ ................................. ファイルシステムバックアップ ............................... バックアップのリカバリー ................................... 概要 ....................................................... 231 232 232 234 235 OpenStackバックアップポリシーを作成する際、標準的なバックアップの ベストプラクティスが適用できます。例えば、どの程度の頻度でバック アップを行なうかは、どのくらい早くデータロスから復旧させる必要が あるかに密接に関連しています。 注記 すべてのデータをまったく失いたくない場合、高可用性を持 たせた導入に注力すべきです。OpenStack High Availability Guide は、システム停止につながる可能性がある、単一障害 点の削減に向けた提案があります。完全に規定されたドキュ メントではありませんが、停止時間やデータ損失を避けるた めの方法や技術を提供しています。 さらにバックアップの考慮点として以下があげられます。 • いくつのバックアップを持つべきか? • オフサイトにバックアップを置くべきか? • どの程度の頻度でバックアップをテストすべきか? バックアップポリシーと同じくらい大事なことは、リカバリーポリシー です (少なくともリカバリーのテストは必要です)。 バックアップ対象 OpenStackは多くのコンポーネントから構成され、注意を払うべき箇所も たくさんありますが、大事なデータのバックアップは非常に単純です。 この章では、OpenStackコンポーネントを動作させるのに必要な設定ファ イルとデータベースについてのバックアップ方法のみを説明します。オ ブジェクトストレージ内のオブジェクトや、ブロックストレージ内の データのバックアップについては説明していません。一般的にこれらの 領域はユーザー自身でバックアップを行います。 231 OpenStack 運用ガイド February 1, 2016 データベースのバックアップ 参考アーキテクチャーでは、クラウドコントローラーを MySQL サーバ にしています。この MySQL サーバーは nova, glance, cinder, そして keystone のデータベースを保持しています。全てのデータベースが一か 所にある場合、データベースバックアップは非常に容易となります。 # mysqldump --opt --all-databases > openstack.sql もし、単一のデータベースのみバックアップする場合は次のように実行 します。 # mysqldump --opt nova > nova.sql ここで nova はバックアップ対象のデータベースです。 以下のようなcronジョブを一日に一度実行することで、簡単に自動化す ることも出来ます。 #!/bin/bash backup_dir="/var/lib/backups/mysql" filename="${backup_dir}/mysql-`hostname`-`eval date +%Y%m%d`.sql.gz" # Dump the entire MySQL database /usr/bin/mysqldump --opt --all-databases | gzip > $filename # Delete backups older than 7 days find $backup_dir -ctime +7 -type f -delete このスクリプトは MySQL データベース全体をダンプし、7日間より古い バックアップを削除します。 ファイルシステムバックアップ このセクションは、サービスにより整理される、定期的にバックアップ すべきファイルやディレクトリーについて議論します。 コンピュート クラウドコントローラーとコンピュートノードの /etc/nova ディレクト リーは、定期的にバックアップすべきです。 /var/log/nova については、全てのログをリモートで集中管理している のであれば、バックアップの必要はありません。ログ集約システムの導 入か、ログディレクトリのバックアップを強く推奨します /var/lib/nova がバックアップする他の重要なディレクトリです。これ の例外がコンピュートノードにある /var/lib/nova/instances サブディ レクトリです。このサブディレクトリには実行中のインスタンスの KVM 232 OpenStack 運用ガイド February 1, 2016 イメージが置かれます。このディレクトリをバックアップしたいと思う のは、すべてのインスタンスのバックアップコピーを保持する必要があ る場合だけでしょう。多くの場合において、これを実行する必要があり ません。ただし、クラウドごとに異なり、サービスレベルによっても異 なる可能性があります。稼働中の KVM インスタンスのバックアップは、 バックアップから復元したときでも、正しく起動しない可能性があるこ とに気をつけてください。 イメージカタログと配布 /etc/glanceと/var/log/glanceはnovaの場合と同じルールに従います。 /var/lib/glanceもバックアップすべきです。 /var/lib/glance/ imagesには特段の注意が必要です。もし、ファイルベースのバックエン ドを利用しており、このディレクトリがイメージの保管ディレクトリな らば特にです。 このディレクトリの永続性を保証するために二つの方法があります。一 つ目はRAIDアレイ上にこのディレクトリを置くことで、ディスク障害時 にもこのディレクトリが利用できます。二つ目の方法はrsyncのような ツールを用いてイメージを他のサーバーに複製することです。 # rsync -az --progress /var/lib/glance/images \ backup-server:/var/lib/glance/images/ 認証 /etc/keystone と /var/log/keystone は他のコンポーネントの場合と同 じルールに従います。 /var/lib/keystoneは、使用されるデータは含まれていないはずですが、 念のためバックアップします。 ブロックストレージ /etc/cinder と /var/log/cinder は他のコンポーネントの場合と同じ ルールに従います。 /var/lib/cinderもまたバックアップされるべきです。 オブジェクトストレージ /etc/swiftは非常に重要ですのでバックアップが必要です。このディレ クトリには、swiftの設定ファイル以外に、RingファイルやRingビルダー 233 OpenStack 運用ガイド February 1, 2016 ファイルが置かれています。これらのファイルを消失した場合はクラス ター上のデータにアクセスできなくなります。ベストプラクティスとし ては、ビルダーファイルを全てのストレージノードにringファイルと共 に置くことです。この方法でストレージクラスター上にバックアップコ ピーが分散されて保存されます。 バックアップのリカバリー バックアップのリカバリーは単純です。始めにリカバリー対象のサー ビスが停止していることを確認します。例を挙げると、クラウドコント ローラー上の nova の完全リカバリーを行なう場合、最初に全ての nova サービスを停止します。 234 OpenStack 運用ガイド # # # # # # stop stop stop stop stop stop February 1, 2016 nova-api nova-cert nova-consoleauth nova-novncproxy nova-objectstore nova-scheduler 以前にバックアップしたデータベースをインポートします。 # mysql nova < nova.sql バックアップされた nova ディレクトリーもリストアできます。 # mv /etc/nova{,.orig} # cp -a /path/to/backup/nova /etc/ ファイルをリストア後、サービスを起動します。 # start mysql # for i in nova-api nova-cert nova-consoleauth nova-novncproxy nova-objectstore nova-scheduler > do > start $i > done 他のサービスもそれぞれのディレクトリとデータベースで同じ処理とな ります。 概要 バックアップ、その後のリカバリーは、最初に学習するシステム管理の 1 つです。しかしながら、各システムは、それぞれ注意を必要とする項 目が異なります。データベース、Image service、適切なファイルシステ ムの場所に注意することにより、リカバリーを必要とするすべてのイベ ントを処理できることが保証されます。 235 OpenStack 運用ガイド February 1, 2016 第15章 カスタマイズ OpenStack 開発環境の作成 ................................... Object Storage (Swift) ミドルウェアのカスタマイズ ........... OpenStack Compute (nova) スケジューラーのカスタマイズ ....... Dashboard (Horizon) のカスタマイズ ......................... まとめ ..................................................... 237 240 246 252 252 OpenStack はあなたが必要とするすべてのことをしてくれるわけではな いかもしれません。新しい機能を追加するために、いくつかの方法に従 うことができます。 まず最初に、貢献方法を学び、Code Review Workflow に従って、あなた の修正をアップストリームの OpenStack プロジェクトへコントリビュー トしてください。もし、あなたが必要な機能が既存のプロジェクトと密 にインテグレーションする必要がある場合、これが推奨される選択肢で す。コミュニティは、いつでも貢献に対して開かれていますし、機能開 発ガイドラインに従う新機能を歓迎します。 2 番目の方法として、新機能を書き、設定ファイルを変更して、それら をプラグインすることもできます。もし、あなたの機能が必要とされ るプロジェクトが Python Paste フレームワークを使っているのであれ ば、そのための ミドルウェアを作成し、環境設定を通じて組み込めば よいのです。例えば、Compute の新しいスケジューラーや dashboard の カスタムタブなど、プロジェクトをカスタマイズする を作成するといっ た、プロジェクトをカスタマイズする具体的な方法もあるかもしれませ ん。 本章は、新しい機能を書くために 2 つの例を提供することによ り、OpenStack をカスタマイズするための 2 つ目のパスに焦点を 当てます。1 番目の例は、新しい機能を追加するために Object Storage (swift) ミドルウェアを変更する方法を示します。2 番目の例 は、OpenStack Compute (nova) に新しいスケジューラー機能を提供しま す。このように OpenStack をカスタマイズするために、開発環境が必要 になります。迅速に環境を準備して動作させる最良の方法は、クラウド 内で DevStack を実行することです。 OpenStack 開発環境の作成 開発環境を作成するために、DevStack を使用できます。DevStack は本 質的に、OpenStack の開発環境を構築する、シェルスクリプトと設定 237 OpenStack 運用ガイド February 1, 2016 ファイルの塊です。新しい機能を開発するために、そのような環境を構 築するために使用します。 すべてのドキュメントは DevStack の Web サイトにあります。 お使いの OpenStack クラウド上のインスタンスで DevStack を 動作させるために: 1. ダッシュボード、または nova のコマンドラインインタフェース (CLI)から、以下のパラメータでインスタンスを起動してください。 • 名前: devstack • イメージ: Ubuntu 14.04 LTS • メモリー容量: 4 GB RAM • ディスクサイズ: 最低 5 GB nova コマンドを使っているのであれば、適切なメモリ量とディスク サイズを得るために nova boot コマンドに --flavor 3 を指定して ください。 2. ログインして、DevStack をセットアップします。これは、仮想マシ ンに DevStack をセットアップするために使用できるコマンドの例 です。 a. インスタンスにログインします: $ ssh ユーザー名@my.instance.ip.address b. 仮想マシンのオペレーティングシステムを更新します: # apt-get -y update c. git をインストールします: # apt-get -y install git d. devstack リポジトリーをクローンします: $ git clone https://git.openstack.org/openstack-dev/devstack e. devstack リポジトリーに移動します: $ cd devstack 3. (オプション) インスタンスに root としてログインした場合、 「stack」ユーザーを作成する必要があります。そうしなければ、 238 OpenStack 運用ガイド February 1, 2016 パーミッションの問題に遭遇するでしょう。root 以外のユーザーと してログインしている場合、これらの手順をスキップできます。 a. DevStack のスクリプトを実行して、stack ユーザーを作成しま す。 # tools/create-stack-user.sh b. devstack ディレクトリーの所有者を stack ユーザーに変更し ます。 # chown -R stack:stack /root/devstack c. 後から DevStack の画面を表示するために使用できるよう、い くつかのパーミッションを設定します。 # chmod o+rwx /dev/pts/0 d. stack ユーザーに変更します。 $ su stack 4. DevStack が配備するものを制御する local.conf 設定ファイルを編 集します。このセクションの最後にある local.conf ファイル例を コピーします (例15.1「local.conf」 [240])。 $ vim local.conf 5. OpenStack をインストールする stack スクリプトを実行します。 $ ./stack.sh 6. stack スクリプトが完了すると、起動した screen セッションを開 いて、すべての動作中の OpenStack サービスを表示できます。 $ screen -r stack 7. Ctrl+A に続けて 0 を押して、1 番目の screen ウィンドウに移動 します。 注記 • stack.sh スクリプトは、実行にしばらく時間がかかりま す。おそらく、この機会に OpenStack Foundation に参 加できます。 • Screen は、多くの関連するサービスを同時に見るための便 利なプログラムです。GNU screen quick reference を参照 してください。 239 OpenStack 運用ガイド February 1, 2016 以上で OpenStack の開発環境を準備できましたので、運 用環境にダメージを与えることを心配せずに自由にハック できます。例15.1「local.conf」 [240] は、手始めとし て OpenStack Identity、Compute、Block Storage、Image service、dashboard、Object Storage を実行するための作業環境を提供 します。 例15.1 local.conf [[local|localrc]] FLOATING_RANGE=192.168.1.224/27 FIXED_RANGE=10.11.12.0/24 FIXED_NETWORK_SIZE=256 FLAT_INTERFACE=eth0 ADMIN_PASSWORD=supersecret DATABASE_PASSWORD=iheartdatabases RABBIT_PASSWORD=flopsymopsy SERVICE_PASSWORD=iheartksl SERVICE_TOKEN=xyzpdqlazydog Object Storage (Swift) ミドルウェアの カスタマイズ OpenStack Object Storage は、コード参照時に swift としても知ら れ、Python Paste フレームワークに基づいています。そのアーキテク チャーは、A Do-It-Yourself Framework から始めると最も良いでしょ う。swift プロジェクトはこのフレームワークを使用しているので、コ アのコードを変更することなく、プロジェクトのパイプラインにカスタ ムコードをいくつか配置することにより、プロジェクトに機能を追加で きます。 お使いのコンテナーの 1 つにパブリックにアクセスできるシナリオを 想像してください。しかし、本当にやりたいことは、ホワイトリストに 基づいてアクセスできる IP を制限することです。この例では、コンテ ナーのメタデータ項目により決められるよう、ある IP アドレス群だけ からコンテナーにアクセスを許可する、swift 向けのミドルウェア部品 を作成します。コンテナーのメタデータを使用して、明示的にホワイト リストに入っている IP アドレスのみが、コンテナーにアクセスできま す。 警告 この例は実証目的のみのためにあります。さらなる作りこみ と広範なセキュリティテストなしにコンテナのIPホワイトリ スト・ソリューションとして使用するべきではありません。 240 OpenStack 運用ガイド February 1, 2016 stack.sh が screen -r stack で作成したセッションに join すると、 動作中の各サービスのスクリーンを参照できます。これは、DevStack が 実行するよう設定したサービスの数に依存して、いくつかあるでしょ う。 アスタリスク (*) は、表示している screen ウィンドウを表していま す。この例は、keystone 用の key という screen ウィンドウを表示し ていることを表しています。 0$ shell account 1$ key* 2$ horizon 3$ s-proxy 4$ s-object 5$ s-container 6$ s- screen ウィンドウの目的は、以下のとおりです。 shell 作業を行うためのシェル key* keystone サービス horizon horizon dashboard Web アプリケーション s-{name} swift サービス ミドルウェアを作成して Paste の環境設定を通して組み込むた めには: すべての OpenStack のコードは /opt/stack にあります。shell セッ ションの screen の中で swift ディレクトリに移動し、あなたのミドル ウェアモジュールを編集してください。 1. Object Storage がインストールされるディレクトリーを変更しま す。 $ cd /opt/stack/swift 2. ip_whitelist.py Python ソースコードファイルを作成します。 $ vim swift/common/middleware/ip_whitelist.py 3. 例15.2「ip_whitelist.py」 [242] にあるコードを ip_whitelist.py にコピーします。以下のコードは、このセク ションの初めに説明されたように、IP アドレスに基づいてコンテ ナーへのアクセスを制限するミドルウェアの例です。ミドルウェア は、他のアプリケーションへのリクエストを通過させます。この例 は、swift "swob" ライブラリーを使用して、swift が通信するオブ ジェクトに関する Web Server Gateway Interface (WSGI) のリクエ ストとレスポンスをラップします。これを実行したとき、ファイル を保存して閉じます。 241 OpenStack 運用ガイド February 1, 2016 例15.2 ip_whitelist.py # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright (c) 2014 OpenStack Foundation # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import socket from swift.common.utils import get_logger from swift.proxy.controllers.base import get_container_info from swift.common.swob import Request, Response class IPWhitelistMiddleware(object): """ IP Whitelist Middleware Middleware that allows access to a container from only a set of IP addresses as determined by the container's metadata items that start with the prefix 'allow'. E.G. allow-dev=192.168.0.20 """ def __init__(self, app, conf, logger=None): self.app = app if logger: self.logger = logger else: self.logger = get_logger(conf, log_route='ip_whitelist') self.deny_message = conf.get('deny_message', "IP Denied") self.local_ip = socket.gethostbyname(socket.gethostname()) def __call__(self, env, start_response): """ WSGI entry point. Wraps env in swob.Request object and passes it down. :param env: WSGI environment dictionary :param start_response: WSGI callable """ req = Request(env) try: version, account, container, obj = req.split_path(1, 4, True) 242 OpenStack 運用ガイド February 1, 2016 except ValueError: return self.app(env, start_response) container_info = get_container_info( req.environ, self.app, swift_source='IPWhitelistMiddleware') remote_ip = env['REMOTE_ADDR'] self.logger.debug("Remote IP: %(remote_ip)s", {'remote_ip': remote_ip}) meta = container_info['meta'] allow = {k:v for k,v in meta.iteritems() if k.startswith('allow')} allow_ips = set(allow.values()) allow_ips.add(self.local_ip) self.logger.debug("Allow IPs: %(allow_ips)s", {'allow_ips': allow_ips}) if remote_ip in allow_ips: return self.app(env, start_response) else: self.logger.debug( "IP %(remote_ip)s denied access to Account=%(account)s " "Container=%(container)s. Not in %(allow_ips)s", locals()) return Response( status=403, body=self.deny_message, request=req)(env, start_response) def filter_factory(global_conf, **local_conf): """ paste.deploy app factory for creating WSGI proxy apps. """ conf = global_conf.copy() conf.update(local_conf) def ip_whitelist(app): return IPWhitelistMiddleware(app, conf) return ip_whitelist env と conf には、リクエストについて何をするのか判断するのに 使える有用な情報が多数含まれています。どんなプロパティが利用 可能なのかを知るには、以下のログ出力文を __init__ メソッドに 挿入してください。 self.logger.debug("conf = %(conf)s", locals()) そして以下のログ出力分を __call__ メソッドに挿入してくださ い。 self.logger.debug("env = %(env)s", locals()) 4. このミドルウェアを swift Paste のパイプラインに組み込むには、 設定ファイル /etc/swift/proxy-server.conf を編集します。 243 OpenStack 運用ガイド February 1, 2016 $ vim /etc/swift/proxy-server.conf 5. /etc/swift/proxy-server.conf の [filter:ratelimit] セクション を探し、その後ろに以下の環境定義セクションを貼り付けてくださ い。 [filter:ip_whitelist] paste.filter_factory = swift.common.middleware.ip_whitelist:filter_factory # You can override the default log routing for this filter here: # set log_name = ratelimit # set log_facility = LOG_LOCAL0 # set log_level = INFO # set log_headers = False # set log_address = /dev/log deny_message = You shall not pass! 6. /etc/swift/proxy-server.conf [pipeline:main] セクションを探 し、このように ip_whitelist リストを ratelimit の後ろに追加し てください。完了したら、ファイルを保存して閉じてください。 [pipeline:main] pipeline = catch_errors gatekeeper healthcheck proxy-logging cache bulk tempurl ratelimit ip_whitelist ... 7. 8. swift proxy にこのミドルウェアを使わせるために、Swift プロキ シサービスを再起動します。swift-proxy の screen セッションに 切り替えてはじめてください。 a. Ctrl+A に続けて 3 を押します。 b. Ctrl+C を押し、サービスを強制停止します。 c. 上矢印キーを押し、最後のコマンドを表示させます。 d. Enter キーを押し、実行します。 swift の CLI でミドルウェアのテストをしてください。shell の screen セッションに切り替えてテストを開始し、swift-proxy の screen セッションにもどってログ出力をチェックして終了します。 a. Ctrl+A に続けて 0 を押します。 b. devstack ディレクトリーにいることを確認します。 $ cd /root/devstack c. openrc を読み込み、CLI の環境変数を設定します。 $ source openrc 244 OpenStack 運用ガイド d. February 1, 2016 middleware-test という名前のコンテナーを作成します。 $ swift post middleware-test e. 9. Ctrl+A に続けて 3 を押して、ログ出力を確認します。 ログの中に以下の行があるでしょう。 proxy-server Remote IP: my.instance.ip.address (txn: ...) proxy-server Allow IPs: set(['my.instance.ip.address']) (txn: ...) これらの2行は、このミドルウェアによって出力されており、リク エストが DevStack インスタンスから送られており、許可されてい ることを示しています。 10. DevStack 環境の外の、DevStack 用インスタンスにアクセス可能な リモートマシンからミドルウェアをテストします。 a. ローカルマシンに keystone と swift クライアントをインス トールします。 # pip install python-keystoneclient python-swiftclient b. middleware-test コンテナーにあるオブジェクトを一覧表示し ようとします。 $ swift --os-auth-url=http://my.instance.ip.address:5000/v2.0/ \ --os-region-name=RegionOne --os-username=demo:demo \ --os-password=devstack list middleware-test Container GET failed: http://my.instance.ip.address:8080/v1/AUTH_.. ./ middleware-test?format=json 403 Forbidden You shall not pass! 11. Ctrl+A に続けて 3 を押して、ログ出力を確認します。再び swift のログを確認すると、ログの中に以下の行があるでしょう。 proxy-server Authorizing from an overriding middleware (i.e: tempurl) (txn: ...) proxy-server ... IPWhitelistMiddleware proxy-server Remote IP: my.local.ip.address (txn: ...) proxy-server Allow IPs: set(['my.instance.ip.address']) (txn: ...) proxy-server IP my.local.ip.address denied access to Account=AUTH_... \ Container=None. Not in set(['my.instance.ip.address']) (txn: ...) ここで、リモートIPアドレスが、許可されたIPアドレスの中にな かったため、リクエストが拒否されていることがわかります。 245 OpenStack 運用ガイド February 1, 2016 12. シェル画面において DevStack 用インスタンスに戻り、リモートマ シンからのリクエストを許可するようなコンテナのメタデータを追 加します。 a. Ctrl+A に続けて 0 を押します。 b. メタデータをコンテナーに追加して、IP を許可します。 $ swift post --meta allow-dev:my.local.ip.address middleware-test c. ここで手順 10 のコマンドを再び試みて、続行します。コンテ ナーにオブジェクトがありません。そのため、一覧には何もあ りません。しかしながら、レポートするエラーもありません。 警告 このような機能テストは、適切な機能テストや結合テストを 置き換えるものではありませんが、取り掛かりに良いでしょ う。 Python Paste フレームワークを使う他のすべてのプロジェクトで、類 似のパターンに従うことができます。単純にミドルウェアモジュール を作成し、環境定義によって組み込んでください。そのミドルウェアは プロジェクトのパイプラインの一部として順番に実行され、必要に応じ て他のサービスを呼び出します。プロジェクトのコア・コードは一切修 正しません。Paste を使っているプロジェクトを確認するには、/etc/ <project> に格納されている、プロジェクトの conf または ini 環境定 義ファイルの中で pipeline 変数を探してください。 When your middleware is done, we encourage you to open source it and let the community know on the OpenStack mailing list. Perhaps others need the same functionality. They can use your code, provide feedback, and possibly contribute. If enough support exists for it, perhaps you can propose that it be added to the official swift middleware. OpenStack Compute (nova) スケジュー ラーのカスタマイズ 多くの OpenStack のプロジェクトでは、ドライバ・アーキテクチャーを 使うことによって、特定の機能をカスタマイズすることができます。特 定のインターフェースに適合するドライバを書き、環境定義によって組 み込むことができます。例えば、簡単に Compute に新しいスケジュー ラーを組み込むことができます。Compute の既存のスケジューラーは、 246 OpenStack 運用ガイド February 1, 2016 完全な機能を持ち、Scheduling によくまとめられています。しかし、あ なたのユーザのユース・ケースに依存して、既存のスケジューラで要件 が満たせないかもしれません。この場合は、新しいスケジューラーを作 成する必要があるでしょう。 スケジューラーを作成するには、nova.scheduler.driver.Scheduler ク ラスを継承しなければなりません。オーバーライド可能な5つのメソッ ドのうち、以下のアスタリスク (*) で示される2つのメソッドをオー バーライドしなければなりません。 • update_service_capabilities • hosts_up • group_hosts • * schedule_run_instance • * select_destinations OpenStack のカスタマイズをデモするために、リクエストの送信元IPア ドレスとホスト名のプレフィックスに基づいてインスタンスを一部のホ ストにランダムに配置するような Compute のスケジューラーの例を作 成します。この例は、1つのユーザのグループが1つのサブネットにお り、インスタンスをホスト群の中の一部のサブネットで起動したい場合 に有用です。 警告 この例は実証目的のみのためにあります。さらなる作りこみ とテストなしで、Compute のスケジューラーとして使用する べきではありません。 stack.sh が screen -r stack で作成したセッションに join すると、 多数の screen ウィンドウが見えます。 0$ shell* 1$ key 2$ horizon ... 9$ n-api ... 14$ n-sch ... shell 作業を行うためのシェル key keystone サービス horizon horizon dashboard Web アプリケーション n-{name} nova サービス n-sch nova スケジューラーサービス 247 OpenStack 運用ガイド February 1, 2016 スケジューラーを作成して、設定を通して組み込むためには: 1. OpenStack のコードは /opt/stack にあるので、nova ディレクトリ に移動してあなたのスケジューラーモジュールを編集します。nova をインストールしたディレクトリーに移動します。 $ cd /opt/stack/nova 2. ip_scheduler.py Python ソースコードファイルを作成します。 $ vim nova/scheduler/ip_scheduler.py 3. 例15.3「ip_scheduler.py」 [248] にあるコードはドライバー です。セクションの最初に説明されているように IP アドレスに 基づいて、サーバーをホストにスケジュールします。コードを ip_scheduler.py にコピーします。完了すると、ファイルを保存し て閉じます。 例15.3 ip_scheduler.py # vim: tabstop=4 shiftwidth=4 softtabstop=4 # Copyright (c) 2014 OpenStack Foundation # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. """ IP Scheduler implementation """ import random from oslo.config import cfg from from from from from nova.compute import rpcapi as compute_rpcapi nova import exception nova.openstack.common import log as logging nova.openstack.common.gettextutils import _ nova.scheduler import driver CONF = cfg.CONF CONF.import_opt('compute_topic', 'nova.compute.rpcapi') LOG = logging.getLogger(__name__) class IPScheduler(driver.Scheduler): """ Implements Scheduler as a random node selector based on IP address and hostname prefix. """ 248 OpenStack 運用ガイド February 1, 2016 def __init__(self, *args, **kwargs): super(IPScheduler, self).__init__(*args, **kwargs) self.compute_rpcapi = compute_rpcapi.ComputeAPI() def _filter_hosts(self, request_spec, hosts, filter_properties, hostname_prefix): """Filter a list of hosts based on hostname prefix.""" hosts = [host for host in hosts if host.startswith(hostname_prefix)] return hosts def _schedule(self, context, topic, request_spec, filter_properties): """Picks a host that is up at random.""" elevated = context.elevated() hosts = self.hosts_up(elevated, topic) if not hosts: msg = _("Is the appropriate service running?") raise exception.NoValidHost(reason=msg) remote_ip = context.remote_address if remote_ip.startswith('10.1'): hostname_prefix = 'doc' elif remote_ip.startswith('10.2'): hostname_prefix = 'ops' else: hostname_prefix = 'dev' hosts = self._filter_hosts(request_spec, hosts, filter_properties, hostname_prefix) if not hosts: msg = _("Could not find another compute") raise exception.NoValidHost(reason=msg) host = random.choice(hosts) LOG.debug("Request from %(remote_ip)s scheduled to %(host)s" % locals()) return host def select_destinations(self, context, request_spec, filter_properties): """Selects random destinations.""" num_instances = request_spec['num_instances'] # NOTE(timello): Returns a list of dicts with 'host', 'nodename' and # 'limits' as keys for compatibility with filter_scheduler. dests = [] for i in range(num_instances): host = self._schedule(context, CONF.compute_topic, request_spec, filter_properties) host_state = dict(host=host, nodename=None, limits=None) dests.append(host_state) if len(dests) < num_instances: raise exception.NoValidHost(reason='') return dests def schedule_run_instance(self, context, request_spec, admin_password, injected_files, requested_networks, is_first_time, filter_properties, legacy_bdm_in_spec): """Create and run an instance or instances.""" instance_uuids = request_spec.get('instance_uuids') for num, instance_uuid in enumerate(instance_uuids): request_spec['instance_properties']['launch_index'] = num try: host = self._schedule(context, CONF.compute_topic, 249 OpenStack 運用ガイド February 1, 2016 request_spec, filter_properties) updated_instance = driver.instance_update_db(context, instance_uuid) self.compute_rpcapi.run_instance(context, instance=updated_instance, host=host, requested_networks=requested_networks, injected_files=injected_files, admin_password=admin_password, is_first_time=is_first_time, request_spec=request_spec, filter_properties=filter_properties, legacy_bdm_in_spec=legacy_bdm_in_spec) except Exception as ex: # NOTE(vish): we don't reraise the exception here to make sure # that all instances in the request get set to # error properly driver.handle_schedule_error(context, ex, instance_uuid, request_spec) context と request_spec と filter_propertiesには、どこにイン スタンスをスケジュールするのか決定するのに使える有用な情報が 多数含まれています。どんなプロパティが利用可能なのかを知るに は、以下のログ出力文を上記の schedule_run_instance メソッドに 挿入してください。 LOG.debug("context = %(context)s" % {'context': context.__dict__}) LOG.debug("request_spec = %(request_spec)s" % locals()) LOG.debug("filter_properties = %(filter_properties)s" % locals()) 4. このスケジューラーを nova に追加するために、設定ファイル / etc/nova/nova.conf を編集します。 $ vim /etc/nova/nova.conf 5. scheduler_driver 設定を見つけ、このように変更してください。 scheduler_driver=nova.scheduler.ip_scheduler.IPScheduler 6. Nova にこのスケジューラーを使わせるために、Nova スケジュー ラーサービスを再起動します。 n-sch screen セッションに切り替 えてはじめてください。 a. Ctrl+A に続けて 9 を押します。 b. n-sch 画面が表示されるまで、Ctrl+A に続けて N を押しま す。 c. Ctrl+C を押し、サービスを強制停止します。 d. 上矢印キーを押し、最後のコマンドを表示させます。 e. Enter キーを押し、実行します。 250 OpenStack 運用ガイド 7. February 1, 2016 nova の CLI でスケジューラーのテストをしてください。shell の screen セッションに切り替えてテストを開始し、n-sch screen セッションにもどってログ出力をチェックして終了します。 a. Ctrl+A に続けて 0 を押します。 b. devstack ディレクトリーにいることを確認します。 $ cd /root/devstack c. openrc を読み込み、CLI の環境変数を設定します。 $ source openrc d. インストール済みイメージのみのイメージ ID を環境変数に設 定します。 $ IMAGE_ID=`nova image-list | egrep cirros | egrep -v "kernel| ramdisk" | awk '{print $2}'` e. テストサーバーを起動します。 $ nova boot --flavor 1 --image $IMAGE_ID scheduler-test 8. n-sch 画面に切り替えます。ログ出力の中に、以下の行を見つけら れます。 2014-01-23 19:57:47.262 DEBUG nova.scheduler.ip_scheduler \ [req-... demo demo] Request from 162.242.221.84 \ scheduled to devstack-havana \ _schedule /opt/stack/nova/nova/scheduler/ip_scheduler.py:76 警告 このような機能試験は、正しいユニットテストと結合テスト の代わりになるものではありませんが、作業を開始すること はできます。 ドライバ・アーキテクチャーを使う他のプロジェクトで、類似のパター ンに従うことができます。単純に、そのドライバーインタフェースに 従うモジュールとクラスを作成し、環境定義によって組み込んでくださ い。あなたのコードはその機能が使われた時に実行され、必要に応じて 他のサービスを呼び出します。プロジェクトのコアコードは一切修正し ません。ドライバーアーキテクチャーを使っているプロジェクトを確認 するには、/etc/<project> に格納されている、プロジェクトの .conf 設定ファイルの中で driver 変数を探してください。 251 OpenStack 運用ガイド February 1, 2016 When your scheduler is done, we encourage you to open source it and let the community know on the OpenStack mailing list. Perhaps others need the same functionality. They can use your code, provide feedback, and possibly contribute. If enough support exists for it, perhaps you can propose that it be added to the official Compute schedulers. Dashboard (Horizon) のカスタマイズ dashboard は、Python Django Web アプリケーションフレームワーク を利用しています。カスタマイズする最高のガイドがすでに書かれてい て、Building on Horizon にあります。 まとめ OpenStack クラウドの運用時、ユーザーが非常に要望している可能性が あることに気が付くかもしれません。OpenStack がユーザーの必要とす るものを実施していない場合、それらの要求を満たすことをあなたに任 せるかもしれません。本章は、いくつかのカスタマイズの選択肢を提供 し、始めるために必要となるツールを提供します。 252 OpenStack 運用ガイド February 1, 2016 第16章 OpenStack コミュニティー 助けを得る ................................................. バグ報告 ................................................... OpenStack コミュニティーに参加する ......................... ドキュメント作成への貢献の仕方 ............................. セキュリティー情報 ......................................... さらに情報を見つける ....................................... 253 254 257 258 258 259 OpenStack は非常に活発なコミュニティに支えられており、あなたの参 加をいつでも待っています。この章では、コミュニティーの他の人と交 流する方法について詳しく説明します。 助けを得る 助けを探すために利用できる方法がいくつかあります。最も早い方法 は、あなたを手伝ってくれるコミュニティーを支援することです。あな たの問題に近いものについて、Q&A サイト、メーリングリストの過去ロ グ、バグ一覧を検索します。何も見つけられなければ、バグを報告して 指示に従うか、以下のリストにまとまっているサポートチャンネルのど れかを使用します。 最初に確認すべき場所は OpenStack の公式ドキュメントです。 http:// docs.openstack.org にあります。また、http://ask.openstack.org で 質問と回答を参照することができます。 メーリングリスト もアドバイスをもらうのに素晴らしい場所です。 Wiki ページにメーリングリストの詳しい情報が載っています。運用者と して確認しておくべき主要なメーリングリストは以下です。 一般向けメーリ ングリスト [email protected]。このリスト は、OpenStack の現行リリースに関する話題を取り 扱います。流量が非常に多く、1 日にとてもたくさ んのメールが流れます。 運用者向けメー リングリスト [email protected].。こ のメーリングリストは、あなたのように、実際に OpenStack クラウドを運用している人々での議論を 目的としています。現在のところ、メールの流量は 比較的少なく、1 日に 1 通くらいです。 開発者向けメー リングリスト [email protected]。このリスト は、OpenStack の今後についての話題を扱います。 流量が多く、1 日に複数のメールが流れます。 253 OpenStack 運用ガイド February 1, 2016 一般向けリストと運用者向けリストを購読するのがお薦めです。一般向 けリストの流量に対応するにはフィルタを設定する必要があるとは思 いますが。 Wiki のメーリングリストのページにはメーリングリストの アーカイブへのリンクがあり、そこで議論の過程を検索することができ ます。 一般的な質問用や開発者の議論用など、 複数の IRC チャネルがありま す。一般の議論用のチャネルは irc.freenode.net の #openstackです。 バグ報告 運用者として、あなたは、あなたのクラウドでの予期しない動作を報告 できる非常によい立場にいます。 OpenStack は柔軟性が高いので、ある 特定の問題を報告するのはあなた一人かもしれません。すべての問題は 重要で修正すべきものです。そのためには、簡単にバグ報告を登録する 方法を知っておくことは欠かせません。 全ての OpenStack プロジェクトでは、バグ管理に Launchpad を使って います。バグ報告を行う前に、Launchpad のアカウントを作る必要があ ります。 Launchpad のアカウントを作った後は、バグを報告するのは、問題の原 因となったプロジェクトを特定するのと同じくらい簡単です。場合に よっては、思っていたよりも難しいこともありますが、最初のバグ報告 が適切な場所でなかったとしても、バグの分類を行う人がバグ報告を適 切なプロジェクトに割り当て直してくれます。 • nova のバグ報告。 • python-novaclient のバグ報告。 • swift のバグ報告。 • python-swiftclient のバグ報告。 • glance のバグ報告。 • python-glanceclient のバグ報告。 • keystone のバグ報告。 • python-keystoneclient のバグ報告。 • neutron のバグ報告。 254 OpenStack 運用ガイド February 1, 2016 • python-neutronclient のバグ報告。 • cinder のバグ報告。 • python-cinderclient のバグ報告。 • manila のバグ報告。 • python-manilaclient のバグ報告。 • python-openstackclient のバグ報告。 • horizon のバグ報告。 • ドキュメント のバグ報告。 • API ドキュメント のバグ報告。 よいバグ報告を書くには、次に述べる手順を踏むことが不可欠です。ま ず、バグを検索し、同じ問題に関してすでに登録されているバグがない ことを確認します。見つかった場合は、"This bug affects X people. Does this bug affect you?" (このバグは X 人に影響があります。あ なたもこのバグの影響を受けますか?) をクリックするようにして下さ い。同じ問題が見つからなかった場合は、バグ報告で詳細を入力して下 さい。少なくとも以下の情報を含めるべきです。 • 実行しているソフトウェアのリリースやマイルストーン、コミット ID • あなたがバグを確認したオペレーティングシステムとそのバージョン • バグの再現手順。何がおかしいかも含めてください • 期待される結果の説明 (出くわした現象ではなく) • 関連部分のみを抜粋したログファイル バグ報告をすると、バグは次のステータスで作成されます。 • Status: New バグのコメントでは、既知のバグの修正方法に関して案を出したり、バ グの状態を Triaged (有効な報告か、対応が必要かなどを分類した状態) にセットすることができます。バグを直接修正することもできます。そ の場合は、バグを自分に割り当てて、状態を In progress (進行中) に セットし、コードのブランチを作り、マージしてもらうように変更を提 案するという流れになります。でも、先走りし過ぎないようにしましょ う。バグを分類するという仕事もありますから。 255 OpenStack 運用ガイド February 1, 2016 バグの確認と優先付け このステップでは、バグが実際に起こるかのチェックやその重要度の判 定が行われます。これらのステップを行うには、バグ管理者権限が必要 なものがあります (通常、バグ管理権限はコア開発者チームだけが持っ ています)。バグ報告に、バグを再現したりバグの重要度を判定したりす るのに必要な情報が不足している場合、バグは • Status: Incomplete にセットされます。問題を再現できた場合 (もしくはこの報告がバグで あると 100% 確信を持てる場合) で、セットする権限を持っている場合 には、 • Status: Confirmed にセットして下さい。 • Importance: <バグ影響度> バグ影響度は以下のカテゴリに分かれています。 256 OpenStack 運用ガイド February 1, 2016 1. Critical このバグにより、目玉となる機能が全てのユーザで正常に動 作しない場合 (または簡単なワークアラウンドでは動作しない場合)、 データロスにつながるような場合 2. High このバグにより、目玉となる機能が一部のユーザで正常に動作し ない場合 (または簡単なワークアラウンドで動作する場合) 3. Medium このバグにより、ある程度重要な機能が正常に動作しない場合 4. Low このバグが多くの場合で軽微な場合 5. Wishlist 実際にはバグではないが、そのように動作を変更した方よい ものの場合 バグ報告に解決方法やパッチが書かれている場合、そのバグの状態は Triaged にセットされます。 バグ修正 この段階では、開発者が修正を行います。修正を行っている間、作業の 重複を避けるため、バグの状態を以下のようにセットすべきです。 • Status: In Progress • Assignee: <あなた自身> 修正が用意できたら、開発者は変更を提案し、レビューを受けます。 変更が受理された後 変更がレビューされ、受理されて、マスターブランチにマージされる と、バグの状態は自動的に以下のようになります。 • Status: Fix Committed 修正がマイルストーンやリリースブランチに取り込まれると、バグの状 態は自動的に以下のようになります。 • Milestone: このバグの修正が入ったマイルストーン • Status: Fix Released OpenStack コミュニティーに参加する この本をここまで読んで来たので、あなたはコミュニティーの正式な 個人メンバーになって、OpenStack Foundation に加入する (https:// 257 OpenStack 運用ガイド February 1, 2016 www.openstack.org/join/) ことを考えていることでしょう。 OpenStack Foundation は、共有リソースを提供し OpenStack の目的の達成を支援 する独立組織で、OpenStack ソフトウェア、およびユーザ、開発者、エ コシステム全体といった OpenStack を取り巻くコニュニティーを守り、 活力を与え、普及の促進を行います。我々全員がこのコミュニティーを できる限りよいものにしていく責任を共有します。メンバーになること はコミュニティーに参加する最初のステップです。ソフトウェア同様、 OpenStack Foundation の個人会員は無料で誰でもなることができます。 ドキュメント作成への貢献の仕方 OpenStack のドキュメント作成活動は、運用管理ドキュメント、API ド キュメント、ユーザドキュメントなどに渡ります。 この本の元は人が集まったイベントで作成されましたが、今やこの本は みなさんも貢献できる状態になっています。 OpenStack のドキュメント 作成は、バグ報告、調査、修正を繰り返し行うというコーディングの基 本原則に基いて行われています。 Just like the code, http://docs.openstack.org is updated constantly using the Gerrit review system, with source stored in git.openstack.org in the openstack-manuals repository and the api-site repository. 公開される前にドキュメントのレビューを行うには、OpenStack Gerrit サーバー http://review.openstack.org に行って、project:openstack/ openstack-manuals や project:openstack/api-site を検索して下さ い。 ドキュメントのレビューや変更を最初に行うのに必要な手続きについて の詳しい情報は、Wiki の How To Contribute ページを参照して下さ い。 セキュリティー情報 我々は、コミュニティーとして、セキュリティーを非常に重要だと考 えており、潜在的な問題の報告は決められたプロセスに基いて処理さ れます。修正を用心深く追跡し、定期的にセキュリティー上の問題点 を取り除きます。あなたは発見したセキュリティー上の問題をこの決 められたプロセスを通して報告できます。OpenStack 脆弱性管理チーム は、OpenStackコミュニティーから選ばれた脆弱性管理の専門家で構成さ れるごく少人数のグループです。このチームの仕事は、脆弱性の報告を 手助けし、セキュリティー上の修正の調整を行い、脆弱性情報の公開を 続けていくことです。特に、このチームは以下の役割を担っています。 258 OpenStack 運用ガイド February 1, 2016 脆弱性管理 コミュニティメンバー (やユーザー) が発見した全ての脆弱性はこのチーム に報告されます。 脆弱性追跡 このチームはバグ追跡システムに登録 された脆弱性に関連する問題の管理を 行います。問題の中にはこのチームお よび影響を受けるプロジェクトの責任 者のみが参照できるものありますが、 問題の修正が用意されると、全ての脆 弱性は公開されます。 Responsible Disclosure(責任 ある情報公開) セキュリティーコミュニティーと仕 事をする責務の一つとして、セキュリ ティー情報の公開が、確実に、そして OpenStack のセキュリティー問題を責 任をもって扱うセキュリティ研究者の 適切なお墨付きを得て行われるように します。 OpenStack 脆弱性管理チームに問題を報告する方法は 2 種類用意されて おり、問題の重要度に応じて使い分けて下さい。 • Launchpad でバグ報告を行い、「security bug」のマークを付ける。 マークを付けると、そのバグは一般には公開されなくなり、脆弱性管 理チームだけが参照できるようになります。 • 問題が極めて慎重に扱うべき情報の場合は、脆弱性管理チームのメン バーの誰かに暗号化したメールを送って下さい。メンバーの GPG 鍵は OpenStack Security で入手できます。 あなたが参加できるセキュリティー関連のチームのリストは セキュリ ティーチーム にあります。脆弱性管理プロセスはすべてドキュメントに まとめられており、脆弱性管理 で参照できます。 さらに情報を見つける この本以外にも、OpenStack に関する情報源はたくさんあります。 OpenStack ウェブサイト は最初に見るといいでしょう。ここに は、OpenStack ドキュメント と OpenStack API ドキュメント があ り、OpenStack に関する技術情報が提供されています。OpenStack wiki には、OpenStack の各プロジェクトの範囲にとどらまらない汎用的な情 報が多数あり、例えば 推奨ツール といった情報も載っています。最後 に、Planet OpenStack には多くのブログが集められています。 259 OpenStack 運用ガイド February 1, 2016 第17章 高度な設定 ドライバーによる違い ....................................... 定期タスクの実装 ........................................... 設定に関する個別のトピック ................................. 261 262 263 OpenStack は、非常に小さなプライベートクラウドから大規模なパブ リッククラウドまで様々な構成でうまく動くことを意図して作られてい ます。これを実現するため、開発者はコードに設定オプションを用意 し、要件にあわせて種々のコンポーネントの振る舞いを細かく調整でき るようにしています。しかし、残念ながら、デフォルトの設定値ですべ てのデプロイメントに対応することはできません。 執筆時点では、OpenStack は 3,000 以上の設定オプションがありま す。OpenStack configuration reference guide にドキュメント化され ています。本章は、これらのすべてをドキュメント化できませんが、ど の情報を掘り下げて調べるかを理解できるよう、重要な概念を紹介した いと考えています。 ドライバーによる違い 多くの OpenStack プロジェクトではドライバー層が実装され、各ドラ イバーはドライバー固有の設定オプションが実装されています。例え ば、OpenStack Compute (nova) では、libvirt, xenserver, hyper-v, vmware などの種々のハイパーバイザードライバーが実装されています が、これらのハイパーバイザードライバーすべてが同じ機能を持ってい る訳ではなく、異なるチューニング要件もドライバー毎に異なります。 注記 現在実装されているハイパーバイザーは、OpenStack ドキュ メントの Web サイトに一覧化されています。the Hypervisor support matrix page にある OpenStack wiki に、OpenStack Compute (nova) ハイパーバイザーのドライバーにおけるさま ざまな機能の組み合わせ表があります。 ここで言っておきたいことは、オプションが存在するからといって、そ のオプションがあなたが選んだドライバーに関係するとは限らないとい うことである。通常は、ドキュメントには、その設定オプションが適用 されるドライバーについての記載があります。 261 OpenStack 運用ガイド February 1, 2016 定期タスクの実装 様々な OpenStack プロジェクトに共通する別の考え方として、周期的タ スク (periodic task) があります。周期的タスクは伝統的な Unix シス テムの cron ジョブに似ていますが、OpenStack プロセスの内部で実行 されます。例えば、OpenStack Compute (nova) はローカルキャッシュか らどのイメージを削除できるかを決める必要がある際に、これを行うた めに周期的タスクを実行します。 周期的タスクは、OpenStack が使用しているスレッドモデルにおける制 限を理解する上で重要です。OpenStack は Python の協調スレッドを使 用しています。このことは、何か長く複雑な処理が実行された場合、そ の処理が自発的に別の協調スレッドに実行を譲らない限り、そのプロセ ス内の他のタスクの実行が停止されることを意味します。 これの具体的な例が nova-compute プロセスです。libvirt でイメージ キャッシュを管理するために、nova-compute はイメージキャッシュの 内容をスキャンする周期的なプロセスを用意します。このスキャンの中 で、各イメージのチェックサムを計算し、チェックサムが nova-compute が期待する値と一致することを確認します。しかしながら、イメージは 非常に大きく、チェックサムを生成するのに長い時間がかかる場合があ ります。このことがバグとして報告され修正される前の時点では、novacompute はこのタスクで停止し RPC リクエストに対する応答を停止して しまっていました。この振る舞いは、インスタンスの起動や削除などの 操作の失敗としてユーザーに見えていました。 これから分かることは、OpenStack のプロセスが少しの間「停止」した ように見えて、それから通常通りの動作を継続するような状況を見つけ た場合、周期的タスクが問題になっていないかを確認すべきだというこ とです。取りうる一つの方法は、間隔を 0 に設定して周期的タスクを無 効にすることです。また、周期的タスクの実行頻度を設定することもで きます。デフォルトとは異なる頻度で周期的タスクを実行する方が意味 がある場合もあります。 実行頻度は周期的タスク別に定義されています。したがって、OpenStack Compute (nova) ではすべての周期的タスクは無効にするためには、多く の設定オプションを 0 に設定する必要があることでしょう。現在のとこ ろ 0 に設定する必要がある設定オプションの一覧は以下のとおりです。 • bandwidth_poll_interval • sync_power_state_interval • heal_instance_info_cache_interval 262 OpenStack 運用ガイド February 1, 2016 • host_state_interval • image_cache_manager_interval • reclaim_instance_interval • volume_usage_poll_interval • shelved_poll_interval • shelved_offload_time • instance_delete_interval 設定オプションを 0 に設定するには、nova.conf に image_cache_manager_interval=0 のような行を入れてください。 上記のリストはリリース間で変更されることもあります。最新の情報に ついては設定ガイドを参照してください。 設定に関する個別のトピック この節では、調整を検討した方がよい設定オプションの個別の具体例を 扱います。決して完全なリストではありません。 Compute、Networking、Storage のセキュリティ設 定 OpenStack Security Guide は、OpenStack クラウドのセキュア化に関 する深い考察を提供します。SSL/TLS、鍵管理、PKI および証明書管理、 データ転送およびプライバシーの懸念事項、コンプライアンスなど。 高可用性 OpenStack High Availability Guide は、システム停止につながる可能 性がある、単一障害点の削減に向けた提案があります。完全に規定され たドキュメントではありませんが、停止時間やデータ損失を避けるため の方法や技術を提供しています。 IPv6 サポートの有効化 neutron IPv6 Subteam at work を確認して、進行状況を確認し続けられ ます。 263 OpenStack 運用ガイド February 1, 2016 セットアップした設定を変更することにより、ネットワークに novanetwork を使用している場合に、IPv6 をセットアップできます。テ ストされたセットアップ環境が FlatDHCP とマルチホストの設定向け にドキュメント化されています。重要な点は、radvd を正常に実行さ れたと、nova-network が考えるようにすることです。設定全体の詳細 は、Cybera のブログ記事 “An IPv6 enabled cloud” にあります。 Object Storage の地理的考慮事項 オブジェクトストレージサーバーのグローバルクラスターが、すべての サポートされているリリースで利用できます。自然災害の発生時に備え て地理的な地域をまたがって確実に複製するために、またユーザーが最 も近いデータセンターに基づいてより迅速にオブジェクトにアクセスで きるようにするために、これらのグローバルクラスターを導入できるで しょう。各クラスターに 1 つのゾーンを持つデフォルトのリージョン を設定します。しかし、より多くのゾーンを追加して、より多くのゾー ンを処理するリングを構築するので、お使いのネットワーク (WAN) が、 ゾーン間の追加リクエストとレスポンスの負荷を処理できることを確認 してください。詳細は Geographically Distributed Clusters にあるド キュメントを参照してください。 264 OpenStack 運用ガイド February 1, 2016 第18章 アップグレード アップグレード前の考慮事項 ................................. 265 アップグレード手順 ......................................... 269 失敗したアップグレードのロールバック ........................ 272 Object Storage 以外は、OpenStack のあるバージョンから別のバージョ ンにアップグレードすることは非常に難しいことです。本章は運用観点 でいくつかのガイドラインを提供します。これは、基本的なアーキテク チャー向けにアップグレードを実行する際の考慮すべきことです。 アップグレード前の考慮事項 アップグレードの計画 • 全体的にリリースノートを確認して、新機能、更新された機能、非推 奨の機能について調べてください。バージョン間の非互換を確認して ください。 • アップグレードによるユーザーへの影響を考慮してください。アップ グレードプロセスは、ダッシュボードを含む、環境の管理機能を中断 します。このアップグレードを正しく準備する場合、既存のインスタ ンス、ネットワーク、ストレージは通常通り動作し続けるべきです。 しかしながら、インスタンスがネットワークの中断を経験するかもし れません。 • お使いの環境をアップグレードする方法を検討します。運用中のイン スタンスがある状態でアップグレードを実行できます。しかし、これ は非常に危険なアプローチです。アップグレードの実行中は、ライブ マイグレーションを使用して、インスタンスを別のコンピュートノー ドに一時的に再配置することを考慮すべきでしょう。しかしながら、 プロセス全体を通して、データベースの整合性を担保する必要があ ります。そうでなければ、お使いの環境が不安定になるでしょう。ま た、ユーザーに十分に注意を促すことを忘れてはいけません。バック アップを実行するために時間の猶予を与えることも必要です。 • このサービス設定ファイルから構造とオプションを適用して、既存の 設定ファイルにマージすることを検討してください。ほとんどのサー ビスは、OpenStack Configuration Reference に新しいオプション、 更新されたオプション、非推奨になったオプションがあります。 • すべてのシステムのメジャーアップグレードと同じく、いくつかの理 由により、アップグレードに失敗する可能性があります。データベー ス、設定ファイル、パッケージなど、お使いの環境をロールバック 265 OpenStack 運用ガイド February 1, 2016 できるようにしておくことにより、この状況に備えるべきです。お使 いの環境をロールバックするためのプロセス例が「失敗したアップグ レードのロールバック」 [272]にあります。 • アップグレード手順を作成し、本番環境と同じようなテスト環境を使 用して、全体を評価します。 テスト環境の事前アップグレード すべて中で最も大切なステップは事前のアップグレードテストです。新 しいバージョンのリリース後すぐにアップグレードする場合、未発見の バグによってアップグレードがうまくいかないこともあるでしょう。管 理者によっては、最初のアップデート版が出るまで待つことを選ぶ場合 もあります。しかしながら、重要な環境の場合には、リリース版の開発 やテストに参加することで、あなたのユースケースでのバグを確実に修 正することもできるでしょう。 このガイドに記載されているような、理想的なアーキテクチャーに近い と思われる場合でも、各 OpenStack クラウドはそれぞれ異なります。 そのため、お使いの環境の適切なクローンを使用して、お使いの環境の バージョン間でアップグレードをテストする必要があります。 しかしながら、言うまでもなく、本番環境と同じ大きさや同一のハード ウェアを使用する必要がありません。アップグレードするクラウドの ハードウェアや規模を考慮することは重要です。以下のヒントにより予 測不能なコストを最小化する役に立つでしょう。 自身のクラウドの使用 OpenStack の次のバージョンをテスト するための一番簡単な方法は、お使い のクラウドの中に新しい環境をセット アップすることです。これは奇妙に思 えるかもしれません。とくに、動作中 のコンピュートノードで使用される二 重仮想化です。しかし、お使いの設定 を非常に手軽にテストする確実な方法 です。 パブリッククラウドの利用 お使いのクラウドコントローラーの設 定に関するスケーラビリティーの限界 をテストするために、パブリッククラ ウドを使用することを考慮します。多 くのパブリッククラウドは時間単位で 課金されます。つまり、多くのノード を用いてテストしても、それほど費用 がかかりません。 266 OpenStack 運用ガイド February 1, 2016 同じシステムに別のストレージ エンドポイントの作成 クラウドに外部ストレージプラグイン や共有ファイルシステムを使用してい る場合、2 つ目の共有やエンドポイン トを作成することにより、正常に動作 するかどうかをテストできます。これ により、ストレージに新しいバージョ ンを信頼させる前に、システムをテス トできるようになります。 ネットワークの監視 より小規模なテストにおいてさえも、 過剰なネットワークパケットを探し て、コンポーネント間の通信で何かと てつもなくおかしくなっていないかど うかを判断します。 テスト環境をセットアップする場合、いくつかの方法を使用できます。 • お使いのプラットフォーム用の OpenStack Installation Guide を使 用して、完全な手動インストールを実行する。最終的な設定ファイル とインストールされたパッケージをレビューします。 • 変更したパッケージリポジトリー URL を用いて、自動化された設定イ ンフラストラクチャーのクローンを作成する。 正常に動作するまで設定を変更する。 どのアプローチも有効です。あなたの経験に合うアプローチを使用して ください。 アップグレード前テストシステムは、設定を動作させるために優れてい ます。しかしながら、システムの歴史的な使用法やユーザー操作におけ る違いにより、アップグレードの成否に影響することに注意することが 重要です。 可能ならば、本番環境のデータベースのテーブルをダンプして、この データを使用して開発環境においてアップグレードをテストすることを 非常に強く推奨します。MySQL バグのいくつかは、新規インストールと 旧バージョンから移行したバージョンのテーブルの間のわずかな違いに よる、データベース移行中に取り扱われません。これは大規模な実デー タセットにおいてのみ影響するでしょう。本番環境の停止中に遭遇した くないでしょう。 人工的なスケールテストは、あくまである程度のものです。クラウドを アップグレードした後、クラウドのパフォーマンス観点で十分に注意す る必要があります。 267 OpenStack 運用ガイド February 1, 2016 アップグレードレベル アップグレードレベルは、OpenStack Compute の Grizzly リリースで 追加された機能です。これは、さまざまな Compute サービス間の RPC (メッセージキュー) 通信においてバージョンを固定できます。 この機能は、ライブアップグレードするということになると、パズルの 重要な部品になります。異なるバージョンの OpenStack サービスが問題 なく通信できるようにするために、既存の API バージョンと概念的に同 じになります。 アップグレードレベルに関係なく、X+1 のバージョンの Compute サー ビスが X バージョンの RPC メッセージを受信して理解できますが、X +1 のバージョンの RPC メッセージのみを送信できます。例えば、novaconductor プロセスが X+1 へとアップグレードされている場合、コンダ クターサービスは、X バージョンの nova-compute プロセスからのメッ セージを理解できるようになります。しかし、それらのコンピュート サービスは、コンダクターサービスにより送信されたメッセージを理解 できません。 運用者は、アップグレード中、RPC バージョンをロックして、バージョ ン不一致により引き起こされる中断なしでサービスのライブアップグ レードできるよう、nova.conf に設定オプションを追加できます。この 設定オプションは、使いたければ RPC バージョン番号を指定できます。 リリース名のエイリアスもサポートされます。例: [upgrade_levels] compute=X+1 conductor=X+1 scheduler=X+1 指定したサービスをまたがり、RPC バージョンを X+1 の RPC バージョ ンに固定します。特定のサービスのすべてのインスタンスがより新しい バージョンにアップグレードされた後、対応する行を nova.conf から削 除できます。 この機能を使用することにより、理想的には、nova-compute において アップグレードされる OpenStack の RPC バージョンを固定します。 例えば、X+1 バージョンの nova-compute プロセスが、アップグレー ド完了まで、X バージョンの nova-conductor プロセスと一緒に動作し つづけることを保証するためです。nova-compute プロセスのアップグ レードが完了すると、運用者は nova-conductor のアップグレードに進 み、nova.conf において nova-compute のバージョンロックを削除でき ます。 268 OpenStack 運用ガイド February 1, 2016 アップグレード手順 このセクションは、OpenStack インストールガイドにある、基本的な 2 ノードアーキテクチャーを参照しています。すべてのノードでは、サ ポートする Linux ディストリビューションで、最新のカーネルとカレン トのリリースパッケージが実行されている必要があります。 前提 • 確実に一貫性のある状態にするために、アップグレード作業を始める 前にいくつか環境のクリーンアップを実行します。例えば、削除後に 完全削除されていないインスタンスにより、不確実な挙動を引き起こ す可能性があります。 • OpenStack Networking サービス (neutron) を使用している環境で は、リリースバージョンのデータベースを検証します。例: # su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron. conf \ --config-file /etc/neutron/plugins/ml2/ml2_conf.ini current" neutron バックアップの実行 1. すべてのノードで設定ファイルを保存します。例: # for i in keystone glance nova neutron openstack-dashboard cinder heat ceilometer; \ do mkdir $i-kilo; \ done # for i in keystone glance nova neutron openstack-dashboard cinder heat ceilometer; \ do cp -r /etc/$i/* $i-kilo/; \ done 注記 さまざまなサービスを処理するために、各ノードでこの サンプルスクリプトを修正できます。 2. 本番データの完全バックアップを取得します。Kilo 時点では、デー タベースのダウングレードはサポートされません。以前のバージョ ンのデータベースに戻す唯一の方法は、バックアップからリストア することです。 # mysqldump -u root -p --opt --add-drop-database --all-databases > icehouse-db-backup.sql 269 OpenStack 運用ガイド February 1, 2016 注記 OpenStack インストールガイド に記載されているよう に、SQL サーバーの設定の更新を考慮してください。 リポジトリーの管理 すべてのノード: 1. 旧リリースのパッケージのリポジトリーを削除します。 2. 新リリースのパッケージのリポジトリーを追加します。 3. リポジトリーデータベースを更新します。 各ノードにおけるパッケージのアップグレード お使いの設定によっては、すべてのパッケージを更新することによ り、OpenStack 環境の補助サービスを再起動または破壊するかもしれま せん。例えば、Block Storage ボリューム向けに TGT iSCSI フレーム ワークを使用していて、それの新しいパッケージがアップグレードに含 まれる場合、パッケージマネージャーが TGT iSCSI サービスを再起動し て、ボリュームへの接続性に影響を与えるかもしれません。 パッケージマネージャーがさまざまな設定ファイルの更新をプロンプト で確認する場合、変更を拒否します。パッケージマネージャーは、新 しいバージョンの設定ファイルにサフィックスを追加します。これらの ファイルの内容を確認して適用することを検討してください。 注記 ipset パッケージが、お使いのディストリビューションにお いて、依存関係でインストールされていない場合、それを明 示的にインストールする必要があるかもしれません。 サービスの更新 各ノードにおいてサービスをアップグレードする場合、一般的には 1 つ 以上の設定ファイルの変更、サービスの停止、データベーススキーマの 同期、サービスの起動を行います。いくつかのサービスは、違う手順を 必要とします。次のサービスに進む前に、各サービスの動作を検証する ことを推奨します。 270 OpenStack 運用ガイド February 1, 2016 サービスをアップグレードすべき順番、一般的なアップグレード手順と の違いは、以下に示す通りです。 コントローラーノード 1. OpenStack Identity - データベースの同期前に期限切れのトークンを 削除します。 2. OpenStack Image service 3. OpenStack Compute、ネットワークコンポーネントを含む。 4. OpenStack Networking 5. OpenStack Block Storage 6. OpenStack dashboard - 一般的な環境では、ダッシュボードを更新す るのに必要な作業は Apache HTTP サービスの再起動のみです。 7. OpenStack Orchestration 8. OpenStack Telemetry - 一般的な環境では、Telemetry を更新するた めに、サービスの再起動のみが必要となります。 9. OpenStack Compute - 設定ファイルを編集して、サービスを再起動し ます。 10.OpenStack Networking - 設定ファイルを編集して、サービスを再起動 します。 コンピュートノード • OpenStack Block Storage - Block Storage サービスの更新は、サー ビスの再起動のみを必要とします。 ストレージノード • OpenStack Networking - 設定ファイルを編集して、サービスを再起動 します。 最終手順 すべてのディストリビューションにおいて、アップグレードプロセスを 完了するために、いくつかの最終作業を実行する必要があります。 271 OpenStack 運用ガイド February 1, 2016 1. コンピュートノードにおいて /etc/nova/nova.conf を変更すること により、DHCP タイムアウトを元の環境の値に減らして戻します。 2. すべての .ini ファイルを更新して、お使いの環境で OpenStack リ リース向けに必要となるパスワードおよびパイプラインと一致させ ます。 3. 移行後、ユーザーは nova image-list と glance image-list から異なる結果を見ることになります。ユーザーが一覧コマン ドにおいて同じイメージをきちんと見るために、/etc/glance/ policy.json と /etc/nova/policy.json ファイルを編集し て、"context_is_admin": "role:admin" を含めます。これは、プロ ジェクトのプライベートイメージへのアクセスを制限します。 4. お使いの環境が正常に動作することを検証します。そして、クラウ ドが再び通常どおり動作していることをユーザーに知らせます。 失敗したアップグレードのロールバック アップグレードは、複雑な処理が関連して、失敗する可能性がありま す。何かしらのアップグレードを実行する前に、本番データの完全バッ クアップを取得すべきです。Kilo 時点では、データベースのダウング レードはサポートされません。以前のバージョンのデータベースに戻す 唯一の方法は、バックアップからリストアすることです。 このセクションは、前のリリースの OpenStack にロールバックするため のガイドを提供します。すべてのディストリビューションは、同様の手 順に従います。 一般的なシナリオは、アップグレードの準備で本番の管理サービスを分 解して、アップグレード手順の一部分を完了して、テスト中には遭遇し なかった 1 つ以上の問題に遭遇することです。環境を元の「万全な」 状態にロールバックする必要があります。続けて、アップグレードプロ セスを試行した後、新しいインスタンス、ネットワーク、ストレージボ リュームなど、何も状態を変更していないことを確実にしてください。 これらの新しいリソースはすべて、データベースがバックアップからリ ストアされた後、フリーズ状態になります。 この範囲内で、これらの手順を完了して、正常に環境をロールバックす る必要があります。 1. 設定ファイルをロールバックします。 2. バックアップからデータベースを 3. パッケージをロールバックします。 272 OpenStack 運用ガイド February 1, 2016 リストアするために必要なバックアップがあることを確認すべきです。 ディストリビューションは、ダウングレードよりもアップグレードをテ ストすることにかなりの労力をかける傾向があるため、ローリングバッ クアップグレードは扱いにくいプロセスです。失敗したダウングレード は、失敗したアップグレードよりトラブルシューティングと解決に非常 により多くの労力を必要とします。失敗したアップグレードを前に進め 続けるリスク、ロールバックするリスクを比較して重み付けすることだ けができます。一般的に、かなり最後の選択肢としてロールバックを検 討してください。 以下の手順は、Ubuntu 向けに記載しています。少なくとも 1 つの本番 環境で動作しましたが、すべての環境で動作するとは限りません。 ロールバック方法 1. すべての OpenStack サービスを停止します。 2. アップグレード作業中に作成した、設定ディレクトリーのバック アップの中身を /etc/<service> にコピーします。 3. アップグレードプロセス中に mysqldump コマンドを用いて作成し た、RELEASE_NAME-db-backup.sql バックアップファイルからデータ ベースを復元します。 # mysql -u root -p < RELEASE_NAME-db-backup.sql 4. OpenStack パッケージをダウングレードします。 警告 パッケージのダウングレードは、かなり最も複雑な手順 です。ディストリビューション、システム管理全体に非 常に依存します。 a. お使いの環境にインストールされている OpenStack パッケー ジを判断します。dpkg --get-selections コマンドを使用し ます。OpenStack パッケージをフィルターします。再びフィル ターして、明示的に deinstall 状態になっているパッケージを 省略します。最終出力をファイルに保存します。例えば、以下 のコマンドは、keystone、glance、nova、neutron、cinder を 持つコントローラーノードを取り扱います。 # dpkg --get-selections | grep -e keystone -e glance -e nova -e neutron \ -e cinder | grep -v deinstall | tee openstack-selections cinder-api install cinder-common install 273 OpenStack 運用ガイド February 1, 2016 cinder-scheduler cinder-volume glance glance-api glance-common glance-registry neutron-common neutron-dhcp-agent neutron-l3-agent neutron-lbaas-agent neutron-metadata-agent neutron-plugin-openvswitch neutron-plugin-openvswitch-agent neutron-server nova-api nova-cert nova-common nova-conductor nova-consoleauth nova-novncproxy nova-objectstore nova-scheduler python-cinder python-cinderclient python-glance python-glanceclient python-keystone python-keystoneclient python-neutron python-neutronclient python-nova python-novaclient install install install install install install install install install install install install install install install install install install install install install install install install install install install install install install install install 注記 サーバーの種類に応じて、パケット一覧の内容や順 番がこの例と異なるかもしれません。 b. apt-cache policy コマンドを使用して、バージョンを戻すため に利用できるパッケージのバージョンを確認できます。Grizzly のリポジトリーを削除した場合、それらを再インストールし て、apt-get update を実行する必要があります。 # apt-cache policy nova-common nova-common: Installed: 1:2013.2-0ubuntu1~cloud0 Candidate: 1:2013.2-0ubuntu1~cloud0 Version table: *** 1:2013.2-0ubuntu1~cloud0 0 500 http://ubuntu-cloud.archive.canonical.com/ubuntu/ 274 OpenStack 運用ガイド February 1, 2016 precise-updates/havana/main amd64 Packages 100 /var/lib/dpkg/status 1:2013.1.4-0ubuntu1~cloud0 0 500 http://ubuntu-cloud.archive.canonical.com/ubuntu/ precise-updates/grizzly/main amd64 Packages 2012.1.3+stable-20130423-e52e6912-0ubuntu1.2 0 500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages 2012.1-0ubuntu2 0 500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages これにより、パッケージの現在インストールされているバー ジョン、候補となる最新バージョン、各バージョンを含むリポ ジトリーにある全バージョンを把握できます。適切な Grizzly バージョン、この場合 1:2013.1.4-0ubuntu1~cloud0 を探しま す。このパッケージ一覧から手動で探し当てる手順は、むしろ 退屈で間違えやすいです。この手順を支援するために、以下の スクリプトを使用することを検討すべきです。 # for i in `cut -f 1 openstack-selections | sed 's/neutron/quantum/ ;'`; do echo -n $i ;apt-cache policy $i | grep -B 1 grizzly | grep -v Packages | awk '{print "="$1}';done | tr '\n' ' ' | tee openstack-grizzly-versions cinder-api=1:2013.1.4-0ubuntu1~cloud0 cinder-common=1:2013.1.4-0ubuntu1~cloud0 cinder-scheduler=1:2013.1.4-0ubuntu1~cloud0 cinder-volume=1:2013.1.4-0ubuntu1~cloud0 glance=1:2013.1.4-0ubuntu1~cloud0 glance-api=1:2013.1.4-0ubuntu1~cloud0 glance-common=1:2013.1.4-0ubuntu1~cloud0 glance-registry=1:2013.1.4-0ubuntu1~cloud0 quantum-common=1:2013.1.4-0ubuntu1~cloud0 quantum-dhcp-agent=1:2013.1.4-0ubuntu1~cloud0 quantum-l3-agent=1:2013.1.4-0ubuntu1~cloud0 quantum-lbaas-agent=1:2013.1.4-0ubuntu1~cloud0 quantum-metadata-agent=1:2013.1.4-0ubuntu1~cloud0 quantum-plugin-openvswitch=1:2013.1.4-0ubuntu1~cloud0 quantum-plugin-openvswitch-agent=1:2013.1.4-0ubuntu1~cloud0 quantum-server=1:2013.1.4-0ubuntu1~cloud0 nova-api=1:2013.1.4-0ubuntu1~cloud0 nova-cert=1:2013.1.4-0ubuntu1~cloud0 nova-common=1:2013.1.4-0ubuntu1~cloud0 nova-conductor=1:2013.1.4-0ubuntu1~cloud0 nova-consoleauth=1:2013.1.4-0ubuntu1~cloud0 nova-novncproxy=1:2013.1.4-0ubuntu1~cloud0 nova-objectstore=1:2013.1.4-0ubuntu1~cloud0 275 OpenStack 運用ガイド February 1, 2016 nova-scheduler=1:2013.1.4-0ubuntu1~cloud0 python-cinder=1:2013.1.4-0ubuntu1~cloud0 python-cinderclient=1:1.0.3-0ubuntu1~cloud0 python-glance=1:2013.1.4-0ubuntu1~cloud0 python-glanceclient=1:0.9.0-0ubuntu1.2~cloud0 python-quantum=1:2013.1.4-0ubuntu1~cloud0 python-quantumclient=1:2.2.0-0ubuntu1~cloud0 python-nova=1:2013.1.4-0ubuntu1~cloud0 python-novaclient=1:2.13.0-0ubuntu1~cloud0 注記 これらの手順を手動で続けることを決定した場合、 適切なところにある neutron を quantum に変更す ることを忘れないでください。 c. apt-get install コマンドに <package-name>=<version> を 指定して、各パッケージの特定のバージョンをインストー ルします。前の手順にあるスクリプトは、利便性のために package=version のペアの一覧を作成しました。 # apt-get install `cat openstack-grizzly-versions` この手順は、ロールバックの手順を完了します。アップグレー ドするリリースのリポジトリーを作成し、apt-get update を実 行して、環境をロールバックすることになった問題を解決する まで、偶然アップグレードすることを防ぎます。 276 OpenStack 運用ガイド February 1, 2016 付録A 事例 目次 NeCTAR ..................................................... MIT CSAIL .................................................. DAIR ....................................................... CERN ....................................................... 277 278 279 280 この付録ではコミュニティからを事例をいくつか紹介します。これら では通常より多くの技術的詳細情報が提供されています。他の事例は OpenStack ウェブサイト で探して下さい。 NeCTAR 利用者:オーストラリアの公的資金による研究部門からの研究者。用途 は、シンプルな Web サーバー用のインスタンスから高スループットコン ピューティング用の数百のコア使用まで、多種多様な専門分野に渡りま す。 デプロイ OpenStack Compute セルを使用して、NeCTAR Research Cloud は8サイ トに及び、1サイトあたり約4,000コアがあります。 各サイトは(OpenStack Compute のセル設定におけるリソースセルとし て)異なる設定で実行されています。数サイトは複数データセンター に渡り、コンピュートノード外のストレージを共有ストレージで使用し ているサイトもあれば、コンピュートノード上のストレージを非共有型 ファイルシステムで使用しているサイトもあります。各サイトは Object Storage バックエンドを持つ Image service をデプロイしています。 中央の Identity、dashboard、Compute API サービスが使用されてい ます。dashboard へのログインが Shibboleth の SAML ログインのトリ ガーになり、SQL バックエンドの Identity サービスのアカウントを作 成します。Object Storage Global Cluster は、いくつかの拠点をまた がり使用されます。 コンピュートノードは 24〜48コアがあり、1コアあたり 4GB 以上の RAM があり、1コアあたり約 40GB 以上の一時ストレージがあります。 277 OpenStack 運用ガイド February 1, 2016 全サイトは Ubuntu 14.04 をベースにしており、ハイパーバイザとして KVM を使用しています。使用している OpenStack のバージョンは基本的 に安定バージョンであり、5〜10%のコードが開発コードからバックポー トされたか、修正されています。 情報源 • OpenStack.org ケーススタディー • NeCTAR-RC GitHub • NeCTAR Web サイト MIT CSAIL 利用者:MIT Computer Science and Artificial Intelligence Lab から の研究者。 デプロイ CSAIL クラウドは現在 64 物理ノード、768 物理コア、3,456 GB のメモ リがあります。クラウドリソースがコンピュータリソースに焦点をあて ているため、永続データストレージの大部分は、クラウド外の NFS 上に あります。40 以上のプロジェクトに 130 以上のユーザーがいます。一 般的に、300 〜 400 インスタンスで 2,000 〜 2,500 仮想 CPU が動作 しています。 最初は、Ubuntu 12.04 に OpenStack Essex を導入しました。FlatDHCP マルチホストネットワークを使用しています。 ソフトウェアスタックは Ubuntu 12.04 LTS と Ubuntu Cloud Archive からの OpenStack Havana です。KVM がハイパーバイザで、FAI と Puppet を設定管理に使用してデプロイされています。FAI と Puppet の 組み合わせはOpenStack のみならず研究所全体で使用されています。単 一のクラウドコントローラーノードがあり、これはネットワークコント ローラーとしても動作しますが、他のコンピュータ・ハードウェアはコ ンピュートノードに使用されています。 ホストアグリゲートとインスタンス種別の追加スペックが使用され、2 種類の割り当て倍率を提供します。私たちが使用するデフォルトのリ ソース割り当ては、4:1 CPU と 1.5:1 RAM です。コンピュート中心の 処理は、cpu_ratio と ram_ratio をどちらも 1.0 に設定されている、 オーバーサブスクライブしていないホストを必要とするインスタンス種 別を使用します。コンピュートノードでハイパースレッディングを有 278 OpenStack 運用ガイド February 1, 2016 効化しているので、これは CPU スレッドごとに 1 つの仮想 CPU、また は、物理 CPU ごとに 2 つの仮想 CPU を提供します。 2013 年 8 月に Grizzly へとアップグレードしたときに、OpenStack Networking に移行しました。コンピュートノードは、2 個の GbE NIC を持ち、IPMI 管理専用のマネジメントカードを持ちます。1 つの NIC は、ノード間通信のために使用されます。もう 1 つは、OpenStack が 管理する VLAN のトランクポートとして使用されます。コントローラー ノードは、パブリック IP 通信のために、ボンドした 2 つの 10 GbE NICを持ちます。イメージがこのポート経由で使用されるため、ビッグ パイプがここで使用されます。また、イメージストレージとデータベー スのバックエンドとなる iSCSI ストレージに接続するためにも使用さ れます。コントローラーノードは、OpenStack が管理する VLAN 通信の ためにトランクモードで使用される GbE NIC も持ちます。このポート は、DHCP エージェントとメタデータプロキシーへの通信も処理します。 インスタンスが既存のパブリックにアクセスできるネットワークに直接 接続され、デフォルトゲートウェイとして既存の物理ルーターを使用 する、プロバイダー VLAN ネットワークを使用した、より古い novanetwork のマルチホスト HA セットアップに近づいています。このこと は、ネットワークコントローラーが停止した場合に、実行中のインスタ ンスがネットワークを利用可能であり続けること、単独の Linux ホスト が通信のボトルネックにならないことを意味します。すべてのインスタ ンスの IPv4 アドレスを十分に提供でき、NAT が必要なく、Floating IP アドレスを使用しないので、これを実行できます。単独の汎用的なパブ リックネットワークをすべてのプロジェクトに提供し、必要に応じてプ ロジェクト単位に追加で既存の VLAN を提供します。個々のプロジェク トは、自身のプライベートな GRE ネットワークを作成することもできま す。 情報源 • CSAIL ホームページ DAIR 利用者:DAIR は新しい情報通信技術(ICT)と他のデジタル技術を開 発・評価するための CANARIE ネットワークを活用した統合仮想環境で す。このシステムは、先進的なネットワーク、クラウドコンピューティ ング、ストレージといったデジタルインフラから構成されており、革新 的な ICT アプリケーション、プロトコル、サービス、の開発・評価環境 の作成、デプロイのスケールに関する実験の実施、市場へのより早期の 投入促進を目的としています。 279 OpenStack 運用ガイド February 1, 2016 デプロイ DAIR はカナダの2つの異なるデータセンタ(1つはアルバータ州、もう 1つはケベック州)でホスティングされています。各拠点にはそれぞれク ラウドコントローラがありますが、その1つが「マスター」コントロー ラーとして、認証とクォータ管理を集中して行うよう設計されていま す。これは、特製スクリプトと OpenStack の軽微な改造により実現され ています。DAIR は現在、Havana で運営されています。 オブジェクトストレージ用に、各リージョンには swift 環境がありま す。 各リージョンでは、ブロックストレージとインスタンスストレージの両 方でNetApp アプライアンスが使用されています。これらのインスタン スを NetApp アプライアンスから Ceph または GlusterFS といった分散 ファイルシステム上に移動する計画があります。 ネットワーク管理は VlanManager が広範囲に使用されています。全ての サーバーは2つの冗長化(bonding)された 10GbE NIC があり、2つの 独立したスイッチに接続されています。DAIR はクラウドコントローラー が全コンピュートノード上の全インスタンス用のゲートウェイとなる、 単一ノードのネットワーキングを使用する設定がされています。内部の OpenStack 通信(例:ストレージ通信)はクラウドコントローラーを経 由していません。 情報源 • DAIR ホームページ CERN 利用者: 高エネルギー物理学の研究を指揮している CERN (European Organization for Nuclear Research) の研究者。 デプロイ この環境は、大部分は Red Hat 互換の Scientific Linux 6 ベースで す。主なハイパーバイザとして KVM を使用していますが、一方 Windows Server 2008 上の Hyper-V を使用したテストも進行中です。 我々は Compute、Image service、Identity、dashboard の設定に Puppet Labs のOpenStack モジュールを使用しています。Puppet は、イ 280 OpenStack 運用ガイド February 1, 2016 ンスタンスの設定に幅広く使用されます。Foreman は、レポートおよび インスタンスの配備の GUI として使用されます。 ユーザとグループは Active Directory で管理され、LDAP を使用して Identity にインポートされます。CLI は nova と euca2ools が使用可 能です。 CERN では現在 3 つのクラウドが稼働しており、合計で約 4,700 台の コンピュートノード、120,000 コアがあります。 CERN IT クラウドは 2015年までに 300,000 コアにまで拡張される予定です。 情報源 • “OpenStack in Production: A tale of 3 OpenStack Clouds” • “Review of CERN Data Centre Infrastructure” • “CERN Cloud Infrastructure User Guide” 281 OpenStack 運用ガイド February 1, 2016 付録B ハリウッド^H^H^H^H^Hクラ ウドナイトメア 目次 二重 VLAN .................................................. 「あの問題」 ............................................... イメージの消失 ............................................. バレンタインデーのコンピュートノード大虐殺 .................. ウサギの穴に落ちて ......................................... Havana 死者の幽霊 .......................................... 283 286 288 290 292 293 ここにあるのは、OpenStack クラウドオペレータ達の苦闘の抜粋であ る。これを読み、彼らの叡智を学ぶが良い。 二重 VLAN 私は、新しい OpenStack クラウドのセットアップをするため、カナダの ブリティッシュコロンビア州ケロウナの現地にいた。デプロイ作業は完 全に自動化されていた。Cobbler が物理マシンに OS をデプロイし、そ れを起動し、その後は Puppet が引き継いだ。私は練習で幾度もデプロ イシナリオを実行してきたし、もちろん全て正常であった。 ケロウナの最終日、私はホテルから電話会議に参加していた。その裏 で、私は新しいクラウドをいじっていた。私はインスタンスを1つ起動 し、ログインした。全ては正常に思えた。退屈しのぎに、私は ps aux を実行したところ、突然そのインスタンスがロックアップしてしまっ た。 これは単なる1回限りの問題と思ったので、私はインスタンスを削除し て、新しいインスタンスを起動した。その後電話会議は終了し、私は データセンターを離れた。 データセンターで、私はいくつかの仕事を済ませると、ロックアップの ことを思い出した。私は新しいインスタンスにログインし、再度 ps aux を実行した。コマンドは機能した。ふぅ。私はもう一度試してみること にした。今度はロックアップした。 何度か問題が再現した後、私はこのクラウドが実は問題を抱えていると いう不幸な結論に至った。更に悪いことに、私がケロウナから出発する 時間になっており、カルガリーに戻らなければならなかった。 283 OpenStack 運用ガイド February 1, 2016 どこかであなたはこのような障害調査を行ったことがあるだろうか?イ ンスタンスはコマンドを打つ度に全くランダムにロックアップしてしま う。元になったイメージの問題か?No-全てのイメージで同じ問題が発 生する。コンピュートノードの問題か?No-全てのノードで発生する。 インスタンスはロックアップしたのか?No!新しいSSH接続は問題なく機 能する! 我々は助けを求めた。ネットワークエンジニアは、これは MTU の問題で はないかというのだ。素晴らしい!MTU! 事態は動き始めた! MTU とは何 で、何故それが問題になるのだろうか? MTU とは最大転送単位(Maximum Transmission Unit)である。これは、 各パケットに対してそのインターフェースが受け取る最大バイト数を指 定する。もし2つのインターフェースが異なる MTU であった場合、バイ トは尻切れトンボとなって変なことが起こり始める…例えばセッション のランダムなロックアップとか。 注記 すべてのパケットサイズが 1500 に収まるわけではない。SSH 経由の ls コマンド実行は 1500 バイト未満のサイズのパ ケット1つで収まるかもしれない。しかし、 ps aux のよう に多大な出力を行うコマンドを実行する場合、1500 バイトの パケットが複数必要とある。 OK。では MTU の問題はどこから来るのか?なぜ我々は他のデプロイでこ の問題に遭遇しなかったのか?この状況は何が新しいのか?えっと、新 しいデータセンター、新しい上位リンク、新しいスイッチ、スイッチの 新機種、新しいサーバー、サーバーの新機種…つまり、基本的に全てが 新しいものだった。素晴らしい。我々は様々な領域で MTU の増加を試し てみた。スイッチ、コンピュータのNIC、インスタンスの仮想NIC、デー タセンターの上位リンク用のインターフェースのMTUまでいじってみた。 いくつかの変更ではうまくいったが、他はダメだった。やはり、この線 の障害対策はうまくいってないようだった。我々はこれらの領域のMTUは 変更すべきではないようだ。 結局、我々のネットワーク管理者(Alvao)と私自身は4つのターミナル ウィンドウ、1本の鉛筆と紙切れを持って座った。1つのウインドウで 我々は ping を実行した。2つ目のウインドウではクラウドコントロー ラー上の tcpdump、3つ目ではコンピュートノード上の tcpdump、4つ 目ではインスタンス上の tcpdump を実行した。前提として、このクラウ ドはマルチノード、非マルチホスト構成である。 1つのクラウドコントローラーが全コンピュートノードのゲートウェイ の役割を果たしていた。ネットワーク設定には VlanManager が使われて 284 OpenStack 運用ガイド February 1, 2016 いた。これは、クラウドコントローラーと全コンピュートノードで、各 OpenStack プロジェクトが異なる VLAN を持つことを意味する。パケッ トサイズ変更のため、ping の -s オプションを使用していた。パケッ トが全て戻ってくる時もあれば、パケットが出ていったきり全く戻って 来ない時もあれば、パケットはランダムな場所で止まってしまう時もあ る、という状況だった。tcpdump を変更し、パケットの16進ダンプを表 示するようにした。外部、コントローラー、コンピュート、インスタン スのあらゆる組み合わせの間で ping を実行した。 遂に、Alvaro が何かを掴んだ。外部からのパケットがクラウドコント ローラーを叩いた際、パケットは VLAN で設定されるべきではない。 我々はこれが正しいことを検証した。パケットがクラウドコントロー ラーからコンピュートノードに行く際、パケットはインスタンス宛の場 合にのみ VLAN を持つべきである。これもまた正しかった。ping のレス ポンスがインスタンスから送られる際、パケットは VLAN 中にいるべき である。OK。クラウドコントローラーからインターネットにパケット が戻る際、パケットには VLAN を持つべきではない。NG。うぉっ。ま るで パケットの VLAN 部分が削除されていないように見える。 これでは意味が無かった。 このアイデアが我々の頭を駆け巡る間、私はコンピュートノード上でコ マンドをランダムに叩いていた。 $ ip a 10: vlan100@vlan20: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc noqueue master br100 state UP 「Alvaro、VLAN 上に VLAN って作れるのかい?」 「もしやったら、パケットに余計に4バイト追加になるよ」 やっと事の全容が判明した… $ grep vlan_interface /etc/nova/nova.conf vlan_interface=vlan20 nova.conf 中で、vlan_interface は OpenStack が全ての VLAN をア タッチすべきインターフェースがどれかを指定する。正しい設定はこう だった。 vlan_interface=bond0 これはサーバーの冗長化された(bonded)NIC であるべきだからだ。 vlan20 はデータセンターが外向けのインターネットアクセス用に我々に 付与した VLAN である。これは正しい VLAN で bond0 にアタッチされて いる。 285 OpenStack 運用ガイド February 1, 2016 ミスにより、私は全てのテナント VLAN を bond0 の代わりに vlan20 に アタッチするよう OpenStack を設定した。これにより1つの VLAN が別 の VLAN の上に積み重なり、各パケットに余分に4バイトが追加され、 送信されるパケットサイズが 1504 バイトになる原因となった。これが パケットサイズ 1500 のみ許容するインターフェースに到達した際、問 題の原因となったのだった! 全力でこの問題を修正した結果、全てが正常に動作するようになった。 「あの問題」 2012年8月の終わり、カナダ アルバータ州のある大学はそのインフラを OpenStack クラウドに移行した。幸か不幸か、サービスインから1〜2日 間に、彼らのサーバーの1台がネットワークから消失した。ビッ。いなく なった。 インスタンスの再起動後、全ては元通りに動くようになった。我々はロ グを見直し、問題の箇所(ネットワーク通信が止まり、全ては待機状態 になった)を見た。我々はランダムな事象の原因はこのインスタンスだ と判断した。 数日後、それは再び起こった。 我々はログのセットを両方見直した。頻発したログの1つは DHCP だっ た。当時、OpenStack はデフォルトでは DHCP リース期間を 1分に設定 していた (現在は 2分)。これは、各インスタンスが固定 IP アドレスを 更新するためにクラウドコントローラー(DHCP サーバー)に接続するこ とを意味する。幾つかの理由で、このインスタンスはその IP アドレス を更新できなかった。インスタンスのログとクラウドコントローラー上 のログを突き合わせ、並べてやりとりにしてみた。 1. インスタンスはIPアドレスを更新しようとする。 2. クラウドコントローラーは更新リクエストを受信し、レスポンスを返 す。 3. インスタンスはそのレスポンスを「無視」して、更新リクエストを再 送する。 4. クラウドコントローラーは2度めのリクエストを受信し、新しいレス ポンスを返す。 5. インスタンスはクラウドコントローラーからのレスポンスを受信しな かったため、更新リクエストを255.255.255.255に送信し始める。 286 OpenStack 運用ガイド February 1, 2016 6. クラウドコントローラーは 255.255.255.255 宛のリクエストを受信 し、3番めのレスポンスを返す。 7. 最終的に、インスタンスはIPアドレス取得を諦める。 この情報により、我々は問題が DHCP 実行に起因するものと確信した。 何らかの理由でインスタンスが新しいIPアドレスを取得できず、その結 果IPアドレスがなくなり、インスタンスは自分自身をネットワークから 切り離した、と考えた。 ちょっと Google 検索した結果、これを見つけた。VLAN モードで の DHCPリースエラー (https://lists.launchpad.net/openstack/ msg11696.html) 。この情報はその後の我々の DHCP 方針の支えになっ た。 最初のアイデアは、単にリース時間を増やすことだった。もしインスタ ンスが毎週1回だけIPアドレスを更新するのであれば、毎分更新する場 合よりこの問題が起こる可能性は極端に低くなるだろう。これはこの問 題を解決しないが、問題を単に取り繕うことはできる。 我々は、このインスタンス上で tcpdump を実行して、操作で再びこの現 象に遭遇するか見てみることにした。実際、我々はやってみた。 tcpdump の結果は非常に奇妙だった。一言で言えば、インスタンスが IP アドレスを更新しようとする前に、まるでネットワーク通信が停止して いるように見えた。1分間のリース期間で大量の DHCP ネゴシエーショ ンがあるため、確認作業は困難を極めた。しかし、パケット間のたっ た数ミリ秒の違いであれ、あるパケットが最初に到着する際、そのパ ケットが最初に到着し、そのパケットがネットワーク障害を報告した場 合、DHCP より前にネットワーク障害が発生していることになる。 加えて、問題のインスタンスは毎晩非常に長いバックアップジョブを 担っていた。「あの問題」(今では我々はこの障害をこう呼んでいる) はバックアップが行われている最中には起こらなかったが、(数時間 たっていて)「あの問題」が起こるまであと少しのところだった。 それから何日か過ぎ、我々は「あの問題」に度々遭遇した。我々は「あ の問題」の発生後、dhclient が実行されていないことを発見した。 今、我々は、それが DHCP の問題であるという考えに立ち戻った。/etc/ init.d/networking restart を実行すると、全ては元通りに実行される ようになった。 探し続けてきた Google の検索結果が突然得られたという事態をお分か りだろうか?えっと、それがここで起こったことだ。私は dhclient の 情報と、何故 dhclient がそのリースを更新できない場合に死ぬのか 287 OpenStack 運用ガイド February 1, 2016 を探していて、我々が遭遇したのと同じ問題についての OpenStack と dnsmasq の議論の束を突然発見した。 高負荷ネットワークIOとdnsmasqの問題 (http://www.gossamerthreads.com/lists/openstack/operators/18197) DHCPOFFERが送信されない事による、起動中のインスタンスのIPアド レスの消失 (http://www.gossamer-threads.com/lists/openstack/ dev/14696) マジ?Google。 このバグ報告は、すべてに対して重要です: KVMイメージがブリッ ジネットワークで接続を失う (https://bugs.launchpad.net/ubuntu/ +source/qemu-kvm/+bug/997978) レポートを読むのは楽しかった。同じ奇妙なネットワーク問題にあった 人々であふれていたが、全く同じ説明はなかった。 つまり、これは qemu/kvm のバグである。 バグ報告を発見すると同時に、同僚が「あの問題」を再現することに成 功した!どうやって?彼は iperf を使用して、インスタンス上で膨大な ネットワーク負荷をかけた。30分後、インスタンスはネットワークから 姿を消した。 パッチを当てた qemu と再現方法を携えて、我々は「あの問題」を最終 的に解決したかを確認する作業に着手した。インスタンスにネットワー ク負荷をかけてから丸48時間後、我々は確信していた。その後のことは 知っての通りだ。あなたは、joe へのバグ報告を検索し、私のコメント と実際のテストを見つけることができる。 イメージの消失 2012年の終わり、Cybera (カナダ アルバータ州にある、サイバーイン フラのデプロイを監督する権限を持つ非営利団体)が、彼らの DAIR プ ロジェクト (http://www.canarie.ca/en/dair-program/about) 用に新し い OpenStack クラウドをデプロイした。サービスインから数日後、ある コンピュートノードがロックアップした。問題のノードの再起動にあた り、私は顧客の権限でインスタンスを起動するため、そのノード上で何 のインスタンスがホスティングされていたかを確認した。幸運にも、イ ンスタンスは1つだけだった。 nova reboot コマンドは機能しなかったので、virsh を使用したが、す ぐに仮想ディスクが見つからないとのエラーが返ってきた。この場合、 288 OpenStack 運用ガイド February 1, 2016 仮想ディスクは Glance イメージで、イメージが最初に使用する際に / var/lib/nova/instances/_base にコピーされていた。何故イメージが見 つからないのか?私はそのディレクトリをチェックし、イメージがない ことを知った。 私は nova データベースを見直し、nova.instances テーブル中の当該イ ンスタンスのレコードを見た。インスタンスが使用しているイメージは virsh が報告したものと一致した。よって、ここでは矛盾は発見されな かった。 私は Glance をチェックし、問題のイメージがそのユーザの作成したス ナップショットであることに注目した。最終的に、それはグッドニュー スだった。このユーザが影響を受けた唯一のユーザだった。 最後に、私は StackTack をチェックし、ユーザのイベントを見直した。 彼らはいくつかのスナップショットを作ったり消したりしていた-あり そうな操作ではあるが。タイムスタンプが一致しないとはいえ、彼らが インスタンスを起動して、その後スナップショットを削除し、それが何 故か /var/lib/nova/instances/_base から削除されたというのが私の 結論だった。大した意味は無かったが、それがその時私が得た全てだっ た。 コンピュートノードがロックアップした原因はハードウェアの問題だっ たことが判明した。我々はそのハードウェアを DAIR クラウドから取 り外し、修理するよう Dell に依頼した。Dell が到着して作業を開始 した。何とかかんとか(あるいはタイプミス)で、異なるコンピュート ノードを落としてしまい、再起動した。素晴らしい。 そのノードが完全に起動した際、インスタンスが起動した時に何が起こ るのかを見るため、私は同じシナリオを実行して、インスタンスを復旧 した。インスタンスは全部で4つあった。3つは起動し、1つはエラー になった。このエラーは以前のエラーと同じだった。「unable to find the backing disk.」マジ、何で? 再度、イメージがスナップショットであることが判明した。無事に起動 した他の3インスタンスは標準のクラウドイメージであった。これはス ナップショットの問題か?それは意味が無かった。 DAIR のアーキテクチャーは /var/lib/nova/instances が共有 NFS マウ ントであることに注意したい。これは、全てのコンピュートノードがそ のディレクトリにアクセスし、その中に _base ディレクトリが含まれる ことを意味していた。その他の集約化エリアはクラウドコントローラー の /var/log/rsyslog だ。このディレクトリは全コンピュートノードの 全ての OpenStack ログが収集されていた。私は、virsh が報告したファ イルに関するエントリがあるのだろうかと思った。 289 OpenStack 運用ガイド February 1, 2016 dair-ua-c03/nova.log:Dec 19 12:10:59 dair-ua-c03 2012-12-19 12:10:59 INFO nova.virt.libvirt.imagecache [-] Removing base file: /var/lib/nova/instances/_base/7b4783508212f5d242cbf9ff56fb8d33b4ce6166_10 あっはっは!じゃぁ、OpenStack が削除したのか。でも何故? Essex で、_base 下の任意のファイルが使用されていないかどうか定期 的にチェックして確認する機能が導入された。もしあれば、OpenStack Compute はそのファイルを削除する。このアイデアは問題がないように 見え、品質的にも良いようだった。しかし、この機能を有効にすると最 終的にどうなるのか?Essex ではこの機能がデフォルトで無効化されて いた。そうあるべきであったからだ。これは、Folsom で有効になること が決定された (https://bugs.launchpad.net/nova/+bug/1029674)。私は そうあるべきとは思わない。何故なら 何かを削除する操作はデフォルトで有効化されるべきではない。 今日、ディスクスペースは安価である。データの復元はそうではない。 次に、DAIR の共有された /var/lib/nova/instances が問題を助長し た。全コンピュートノードがこのディレクトリにアクセスするため、全 てのコンピュートノードは定期的に _base ディレクトリを見直してい た。あるイメージを使用しているインスタンスが1つだけあり、そのイ ンスタンスが存在するノードが数分間ダウンした場合、そのイメージが 使用中であるという印を付けられなくなる。それゆえ、イメージは使用 中に見えず、削除されてしまったのだ。そのコンピュートノードが復帰 した際、そのノード上でホスティングされていたインスタンスは起動で きない。 バレンタインデーのコンピュートノード 大虐殺 この物語のタイトルは実際の事件よりかなりドラマティックだが、私は タイトル中に「バレンタインデーの大虐殺」を使用する機会が再びある とは思わない(し望まない)。 この前のバレンタインデーに、クラウド中にあるコンピュートノードが 最早動いていないとの警告を受け取った。つまり、出力で、この特定の ノードの状態が XXX になっていた。 実に奇妙なことだが、私はクラウドコントローラーにログインし、問題 のコンピュートノードに ping と SSH の両方を実行できた。通常、この 290 OpenStack 運用ガイド February 1, 2016 種の警告を受け取ると、コンピュートノードは完全にロックしていてア クセス不可になる。 数分間のトラブル調査の後、以下の詳細が判明した。 • 最近、あるユーザがそのノード上で CentOS のインスタンスを起動し ようとした。 • このユーザはそのノード(新しいノード)上の唯一のユーザだった。 • 私が警告を受け取る直前、負荷率は8に急増した。 • 冗長化された 10Gb ネットワークデバイス(bond0)は DOWN 状態だっ た。 • 1Gb NICはまだ生きていて、有効だった。 私は bonding ペアの両方の NIC の状態を確認し、両方ともスイッチ ポートへの通信ができないことを知った。bond 中の各 NIC が異なるス イッチに接続されていることを知り、私は、各スイッチのスイッチポー トが同時に死ぬ可能性はまずないと思った。私は 10Gb デュアルポー ト NIC が死んで、交換が必要だと結論づけた。私は、そのノードがホ スティングされているデータセンターのハードウェアサポート部門に宛 てたチケットを作成した。私は、それが新しいノードで、他のインスタ ンスがまだそのノード上でホスティングされていないことを幸運に思っ た。 1時間後、私は同じ警告を受信したが、別のコンピュートノードだっ た。拍手。OK、問題は間違いなく現在進行中だ。元のノードと全く同様 に、私は SSH でログインすることが出来た。bond0 NIC は DOWN だった が、1Gb NIC は有効だった。 そして、最も重要なこと。同じユーザが CentOS インスタンスを作成し ようとしたばかりだった。何だと? 私はこの時点で完全に混乱した。よって、私はネットワーク管理者に対 して、私を助けられるか聞いてみるためメールした。彼は両方のスイッ チにログインし、すぐに問題を発見した。そのスイッチは2つのコン ピュートノードから来たスパニングツリーパケットを検出し、スパニン グツリーループを回避するため、即時にそれらのポートをダウンさせた のだ。 Feb 15 01:40:18 SW-1 Stp: %SPANTREE-4-BLOCK_BPDUGUARD: Received BPDU packet on Port-Channel35 with BPDU guard enabled. Disabling interface. (source mac fa:16:3e:24:e7:22) Feb 15 01:40:18 SW-1 Ebra: %ETH-4-ERRDISABLE: bpduguard error detected on Port-Channel35. 291 OpenStack 運用ガイド February 1, 2016 Feb 15 01:40:18 SW-1 Mlag: %MLAG-4-INTF_INACTIVE_LOCAL: Local interface PortChannel35 is link down. MLAG 35 is inactive. Feb 15 01:40:18 SW-1 Ebra: %LINEPROTO-5-UPDOWN: Line protocol on Interface Port-Channel35 (Server35), changed state to down Feb 15 01:40:19 SW-1 Stp: %SPANTREE-6-INTERFACE_DEL: Interface Port-Channel35 has been removed from instance MST0 Feb 15 01:40:19 SW-1 Ebra: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet35 (Server35), changed state to down 彼はスイッチポートを再度有効にしたところ、2つのコンピュートノー ドは即時に復活した。 不幸にも、この話にはエンディングがない…我々は、なぜ CentOS イ メージがスパニングツリーパケットを送信し始める原因をいまだ探して いる。更に、我々は障害時にスパニングツリーを軽減する正しい方法を 調査している。これは誰かが思うより大きな問題だ。スパニングツリー ループを防ぐことはスイッチにとって非常に重要であるが、スパニング ツリーが起こった際に、コンピュートノード全体がネットワークから切 り離されることも大きな問題である。コンピュートノードが 100 イン スタンスをホスティングしていて、そのうち1つがスパニングツリーパ ケットを送信した場合、そのインスタンスは事実上他の 99 インスタン スを DDoS(サービス不能攻撃)したことになる。 これはネットワーク業界で進行中で話題のトピックである(特に仮想マ シンと仮想スイッチで発生する)。 ウサギの穴に落ちて 稼働中のインスタンスからコンソールログを取得可能なユーザはサポー トの恩恵となる(インスタンスの中で何が起こっているのか何度も確認 できるし、あなたが悩まずに問題を修正することができる)。不幸なこ とに、過剰な失敗の記録は時々、自らの問題となり得る。 報告が入った。VM の起動が遅いか、全く起動しない。標準のチェック 項目は?nagios 上は問題なかったが、RabbitMQ クラスタの現用系に向 かうネットワークのみ高負荷を示していた。捜査を開始したが、すぐに RabbitMQ クラスタの別の部分がざるのようにメモリリークを起こしてい ることを発見した。また警報か?RabbitMQ サーバーの現用系はダウンし ようとしていた。接続は待機系にフェイルオーバーした。 この時、我々のコントロールサービスは別のチームによりホスティング されており、我々には現用系サーバー上で何が起こっているのかを調 査するための大したデバッグ情報がなく、再起動もできなかった。この チームは警報なしで障害が起こったと連絡してきたが、そのサーバーの 再起動を管理していた。1時間後、クラスタは通常状態に復帰し、我々 はその日は帰宅した。 292 OpenStack 運用ガイド February 1, 2016 翌朝の継続調査は別の同様の障害でいきなり始まった。我々は急いで RabbitMQ サーバーを再起動し、何故 RabbitMQ がそのような過剰なネッ トワーク負荷に直面しているのかを調べようとした。nova-api のデバッ グログを出力することにより、理由はすぐに判明した。tail -f /var/ log/nova/nova-api.log は我々が見たこともない速さでスクロールして いた。CTRL+C でコマンドを止め、障害を吐き出していたシステムログの 内容をはっきり目にすることが出来た。-我々のユーザの1人のインス タンスからのシステムログだった。 インスタンスIDの発見後、console.log を探すため /var/lib/nova/ instances にアクセスした。 adm@cc12:/var/lib/nova/instances/instance-00000e05# wc -l console.log 92890453 console.log adm@cc12:/var/lib/nova/instances/instance-00000e05# ls -sh console.log 5.5G console.log 思った通り、ユーザはダッシュボード上のコンソールログページを定期 的に更新しており、ダッシュボードに向けて5GB のファイルが RabbitMQ クラスタを通過していた。 我々はユーザを呼び、しばらくダッシュボードの更新を止めるよう申し 入れた。すると、恐ろしい VM の破壊は止み、彼らは大いに喜んだ。そ の後、我々はコンソールログのサイズを監視するようになった。 今日に至るまで、この問題 (https://bugs.launchpad.net/nova/ +bug/832507) には完全な解決策がないが、我々は次回のサミットの議論 に期待している。 Havana 死者の幽霊 台湾の Academia Sinica Grid Computing Centre の Felix Lee さんが この話を提供してくれました。 RDO リポジトリーを使用して Grizzly から Havana 2013.2-2 に OpenStack を単にアップグレードしました。そして、すべてのものが EC2 API で非常に良く動作していました。 この API は、RunInstances などの特定の EC2 リクエストに対して、高 負荷になり、応答が遅くなることに気がつきました。 Havana における /var/log/nova/nova-api.log の出力: 2014-01-10 09:11:45.072 129745 INFO nova.ec2.wsgi.server 293 OpenStack 運用ガイド February 1, 2016 [req-84d16d16-3808-426b-b7af-3b90a11b83b0 0c6e7dba03c24c6a9bce299747499e8a 7052bd6714e7460caeb16242e68124f9] 117.103.103.29 "GET /services/Cloud?AWSAccessKeyId=[something]&Action=RunInstances&ClientToken= [something]&ImageId=ami-00000001&InstanceInitiatedShutdownBehavior=terminate. .. HTTP/1.1" status: 200 len: 1109 time: 138.5970151 このリクエストは、処理に 2 分以上かかりました。しかし、同じハード ウェアとシステム設定を使用している、他の一緒に動いている Grizzly 環境は迅速に実行されました。 Grizzly における /var/log/nova/nova-api.log の出力: 2014-01-08 11:15:15.704 INFO nova.ec2.wsgi.server [req-ccac9790-3357-4aa8-84bd-cdaab1aa394e ebbd729575cb404081a45c9ada0849b7 8175953c209044358ab5e0ec19d52c37] 117.103.103.29 "GET /services/Cloud?AWSAccessKeyId=[something]&Action=RunInstances&ClientToken= [something]&ImageId=ami-00000007&InstanceInitiatedShutdownBehavior=terminate. .. HTTP/1.1" status: 200 len: 931 time: 3.9426181 システムリソースを監視しているうちに、EC2 API がこのリクエストを 処理している間、メモリー消費量が非常に増えていることに気が付き ました。これは、メモリが開放されず、正常に処理されていないと気 づきました。API がこれらのいくつかのリクエストを受け取ると、シ ステムがメモリー不足になり、スワップを使い始めるまで、メモリー消 費がすぐに大きくなります。各ノードは 48GB メモリーを持ち、"novaapi" プロセスが数分以内にそれらをすべて消費します。これが発生する と、nova-api サービスを再起動するまで、システム全体が使えなくなる ほど遅くなります。 そのため、この問題を引き起こしているかもしれない、Havana で EC2 API に行われた変更を自分で探しはじめました。これはバグなのか、回 避策が必要となる通常の動作なのか? nova (OpenStack Compute) のコードを深堀りすると、私のシステムに影 響を与える可能性がある 2 つの領域を api/ec2/cloud.py で見つけまし た。 instances = self.compute_api.get_all(context, search_opts=search_opts, sort_dir='asc') sys_metas = self.compute_api.get_all_system_metadata( context, search_filts=[{'key': ['EC2_client_token']}, {'value': [client_token]}]) 294 OpenStack 運用ガイド February 1, 2016 データベースに 100 万以上のメタデータおよび 300,000 インスタン スのレコードが「削除済み」または「エラー」状態で含まれていまし た。MySQL クライアントを使用して、まずバックアップを取得し、デー タベースをクリーンアップし、いくつか削除を実行することにしまし た。例えば、以下の SQL コマンドを実行して、1 年以上の間に削除され たインスタンスの行を削除しました。 mysql> delete from nova.instances where deleted=1 and terminated_at < (NOW() - INTERVAL 1 YEAR); 古いレコードの削除後、パフォーマンスが大幅に向上しました。新しい 環境は順調に動作しつづけています。 295 OpenStack 運用ガイド February 1, 2016 付録C ロードマップの取り扱い 目次 利用できる情報 ............................................. ロードマップへの影響 ....................................... ウォッチの観点 ............................................. 分散仮想ルーター ........................................... Modular Layer 2 プラグインによる Open vSwitch プラグインの置 換 ......................................................... 新しい API ................................................. OpenStack on OpenStack (TripleO) ........................... Data processing service for OpenStack (sahara) ............. Bare metal Deployment (ironic) ............................. Database as a Service (trove) .............................. Message Service (zaqar) .................................... DNS service (designate) .................................... スケジューラーの改善 ....................................... 298 299 300 302 302 302 303 303 303 303 303 304 304 良いお知らせ: OpenStack は、次に行われることに関する情報を提供す る際に、前例がないくらいにオープンです。悪いお知らせ: 各リリース が非常に迅速に行われます。この付録の目的は、参照しておく価値のあ るページをいくつか紹介すること、次のリリースやその先に起こること を根拠を持って推測することです。 OpenStack は6ヶ月のリリースサイクルを取っており、通常は4/5 月と10/11月にリリースが行われます。各リリースサイクルの最初 に、OpenStack コミュニティは一ヶ所に集まりデザインサミットを行 います。サミットでは、次のリリースでの機能が議論され、優先度付 けと計画が行われます。図C.1「リリースサイクル図」 [298] は、リ リースサイクルの一例で、サミットが行われて以降のマイルストーンリ リース、Code Freeze、String Freeze などが記載されています。マイ ルストーンはリリースサイクル内での中間リリースで、テスト用にパッ ケージが作成され、ダウンロードできるようになります。 Code Freeze では、そのリリースに向けての新機能の追加が凍結されます。String Freeze は、ソースコード内の文字列の変更が凍結されることを意味しま す。 297 OpenStack 運用ガイド February 1, 2016 図C.1 リリースサイクル図 利用できる情報 OpenStack 環境の要望を把握するために使用できる、いくつかの良い情 報源があります。 リリースノートは OpenStack Wiki で管理され、以下で公開されていま す。 シリーズ 状態 リリース番号 リリース日 Liberty 開発中 2015.2 2012年10月 Kilo 現在の安定版リリー 2015.1 ス、セキュリティアッ プデート対象 2015年4月 Juno セキュリティサポート 2014.2 2014年10月16日 Icehouse エンドオブライフ 2014.1 2014年4月17日 2014.1.1 2014年6月9日 2014.1.2 2014年8月8日 2014.1.3 2014年10月2日 2013.2 2013年4月4日 2013.2.1 2013年12月16日 2013.2.2 2014年2月13日 2013.2.3 2014年4月3日 2013.2.4 2014年9月22日 2013.2.1 2013年12月16日 2013.1 2013年4月4日 2013.1.1 2013年5月9日 2013.1.2 2013年6月6日 Havana Grizzly エンドオブライフ エンドオブライフ 298 OpenStack 運用ガイド シリーズ Folsom Essex Diablo February 1, 2016 状態 エンドオブライフ エンドオブライフ 非推奨 リリース番号 リリース日 2013.1.3 2013年8月8日 2013.1.4 2013年10月17日 2013.1.5 2015年3月20日 2012.2 2012年9月27日 2012.2.1 2012年11月29日 2012.2.2 2012年12月13日 2012.2.3 2013年1月31日 2012.2.4 2013年4月11日 2012.1 2012年4月5日 2012.1.1 2012年6月22日 2012.1.2 2012年8月10日 2012.1.3 2012年10月12日 2011.3 2011年9月22日 2011.3.1 2012年1月19日 Cactus 非推奨 2011.2 2011年4月15日 Bexar 非推奨 2011.1 2011年2月3日 Austin 非推奨 2010.1 2010年10月21日 これは他のいくつかのリソースです。 • 現在の開発中の機能、それらの目標マイルストーンの詳細 • まだ開発中ではないものを含む、すべての機能の一覧 • 直近のデザインサミットからの大まかな設定に関する議論 (etherpad) • レビュー中の個々のコードの変更の一覧 ロードマップへの影響 OpenStack は、あなたのアイディア (およびコントリビューション) を 本当に歓迎しています。また、実世界のソフトウェアのユーザーからの フィードバックに高い価値をおきます。機能開発を推進するプロセスに ついて少し理解することにより、参加でき、あなたの要望を追加できる かもしれません。 機能追加リクエストは、通常 Etherpad で始まります。Etherpad は共同 編集ツールで、デザインサミットのその機能に関するセッションで議論 を整理するのに使われます。続けて、プロジェクトの Launchpad サイト に blueprint が作成され、blueprint を使ってよりきちんとした形で機 能が規定されていきます。 この後、blueprint はプロジェクトメンバー によって承認され、開発が始まります。 299 OpenStack 運用ガイド February 1, 2016 あなたの機能追加リクエストを新機能として検討してもらうのに一番早 い方法は、アイデアを書いた Etherpad を作成し、デザインサミットの セッションを提案することです。デザインサミットが終わっている場合 には、blueprint を直接作成することもできます。 Victoria Martínez の blueprint での開発の進め方についてのブログを是非読んでくださ い。 OpenStack 開発者のインターンの視点で書かれた記事です。 開発されている次のリリースのロードマップは Releases にあります。 将来のリリースで検討されている機能を確認したり、過去に実装された 機能を見るには、OpenStack Compute (nova) Blueprints, OpenStack Identity (keystone) Blueprints などの既存の Blueprint やリリース ノートを見て下さい。 開発ロードマップに影響を与えるために、直接ブループリントに関わる 道以外に、非常に高く評価された別の方法があります。ユーザー調査で す。http://openstack.org/user-survey にあります。基本的に匿名で、 お使いの環境の詳細、要望を送ることができます。各サイクルで、ユー ザーコミッティーが結果を分析して、報告書を作成します。具体的な情 報を TC や PTL に提供することを含みます。 ウォッチの観点 OpenStack の中で改善されている領域を注目しつづけたいでしょう。各 プロジェクトのロードマップを「ウォッチ」する最善の方法は、今のマ イルストーンリリースにおいて取り組むために承認されたブループリン トを確認することです。1 年に 2 回開催されている OpenStack サミッ トの PTL によるウェビナーからも知ることができます。 ドライバー品質の改善 主要な品質は、Block Storage、Compute、Networking におけるドライ バーやプラグインをまたがり発生しています。とくに、プロプライエタ リーやハードウェア製品を必要とする Compute と Networking のドライ バー開発者は、開発プロセス中に使用するために、自動化された外部テ ストシステムを提供する必要があります。 より簡単なアップグレード より簡単なアップグレードは、OpenStack の開始以来、もっとも要望さ れている機能の 1 つです。Object Storage 以外のコンポーネントは 「作業中」です。最近のリリースでは、内部メッセージ通信がバージョ ン付けされています。サービスが理論的には後方互換性の動作まで戻れ 300 OpenStack 運用ガイド February 1, 2016 ることを目的としています。これにより、古いバージョンをいくつか残 しながら、いくつかのコンポーネントの新しいバージョンを実行できる ようになります。 さらに、データベースの移行が Turbo Hipster ツールを用いてテストさ れます。このツールは、実世界のユーザーのデータベースのコピーにお いて、データベースの移行パフォーマンスをテストします。 これらの変更は、18章アップグレード [265] にある OpenStack アップ グレードガイドを促進しました。次のリリースにおいて継続的に改善さ れつづけています。 nova-network の非推奨 Folsom リリースにおいて OpenStack Networking (neutron) により提 供された完全な SDN スタックの導入により、Compute のコンポーネン トの一部に残っている、初期のネットワークのコードにおける開発の 努力が徐々に少なくなってきました。まだたくさん本番環境で novanetwork を使用していますが、より柔軟で完全な機能を持つ OpenStack Networking に移行して、そのコードを削除する長期的な計画がありまし た。 Havana リリース中に nova-network を廃止しようという試みがあり ました。これは、このガイドで言及した FlatDHCP マルチホスト高可 用性モードなどの同等機能の不足、バージョン間の移行パスの不足、 不十分なテスト、伝統的にサポートされる nova-network のより簡 単なユースケースに使用する場合のシンプルさ、などの理由により中 断されました。甚大な努力によりこれらの心配事を解決してきました が、nova-network は Juno リリースにおいて廃止されませんでした。さ らに、Juno においてネットワークごとの設定機能や SR-IOV の追加など の限定された範囲で、nova-network へのパッチが再び受け入れられてき ました。 これは、クラウドを設計するときに、重要な判断ポイントを残しま す。OpenStack Networking は、いくつかのシナリオにおける性能問 題、L3 システムの基本的な高可用性のみなど、少しの制限を持ちます が、十分使用できる堅牢さを持ちます。nova-network よりも多くの機能 を提供します。しかしながら、より完全な SDN の機能から利益を得る、 より複雑なユースケースを持たない場合、または新しく導入された概念 になじめない場合、nova-network は次の 12 か月間の主要な選択肢であ り続けるかもしれません。 同様に、既存のクラウドを持ち、nova-network から OpenStack Networking にアップグレードするつもりである場合、この期間中のアッ 301 OpenStack 運用ガイド February 1, 2016 プグレードを遅らせる選択肢もあるでしょう。しかしながら、OpenStack の各リリースは新しい重要なイノベーションをもたらします。ネット ワークの使用法によらず、各リリースの合理的な時間枠の中でアップグ レードの計画を始めることが最も良いでしょう。 言及されたとおり、nova-network から neutron にきれいに移行する方 法は現在ありません。適切な移行パスがリリースされるまで、移行を心 に留めておき、そのプロセスに関わることを推奨します。 分散仮想ルーター OpenStack Networking を長く取り巻く不満の 1 つは、L3 コンポーネン トの高可用性の不足でした。Juno リリースは、これを解決することを目 指した、分散仮想ルーター (DVR) を導入しました。 初期の目安は、ML2 プラグインと Open vSwitch、1 つのフラット な外部ネットワークと VXLAN のテナントネットワークなど、基本 的なシナリオに対してこれをうまく実行することです。しかしなが ら、VLAN、IPv6、Floating IP、大量のノース・サウス通信のシナリオ、 大量のコンピュートノードなどで問題が発生しはじめます。これらは次 のリリースで大幅に改善されることが期待されていますが、特定の問題 におけるバグ報告が強く望まれています。 Modular Layer 2 プラグインによる Open vSwitch プラグインの置換 Modular Layer 2 プラグインは、OpenStack Networking が複雑な実世 界のデータセンターに見られるさまざまな L2 ネットワーク技術を同 時に利用できるようにするフレームワークです。現在、既存の Open vSwitch、Linux Bridge、Hyper-V L2 エージェントと一緒に動作しま す。それらの L2 エージェントと関連付けられたモノリシックなプラグ インを置き換えて廃止することを意図しています。 新しい API Compute API の 3 番目のバージョンが幅広く議論され、Havana と Icehouse のリリースサイクル期間中に取り組まれました。現在の議論 は、V2 API が多くのリリースのために残され、次の API の繰り返しは v2.1 と表示されます。これは、完全に新しい v3 API ではなく、既存の v2.0 と同じようなプロパティーを持ちます。これは、すべての API を 評価するための良い機会です。次世代の API が定義されるまでにコメン 302 OpenStack 運用ガイド February 1, 2016 トを出します。新しいワーキンググループが特別に形成され、OpenStack API を改善して、設計のガイドラインを作成します。あなたの参加も歓 迎されています。 OpenStack on OpenStack (TripleO) このプロジェクトは改善を続けています。greenfield の導入のために使 用することを検討する可能性があります。最新のユーザー調査の結果に よると、大幅な理解が得られたままです。 Data processing service for OpenStack (sahara) ビッグデータの問題に対する最も要望された回答です。専門チームが Hadoop-as-a-Service プロジェクトに安定した進捗を実現しました。 Bare metal Deployment (ironic) ベアメタル配備は幅広く叫ばれていて、開発が続いています。Juno リ リースは、OpenStack Bare metal ドライブを Compute プロジェクトの 中に持ち込みました。Kilo において、既存のベアメタルドライバーを目 指していました。現在ベアメタルドライバーを使用している場合、従う べき具体的なブループリントは Deprecate the bare metal driver で す。 Database as a Service (trove) OpenStack コミュニティーは、何回か開発中の database-as-aservice ツールがありました。Icehouse において最初の統合リ リースがありました。そのリリース以降、高可用な方法でそのま ま使えるデータベースサーバーを配備できます。最初は MySQL の みをサポートしていました。Juno では、Mongo (クラスターを含 む)、PostgreSQL、Couchbase、MySQL の複製機能をサポートしまし た。Kilo では、さらに高度なクラスター機能が導入されました。ま た、Networking などの他の OpenStack コンポーネントとより統合され ました。 Message Service (zaqar) メッセージと通知のキューを提供するサービスが提供されました。 303 OpenStack 運用ガイド February 1, 2016 DNS service (designate) 長く要望されていたサービスです。配下を収集した OpenStack リ ソースを関連付けられた DNS エントリーを操作する機能を提供しま す。designate プロジェクトもリリースされました。 スケジューラーの改善 Compute と Block Storage はどちらも、仮想マシンやボリュームを 配置する場所を決めるためにスケジューラーに頼っています。Havana では、Compute のスケジューラーが大幅に改善されました。これ は、Icehouse において支援を受けた Block Storage におけるスケ ジューラーでした。さらに掘り下げて追跡すると、どちらも取り扱う全 体的なスケジューラーを作成することを目指した、このサイクルを始め た努力が実を結ぶでしょう。Kilo において実行されたいくつかの作業 は、Gantt projectにあります。 Block Storage の改善 Block Storage は、品質ドライバーの幅広い理解と長く取られている記 録を持つ、安定したプロジェクトと考えられています。このチームは、 よりよいエラー報告、自動探索、シンプロビジョニング機能など、さま ざまな領域の作業をサミットで議論しました。 Python SDK へ OpenStack と通信するための効率的な SDK として、さまざまな python*client コードを使用してとても成功していますが、プロジェクト間の 一貫性とドキュメントの入手可能性は満ち欠けがあります。これを取 り除くために、エクスペリエンスを改善するための取り組みが開始され ました。OpenStack におけるクロスプロジェクトの取り組みは、いくつ かの失敗から始まった統一クライアントのプロジェクトなど、波乱の歴 史があります。しかしながら、SDK プロジェクトの初期の目安が約束さ れ、Juno サイクル中に結果を見ることを期待しています。 304 OpenStack 運用ガイド February 1, 2016 付録D 情報源 目次 OpenStack .................................................. Cloud (General) ............................................ Python ..................................................... ネットワーク ............................................... システム管理 ............................................... 仮想化 ..................................................... 構成管理 ................................................... 305 305 305 305 306 306 306 OpenStack • インストールガイド openSUSE 13.2、SUSE Linux Enterprise Server 12 版 • インストールガイド Red Hat Enterprise Linux 7、CentOS 7、Fedora 22 • インストールガイド Ubuntu 14.04 (LTS) Server 版 • OpenStack クラウド管理者ガイド • OpenStack Cloud Computing Cookbook (Packt Publishing) Cloud (General) • “The NIST Definition of Cloud Computing” Python • Dive Into Python (Apress) ネットワーク • TCP/IP Illustrated, Volume 1: The Protocols, 2/E (Pearson) • The TCP/IP Guide (No Starch Press) 305 OpenStack 運用ガイド February 1, 2016 • “A tcpdump Tutorial and Primer” システム管理 • UNIX and Linux Systems Administration Handbook (Prentice Hall) 仮想化 • The Book of Xen (No Starch Press) 構成管理 • Puppet Labs ドキュメント • Pro Puppet (Apress) 306 OpenStack 運用ガイド February 1, 2016 用語集 この用語集は、OpenStack 関連の概念の語彙を定義するために、用語や定義の一覧 を提供します。 OpenStack 用語集に追加する場合、OpenStack の貢献プロセスに沿っ て、openstack/openstack-manuals リポジトリー をクローンし、ソースファイル doc/glossary/glossary-terms.xml を更新してください。 数字 6to4 IPv6 パケットを IPv4 ネットワーク経由で送信するための機構。IPv6 に移行 する手段を提供する。 A 絶対制限 ゲスト仮想マシンの超えられない制限。合計メモリー容量、最大仮想 CPU 数、 最大ディスク容量の設定。 アクセス制御リスト オブジェクトに対する権限の一覧。オブジェクトに対して、アクセスできる ユーザーやシステムプロセスを特定する。また、特定のオブジェクトに対して どのような操作が行えるかを定義する。アクセス制御リスト(ACL)の一般的な 項目では対象項目と操作を指定する。例えば、1つのファイルに対して(Alice, delete)というACL項目が定義されると、Aliceにファイルを削除する権限が与え られる。 アクセスキー Amazon EC2 アクセスキーの別名。EC2 アクセスキー参照。 アカウント Object Storage のアカウントのコンテキスト。Active Directory、/etc/ passwd、OpenLDAP、OpenStack Identity などの認証サービスのユーザーアカウ ントと混同しないこと。 account auditor バックエンドの SQLite データベースに問い合わせることにより、指定された Object Storage のアカウントに、レプリカの欠損やオブジェクトの不整合・破 損がないかを確認する。 307 OpenStack 運用ガイド February 1, 2016 アカウントデータベース Object Storage のアカウントと関連メタデータを保持し、アカウントサーバー がアクセスする、SQLite データベース。 account reaper アカウントサーバーが削除する印を付けた、アカウントデータベースをスキャ ンし、削除する、Object Storage のワーカー。 account server Object Storage にあるコンテナーを一覧表示し、コンテナーの情報をアカウン トデータベースに保存する。 account service 一覧表示、作成、変更、監査などのアカウントサービスを提供する、Object Storage のコンポーネント。OpenStack Identity、OpenLDAP、類似のユーザー アカウントサービスなどと混同しないこと。 アカウンティング Compute サービスは、イベント通知やシステム使用状況データ機能からアカウ ンティング情報を提供する。 ACL 「アクセス制御リスト」参照。 アクティブ/アクティブ設定 アクティブ/アクティブ設定を用いた高可用構成の場合、複数のシステムが処理 を一緒に分担する。また、あるシステムが故障した場合、処理が残りのシステ ムに分散される。 Active Directory Microsoft が提供する認証サービス。LDAP に基づいている。OpenStack でサ ポートされる。 アクティブ/パッシブ設定 アクティブ/パッシブ設定を用いた高可用性セットアップでは、故障したシステ ムを置き換えるために、システムが追加リソースをオンラインにするようセッ トアップされる。 アドレスプール プロジェクトに割り当てられ、プロジェクトの仮想マシンインスタンスに使用 できる、固定 IP アドレスと Floating IP アドレスのグループ。 管理 API 認可された管理者がアクセスでき、一般的にエンドユーザーとパブリックなイ ンターネットがアクセスできない、API コールのサブセット。専用のサービス (keystone) が存在し、他の API (nova) のサブセットになる可能性がある。 308 OpenStack 運用ガイド February 1, 2016 管理サーバー Identity の領域で、管理 API へのアクセスを提供するワーカープロセス。 Advanced Message Queuing Protocol (AMQP) インフラサービス通信のために OpenStack コンポーネントにより使用される オープンな標準メッセージングプロトコル。RabbitMQ、Qpid、ZeroMQ により提 供される。 Advanced RISC Machine (ARM) モバイル機器や組み込みデバイスによく利用される低消費電力 CPU。OpenStack はサポートしている。 アラート Compute のサービスは、通知システム経由で警告を送信できる。カスタム通知 ドライバーを作成する機能がある。警告は、送信したり、ダッシュボードに表 示したりできる。 確保 アドレスプールから Floating IP アドレスを取得するプロセス。ゲスト仮想マ シンインスタンスに固定 IP を関連付けられるようにする。 Amazon Kernel Image (AKI) 仮想マシンのコンテナー形式とディスク形式の両方。Image service によりサ ポートされる。 Amazon Machine Image (AMI) 仮想マシンのコンテナー形式とディスク形式の両方。Image service によりサ ポートされる。 Amazon Ramdisk Image (ARI) 仮想マシンのコンテナー形式とディスク形式の両方。Image service によりサ ポートされる。 Anvil DevStack という名前のシェルスクリプトベースのプロジェクトを Python に移 植するプロジェクト。 Apache The Apache Software Foundation は、オープンソースソフトウェアプロジェク トの Apache コミュニティーをサポートする。これらのプロジェクトは、公共 財のためにソフトウェア製品を提供する。 Apache License 2.0 すべての OpenStack コアプロジェクトは Apache License 2.0 ライセンスの条 件で提供されている。 309 OpenStack 運用ガイド February 1, 2016 Apache Web Server 現在インターネットにおいて使用されている最も一般的な Web サーバーソフト ウェア。 API エンドポイント クライアントが API にアクセスするために通信するデーモン、ワーカーまた はサービス。API エンドポイントは、認証、売上データ、パフォーマンス統 計、Compute 仮想マシンコマンド、センサスデータなどのような数多くのサー ビスを提供できます。 API 拡張 いくつかの OpenStack コア API を拡張するカスタムモジュール。 API 拡張プラグイン Networking プラグインや Networking API 拡張の別名。 API キー API トークンの別名。 API サーバー API エンドポイントを提供するデーモンまたはワーカーを実行するあらゆる ノード。 API トークン クライアントが要求した操作を実行する権限を持つことを検証するために、API リクエストに渡され、OpenStack により使用される。 API バージョン OpenStack では、プロジェクトの API バージョンが URL の一部となる。例: example.com/nova/v1/foobar。 アプレット Web ページの中に組み込める Java プログラム。 Application Programming Interface (API) サービス、アプリケーション、プログラムへのアクセスに使用される仕様の集 合。サービス呼出、各呼出に必要なパラメーター、想定される戻り値を含む。 アプリケーションカタログ ユーザーがアプリケーションのライフサイクルを管理しながら、アプリケー ションの抽象的なレベルで合成環境を作成して配備できるよう、アプリケー ションカタログサービスを提供する OpenStack プロジェクト。このプロジェク トのコード名は murano。 アプリケーションサーバー 他のソフトウェア部品をネットワーク経由で利用可能にするソフトウェア部 品。 310 OpenStack 運用ガイド February 1, 2016 Application Service Provider (ASP) 企業や組織を支援する特定のアプリケーションを貸し出す会社が、より低いコ ストで追加サービスを提供する。 Address Resolution Protocol (ARP) L3 IP プロトコルが L2 リンクローカルアドレスに解決されるプロトコル。 arptables Linux カーネルファイアウォールモジュールで ARP パケットフィルタールール を維持するために使用されるツール。仮想マシン向けのファイアウォールサー ビスを提供するために、Compute で iptables、ebtables、ip6tables と一緒に 使用される。 割り当て Compute の Floating IP アドレスと固定 IP アドレスを関連づけるプロセス。 Asynchronous JavaScript and XML (AJAX) 非同期 Web アプリケーションを作成する為にクライアント側で使用される相互 関係のある Web 開発技術の集合。Horizon で広く使用されている。 ATA over Ethernet (AoE) Ethernet 内をトンネルされるディスクストレージプロトコル。 接続 Networking において、仮想インターフェースや仮想 NIC を L2 ネットワーク に接続するプロセス。Compute の文脈では、ストレージボリュームをインスタ ンスに接続するプロセス。 アタッチ(ネットワーク) 論理ポートへのインターフェースIDの紐付け。インターフェースをポートに差 し込む。 監査 システム使用状況データ機能経由で Compute において提供される。 auditor Object Storage のオブジェクト、コンテナー、アカウントの完全性を検証する ワーカープロセス。auditor は、Object Storage アカウント auditor、コンテ ナー auditor、オブジェクト auditor の総称。 Austin OpenStack の初期リリースのコード名。最初のデザインサミットは、アメリカ 合衆国テキサス州オースチンで開催された。 認可ノード Object Storage 認可ノードの別名。 311 OpenStack 運用ガイド February 1, 2016 認証 ユーザー、プロセスまたはクライアントが、秘密鍵、秘密トークン、パスワー ド、指紋または同様の方式により示されている主体と本当に同じであることを 確認するプロセス。 認証トークン 認証後にクライアントに提供されるテキスト文字列。API エンドポイントに続 くリクエストにおいて、ユーザーまたはプロセスにより提供される必要があ る。 AuthN 認証サービスを提供する Identity のコンポーネント。 認可 ユーザー、プロセス、クライアントが操作を実行する権限を持つかどうかを確 認すること。 認可ノード 認可サービスを提供する Object Storage ノード。 AuthZ 高レベルの認可サービスを提供する Identity のコンポーネント。 自動 ACK メッセージ ACK を有効化または無効化する、RabbitMQ 内の設定。デフォルト で有効。 自動宣言 メッセージ交換がプログラム起動時に自動的に作成されるかどうかを決め る、Compute の RabbitMQ の設定。 アベイラビリティゾーン 耐障害性のために使用されるエリアを分離する Amazon EC2 の概念。OpenStack Compute のゾーンやセルと混同しないこと。 AWS Amazon Web Services。 AWS CloudFormation テンプレート AWS CloudFormation により、AWS ユーザーは関連するリソース群を作成し、管 理できるようになる。オーケストレーションサービスは CloudFormation 互換 形式 (CFN) をサポートする。 312 OpenStack 運用ガイド February 1, 2016 B バックエンド Compute のボリュームのマウント、デーモンによる iSCSI ターゲットへのデー タ転送、Object Storage のオブジェクトの完全性検査など、ユーザーから見え にくい操作や処理。 バックエンドカタログ クライアントが利用可能な API エンドポイントに関する情報を保存、取得する のに、Identity サービスのカタログサービスが使用する保存方式。SQL データ ベース、LDAP データベース、KVS バックエンドなどがある。 バックエンドストア Object Storage のオブジェクトの一覧、ゲスト仮想マシンの現在の状態、ユー ザー名の一覧など、サービスに関する情報を保存および取得するために使用さ れる永続データストア。また、Image service が仮想マシンイメージを取得お よび保存するために使用する方式。Object Storage、ローカルファイルシステ ム、S3、HTTP などの選択肢がある。 backup restore and disaster recovery as a service ファイルシステム、インスタンス、データベースバックアップのバックアッ プ、リストア、リカバリー用の統合ツールを提供する OpenStack プロジェク ト。プロジェクト名は freezer。 帯域 インターネットなどの通信リソースにより使用される、利用可能なデータ量。 何かをダウンロードするために使用されるデータの合計量、またはダウンロー ドするために利用可能なデータの合計量を表す。 barbican OpenStack の key management サービスのコード名。 bare 仮想マシンイメージ用のコンテナーが存在しないことを意味する、Image service のコンテナー形式。 Bare metal service マシンを仮想とみなして、ベアメタルに展開する OpenStack のプロジェクト。 このプロジェクトのコード名は ironic です。 ベースイメージ OpenStack が提供するイメージ。 Bell-LaPadula モデル データの機密性、および区分けした情報へのアクセスの制御に注力したセキュ リティーモデル。このモデルは、エンティティーをサブジェクト (主体) とオ 313 OpenStack 運用ガイド February 1, 2016 ブジェクト (対象) に分ける。サブジェクトが特定のアクセスモードを許可さ れるかどうかを判断するために、サブジェクトの権限がオブジェクトの区分と 比較される。権限や区分のスキーマは、格子モデルで表現される。 Benchmark サービス 各 OpenStack コンポーネント、本番の OpenStack 環境のパフォーマンス分析 とベンチマーク向けにフレームワークを提供する OpenStack プロジェクト。こ のプロジェクトの名前は rally。 Bexar OpenStack に関連するプロジェクトをグループ化したリリース。2011 年 2 月 に公開された。Compute (nova) と Object Storage (swift) のみが含まれる。 Bexar は OpenStack の 2 番目のコード名。デザインサミットは、アメリカ合 衆国テキサス州サンアントニオで開催された。ベア郡の郡庁所在地。 バイナリ 1 と 0 だけから構成される情報。コンピューターの言語。 ビット ビットは、2 を基数とする単一のデジタル数値 (0 または 1)。帯域使用量は、 ビット毎秒 (bps) で計測される。 bps データがある場所から別の場所にどのくらい速く転送されるかの普遍的な計測 基準。 ブロックデバイス ブロック状態のデータを移動するデバイス。これらのデバイスノードにはハー ドディスク、CD-ROM ドライブ、フラッシュドライブ、その他のアドレス可能な メモリの範囲等がある。 ブロックマイグレーション ユーザー操作によりあるホストから別のホストに切り替え中、わずかな停止時 間でインスタンスを退避するために、KVM により使用される仮想マシンのライ ブマイグレーションの方法。共有ストレージ不要。Compute によりサポートさ れる。 Block Storage ボリューム、ボリュームのスナップショット、ボリューム種別を管理す る、OpenStack のコアプロジェクト。Block Storage のプロジェクト名は cinder。 Block Storage API コンピュート VM 用のブロックストレージの作成、接続、接続解除を行うため の API で、独立したエンドポイントとして提供される。 314 OpenStack 運用ガイド BMC February 1, 2016 ベースボード・マネジメント・コントローラー。IPMI アーキテクチャーにおけ る管理機能。コンピューターのマザーボードに埋め込まれ、サーバーとして動 作する、特別なマイクロコントローラーである。システム管理ソフトウェアと プラットフォームハードウェアの間の通信を管理する。 ブータブルディスクイメージ 単独の、ブート可能なファイルとして存在する仮想マシンイメージの形式。 Bootstrap Protocol (BOOTP) 管理サーバーから IP アドレスを取得するために、ネットワーククライアント により使用されるネットワークプロトコル。FlatDHCP マネージャーや VLAN マ ネージャー使用時、dnsmasq デーモン経由で Compute で提供される。 Border Gateway Protocol (BGP) Border Gateway Protocol は、自律システムを接続する、動的ルーティングプ ロトコルである。インターネットのバックボーンと比べて、このプロトコル は、より大きなネットワークを形成するために、異なるネットワークを接続す る。 ブラウザー コンピューターやデバイスがインターネットにアクセスできる、何らかのクラ イアントソフトウェア。 ビルダーファイル リングを再設定するため、深刻な障害の後に最初から再作成するため に、Object Storage が使用する設定情報を含む。 超過利用 主環境がリソース制限されたとき、要求時に応じてインスタンスを伸縮自在に 構築するために、副環境を利用する慣習。 ボタンクラス Horizon 内で関連するボタン種別のグループ。仮想マシンを起動、停止、休止 するボタンは、1 つのクラスにある。Floating IP アドレスを関連付ける、関 連付けを解除するボタンは、別のクラスにある。 バイト 1 つの文字を構成するビットの組。通常は 8 ビットで 1 バイトになる。 C CA 認証局。暗号において、電子証明書を発行するエンティティー。電子証明書 は、証明書の発行先の名前により公開鍵の所有者を証明する。これにより、他 315 OpenStack 運用ガイド February 1, 2016 の信頼される機関が証明書を信頼できるようになる。また、証明された公開鍵 に対応する秘密鍵による表明を信頼できるようになる。この信頼関係のモデル において、CA は証明書の発行先と証明書を信頼している機関の両方に対する信 頼された第三者機関である。CA は、多くの公開鍵基盤 (PKI) スキームの特徴 である。 cache pruner Image service の仮想マシンイメージキャッシュを設定した最大値以下に保つ プログラム。 Cactus 2011年春に登場した OpenStack 関連のプロジェクトリリース。Compute (Nova), Object Storage (Swift), Image Service (Glance) が含まれていた。 Cactus は、アメリカ合衆国テキサス州の都市であり、OpenStack の 3 番目の リリースのコード名である。OpenStack のリリース間隔が 3 か月から 6 か月 になったとき、リリースのコード名が前のサミットと地理的に近いところにな るように変更された。 CADF Cloud Auditing Data Federation (CADF) は、監査イベントデータの仕様であ る。CADF は OpenStack Identity によりサポートされる。 CALL OpenStack のメッセージキューソフトウェアにより使用される、RPC プリミ ティブの 1 つ。メッセージを送信し、応答を待つ。 キャパシティ CPU、ストレージ、ネットワークを含むセルのリソースを定義する。1セルやセ ル全体に含まれる特定のサービスに適用可能。 capacity cache Computeバックエンドデータベースのテーブルには現在のワークロード、RAMの 空き量、各ホストで起動しているVMの数が含まれている。VMがどのホストで開 始するのかを決めるのに利用される。 capacity updater VM インスタンスを監視し、必要に応じて容量キャッシュを更新する通知ドライ バ。 CAST OpenStack メッセージキューソフトウェアにより使用される RPC プリミティブ の 1 つ。メッセージを送信し、応答を待たない。 カタログ Identity による認証後、ユーザーが利用可能な API エンドポイントの一覧。 316 OpenStack 運用ガイド February 1, 2016 カタログサービス ユーザーが Identity で認証後、利用可能な API エンドポイントを一覧表示す る、Identity のサービス。 ceilometer Telemetry サービスのプロジェクト名。OpenStack 向けにメータリングと計測 機能を提供する、統合プロジェクト。 セル 親子関係で Compute リソースの論理パーティションを提供する。親セルが要求 されたリソースを提供できない場合、親セルからのリクエストは子セルに渡さ れる。 セルフォワーディング 親が要求されたリソースを提供できない場合、親セルがリソース要求を子セル に渡す事を可能にする Compute のオプション。 セルマネージャー セル内にある各ホストの現在のキャパシティー一覧を持ち、リクエストを適切 にルーティングする、Compute のコンポーネント。 CentOS OpenStack と互換性のある Linux ディストリビューション。 Ceph オブジェクトストア、ブロックストア、および POSIX 互換分散ファイルシステ ムから構成される大規模スケール可能分散ストレージシステム。OpenStack 互 換。 CephFS Ceph により提供される POSIX 互換ファイルシステム。 認証局 cloudpipe VPN と仮想マシンイメージの復号のために、Compute により提供さ れる簡単な認証局。 Challenge-Handshake Authentication Protocol (CHAP) Compute によりサポートされる iSCSI の認証方式。 チャンススケジューラー 利用可能なホストをプールからランダムに選択する、Compute により使用され るスケジューリング方式。 changes since Compute API のパラメーター。古いデータと比較するために、新しいデータ群 をダウンロードする代わりに、最後に要求した後に実行された、要求した項目 への変更をダウンロードする。 317 OpenStack 運用ガイド February 1, 2016 Chef OpenStack の導入をサポートするオペレーティングシステムの設定管理ツー ル。 子セル CPU 時間、ディスクストレージ、メモリ等の要求されたリソースが親セルで利 用不可の場合、リクエストは親セルに紐付けられた子セルに転送される。子セ ルがリクエストに対応可能な場合、子セルはそのリクエストを処理する。対応 不可の場合、そのリクエストを自分の子セルに渡そうとする。 cinder ブロックストレージサービスを仮想マシンに提供する、OpenStack のコアプロ ジェクト。 CirrOS OpenStack などのクラウドでテストイメージとして使用するために設計された 最小の Linux ディストリビューション。 Cisco neutron プラグイン UCS や Nexus などの Cisco デバイスや技術の Networking プラグイン。 クラウドアーキテクト クラウドの作成を計画、設計および監督する人。 クラウドコンピューティング ネットワーク、サーバー、ストレージ、アプリケーション、サービスなどの設 定可能なコンピューティングリソースの共有プールにアクセスできるモデル。 最小限の管理作業やサービスプロバイダーとのやりとりで、迅速に配備できて リリースできる。 クラウドコントローラー クラウドの全体状況を表す Compute コンポーネント群。キュー経由 で、Identity の認証、Object Storage、ノード/ストレージワーカーなどの サービスと通信する。 クラウドコントローラーノード ネットワーク、ボリューム、API、スケジューラー、イメージサービスなどを実 行するノード。各サービスは、スケーラビリティーや可用性のために、別々の ノードに分割することもできます。 クラウドデータ管理インターフェース (CDMI:Cloud Data Management Interface) クラウドにあるオブジェクトを管理するための RESTful API を定義する SINA 標準。現在 OpenStack ではサポートされていない。 Cloud Infrastructure Management Interface (CIMI) 策定中のクラウド管理の仕様。現在、OpenStack では未サポート。 318 OpenStack 運用ガイド February 1, 2016 cloud-init メタデータサービスから取得した、SSH 公開鍵やユーザーデータなどの情報を 使用して、インスタンスの起動後に初期化を実行する、一般的に仮想マシンイ メージにインストールされるパッケージ。 cloudadmin Compute RBAC システムにおけるデフォルトのロールの 1 つ。システムの完全 なアクセス権を付与する。 Cloudbase-Init cloud-init 同様のゲスト初期化機能を提供する Windows プロジェクト。 cloudpipe プロジェクトごとの VPN を作成するコンピュートのサービス。 cloudpipe イメージ cloudpipe サーバとしてサービスを行う為の、予め用意された VM イメージ。 本質的には Linux 上で実行される OpenVPN。 Clustering クラスタリングサービスと、他の OpenStack サービスにより公開された均質な オブジェクトグループを管理するためのライブラリーを実現する OpenStack プ ロジェクト。このプロジェクトのコード名は senlin。 CMDB 構成管理データベース。 congress Governance service を提供する OpenStack プロジェクト。 コマンドフィルター Compute rootwrap 機能内で許可されるコマンドの一覧。 Common Internet File System (CIFS) ファイル共有プロトコル。 Microsoft が開発し使用している Server Message Block (SMB) プロトコルが公開されオープンになったものです。 SMB プロト コルと同様に、 CIFS は上位レイヤーで動作し、TCP/IP プロトコルを使用しま す。 コミュニティープロジェクト OpenStack Foundation で公認されていないプロジェクト。プロジェクトが充分 成功した場合、育成プロジェクトに昇格し、その後コアプロジェクトに昇格す る事がある。あるいはメインの code trunk にマージされる事もある。 圧縮 特別なエンコーディングによりファイル容量を減らすこと。このファイルは、 元の内容に展開できます。OpenStack は、Linux ファイルシステムレベルの圧 319 OpenStack 運用ガイド February 1, 2016 縮をサポートしますが、Object Storage のオブジェクトや Image service の 仮想マシンイメージなどの圧縮をサポートしません。 Compute コンピュートサービスを提供する OpenStack のコアプロジェクト。Compute の プロジェクト名は nova。 Compute API nova-api デーモンは nova サービスへのアクセスを提供する。Amazon EC2 API など、他の API と通信できる。 コンピュートコントローラー 仮想マシンインスタンスを起動するために適切なホストを選択する Compute の コンポーネント。 コンピュートホスト コンピュートノード実行専用の物理ホスト。 コンピュートノード nova-compute デーモンを実行するノード。Web アプリケーションや分析などの 幅広いサービスを提供する。 Compute サービス 仮想マシンを管理する Compute のコンポーネントの名称。 コンピュートワーカー 各ノードで動作し、仮想マシンインスタンスのライフサイクル (実行、再起 動、終了、ボリュームの接続や切断など) を管理する、Compute のコンポーネ ント。nova-compute デーモンにより提供される。 連結オブジェクト Object Storage が結合し、クライアントに送信する、オブジェクトの断片の 塊。 コンダクター Compute において、コンピュートプロセスからのデータベース要求をプロキ シーする処理。コンダクターを使用することにより、コンピュートノードが データベースに直接アクセスする必要がなくなるので、セキュリティーを向上 できる。 一貫性ウインドウ Object Storage の新規オブジェクトがすべてのクライアントからアクセス可能 になるまでにかかる時間。 コンソールログ Compute の Linux 仮想マシンコンソールからの出力を含む。 320 OpenStack 運用ガイド February 1, 2016 コンテナー Object Storage でオブジェクトを整理して保存する。Linux のディレクトリと 似ているが、入れ子にできない。Image service のコンテナー形式の別名。 コンテナーオーディター SQLite バックエンドデータベースへの問い合わせにより、指定した Object Storage コンテナーにおいてレプリカの欠損やオブジェクトの不整合がないか を確認する。 コンテナーデータベース Object Storage コンテナーとコンテナーメタデータを保存する SQLite データ ベース。コンテナーサーバーは、このデータベースにアクセスする。 コンテナーフォーマット 仮想マシンイメージ、および、マシンの状態や OS ディスク容量などの関連メ タデータを含む、Image サービスにより使用されるラッパー。 コンテナーサーバー コンテナーを管理する Object Storage サーバー。 Containers サービス マルチテナントクラウド環境において、アプリケーションコンテナーの管理 サービスを提供する、OpenStack のプロジェクト。プロジェクトのコード名は magnum です。 コンテナーサービス 作成、削除、一覧表示などのコンテナーサービスを提供する Object Storage のコンポーネント。 コンテンツ配信ネットワーク (CDN) コンテンツ配信ネットワークは、クライアントにコンテンツを配信するために 使用される特別なネットワーク。一般的に、パフォーマンス改善のために、ク ライアントの近くに置かれる。 コントローラーノード クラウドコントローラーノードの別名。 コアAPI コア API は、文脈に応じて OpenStack API または特定のコアプロジェクトの メイン API を意味する。コアプロジェクトは、Compute、Networking、Image service などがある。 コアプロジェクト OpenStack の公式プロジェクト。現在、 Compute (nova), Object Storage (swift), Image service (glance), Identity (keystone), Dashboard 321 OpenStack 運用ガイド February 1, 2016 (horizon), Networking (neutron), and Block Storage (cinder), Telemetry (ceilometer), Orchestration (heat), Database service (trove), Bare Metal service (ironic), Data processing service (sahara) がある。しかし ながら、この定義は「Big Tent」に関するコミュニティーの議論に基づき変更 されてきている。 コスト Compute の分散スケジューラーにおいて、要求している仮想マシンインスタン スのフレーバーに関連する、各ホストのキャパシティーにより計算される。 クレデンシャル ユーザーのみが知っている、またはアクセスできるデータ。ユーザーが正当で あることを検証するために使用される。クレデンシャルは、認証中にサーバー に提示される。例えば、パスワード、秘密鍵、電子証明書、フィンガープリン トなどがある。 Cross-Origin Resource Sharing (CORS) Web ページのさまざまなリソース (例: フォント、JavaScript) を、リソース のあるドメインの外部から要求できるようになる機能。とくに、JavaScript の AJAX コールが XMLHttpRequest 機能を使用できる。 Crowbar クラウドの迅速なデプロイ用に全ての必要なサービスを提供する用途の、Dell によるオープンソースコミュニティプロジェクト。 カレントワークロード 指定されたホスト上で現在進行中の build, snapshot, migrate, resize の操 作数を元に計算される、Compute のキャパシティキャッシュの1要素。 カスタマー テナントの別名。 カスタムモジュール ダッシュボードのルックアンドフィールを変更する為に Horizon がロードす る、ユーザが作成した Python モジュール。 D デーモン バックグラウンドで動作し、リクエストを待機するプロセス。TCP ポートや UDP ポートをリッスンする可能性がある。ワーカーとは異なる。 DAC 任意アクセス制御。サブジェクトがオブジェクトにアクセスする機能を統制す る。ユーザーがポリシーを決定し、セキュリティー属性を割り当てられる。伝 322 OpenStack 運用ガイド February 1, 2016 統的な UNIX システムのユーザー、グループ、読み書き権限が、DAC の例であ る。 ダッシュボード OpenStack 用 Web ベース管理インターフェース。Horizon の別名。 データ暗号化 Image service と Compute は、どちらも仮想マシンイメージ (イン スタンスではない) の暗号化をサポートする。転送中のデータ暗号 は、HTTPS、SSL、TLS、SSH などの技術を使用して、OpenStack においてサポー トされる。Object Storage は、アプリケーションレベルでオブジェクト暗号化 をサポートしませんが、ディスク暗号化を使用するストレージをサポートする 可能性がある。 データベース ID Object Storage データベースの各レプリカに与えられる一意な ID。 データベースレプリケーター アカウント、コンテナー、オブジェクトデータベースを他のノードに変更点を コピーする Object Storage コンポーネント。 Database サービス リレーショナルデータベースと非リレーショナルデータベースの両エンジンに 対して、スケール可能かつ信頼できるクラウド Database-as-a-Service を提供 する統合プロジェクト。この Database service の名前は trove。 Data processing サービス スケールアウト可能なデータ処理基盤と関連する管理インターフェースを提供 する、OpenStack のプロジェクト。プロジェクトのコード名は sahara です。 データストア Database サービスがサポートしているデータベースエンジン。 割り当て解除 Floating IP アドレスと固定 IP アドレスの関連付けを解除する処理。この関 連付けが解除されると、Floating IP はアドレスプールに戻されます。 Debian OpenStack と互換性のある Linux ディストリビューション。 重複排除 ディスク使用を最小化するために、ディスクブロック、ファイル、オブジェク トレベルにあるデータの重複を見つけるプロセス。現在 OpenStack 内では未サ ポート。 323 OpenStack 運用ガイド February 1, 2016 デフォルトパネル ユーザーがダッシュボードにアクセスした際に表示されるデフォルトのパネ ル。 デフォルトテナント ユーザーを作成したときに、テナントを指定していない場合、新規ユーザーは このテナントに割り当てられる。 デフォルトトークン 特定のテナントに関連づけられていない、スコープ付きトークンのために交換 される、Identity のトークン。 遅延削除 イメージをすぐに削除する代わりに、事前定義した秒数経過後に削除するため の、Image service 内のオプション。 デリバリーモード Compute RabbitMQ メッセージ配信モード用設定。transient(一時)又は persistent(永続)のいずれかを設定できる。 サービス妨害 (DoS) DoS は、サービス妨害攻撃の省略形である。正当なユーザーがサービスを使用 することを妨害するための悪意のある試み。 非推奨認証 管理者が、Identity を使用する代わりに、nova-manage コマンド経由でユー ザーを作成および管理できる、Compute 内のオプション。 Designate OpenStack の DNS サービスプロジェクトのコード名。 Desktop-as-a-Service デスクトップ環境群を提供するプラットフォーム。ユーザーがどこからでも デスクトップを利用するためにアクセスする可能性がある。一般的な使用、開 発、同種のテスト環境さえも提供できる。 developer Compute RBAC システムにあるデフォルトのロールの 1 つ。新規ユーザーに割 り当てられるデフォルトのロール。 デバイス ID Object Storage パーティションの物理ストレージデバイスへの対応付け デバイスウェイト 各デバイスのストレージキャパシティに基づき、Object Storage デバイスをま たがりパーティションを比例分配する。 324 OpenStack 運用ガイド February 1, 2016 DevStack シェルスクリプトを使用して、完全な OpenStack 導入環境を迅速に構築するた めのコミュニティープロジェクト。 DHCP Dynamic Host Configuration Protocol。ネットワークに接続されたデバイス が、そのネットワーク上で IP を使用して通信できるよう、ネットワークデバ イスを設定するネットワークプロトコル。このプロトコルは、クライアントサ イドモデルで実装されている。DHCP クライアントは、IP アドレス、デフォル トルート、1 つ以上の DNS サーバーアドレス設定データを要求する。 DHCP エージェント 仮想ネットワーク向けに DHCP サービスを提供する OpenStack Networking エージェント。 Diablo 2011年秋に登場した OpenStack 関連プロジェクトのリリース。Compute (nova 2011.3), Object Storage (swift 1.4.3), Image service (glance) が含まれ る。 Diablo は、OpenStack の 4 番目のリリースのコード名である。デザインサ ミットが、アメリカ合衆国カリフォルニア州サンタクララ近郊の湾岸エリアで 開催された。Diablo は近郊の都市である。 直接使用者 RPC コールが実行されるとき、開始される Compute RabbitMQ の要素。一意な 排他キュー経由で直接交換者に接続し、メッセージを送信し、終了します。 直接交換 RPC コール中に Compute RabbitMQ 内で作成されるルーティングテーブル。関 連する各 RPC コールに対して作成されるもの。 直接発行者 送信されてきた MQ メッセージに応答する RabbitMQ の要素。 関連付け解除 Floating IP アドレスと固定 IP の関連付けを削除する処理。これによ り、Floating IP アドレスをアドレスプールに返す。 ディスク暗号化 ファイルシステム、ディスクパーティション、ディスク全体を暗号化する機 能。Compute の仮想マシン内でサポートされる。 ディスクフォーマット 仮想マシンのディスクイメージが Image service のバックエンドストア内で保 存される、バックエンドの形式。AMI、ISO、QCOW2、VMDK などがある。 325 OpenStack 運用ガイド February 1, 2016 dispersion Object Storage で、フォールトトレラントの確認の為に、オブジェクトとコ ンテナの分散をテスト、確認するツール。 分散仮想ルーター (DVR) OpenStack Networking (neutron) の使用時、高可用なマルチホストルーティン グのための機構。 Django horizon で広範囲に使用している Web フレームワーク。 DNS ドメインネームシステム。インターネットやプライベートネットワークに接続 されるコンピューター、サービス、リソースの名前を管理する階層化分散シス テム。人間が理解しやすい名前を IP アドレスに関連付ける。 DNS レコード 特定のドメインに関する情報を指定し、ドメインに所属するレコード。 DNS サービス 技術によらない方法で、権威 DNS サービスへの拡張可能、オンデマンド、セル フサービスのアクセスを提供する OpenStack プロジェクト。このプロジェクト のコード名は designate。 dnsmasq 仮想ネットワーク向けに DNS、DHCP、BOOTP、TFTP サービスを提供するデーモ ン。 ドメイン Identity v3 API のエンティティーで、プロジェクト、グループ、ユーザーの 集合で、OpenStack Identity のエンティティーを管理する管理権限の範囲を規 定するものである。 インターネット上で Web サイトを他のサイトから分離する。ドメイ ン名はよく、ドットにより区切られた 2 つ以上の部分を持つ。例え ば、yahoo.com、usa.gov、harvard.edu、mail.yahoo.com。 ドメインは、1 つ以上のレコードを含む、すべて DNS 関連の情報のエンティ ティーやコンテナーである。 Domain Name System (DNS) インターネットのドメイン名からアドレス、アドレスからドメイン名に名前解 決するシステム。 DNS は、IP アドレスを人間が覚えやすいアドレスに変換することにより、イン ターネットを参照しやすくする。例えば、111.111.111.1 を www.yahoo.com に 変換する。 326 OpenStack 運用ガイド February 1, 2016 すべてのドメイン、メールサーバーなどのコンポーネントは、DNS を利用し て、適切な場所を解決する。DNS サーバーは、マスターの障害がスレーブによ り助けられるよう、一般的にマスターとスレーブの関係で構築する。DNS サー バーは、ある DNS サーバーへの変更が他の動作中のサーバーに自動的に反映さ れるよう、クラスター化やレプリケーションされることもある。 Compute において、ホスト名が再起動後も同じになるよう、DNS エンティ ティーを Floating IP アドレス、ノード、セルに関連付けできる。 ダウンロード あるコンピューターから他のコンピューターへのデータの転送。通常はファイ ルの形式。 DRTM Dynamic root of trust measurement. 永続交換 サーバーの再起動時に有効なままになる Compute の RabbitMQ メッセージ交 換。 永続キュー サーバーの再起動時に有効なままとなる、Compute RabbitMQ メッセージ キュー。 動的ホスト設定プロトコル(DHCP) ホストの起動時にネットワークを自動的に設定する方式。Networking と Compute により提供される。 Dynamic HyperText Markup Language (DHTML) ユーザーが Web ページと通信したり、簡単なアニメーションを表示したりする ために、HTML、JavaScript、CSS を使用するページ。 E イースト・ウエスト通信 同じクラウドやデータセンターにあるサーバー間のネットワーク通信。ノー ス・サウス通信も参照。 EBS ブートボリューム ブート可能な仮想マシンイメージを含む Amazon EBS ストレージボリューム。 現在 OpenStack では未サポート。 ebtables Linux ブリッジのファイアウォール用のフィルタリングツール。Linux ブリッジを通過するネットワーク通信のフィルタリングできる。 327 OpenStack 運用ガイド February 1, 2016 ネットワーク通信を分離するために、OpenStack Compute において arptables、iptables、ip6tables と一緒に使用される。 EC2 Amazon の商用コンピュート製品。Compute と似ている。 EC2 アクセスキー Compute EC2 API にアクセスするために、EC2 秘密鍵と一緒に使用される。 EC2 API OpenStack は、Compute 経由で Amazon EC2 API へのアクセスをサポートす る。 EC2 互換API OpenStack が Amazon EC2 を利用できるようにするための Compute のコンポー ネント。 EC2 シークレットキー Compute EC2 API 利用時に EC2 アクセスキーと一緒に使用される。各リクエス トを電子署名するために使用される。 Elastic Block Storage (EBS) Amazon のブロックストレージの商用製品。 暗号化 OpenStack は、HTTPS、SSH、SSL、TLS、電子証明書、データ暗号化などの暗号 化技術をサポートします。 エンドポイント API エンドポイントを参照。 エンドポイントレジストリ Identity サービスカタログの別名。 カプセル化 データを抽象化やセキュア化する目的で、あるパケット形式を別の形式の中に 入れるための方法。例えば、GRE、MPLS、IPsec などがある。 エンドポイントテンプレート URL やポート番号のエンドポイントの一覧。Object Storage、Compute、Identity などのサービスがアクセスできる場所を意味す る。 エンティティー Networking により提供されるネットワークサービス、ネットワーク接続性サー ビスに接続したい、ハードウェアやソフトウェアの部品。エンティティーは、 仮想インターフェースを実装することにより Networking を使用できる。 328 OpenStack 運用ガイド February 1, 2016 一時イメージ ボリュームへの変更が保存されない仮想マシンイメージ。インスタンスの終了 後、元の状態に戻される。 一時ボリューム 変更が保存されないボリューム。現在のユーザーが制御を解放したとき、元の 状態に戻される。 Essex 2012年4月に登場した OpenStack 関連プロジェクトのリリース。Compute (nova 2012.1), Object Storage (swift 1.4.8), Image (glance), Identity (keystone), Dashboard (horizon) が含まれる。 Essex は、OpenStack の 5 番目のリリースのコード名。デザインサミットは、 アメリカ合衆国マサチューセッツ州ボストンで開催された。Essex は近くの都 市。 ESXi OpenStack がサポートするハイパーバイザーの1つ。 ETag Object Storage 内のオブジェクトの MD5 ハッシュ。データの完全性を確認す るために使用される。 euca2ools 仮想マシンを管理するためのコマンドラインツール群。ほとんどは OpenStack と互換性がある。 Eucalyptus Kernel Image (EKI) EMI を作成するために、ERI と一緒に使用する。 Eucalyptus Machine Image (EMI) Image service によりサポートされる仮想マシンイメージのコンテナー形式。 Eucalyptus Ramdisk Image (ERI) EMI を作成するために、EKI と一緒に使用する。 退避 1つまたは全ての仮想マシン(VM)インスタンスをあるホストから別のホスト にマイグレーションする処理。共有ストレージのライブマイグレーションとブ ロックマイグレーション両方と互換がある。 交換 RabbitMQ メッセージ交換の別名。 交換種別 Compute RabbitMQ におけるルーティングアルゴリズム。 329 OpenStack 運用ガイド February 1, 2016 排他キュー RabbitMQ—Compute において直接利用者により接続される。メッセージは、現 在の接続だけにより使用される。 拡張属性 (xattr) 所有者、グループ、パーミッション、変更時間など以外の追加情報を保存でき るようにする、ファイルシステムのオプション。Object Storage のバックエン ドのファイルシステムは、拡張属性をサポートする必要がある。 エクステンション API 拡張やプラグインの別名。Identity service では、OpenID のサポートの 追加など、特定の実装を意味する。 外部ネットワーク 一般的にインスタンスのインターネットアクセスに使用されるネットワークセ グメント。 拡張仕様 Compute が新しいインスタンスを起動する場所を判断するとき、追加の要件を 指定する。例えば、ネットワーク帯域の最小量、GPU などがある。 F FakeLDAP Identity と Compute のテスト目的でローカルな LDAP ディレクトリーを作成 するための簡易な方法。Redis が必要。 ファンアウト交換 RabbitMQ と Compute の中で、コンピュートノード、ボリュームノード、ネッ トワークノードからのメッセージを受け付ける機能のために、スケジューラー サービスにより使用されるメッセージングインターフェース。 連合認証 認証プロバイダーと OpenStack クラウド間で信頼を確立する方法。 Fedora OpenStack と互換性のある Linux ディストリビューション。 ファイバーチャネル TCP/IP に似た概念のストレージプロトコル。SCSI コマンドとデータをカプセ ル化する。 Fibre Channel over Ethernet (FCoE) イーサネットでトンネルされるファイバーチャネルプロトコル。 330 OpenStack 運用ガイド February 1, 2016 充填優先スケジューラー 様々なホスト上で新しい VM を起動するよりも、なるべく一つのホストを埋め ようとする Compute スケジューリング手法。 フィルター VM を実行できないホストを排除し、選択されないようにする Compute のスケ ジューリング処理の段階。 ファイアウォール ホストノード間の通信を制限する為に使用される。iptables, arptables, ip6tables, ebtables を使用して Compute により実装される。 FWaaS 境界ファイアウォール機能を提供する Networking 拡張。 fixed IP アドレス インスタンス起動時に毎回同じインスタンスに割当られるIPアドレス(一般 に、エンドユーザやパブリックインターネットからはアクセス出来ない)。イ ンスタンスの管理に使用される。 Flat マネージャー 認可されたノードに IP アドレスを割り当てる Compute のコンポーネン ト。DHCP、DNS、ルーティングの設定とサービスが別の何かにより提供されるこ とを仮定している。 フラットモードインジェクション インスタンスの起動前に、OS のネットワーク設定情報を仮想マシンイメージ内 に注入する、Compute のネットワーク方式。 フラットネットワーク テナントの通信を分離するために、VLAN もトンネルも使用しない仮想ネット ワーク方式。各フラットネットワークは、一般的にブリッジマッピングにより 定義された、バックエンドに専用の物理インターフェースを必要とする。しか しながら、フラットネットワークは複数のサブネットを含められる。 FlatDHCP マネージャー dnsmasq (DHCP、DNS、BOOTP、TFTP) や radvd (ルーティング) のサービスを提 供する Compute のコンポーネント。 フレーバー VM インスタンスタイプの別名。 フレーバー ID Compute や Image service の仮想マシンの各フレーバーやインスタンスタイプ の UUID。 331 OpenStack 運用ガイド February 1, 2016 Floating IP アドレス インスタンスを起動するたびに同じパブリック IP アドレスを持てるように、 プロジェクトが仮想マシンに関連付けられる IP アドレス。DNS 割り当てを維 持するために、Floating IP アドレスのプールを作成し、インスタンスが起動 するたびにそれらをインスタンスに割り当て、一貫した IP アドレスを維持し ます。 Folsom 2012年秋に登場した OpenStack 関連プロジェクトのリリース。Compute (nova), Object Storage (swift), Identity (keystone), Networking (neutron), Image service (glance)、Volumes 又は Block Storage (cinder) が含まれる。 Folsom は、OpenStack の 6 番目のリリースのコード名である。デザイン サミットが、アメリカ合衆国カリフォルニア州サンフランシスコで開催され た。Folsom は近郊の都市である。 FormPost Web ページのフォームからイメージをアップロード (投稿) する、Object Storage のミドルウェア。 freezer バックアップリストアとディザスターリカバリーをサービスとして提供する OpenStack プロジェクト。 フロントエンド ユーザーがサービスと通信する箇所。API エンドポイント、ダッシュボード、 コマンドラインツールの可能性がある。 G ゲートウェイ 異なるネットワーク間でネットワーク通信を中継する、IP アドレス。一般的に はルーターに割り当てられる。 generic receive offload (GRO) カーネルの IP スタックに届ける前に、多くの小さな受信パケットを大きなパ ケットに結合する、特定のネットワークインターフェースドライバーの機能。 generic routing encapsulation (GRE) 仮想のポイントツーポイントリンク内で、さまざまなネットワーク層のプロト コルをカプセル化するプロトコル。 glance OpenStack Image サービスを提供するコアプロジェクト。 332 OpenStack 運用ガイド February 1, 2016 glance API サーバー 仮想マシンに対するクライアントリクエスト、レジストリーサーバーにおけ る Image サービスのメタデータの更新、バックエンドストアから仮想マシンイ メージをアップロードするためのストアアダプターを用いた通信を処理する。 Glance レジストリ Image service イメージレジストリの別名。 グローバルエンドポイントテンプレート すべてのテナントが利用可能なサービスを含む、Identity のエンドポイントテ ンプレート。 GlusterFS NAS ホストを集約するために設計されたファイルシステム。OpenStack と互換 性がある。 ゴールデンイメージ 最終的なディスクイメージが作成され、すべてのノードで変更することなく使 用される、オペレーティングシステムのインストール方法。 Governance service 動的なインフラストラクチャー全体でポリシーを監視、強制、監査するため に、さまざまなクラウドサービス群にわたり、Governance as a Service を提 供する OpenStack プロジェクト。このプロジェクトのコード名は congress。 Graphic Interchange Format (GIF) Web ページのアニメーション画像によく使用される画像ファイルの形式。 Graphics Processing Unit (GPU) GPU の有無によりホストを選択することは、現在 OpenStack で未サポート。 Green Threads Python により使用される協調スレッドモデル。特定のライブラリーコールが発 行されるときの競合状態とコンテキストスイッチを減らす。各 OpenStack サー ビスは自身のスレッドである。 Grizzly OpenStack の 7 番目のリリースのコード名。デザインサミットがアメリカ合衆 国カリフォルニア州サンディエゴで開催された。Grizzly は、カリフォルニア 州の州旗に使われている。 グループ Identity v3 API のエンティティーで、特定のドメイン内のユーザーの集合を 表す。 333 OpenStack 運用ガイド February 1, 2016 ゲスト OS ハイパーバイザーの管理下で実行しているオペレーティングシステムのインス タンス。 H Hadoop Apache Hadoop は、データインテンシブな分散アプリケーションをサポートす る、オープンソースソフトウェアフレームワークである。 Hadoop Distributed File System (HDFS) 低価格のコモディティーサーバー上で動作することを念頭に設計された、耐故 障性に優れた分散ファイルシステム。 handover ドライブ故障により、オブジェクトの新しい複製が自動的に作成され た、Object Storage のオブジェクトの状態。 ハードリブート きちんとした正常なOSのシャットダウンを行わず、物理又は仮想電源ボタンを 押すタイプの再起動。 Havana OpenStack の 8 番目のリリースのコード名。デザインサミットがアメリカ合衆 国オレゴン州ポートランドで開催された。Havana は、オレゴン州の非法人コ ミュニティーである。 heat OpenStack に複数のクラウドアプリケーションをオーケストレーションする為 に開発されたプロジェクト。 Heat Orchestration Template (HOT) OpenStack 固有形式の Heat の入力データ。 ヘルスモニター 仮想 IP プールのバックエンドメンバーがリクエストを処理できるかどうかを 判断する。プールは、それに関連づけられた複数のヘルスモニターを持てる。 すべてのモニターは、プールのメンバーをお互いに確認する。すべてのモニ ターは、その稼働状況の健全性であることをメンバーに宣言する必要がある。 高可用性 高可用性システムの設計手法および関連サービスの実装により、契約された計 測期間中、合意された運用レベルを満たします。高可用性システムは、システ ムの停止時間とデータ損失を最小化しようとします。 334 OpenStack 運用ガイド February 1, 2016 Horizon ダッシュボードを提供する OpenStack プロジェクト。Web インターフェース。 horizon プラグイン OpenStack dashboard (horizon) のプラグイン。 ホスト 物理コンピューター。仮想マシンインスタンス (ノード) ではない。 ホストアグリゲート アベイラビリティーゾーンをさらに小さいハイパーバイザープールに分割する ための方法。一般的なホスト群。 Host Bus Adapter (HBA) ファイバーチャネルやネットワークカードなどの PCI スロット内に挿入される デバイス。 ハイブリッドクラウド ハイブリッドクラウドは、複数のクラウド (プライベート、コミュニティー、 パブリック) の組み合わせ。別々のエンティティーのままですが、一緒にまと められる。複数の配備モデルの利点を提供する。ハイブリッドクラウドは、コ ロケーション、マネージドサービス、専用サービスをクラウドのリソースに接 続する機能を意味することもある。 Hyper-V OpenStack によりサポートされるハイパーバイザーの一つ。 ハイパーリンク どこか別のサイトへのリンクを含む、ある種のテキスト。一般的に、別の Web サイトを開く言葉をクリックするドキュメントに見られる。 Hypertext Transfer Protocol (HTTP) 分散、協調、ハイパーメディア情報システム用のアプリケーションプロト コル。WWW のデータ通信の基盤。ハイパーテキストは、ノード間でのテキス トを含む論理リンク (ハイパーリンク) を使った構造化テキストのことであ る。HTTP は、ハイパーテキストを交換したり転送したりするためのプロトコ ル。 Hypertext Transfer Protocol Secure (HTTPS) コンピューターネットワークで、とくにインターネットで広く使われている、 安全に通信を行うための暗号化通信プロトコル。技術的には、プロトコルで はなく、むしろシンプルに SSL/TLS プロトコルの上に Hypertext Transfer Protocol (HTTP) を重ねているものである。そのため、SSL や TLS プロトコル のセキュリティー機能を標準的な HTTP 通信に追加したものである。ほとんど 335 OpenStack 運用ガイド February 1, 2016 の OpenStack API エンドポイントや多くのコンポーネント間通信で、 HTTPS 通信がサポートされている。 ハイパーバイザー VM のアクセスを実際の下位ハードウェアに仲介して制御するソフトウェア。 ハイパーバイザープール ホストアグリゲートにより一緒にグループ化されたハイパーバイザーの集合。 I IaaS Infrastructure-as-a-Service。IaaS は、ストレージ、ハードウェア、サー バー、ネットワークなど、データセンターの物理コンポーネントをアウトソー スする組織の配備モデル。サーバープロバイダーは、設備を所有し、ハウジン グ、運用、メンテナンスに責任を持つ。クライアントは、一般的に使用量に応 じて費用を払う。IaaS は、クラウドサービスを提供するモデル。 Icehouse OpenStack の 9 番目のリリースのコード名。デザインサミットは、香港で開催 された。Ice House は、その近くにある通りである。 ICMP インターネット制御メッセージプロトコル。制御メッセージ用にネットワーク デバイスにより使用される。例えば、ping は接続性をテストするために ICMP を使用する。 ID 番号 Identity で各ユーザーと関連付けられた一意な数値 ID。概念として、Linux や LDAP の UID を同じ。 Identity API Identity service API の別名。 Identity バックエンド ユーザー情報を取得するために、Identity により使用されるソース。例え ば、OpenLDAP。 識別情報プロバイダー ユーザーがユーザー名とパスワードを用いてログインできるようにする、ディ レクトリーサービス。認証トークンの一般的な情報源。 Identity ユーザーがアクセスできる OpenStack サービスに対応付けられた、ユーザー の中央ディレクトリーを提供する、OpenStack コアプロジェクト。OpenStack 336 OpenStack 運用ガイド February 1, 2016 サービスのエンドポイントも登録する。一般的な認証システムとして動作す る。Identity のプロジェクト名は keystone。 Identity service API Keystone が提供する OpenStack Identity サービスアクセスに使用される API。 IDS 侵入検知システム。 イメージ サーバーの作成、再構築に使用する特定のオペレーティングシステム(OS)用 のファイルの集合。OpenStack は構築済みイメージを提供する。起動したサー バーからカスタムイメージ(又はスナップショット)を作成できる。 Image API 仮想マシンイメージの管理用の Image service API エンドポイント。 イメージキャッシュ イメージが要求されたときに、イメージサーバーから再ダウンロードするので はなく、ローカルホストにあるイメージを取得するために、Image service に より使用される。 イメージ ID Image API 経由で Image service の仮想マシンイメージにアクセスするために 使用される、URI や UUID の組み合わせ。 イメージメンバーシップ Image service 内で指定した仮想マシンイメージにアクセスできるテナントの 一覧。 イメージ所有者 Image サービスの仮想マシンイメージを所有するテナント。 イメージレジストリー Image service 経由で利用可能な仮想マシンイメージの一覧。 Image サービス ディスクやサーバーイメージ向けのサービスの検索、登録、配信を提供する OpenStack コアプロジェクト。Image service のプロジェクト名は glance。 Image サービス API Glance イメージ API の別名。 イメージ状態 Image service における仮想マシンイメージの現在の状態。実行中のインスタ ンスの状態と混同しないこと。 337 OpenStack 運用ガイド February 1, 2016 イメージストア 仮想マシンイメージを保存するために、Image service により使用されるバッ クエンドストア。オプションとして、Object Storage、ローカルファイルシス テム、S3、HTTP がある。 イメージ UUID 各仮想マシンイメージを一意に識別するために Image service により使用され る UUID。 インキュベートプロジェクト コミュニティプロジェクトがこの状態に昇格する事があり、その後コアプロ ジェクトに昇格する。 イングレスフィルタリング 入力ネットワーク通信をフィルタリングする処理。Compute によりサポートさ れる。 INI OpenStack 設定ファイルは、オプションやその値を記述するために、INI 形式 を使用する。セクションとキーバリューペアから構成される。 インジェクション インスタンスが起動する前に、仮想マシンイメージ中にファイルを配置する処 理。 インスタンス 実行中の仮想マシン。または、一時停止などの既知の状態にある仮想マシン。 ハードウェアサーバーのように使用できる。 インスタンス ID インスタンス UUID の別名。 インスタンス状態 ゲスト仮想マシンイメージの現在の状態。 インスタンストンネルネットワーク コンピュートノードとネットワークノード間で、インスタンスのトラフィック をトンネルするために使用されるネットワークセグメント。 インスタンスタイプ ユーザが利用可能な様々な仮想マシンイメージのパラメーター(CPU、ストレー ジ、メモリ等を含む)を示す。フレーバーの別名。 インスタンスタイプ ID フレーバー ID の別名。 338 OpenStack 運用ガイド February 1, 2016 インスタンス UUID 各ゲスト仮想マシンインスタンスに割り当てられる一意な ID。 インターフェース 他のデバイスやメディアに接続する物理デバイスまたは仮想デバイス。 インターフェース ID Networking 仮想インターフェースや vNIC 用の一意な UUID 形式の ID。 インターネットプロトコル (IP) ネットワーク境界を越えてデータグラムを中継するための、インターネットプ ロトコルにおける中心的な通信プロトコル。 Internet Service Provider (ISP) 個人や組織にインターネットアクセスを提供する何らかのビジネス。 Internet Small Computer System Interface (iSCSI) IP ネットワーク上で転送するために、SCSI フレームをカプセル化するスト レージプロトコル。 ironic マシンを仮想とみなして、ベアメタルに展開する OpenStack のプロジェクト。 IOPS IOPS (Input/Output Operations Per Second) は、ハードディスク、SSD、SAN などのストレージデバイスをベンチマークするために使用される、一般的なパ フォーマンス指標である。 IP アドレス インターネットにあるすべてのコンピューターシステムを一意にする番 号。Internet Protocol (IP) は、IPv4 と IPv6 の 2 つのバージョンがアドレ ス付けのために使用中です。 IP Address Management (IPAM) IP アドレスの割り当て、割り当て解除、管理を自動化するプロセス。現 在、Compute、melange、Networking により提供される。 IPL Initial Program Loader。初期プログラムローダー。 IPMI Intelligent Platform Management Interface。IPMI は、コンピューターシス テムのアウトオブバンド管理、運用監視のために、システム管理者により使用 される標準的なコンピューターシステムインターフェース。平たく言うと、電 339 OpenStack 運用ガイド February 1, 2016 源状態によらず、ネットワークの直接通信を使用してコンピューターを管理す る方法。オペレーティングシステムやログインシェルではなく、ハードウェア に接続する。 ip6tables Linux カーネルで IPv6 パケットフィルタールールのテーブルをセットアッ プ、維持、検査するために使用されるツール。OpenStack Compute では、ノー ドと仮想マシンの両方に対するファイアウォールを作成するために、ip6tables が arptables、ebtables、iptables と一緒に使用される。 ipset 連続する IP アドレスの全体に一致するファイアウォールルールを作成でき る、iptables の拡張。これらのセットは、効率化するためにインデックス化さ れたデータ構造、とくに大量のルールを持つシステムにあります。 iptables Compute においてファイアウォールを作成す る、arptables、ebtables、iptables と一緒に使用される。iptables は、Linux カーネルファイアウォール (別の Netfilter モジュール) により 提供されるテーブル、それを保存するチェインやルール。複数のカーネルモ ジュールとプログラムが、別々のプロトコルに対して使用される。iptables は IPv4、ip6tables は IPv6、arptables は ARP、ebtables は Ethernet フレー ムに適用される。操作すうために root 権限が必要になる。 IQN iSCSI Qualified Name (IQN) は iSCSI の名前として最も広く使われて いる形式で、 iSCSI ネットワークで一意にノードを識別するのに使われ ます。すべての IQN は iqn.yyyy-mm.domain:identifier という形式で す。ここで、 'yyyy-mm' はそのドメインが登録された年と月、 'domain' は発行組織の登録されたドメイン名、 'identifier' は同じドメイン内 の各 IQN 番号を一意なものにするためのオプション文字列です。例えば 'iqn.2015-10.org.openstack.408ae959bce1' iSCSI イーサネット内でトンネルされる SCSI ディスクプロトコル。Compute、Object Storage、Image service によりサポートされる。 ISO9660 Image service によりサポートされる、仮想マシンイメージディスク形式の 1 つ。 itsec あらゆるプロジェクトにあるインスタンスを検疫できる、Compute RBAC システ ムにおけるデフォルトのロール。 340 OpenStack 運用ガイド February 1, 2016 J Java ネットワーク経由で複数のコンピューターが関連するシステムを作成するため に使用されるプログラミング言語。 JavaScript Web ページを構築するために使用されるスクリプト言語。 JavaScript Object Notation (JSON) OpenStack でサポートされる応答形式の 1 つ。 Jenkins OpenStack 開発のためにジョブを自動的に実行するために使用されるツール。 ジャンボフレーム 約 9000 バイトまでのフレームをサポートする最近のイーサネット上の機能。 Juno OpenStack の 10 番目のリリースのコード名。デザインサミットはアメリカ合 衆国ジョージア州アトランタにて開催された。Juno は、ジョージア州の非公式 コミュニティー。 K Kerberos チケットベースで機能するネットワーク認証プロトコル。 Kerberos により、 安全でないネットワークを通したノード通信ができ、ノードは安全な方法で互 いに本人確認ができるようになります。 kernel-based VM (KVM) OpenStack がサポートするハイパーバイザー。KVM は、仮想化拡張 (Intel VT や AMD-V) を持つ x86 ハードウェア、ARM、IBM Power、IBM zSeries 上の Linux 向けの完全仮想化ソリューション。 Key management サービス 暗号化機能を有効化したいサービスに鍵管理機能を提供する機能を持つ、シー クレットストレージと生成システムを開発する OpenStack プロジェクト。この プロジェクトの名前は barbican。 keystone OpenStack Identity サービスを提供するプロジェクト。 341 OpenStack 運用ガイド February 1, 2016 Kickstart Red Hat、Fedora、CentOS 系の Linux ディストリビューションにおいて、シス テム設定とインストールを自動化するためのツール。 Kilo OpenStack の 11 番目のリリースのコード名。デザインサミットは、フランス のパリで開催された。名前選定の遅れにより、このリリースは K のみで知られ ていた。k はキロを表す単位記号であり、その原器がパリ近郊の Pavillon de Breteuil in Sèvres に保存されているので、コミュニティーはリリース名とし て Kilo を選択した L ラージオブジェクト 5GB より大きい Object Storage 内のオブジェクト。 Launchpad OpenStack 用コラボレーションサイト。 L2 ネットワーク OSI ネットワークアーキテクチャーにおけるデータリンク層に使用される用 語。データリンク層は、メディアアクセス制御、フロー制御、物理層で発生す る可能性のあるエラー検知、できる限りエラー訂正に責任を持つ。 L3 ネットワーク OSI ネットワークアーキテクチャーにおけるネットワーク層に使用される用 語。ネットワーク層は、パケット転送、あるノードから別のノードへのルー ティングに責任を持つ。 L2 エージェント 仮想ネットワーク向けに L2 接続性を提供する OpenStack Networking エー ジェント。 L3 エージェント 仮想ネットワーク向けに L3 (ルーティング) サービスを提供する OpenStack Networking エージェント。 Liberty OpenStack の 12 番目のリリースのコード名。デザインサミットは、カナダの バンクーバーで開催された。Liberty は、サスカチュワン州にある村の名前。 libvirt 多くのサポートハイパーバイザーと通信するために、OpenStack により使用さ れる仮想化 API ライブラリー。 342 OpenStack 運用ガイド February 1, 2016 Lightweight Directory Access Protocol (LDAP) IP ネットワーク上の分散ディレクトリー情報サービスへのアクセスと管理を行 うためのアプリケーションプロトコル。 Linux ブリッジ 複数の仮想マシンが Compute 内で単一の物理 NIC を共有するためのソフト ウェア。 Linux Bridge neutron プラグイン Linux ブリッジが、Networking のポート、インターフェース接続、他の抽象化 を理解できるようにする。 Linux コンテナー (LXC) OpenStack がサポートするハイパーバイザーの1つ。 ライブマイグレーション 切り替え中のわずかなサービス中断のみで、実行中の仮想マシンをあるホスト から別のホストに移動する、Compute 内の機能。 負荷分散装置 負荷分散装置は、クラウドアカウントに属する論理デバイスである。その設定 に定義されている基準に基づき、複数のバックエンドのシステムやサービス間 でワークロードを分散するために使用される。 負荷分散 パフォーマンスや可用性を向上するために、2 つ以上のノード間でクライアン トリクエストを分散する処理。 LBaaS Networking により、受信リクエストを指定されたインスタンス間で均等に分散 できるようになる。 論理ボリュームマネージャー (LVM) 伝統的なパーティションスキーマよりも柔軟に、大規模ストレージデバイスに 領域を割り当てる方式を提供する。 M magnum コンテナーサービスを提供する OpenStack プロジェクトのコード名。 マネジメント API 管理 API(admin API)の別名。 343 OpenStack 運用ガイド February 1, 2016 管理ネットワーク 管理のために使用されるネットワークセグメント。パブリックなインターネッ トからアクセスできない。 マネージャー Block Storage のボリュームマネージャーやネットワークマネージャーなど、 関連するコードの論理的なグループ。 マニフェスト Object Storage 内で大きなオブジェクトを管理するために使用される。 マニフェストオブジェクト 大きなオブジェクト向けのマニフェストを含む、特別な Object Storage のオ ブジェクト。 manila 共有ファイルシステムをアプリケーションに提供する OpenStack のプロジェク ト。 最大転送単位 (MTU) 特定のネットワークメディア向けの最大フレームやパケットサイズ。一般的 に、イーサネット向けは 1500 バイト。 メカニズムドライバー 仮想インスタンス向けに L2 接続性を提供する、ML2 neutron プラグイン向け のドライバー。単一の OpenStack インストール環境が、複数のメカニズムドラ イバーを使用できます。 melange OpenStack Network Information Service のプロジェクト名。Networking と統 合予定。 メンバーシップ Image service の仮想マシンイメージとテナント間の関連。イメージを特別な テナントと共有できるようになる。 メンバーシップリスト Image service 内で指定した仮想マシンイメージにアクセスできるテナントの 一覧。 memcached Object Storage がキャッシュのために使用する、メモリーオブジェクトの分散 キャッシュシステム。 344 OpenStack 運用ガイド February 1, 2016 メモリーオーバーコミット 実行中の各インスタンスが利用可能と考えている RAM 量に基づく判断をベース にする代わりに、ホスト上の実際のメモリ使用量をベースにした、新しい VM インスタンスを起動する機能。 メッセージブローカー Compute 内で AMQP メッセージング機能を提供するために使用されるソフト ウェアパッケージ。標準のパッケージは RabbitMQ。 メッセージバス Compute 内でクラウド内通信のためにすべての AMQP メッセージにより使用さ れるメインの仮想通信ライン。 メッセージキュー クライアントからのリクエストを適切なワーカーに渡す。ジョブ完了後、出力 をクライアントに返す。 Message サービス 効率的、拡張可能、高可用な方法で、さまざまな分散アプリケーションのパ ターンを提供する、OpenStack messaging service を開発することを目指して いる OpenStack プロジェクト。また、関連する Python ライブラリーやドキュ メントを作成してメンテナンスする。このプロジェクトのコード名は zaqar。 メタデータエージェント インスタンスにメタデータサービスを提供する OpenStack Networking エー ジェント。 Meta-Data Server (MDS) CephFS メタデータを格納する。 マイグレーション VM インスタンスをあるホストから別のホストに移動させる処理。 mistral ワークフローサービスを提供する OpenStack プロジェクト。 Mitaka OpenStack の 13 番目のリリースのコード名。デザインサミットは、日本の東 京で開催された。三鷹は、東京にある都市です。 monasca モニタリングサービスを提供する OpenStack プロジェクト。 マルチホスト レガシーネットワーク (nova) の高可用性モード。各コンピュートノード は、NAT と DHCP を処理し、すべての仮想マシンのゲートウェイとして動作す 345 OpenStack 運用ガイド February 1, 2016 る。あるコンピュートノードにおけるネットワーク障害は、他のコンピュート ノードにある仮想マシンに影響しません。 マルチ NIC 各仮想マシンインスタンスが複数の仮想インターフェースに接続できるように なる、Compute における機能。 murano アプリケーションカタログを提供する OpenStack のプロジェクト。 Modular Layer 2 (ML2) neutron プラグイン Networking において、802.1Q や VXLAN などの複数の L2 ネットワーク技術を 同時に使用できる。 モニター (LBaaS) ping コマンド、TCP、HTTP/HTTPS GET を使用してモニタリングする機能を提供 する LBaaS の機能。 モニター (Mon) 外部クライアントと通信し、データの状態と整合性を確認し、クォーラム機能 を実行する、Ceph コンポーネント。 Monitoring マルチテナントで、高いスケーラビリティーを持ち、高性能で、耐障害性の ある、Monitoring-as-a-Service ソリューションを提供する OpenStack プロ ジェクト。 計測情報、複合イベント処理 (complex event processing)、ログ 監視が対象。オペレーター、テナントの両者が利用できる、高度なモニタリン グサービスに対応できる拡張性のあるプラットフォームを開発しており、可用 性と安定性を確保しながら、運用上の問題の特定や可視化を実現できる。プロ ジェクト名は monasca。 多要素認証 パスワードと秘密鍵など、2 つ以上のクレデンシャルを使用する認証方 式。Identity では現在サポートされていない。 MultiNic 各仮想マシンインスタンスが複数の仮想インターフェースに接続できるように なる、Compute における機能。 N Nebula 2010 年に NASA によりオープンソースとしてリリースされた。Compute の基に なった。 346 OpenStack 運用ガイド February 1, 2016 netadmin Compute RBAC システムにおけるデフォルトのロールの 1 つ。ユーザーが、パ ブリックにアクセス可能な IP アドレスをインスタンスに割り当てられ、ファ イアウォールルールを変更できるようになる。 NetApp ボリュームドライバー Compute が NetApp OnCommand Provisioning Manager 経由で NetApp ストレー ジデバイスと通信できるようにする。 Network エンティティ間の接続性を提供する仮想ネットワーク。例えば、ネットワーク 接続性を共有する仮想ポート群。Networking の用語では、ネットワークは必ず L2 ネットワークを意味する。 NAT ネットワークアドレス変換。IP アドレス情報を転送中に変更する処 理。Compute と Networking によりサポートされる。 ネットワークコントローラー IP アドレス、VLAN、ブリッジなど、ノードのネットワーク設定をオーケスト レーションする Compute のデーモン。また、パブリックネットワークとプライ ベートネットワークのルーティングを管理する。 Network File System (NFS) ネットワーク経由でファイルシステムを利用可能にある方式。OpenStack によ りサポートされる。 ネットワーク ID Networking 内の各ネットワークセグメントに割り当てられる一意な ID。ネッ トワーク UUID と同じ。 ネットワークマネージャー ファイアウォールのルール、IP アドレスの割り当てなど、さまざまなネット ワークのコンポーネントを管理する、Compute のコンポーネント。 ネットワーク名前空間 別々のルーティングテーブルとインターフェースを持つ単一のホストにおい て、独立した仮想ネットワークインターフェースを提供する Linux カーネル機 能。物理ネットワーク環境における仮想ルーティングおよびフォワーディング (VRF) サービスと似ている。 ネットワークノード ネットワークワーカーデーモンを実行するコンピュートノードすべて。 ネットワークセグメント Networking における仮想の分離された OSI L-2 サブネットを表す。 347 OpenStack 運用ガイド February 1, 2016 Newton OpenStack の 14 番目のリリースのコード名。デザインサミットは、アメリ カ合衆国テキサス州オースチンで開催される。リリースの名前は、テキサス州 オースチンの 1013 E. Ninth St. にある「Newton House」にちなんでいる。こ れはアメリカ合衆国国家歴史登録財に登録されている。 NTP ネットワーク時刻プロトコル。信頼された、正確な時刻源と通信することによ り、ホストやノードの時刻を正確に保つ方法。 ネットワーク UUID Networking のネットワークセグメントの一意な ID。 ネットワークワーカー nova-network のワーカーデーモン。起動中の nova インスタンスに IP アドレ スを提供するなどのサービスを提供する。 Networking ネットワーク接続性の抽象化レイヤーを OpenStack Compute に提供す る、OpenStack コアプロジェクト。Networking のプロジェクト名は neutron。 Networking API OpenStack Networking にアクセスするために利用する API。独自プラグインを 作成できる拡張性を持ったアーキテクチャーになっている。 neutron OpenStack のコアプロジェクトで、OpenStack Compute に対してネットワーク 接続の抽象化レイヤーを提供する。 neutron API Networking API の別名。 neutron マネージャー Compute と Networking の統合を可能にする。Networking がゲスト仮想マシン 用のネットワークを管理できるようになる。 neutron プラグイン 組織が QoS、ACL、IDS などの高度な機能向けのカスタムプラグインを作成でき るようにする、Networking 内のインターフェース。 Nexenta ボリュームドライバー Compute において NexentaStor デバイスのサポートを提供する。 No ACK Compute RabbitMQ において、サーバーサイドメッセージ交換を無効化する。性 能を向上されるが、信頼性を低下させる。 348 OpenStack 運用ガイド February 1, 2016 node ホストで動作する仮想マシンインスタンス。 非永続交換 サービスの再起動時に削除されるメッセージ交換。このデータは永続ストレー ジに書き込まれない。 非永続キュー サービスの再起動時に削除されるメッセージキュー。このデータは永続スト レージに書き込まれない。 非永続ボリューム エフェメラルボリュームの別名。 ノース・サウス通信 ユーザーやクライアント (ノース)、とサーバー (サウス) 間のネットワーク通 信、クラウド (サウス) とクラウド外 (ノース) 内の通信。イースト・サウス 通信も参照。 nova コンピュートサービスを提供する OpenStack プロジェクト。 Nova API Compute API の別名。 nova-network IP アドレス割り当て、ファイアウォール、その他ネットワーク関連タスク を管理する Compute のコンポーネント。レガシーネットワークのオプショ ン。Networking の代替。 O オブジェクト Object Storage により保持されるデータの BLOB。あらゆる形式の可能性があ る。 オブジェクトオーディター あるオブジェクトサーバー用の全オブジェクトを開き、各オブジェクトの MD5 ハッシュ、サイズ、メタデータを検証する。 オブジェクト有効期限 指定された時間経過後、又は指定日になった際に自動的にオブジェクトを削除 するための Object Storage の設定オプション。 オブジェクトハッシュ Object Storage オブジェクト用の一意な ID。 349 OpenStack 運用ガイド February 1, 2016 オブジェクトパスハッシュ リング内でオブジェクトの場所を判断するために、Object Storage により使用 される。オブジェクトをパーティションに対応付ける。 オブジェクトレプリケーター 耐障害性のためにオブジェクトをリモートパーティションをコピーする Object Storage コンポーネント。 オブジェクトサーバー オブジェクトの管理に責任を持つ Object Storage のコンポーネント。 オブジェクトストレージ 結果整合性(eventually consistent)、ストレージ冗長化、静的デジタル コンテンツ取得、といった機能を提供する、OpenStack のコアプロジェク ト。OpenStack Object Storage のプロジェクト名は swift。 Object Storage API OpenStack Object Storage にアクセスするために使用する API。 Object Storage Device (OSD) Ceph ストレージデーモン。 オブジェクトバージョニング コンテナー内のすべてのオブジェクトがバージョンを付けられるように、ユー ザーが Object Storage のコンテナーにフラグを設定できる。 Ocata OpenStack の 14 番目のリリースのコード名。デザインサミットは、スペイン のバルセロナで開催される。Ocata はバルセロナ北部のビーチ。 Oldie 長時間動作している Object Storage のプロセスを指す用語。ハングしたプロ セスを意味する可能性もある。 Open Cloud Computing Interface (OCCI) コンピュート、データ、ネットワークのリソースを管理するための標準的なイ ンターフェース。現在 OpenStack でサポートされない。 Open Virtualization Format (OVF) 仮想マシンイメージのパッケージ化の標準。OpenStack でサポートされる。 Open vSwitch Open vSwitch は、商用品質、複数階層の仮想スイッチ。オープンソー スの Apache 2.0 license に基づき許諾される。標準的な管理イン ターフェースやプロトコルと使用ながら、プログラム拡張により大 350 OpenStack 運用ガイド February 1, 2016 規模なネットワーク自動化を実現できるよう設計されている (例え ば、NetFlow、sFlow、SPAN、RSPAN、CLI、LACP、802.1ag)。 Open vSwitch (OVS) エージェント Networking のプラグインに対して、バックエンドの Open vSwitch サービスへ のインターフェースを提供する。 Open vSwitch neutron プラグイン Networking で Open vSwitch のサポートを提供する。 OpenLDAP オープンソース LDAP サーバー。Compute と Identity によりサポートされ る。 OpenStack OpenStack は、データセンター全体のコンピュートリソース、ストレージリ ソース、ネットワークリソースの大規模なプールを制御する、クラウドオペ レーティングシステム。管理者はすべてダッシュボードから制御できる。ユー ザーは Web インターフェースからリソースを配備できる。Apache License 2.0 に基づき許諾されるオープンソースのプロジェクト。 OpenStack コード名 各 OpenStack リリースはコード名を持つ。コード名はアルファベット順にな ります。Austin, Bexar, Cactus, Diablo, Essex, Folsom, Grizzly, Havana, Icehouse, Juno, Kilo、Liberty、Mitaka。コード名は、対応する OpenStack デザインサミットが開催された場所の近くにある都市または国である。Waldon 例外と言われる例外は、非常に格好良く聞こえる、状態フラグの要素に保証さ れる。コード名は、一般的な投票により選択される。 openSUSE OpenStack と互換性のある Linux ディストリビューション。 運用者 OpenStack インストールを計画し、管理する責任者。 Orchestration OpenStack 向けに複数のクラウドアプリケーションをオーケストレーションす る統合プロジェクト。Orchestration のプロジェクト名は heat。 orphan Object Storage の文脈において、サービスの更新、再起動、再読み込みの後に 終了しないプロセス。 Oslo OpenStack プロジェクトに共有されるコードを含む Python ライブラリー群を 作成する OpenStack プロジェクト。 351 OpenStack 運用ガイド February 1, 2016 P 親セル 要求されたリソース(CPU時間、ディスクストレージ、メモリ)が親セルで利用 不可の場合、そのリクエストは紐付けられた子セルに転送される。 パーティション オブジェクトを保存するために使用される、Object Storage 内の保存単位。デ バイスの上位に存在し、耐障害のために複製される。 パーティションインデックス リング内にあるすべての Object Storage のパーティションの場所を含む。 パーティションシフト値 パーティションデータが配置されるべき場所を決めるために、Object Storage により使用される。 path MTU discovery (PMTUD) エンド間の MTU を検出し、パケットサイズを適切に調整するための IP ネット ワークにおける機構。 一時停止 変更が発生しない (メモリーの変更なし、ネットワーク通信の停止など)、仮想 マシンの状態。仮想マシンは停止するが、シャットダウンしない。 PCI パススルー ゲスト仮想マシンが PCI デバイスに排他的にアクセスされる。OpenStack Havana 以降でサポートされる。 永続メッセージ メモリーとディスクの両方に保存されているメッセージ。メッセージは、故障 や再起動した後も失われません。 永続ボリューム この種類のディスクボリュームに変更すると、データが保存される。 パーソナリティーファイル Compute インスタンスをカスタマイズするために使用されるファイル。SSH 鍵 や特定のネットワーク設定を注入するために使用できます。 Platform-as-a-Service (PaaS) クラウドプラットフォームプロバイダーによりサポートされるプログラミン グ言語やツールを用いてアプリケーションを配備する機能を利用者に提供す 352 OpenStack 運用ガイド February 1, 2016 る。PaaS の例は、ダウンロードする必要がない、Eclipse/Java プログラミン グプラットフォームです。 プラグイン 利用形態に応じた、Networking API や Compute API の具体的な実装を提供す るソフトウェアコンポーネント。 ポリシーサービス ルール管理インターフェースやルールベースの認可エンジンを提供する Identity のコンポーネント。 プール Web サーバーなどのデバイスの論理的な集合。一緒にトラフィックを受け、処 理するために、グループ化する。負荷分散機能は、プール内のどのメンバー が仮想 IP アドレスで受信した新規リクエストや接続を処理するかを選択しま す。各仮想 IP は 1 つのプールを持ちます。 プールメンバー 負荷分散システムでバックエンドサーバーで動作するアプリケーション。 ポート Networking 内の仮想ネットワークポート。仮想インターフェースや仮想 NIC は、ポートに接続されます。 ポート UUID Networking ポートのユニーク ID。 preseed Debian 系の Linux ディストリビューションでシステム設定やインストールを 自動化するツール。 プライベートイメージ 指定したテナントのみで利用可能な Image service の仮想マシンイメージ。 プライベート IP アドレス 管理のために使用される IP アドレス。パブリックなインターネットから利用 できません。 プライベートネットワーク ネットワークコントローラーは、コンピュートサーバー間、およびコンピュー トサーバーとパブリックネットワークとの通信を行う仮想ネットワークを用 意する。すべての物理マシンにはパブリック側とプライベート側のネットワー クインタフェースが必要。プライベートネットワークインターフェースは、 フラットネットワークまたは VLAN ネットワークインターフェースにでき る。フラットネットワークインターフェースは、フラットマネージャーを用い 353 OpenStack 運用ガイド February 1, 2016 て flat_interface により制御される。VLAN ネットワークインターフェース は、VLAN マネージャーの vlan_interface オプションにより制御される。 プロジェクト プロジェクトは OpenStack における「所有権」の基本的な単位で、OpenStack におけるあらゆるリソースは何らかのテナントに属する。 OpenStack Identity では、プロジェクトは特定のドメインに何らかのドメインに属する。 プロジェクト ID Compute でユーザーが定義した英数文字列。プロジェクトの名前。 プロジェクト VPN cloudpipe の別名。 プロミスキャスモード ネットワークインターフェースが、そこを指定されたフレームだけではなく、 ホストに届いたすべての通信を渡すようにする。 保護プロパティー クラウド管理者のみがアクセスできる、Image service のイメージの追加プロ パティー。どのユーザーロールがそのプロパティーにおいて CRUD 操作を実行 できるかを制限する。クラウド管理者は、保護されたイメージのプロパティー をすべて設定できる。 プロバイダー すべてのホストやインスタンスへアクセス権を持つ管理者。 プロキシノード Object Storage プロキシサービスを提供するノード。 プロキシサーバー Object Storage のユーザーは、リング中にあるリクエストされたデータの場所 を参照してユーザに結果を返すプロキシサーバーを介して、このサービスに通 信する。 パブリック API サービス間通信やエンドユーザーの操作などに使用される API エンドポイン ト。 パブリックイメージ すべてのテナントが利用できる Image service の仮想マシンイメージ。 パブリック IP アドレス エンドユーザがアクセス可能な IP アドレス。 公開鍵認証 パスワードの代わりに鍵を使用する認証方式。 354 OpenStack 運用ガイド February 1, 2016 パブリックネットワーク compute サーバーがパブリックネットワークと相互通信できるよう、ネット ワークコントローラーが仮想ネットワークを提供する。全マシンにはパブリッ クとプライベートのネットワークインターフェースがなければならない。パブ リックネットワークインターフェースは public_interface オプションにより 制御される。 Puppet OpenStackがサポートするオペレーティングシステム構成管理ツール。 Python OpenStack において幅広く使用されるプログラミング言語。 Q QEMU Copy On Write 2 (QCOW2) Image service によりサポートされる、仮想マシンイメージディスク形式の 1 つ。 Qpid OpenStack によりサポートされるメッセージキューソフトウェア。RabbitMQ の 代替。 隔離 Object Storage が壊れたオブジェクト、コンテナー、アカウントを見つけた 際に、そのデータはこの状態にセットされる。この状態にセットされたデータ は、複製されず、クライアントが読み出すこともできなくなり、正しいコピー が再複製される。 Quick EMUlator (QEMU) QEMUはオープンソースのマシンエミュレーターと仮想化ツールである。 OpenStack がサポートするハイパーバイザーの一つ。一般に、開発目的で使用 される。 クォータ プロジェクト単位を基本として使用できるリソース上限を設定できる、Compute と Block Storage の機能。 R RabbitMQ OpenStackでデフォルトで採用されているメッセージキューのソフトウェア。 355 OpenStack 運用ガイド February 1, 2016 Rackspace Cloud Files Rackspace により 2010 年にオープンソースとして公開された。Object Storage のベース。 RADOS Block Device (RBD) Linux ブロックデバイスが複数の分散データストアにわたり分割できるように する、Ceph のコンポーネント。 radvd ルーター通知デーモン。仮想マシンインスタンスにルーティングサービスを提 供するために、Compute の VLAN マネージャーと FlatDHCP マネージャーによ り使用される。 rally Benchmark service を提供する OpenStack プロジェクト。 RAM フィルター RAM オーバーコミットを有効化または無効化する Compute の設定。 RAM オーバーコミット 実行中の各インスタンスが利用可能と考えている RAM 量に基づく判断をベース にする代わりに、ホスト上の実際のメモリ使用量をベースにした、新しい VM インスタンスを起動する機能。 レートリミット アカウントごと、コンテナーごとにデータベースへの書き込みを制限するため の、Object Storage 内の設定オプション。 raw Image service によりサポートされる仮想マシンイメージのディスク形式の 1 つ。 リバランス リング内のすべてのドライブにわたり、Object Storage のパーティションを分 散させる処理。初期リング作成中、リング再設定後に使用される。 リブート サーバーのソフトリブートまたはハードリブート。ソフトリブートの場合、オ ペレーティングに再起動のシグナルが送信されます。これにより、すべてのプ ロセスを穏やかにシャットダウンできます。ハードリブートは、サーバーの強 制再起動と同じです。仮想化プラットフォームは、ベースの仮想マシンが一時 停止中の場合や停止中の場合でも、きちんとリブート動作を正常に完了させる べきです。 リビルド サーバからすべてのデータを消去し、特定のイメージで置き換える。サーバの IDとIPアドレスは変更されない。 356 OpenStack 運用ガイド February 1, 2016 recon 計測項目を収集する Object Storage のコンポーネント。 レコード 特定のドメインに属し、ドメインに関する情報を指定するために使用される。 いくつかの種類の DNS レコードがある。各レコード種別は、そのレコードの 目的を説明するために使用される特定の情報を含む。例えば、mail exchange (MX) レコードは、特定のドメインのメールサーバーを指定する。name server (NS) レコードは、ドメインの権威ネームサーバーを指定する。 レコード ID 変更が行われる度に増加するデータベース内の数値。Object Storage が複製を 行う際に使用する。 Red Hat Enterprise Linux (RHEL) OpenStack と互換性のある Linux ディストリビューション。 リファレンスアーキテクチャー OpenStack クラウドの推奨アーキテクチャー。 リージョン 専用の API エンドポイントを持つ、分離した OpenStack 環境。一般的に Identity (keystone) のみを他のリージョンと共有する。 レジストリー Image service レジストリの別名。 レジストリサーバー クライアントに仮想マシンイメージメタデータ情報を提供する Image service。 Reliable, Autonomic Distributed Object Store (RADOS) Ceph 内にオブジェクトストレージを提供するコンポーネント群。OpenStack Object Storage に似ている。 Remote Procedure Call (RPC) 内部サービス通信のために Compute RabbitMQ により使用される方法。 レプリカ Object Storage のオブジェクト、アカウント、コンテナーのコピーを作成する ことで、データ冗長性や耐障害性を実現する。これにより、バックエンドのス トレージが故障した場合でもデータは失わない。 レプリカ数 Object Storage リングにおけるデータ複製数。 357 OpenStack 運用ガイド February 1, 2016 レプリケーション 別の物理デバイスにデータをコピーする処理。耐障害性や性能のために行われ る。 レプリケーター オブジェクトの複製を作成および管理する Object Storage のバックエンドプ ロセス。 リクエスト ID Compute に送られる各リクエストに割り振られる一意な ID。 レスキューイメージ インスタンスがレスキューモード時に起動する、特別な種類の仮想マシンイ メージ。管理者が問題を修正するために、インスタンスのファイルシステムを マウントできる。 リサイズ 既存のサーバーを別のフレーバーに変更する。サーバーをスケールアップまた はスケールダウンする。元のサーバーは、問題発生時にロールバックできるよ う保存される。すべてのリサイズは、元のサーバーを削除するときに、テスト され、明示的に確認される必要がある。 RESTful REST を使用する Web サービス API の 1 種。REST は、WWW 向けに使用され る、ハイパーメディアシステム向けのアーキテクチャーの形式である。 リング Object Storage データのパーティションへのマッピングを行う。アカウント、 オブジェクト、コンテナーというサービス単位に別々のリングが存在する。 リングビルダー Object Storage のリングの作成、管理を行い、パーティションのデバイスへの 割り当てを行い、他のストレージノードに設定を転送する。 Role Based Access Control (RBAC) 仮想マシンの起動や停止、パスワードの初期化など、ユーザーが実行できる操 作の事前定義済み一覧を提供する。Identity と Compute においてサポートさ れる。ダッシュボードを使用して設定できる。 ロール ユーザーが特定の操作の組を実行すると仮定する人格。ロールは一組の権利と 権限を含みます。そのロールを仮定しているユーザーは、それらの権利と権限 を継承します。 ロール ID 各 Identity service ロールに割り当てられる英数 ID。 358 OpenStack 運用ガイド February 1, 2016 rootwrap 非特権の「nova」ユーザーが Linux の root ユーザーとして指定したコマンド 一覧を実行できるようにする、Compute の機能。 ラウンドロビンスケジューラー 利用可能なホスト間でインスタンスを平等に分散させる、Compute のスケ ジューラーの一種。 ルーター 異なるネットワーク間でネットワーク通信を転送する、物理または仮想のネッ トワークデバイス。 ルーティングキー Compute の直接交換、ファンアウト交換、トピック交換は、このキーを使用し て、メッセージを処理する方法を判断する。処理内容は交換形式に応じて変化 する。 RPC ドライバー Compute が利用するメッセージキューソフトウェアを変更できるようにする仕 組み。例えば、 RabbitMQ を ZeroMQ や Qpid に変更できる。 rsync オブジェクトの複製をプッシュするために Object Storage により使用され る。 RXTX キャップ Compute の仮想マシンインスタンスが送受信できるネットワーク通信量の絶対 制限。 RXTX クォータ Compute の仮想マシンインスタンスが送受信できるネットワーク通信量のソフ ト制限。 S S3 Amazon により提供されるオブジェクトストレージ。Object Storage の機能に 似ている。Image service の仮想マシンイメージのバックエンドとして利用で きる。 sahara スケールアウト可能なデータ処理基盤と関連する管理インターフェースを提供 する、OpenStack のプロジェクト。 359 OpenStack 運用ガイド February 1, 2016 SAML アサーション 認証プロバイダーにより提供されたとおり、ユーザーに関する情報を含む。 ユーザーが認証済みであることを意味する。 スケジューラーマネージャー 仮想マシンインスタンスが起動する場所を決める、Compute のコンポーネン ト。さまざまな種類のスケジューラーをサポートするために、モジュール型設 計を使用する。 スコープ付きトークン 特定のテナントに関連付けられた Identity service API アクセストークン。 スクラバー 未使用の仮想マシンを確認し、削除する。遅延削除を実装する、Image service のコンポーネント。 シークレットキー ユーザーのみが知っているテキスト文字列。リクエストを Compute API に発行 するために、アクセスキーと一緒に使用される。 secure shell (SSH) 暗号化した通信チャネル経由でリモートホストにアクセスするために使用され るオープンソースのツール。SSH 鍵インジェクションが Compute によりサポー トされる。 セキュリティーグループ Compute のインスタンスに適用される、ネットワーク通信のフィルタリング ルールの集合。 分割オブジェクト 部品に分割された Object Storage の大きなオブジェクト。再構築されたオブ ジェクトは、連結オブジェクトと呼ばれる。 セルフサービス IaaS の場合、管理者が介することなく、通常の (特権を持たない) ユーザーが ネットワークなどの仮想インフラのコンポーネントを管理する機能。 SELinux アクセス制御ポリシーをサポートするための機構を提供する Linux カーネルセ キュリティーモジュール。 senlin クラスタリングサービスを提供する OpenStack プロジェクト。 360 OpenStack 運用ガイド February 1, 2016 サーバー そのシステムにおいて動作しているクライアントソフトウェアに具体的なサー ビスを提供するコンピューター。さまざまなコンピューター処理を管理するこ ともある。 サーバーは、Compute システムにおける仮想マシンインスタンスである。フ レーバーとイメージが、サーバーの作成時に必須の要素である。 サーバーイメージ VM イメージの別名。 サーバー UUID 各ゲスト仮想マシンインスタンスに割り当てられる一意な ID。 サービス Compute、Object Storage、Image service などの OpenStack のサービス。 ユーザーがリソースにアクセスしたり、操作を実行したりできる 1 つ以上のエ ンドポイントを提供する。 サービスカタログ Identity サービスカタログの別名。 サービス ID Identity のサービスカタログで利用可能な各サービスに割り当てられる一意な ID。 サービスプロバイダー サービスを他のシステムエンティティーに提供するシステム。連合認証の場 合、OpenStack Identity がサービスプロバイダーとなる。 サービス登録 自動的にカタログに登録するために、Compute などのサービスを有効化す る、Identity の機能。 サービステナント カタログに一覧化される全サービスを含む特別なテナント。 サービストークン Identity と安全に通信するために Compute により使用される、管理者により 定義されたトークン。 セッションバックエンド クライアントのセッションを管理するために、horizon により使用される保存 方法。ローカルメモリー、クッキー、データベース、memcached など。 361 OpenStack 運用ガイド February 1, 2016 セッション持続性 負荷分散サービスの機能の 1 つ。ノードがオンラインである限り、強制的に一 連の接続を同じノードにリダイレクトしようとする。 セッションストレージ クライアントセッションの保持と追跡を行う Horizon のコンポーネント。 Django のセッションフレームワークを用いて実装されている。 共有 Shared File System サービスにおいて、リモートのマウント可能なファイルシ ステムのこと。同時に、複数のユーザーが複数のホストから、共有をマウント したり、アクセスしたりできる。 共有ネットワーク Shared File System サービスにおいて、Networking サービスとのやり取りを 抽象化するエンティティー。選択したドライバーが Networking サービスとの やり取りを必要とするモードで動作している場合、共有を作成する際にネット ワーク共有 (share network) を指定する必要がある。 Shared File Systems API 安定版の RESTful API を提供する Shared File Systems サービス。 Shared File Systems サービスへのすべてのリクエストの認証と転送を行う。この API と通信するための python-manilaclient が提供されています。 Shared File Systems サービス マルチテナントのクラウド環境で共有ファイルシステムを管理するためのサー ビス群を提供する OpenStack サービス。 OpenStack がブロックベースのスト レージ管理を、 OpenStack Block Storage サービスプロジェクトとして提供し ているのと類似している。 Shared File Systems サービスを使うと、リモート ファイルシステムを作成し、自分のインスタンスからそのファイルシステムを マウントし、インスタンスからそのファイルシステムの読み書きを行える。こ のプロジェクトのコード名は manila。 共有 IP アドレス 共有 IP グループ内の仮想マシンインスタンスに割り当てられる IP アドレ ス。パブリック IP アドレスは、さまざまな高可用性のシナリオで使用する ために複数サーバーにまたがり共有できる。IP アドレスが別のサーバーと共 有されるとき、クラウドのネットワーク制限が変更され、各サーバーがリッ スンでき、その IP アドレスに応答できるようになる。オプションとして、 対象サーバーの変更するネットワーク設定を指定できる。共有 IP アドレス は、keepalive などの多くの標準的なハートビート機能と一緒に使用でき、エ ラーをモニターし、IP のフェイルオーバーを管理しる。 共有 IP グループ グループの他のメンバーと IP を共有できるサーバー群。グループ内のサー バーは、そのグループ内の他のサーバーと 1 つ以上のパブリック IP を共有で 362 OpenStack 運用ガイド February 1, 2016 きる。共有 IP グループにおける 1 番目のサーバーを除き、サーバーは共有 IP グループの中で起動する必要があります。サーバーは、共有 IP グループ 1 つだけのメンバーになれます。 共有ストレージ 複数のクライアントにより同時にアクセス可能なブロックストレージ。例えば NFS。 Sheepdog OpenStack によりサポートされる、QEMU 用の分散ブロックストレージシステ ム。 Simple Cloud Identity Management (SCIM) クラウドで認証情報を管理するための仕様。現在、OpenStack によりサポート されていない。 Single-root I/O Virtualization (SR-IOV) 物理 PCIe デバイスにより実装されるとき、複数の別々の PCIe デバイスとし て見えるようにできる仕様。これにより、複数の仮想化ゲストが物理デバイス への直接アクセスを共有できるようになる。同等の仮想デバイス経由より性能 を改善できる。OpenStack Havana 以降のリリースでサポートされている。 サービス水準合意 (SLA; Service Level Agreement) サービスの可用性を保証する契約上の義務。 SmokeStack コア OpenStack API に対して自動テストを実行する。Rails で書かれている。 スナップショット OpenStack ストレージボリュームやイメージの、ある時点でのコピー。スト レージのボリュームスナップショットは、ボリュームをバックアップするた めに使用する。イメージスナップショットは、データのバックアップを行っ たり、新しいサーバー用の「ゴールド」イメージ(設定済みイメージ)として バックアップしたりするのに使用する。 ソフトリブート オペレーティングシステムのコマンド経由で、仮想マシンインスタンスが正常 に再起動する、制御された再起動。 ソフトウェア開発ライフサイクル自動化サービス クラウドサービスをより簡単に利用し、アプリケーション開発プロセスと統合 することを目的とする OpenStack プロジェクト。ソースからイメージまでの手 順を自動化し、アプリケーション中心の開発を単純化します。プロジェクト名 は solum。 363 OpenStack 運用ガイド February 1, 2016 SolidFire Volume Driver SolidFire iSCSI ストレージアプライアンス向けの Block Storage ドライ バー。 solum ソフトウェア開発ライフサイクル自動化サービスを提供する OpenStack プロ ジェクト。 SPICE Simple Protocol for Independent Computing Environments (SPICE) は、ゲス ト仮想マシンに対するリモートデスクトップアクセスを提供する。VNC の代替 品。SPICE は OpenStack によりサポートされる。 分散優先スケジューラー 新規仮想マシンを合計負荷の最も低いホストで起動しようとする、Compute 仮 想マシンスケジューリングアルゴリズム。 SQL-Alchemy OpenStack で使われている、オープンソースの Python 用 SQL ツールキット。 SQLite 軽量 SQL データベース。多くの OpenStack サービスでデフォルトの永続スト レージとして使用されている。 スタック 指定されたテンプレート (AWS CloudFormation テンプレートまたは Heat Orchestration Template (HOT)) に基づいて、Orchestration により作成、管 理される OpenStack リソース群。 StackTach Compute AMQP 通信をキャプチャーする、コミュニティーのプロジェクト。デ バッグに有用。 静的 IP アドレス 固定 IP アドレスの別名。 StaticWeb コンテナーデータを静的 Web ページとして取り扱う Object Storage の WSGI ミドルウェアコンポーネント。 ストレージバックエンド サービスが、iSCSI、NFS、ローカルディスクなどの永続ストレージを使用する 方式。 364 OpenStack 運用ガイド February 1, 2016 ストレージノード コンテナーサービス、アカウントサービス、オブジェクトサービスを提供する Object Storage のノード。アカウントデータベース、コンテナーデータベー ス、オブジェクトデータベースを制御する。 ストレージマネージャー さまざまな種類の永続ストレージバックエンドをサポートするために、プラグ イン可能なインターフェースを提供する XenAPI コンポーネント。 ストレージマネージャーバックエンド iSCSI や NFS など、XenAPI によりサポートされる永続ストレージ方式。 ストレージサービス Object Storage のオブジェクトサービス、コンテナーサービス、アカウント サービスの集合名。 ストラテジー Image サービスや Identity サービスが使用する認証元を指定する。 Database サービスでは、データストア用に実装された拡張を指す。 サブドメイン 親ドメイン内のドメイン。サブドメインは登録できない。サブドメインにより ドメインを委譲できる。サブドメインは、サブドメインを持てるので、第 3 階 層、第 4 階層、第 5 階層と深い階層構造にできる。 サブネット IP ネットワークの論理分割。 SUSE Linux Enterprise Server (SLES) OpenStack と互換性のある Linux ディストリビューション。 休止 一時停止された仮想マシンインスタンスの別名。 スワップ システムにおいて実際に利用可能なメモリーより多くのメモリーをオペレー ティングシステムにより使用されるディスクベースの仮想メモリー。 swauth Object Storage の認証と認可のサービス。WSGI ミドルウェア経由で実装され る。バックエンドの永続的なデータストアとして、Object Storage 自身を使用 する。 swift オブジェクトストレージサービスを提供する OpenStack コアプロジェクト。 365 OpenStack 運用ガイド February 1, 2016 swift All in One (SAIO) 単一の仮想マシンに一通りの Object Storage 開発環境を作成すること。 swift ミドルウェア 追加機能を提供する Object Storage のコンポーネントの総称。 swift プロキシサーバー Object Storage へのゲートとして動作する。ユーザーの認証に責任を持つ。 swift ストレージノード Object Storage のアカウントサービス、コンテナーサービス、オブジェクト サービスを実行するノード。 同期ポイント 最新のコンテナーとアカウントのデータベースが Object Storage 内のノード 間で同期された基準時間。 sysadmin Compute RBAC システムにおけるデフォルトのロールの 1 つ。ユーザーが他の ユーザーをプロジェクトに追加でき、プロジェクトに関連付けられた仮想マシ ンイメージを操作でき、仮想マシンインスタンスを起動および終了できるよう になる。 システム使用状況 通知システムと一緒に動作し、計測項目と使用状況を収集する、Compute のコ ンポーネント。この情報は課金のために使用できる。 T Telemetry OpenStack にメータリングと計測の機能を提供する、統合プロジェク ト。Telemetry のプロジェクト名は ceilometer。 TempAuth Object Storage 自身が認証と認可を実行できるようになる、Object Storage 内の認証機能。テストや開発によく使用される。 Tempest OpenStack コアプロジェクトの trunk ブランチに対してテストを実行するため に設計された自動ソフトウェアテストスイート。 TempURL 一時的なオブジェクトアクセスのために URL を作成できる Object Storage ミ ドルウェアコンポーネント。 366 OpenStack 運用ガイド February 1, 2016 テナント ユーザーのグループ。Compute リソースへのアクセスを分離するために使用さ れる。プロジェクトの別名。 テナント API テナントにアクセス可能な API。 テナントエンドポイント 1 つ以上のテナントと関連付けられた Identity service API エンドポイン ト。 テナント ID Identity 内で各テナントに割り当てられる一意な ID。プロジェクト ID は、 テナント ID に対応付けられる。 トークン OpenStack API やリソースへのアクセスに使用される英数字文字列。 トークンサービス ユーザーやテナントが認証された後、トークンを管理し、検証する Identity のコンポーネント。 tombstone Object Storage のオブジェクトが削除済みであることを示す印をつけるために 使用される。オブジェクトの削除後、他のノードにおいて更新されないことを 保証する。 トピック発行者 RPC コールが実行されるときに作成されるプロセス。メッセージをトピック交 換者にプッシュするために使用される。 Torpedo OpenStack API に対して自動テストを実行するために使用されるコミュニ ティープロジェクト。 トランザクション ID Object Storage の各リクエストに割り当てられる一意な ID。デバッグやト レースに使用される。 一時 非永続の別名。 一時交換 非永続交換の別名。 367 OpenStack 運用ガイド February 1, 2016 一時メッセージ メモリーに保存され、サービスの再起動後に失われるメッセージ。 一時キュー 非永続キューの別名。 TripleO OpenStack-on-OpenStack プログラム。OpenStack Deployment プログラムの コード名。 trove データベースサービスをアプリケーションに提供する OpenStack のプロジェク ト。 U Ubuntu Debian ベースの Linux ディストリビューション。 スコープなしトークン Identity service デフォルトトークンの別名。 アップデーター キュー済みや失敗した、コンテナーやオブジェクトに対する更新を処理す る、Object Storage のコンポーネントのグループの総称。 ユーザー OpenStack Identity では、エンティティーは個々の API 利用者を表す、特定 のドメインに属する。OpenStack Compute では、ユーザーはロール、プロジェ クトもしくはその両者と関連付けることができる。 ユーザーデータ インスタンス起動時にユーザが指定できる BLOB データ。インスタンスはこの データにメタデータサービスやコンフィグドライブ経由でアクセスできる。 通 常、インスタンスがブート時に実行するシェルスクリプトを渡すために使用さ れる。 User Mode Linux (UML) OpenStack がサポートするハイパーバイザーの1つ。 V VIF UUID 各 Networking VIF に割り当てられる一意な ID。 368 OpenStack 運用ガイド February 1, 2016 仮想 IP 主たる負荷分散の設定オブジェクト。クライアント通信を受け付ける仮想 IP とポートを指定する。使用する負荷分散方式、プロトコルなどの詳細も定義す る。このエンティティは、virtual server、vserver、listener のような負荷 分散製品においても知られている。 仮想CPU (vCPU) 物理 CPU を分割する。インスタンスは、これらの分割したものを使用できる。 Virtual Disk Image (VDI) Image service によりサポートされる、仮想マシンイメージディスク形式の 1 つ。 VXLAN 大規模なクラウドコンピューティング環境に関連するスケーラビリティー問題 を削減するためのネットワーク仮想化技術。VLAN のようなカプセル化技術を使 用して、Ethernet フレームを UDP パケット内にカプセル化する。 Virtual Hard Disk (VHD) Image service によりサポートされる、仮想マシンイメージディスク形式の 1 つ。 仮想 IP 負荷分散するサービスへのクライアント接続に使用される負荷分散装置におい て設定される IP アドレス。受信の接続が、負荷分散の設定に基づいて、バッ クエンドのノードに分散される。 仮想マシン (VM) ハイパーバイザー上で動作するオペレーティングシステムインスタンス。一台 の物理ホストで同時に複数の VM を実行できる。 仮想ネットワーク Networking 内の L2 ネットワークセグメント。 仮想ネットワーク 複数の仮想マシンを使用して、物理ネットワーク上にオーバーレイされる、ス イッチング、ルーティング、負荷分散、セキュリティーなどのネットワーク機 能の仮想化に関する一般的な用語。 Virtual Network Computing (VNC) 仮想マシンへのリモートコンソールアクセスに使用される、オープンソースの GUI / CUI ツール。 仮想ネットワークインタフェース (VIF) Networking のネットワークにおけるポートに差し込まれるインターフェース。 一般的に、仮想マシンに設定された仮想ネットワークインターフェース。 369 OpenStack 運用ガイド February 1, 2016 仮想ポート 仮想ネットワークへの仮想インタフェースの接続ポイント。 仮想プライベートネットワーク (VPN) Compute では cloudpipe の形で提供される。 cloudpipe では、特別なインス タンスを使って、プロジェクト毎を基本として VPN が作成される。 仮想サーバー 仮想マシンやゲストの別名。 仮想スイッチ (vSwitch) ホストやノードで実行され、ハードウェアのネットワークスイッチの機能を提 供するソフトウェア。 仮想 VLAN 仮想ネットワークの別名。 VirtualBox OpenStack がサポートするハイパーバイザーの1つ。 VLAN マネージャー dnsmasq と radvd を提供し、cloudpipe インスタンスとの転送処理をセット アップする、Compute のコンポーネント。 VLAN ネットワーク ネットワークコントローラーは、コンピュートのサーバーが、お互いに通信し たり、パブリックなネットワークと通信したりできるようにするために、仮 想ネットワークを提供する。すべてのマシンは、パブリックネットワークイ ンターフェースとプライベートネットワークインターフェースを持つ必要が ある。VLAN ネットワークは、VLAN マネージャーを用いた vlan_interface オ プションにより制御される、プライベートネットワークインターフェースであ る。 VM disk (VMDK) Image service によりサポートされる、仮想マシンイメージディスク形式の 1 つ。 仮想マシンイメージ イメージの別名。 VM Remote Control (VMRC) Web ブラウザーを使用して仮想マシンインスタンスのコンソールにアクセスす る方法。Compute によりサポートされる。 VMware API Compute で VMware 製品の操作をサポートする。 370 OpenStack 運用ガイド February 1, 2016 VMware NSX Neutron プラグイン Neutron における VMware NSX サポートを提供する。 VNC プロキシ ユーザーが VNC や VMRC 経由で仮想マシンインスタンスのコンソールにアクセ スできるようにする Compute のコンポーネント。 ボリューム ディスクを用いたデータストレージ。一般的に、拡張属性をサポートするファ イルシステムを持つ、iSCSI ターゲットとして利用される。永続的なものと一 時的なものがある。 Volume API Block Storage API の別名。 ボリュームコントローラー ストレージボリュームの操作を監督、調整する、Block Storage のコンポーネ ント。 ボリュームドライバー ボリュームプラグインの別名。 ボリューム ID Block Storage の管理下にある各ストレージボリュームに適用される一意な ID。 ボリュームマネージャー 永続ストレージボリュームを作成、接続、切断する Block Storage コンポーネ ント。 ボリュームノード cinder-volume デーモンを実行する Block Storage ノード。 ボリュームプラグイン Block Storage のボリュームマネージャーに対して、新しい特別な種類のバッ クエンドストレージのサポートを提供する。 ボリュームワーカー ボリュームの作成や削除、コンピュートボリュームの作成を管理するために、 バックエンドのストレージと相互作用する cinder のコンポーネント。cindervolume デーモンにより提供される。 vSphere OpenStack がサポートするハイパーバイザーの1つ。 371 OpenStack 運用ガイド February 1, 2016 W 重み付け 特定のホストがあるジョブ向けの仮想マシンインスタンスに対して適切かどう かを判断する、Compute の処理。例えば、ホストのメモリー不足、ホストの CPU 過剰など。 ウェイト どのストレージデバイスがジョブに対して適切であるかを判断するため に、Object Storage デバイスにより使用される。デバイスは容量により重み付 けされる。 重み付けコスト Compute で新しい仮想マシンを起動する場所を判断するときに使用される各コ ストの合計。 ワーカー キューをリッスンし、メッセージに応じたタスクを実行するデーモン。例え ば、cinder-volume ワーカーは、ストレージにおけるボリュームの作成と削除 を管理します。 Workflow サービス ワークフロー、タスク、状態遷移ルールを書くための YAML ベースの言語を提 供し、それらをアップロード、編集できるサービス、それらを大規模かつ高可 用に実行できるサービス、ワークフローの実行状態および個々のタスクの状態 を管理および監視できるサービスを提供する OpenStack プロジェクト。このプ ロジェクトのコード名は mistral。 X Xen Xen は、マイクロカーネル設計を使用したハイパーバイザー。複数のコン ピューターオペレーティングシステムを同じコンピューターハードウェアで同 時に実行できるようになるサービスを提供する。 Xen API Xen 管理 API。Compute によりサポートされる。 Xen Cloud Platform (XCP) OpenStack がサポートするハイパーバイザーの1つ。 Xen Storage Manager Volume Driver Xen Storage Manager API と通信できる Block Storage ボリュームプラグイ ン。 372 OpenStack 運用ガイド February 1, 2016 XenServer OpenStack がサポートするハイパーバイザーの1つ。 XFS Silicon Graphics 社により作成された、高性能な 64 ビットファイルシステ ム。並列 I/O 処理とデータ一貫性に優れる。 Z zaqar メッセージサービスをアプリケーションに提供する OpenStack のプロジェク ト。 ZeroMQ OpenStack によりサポートされるメッセージキューソフトウェア。RabbitMQ の 代替。0MQ とも表記。 Zuul OpenStack 開発で使用されているツールで、変更のテストを正しい順番を保証 しながら並列に実行する。 373 OpenStack 運用ガイド February 1, 2016 索引 定義, インスタンストンネルネットワーク, シンボル インターネットプロトコル (IP), インターフェース, インターフェース ID, イースト・ウエスト通信, ウェイト, エンティティー, 定義, エンドポイント API エンドポイント, 60, 93, エンドポイントテンプレート, エンドポイントレジストリ, グローバルエンドポイントテンプ レート, テナントエンドポイント, オブジェクト Object Storage, 4 オブジェクトオーディター, オブジェクトサーバー, 83, オブジェクトハッシュ, オブジェクトバージョニング, オブジェクトパスハッシュ, オブジェクトレプリケーター, オブジェクト有効期限, マニフェストオブジェクト, 分割オブジェクト, 定義, 連結オブジェクト, オブジェクトストレージ Object Storage API, Object Storage Device (OSD), オーバーコミット, 53 カスタマー (参照 テナント) カスタムモジュール, カタログ, 95, カタログサービス, カプセル化, カレントワークロード, キャパシティ 定義, キュー 一時キュー, *-manage コマンドラインツール, 93 /var/lib/nova/instances directory, 179 0mq, 41 6to4, アカウンティング, アカウント, 76, アカウントサーバー, 68, 83 アカウントデータベース, アクセスキー, 94, アクセス制御リスト (ACL), アクティブ/アクティブ設定, アクティブ/パッシブ設定, アタッチ(ネットワーク), アップデーター, アドレスプール, アプリケーションカタログ murano, アプリケーションサーバー, アプレット, アベイラビリティゾーン, 62, アラート 定義, アーキテクチャー例 (参照 レガシー ネットワーク; OpenStack Networking) イメージ 定義, 追加, 125 イメージサービス 設計上の考慮事項, 43 イングレスフィルタリング, インジェクション, インスタンス インスタンス ID, インスタンス UUID, インスタンスタイプ, インスタンスタイプ ID, インスタンス状態, ストレージ・ソリューション, 49 375 OpenStack 運用ガイド 排他キュー, クォータ, 106-116, クラウドアーキテクト, クラウドコントローラー コンセプト, 37 スケーラビリティ, 58 ネットワークトラフィック, 45 ハードウェアサイジングに関する考 慮事項, 39 役割, 9 管理対象サービス, 37 クラウドコントローラーノード コマンドラインツール, 93 追加, 59 クラウドコンピューティング VS. 伝統的実装, 81 クラウドコントローラー, クラウドコントローラーノード, コストの最小化, 29 定義, クラウドデータ管理インターフェー ス (CDMI:Cloud Data Management Interface), クレデンシャル, 44, グループ, グローバルエンドポイントテンプレー ト, ゲスト OS, ゲートウェイ, コア, 47 コアAPI, コアプロジェクト, コスト, コマンドフィルター, コマンドラインインターフェース (CLI), 1 コマンドラインツール API コールの検査, 95 Python Package Index (PyPI), 92 インストール, 92 コンピュートノードの診断, 98 管理系, 93 認証情報の取得, 94 February 1, 2016 コミュニティープロジェクト, コンソールログ, コンダクター, 41, コンテナ コンテナサーバー, 83 コンテナー コンテナーオーディター, コンテナーサーバー, コンテナーサービス, コンテナーデータベース, コンテナーフォーマット, ストレージの決定, 68 定義, コンテンツ配信ネットワーク (CDN), コントローラーノード (参照 アンダー クラウドコンピューティング) コンピュートノード CPU の選択, 47 インスタンスストレージソリュー ション, 49 オーバーコミット, 53 ネットワーキング, 55 ハイパーバイザーの選択, 48 ファイルシステムの選択, 53 ライブマイグレーション, 53 ロギング, 54 定義, 診断, 98 追加, 59 コンフィグドライブ, 101, ゴールデンイメージ, サブドメイン, サブネット, サーバー, 96 アプリケーションサーバー, サーバー UUID, プロキシサーバー, レジストリサーバー, 仮想, 定義, サーバーイメージ, サービス 376 OpenStack 運用ガイド February 1, 2016 分離, 40 定義, 概観の取得, 96 サービス ID, サービスの分離, 40 サービスカタログ, サービステナント, サービストークン, サービスプロバイダー, サービス妨害 (DoS), サービス水準合意 (SLA; Service Level Agreement), サービス登録, システム使用状況, シングルホストネットワーク, 86 シークレットキー, ジャンボフレーム, スクラバー, スクリプトモジュール, 1 スケジューラー ラウンドロビン, 分散優先, 設計上の考慮事項, 43 スケジューラーマネージャー, スケーリング アベイラビリティゾーン, 62 オブジェクトストレージ, 68 クラウドコントローラーノードの追 加, 59 クラウド分割, 60 セルとリージョン, 61 ハードウェア調達, 65 ファイルシステムの選択, 52 ホストアグリゲート, 63 メトリクス, 57 垂直 vs 水平, 57 スコープなしトークン, スコープ付きトークン, スタック (参照 Heat Orchestration Template (HOT)) ストラテジー, ストレージ Object Storage, 4 oコンセプトの概要, 72 swift ストレージノード, ストレージサービス, ストレージドライバーのサポート, 75 ストレージマネージャー, ストレージマネージャーバックエン ド, バックエンドの選択, 74 ファイルシステムの選択, 53 ブロックストレージ, 4, 70 ライブマイグレーション, 53 一時, 67 ストレージノード, ストレージバックエンド, 74, スナップショット, スワップ, 定義, セキュリティグループ, 130 セキュリティーグループ, セキュリティ上の問題 パスワード, 94 セッション セッションストレージ, セッションバックエンド, セッション持続性, セル クラウド分割, 61 セルフォワーディング, セルマネージャー, 子セル, 定義, 親セル, セルフサービス, ソフトウェア開発ライフサイクル自動化 サービス, ソフトリブート, ダウンロード, 定義, ダッシュボード, 4, 39, 44, 91, チャンススケジューラー, テナント テナント API, テナント ID, テナントエンドポイント, 377 OpenStack 運用ガイド 定義, 103 ディスクパーティショニング, 30 ディスクフォーマット, ディスク暗号化, デバイス ID, デバイスウェイト, デフォルトテナント, デフォルトトークン, デフォルトパネル, デプロイメント (参照 プロビジョニン グ/デプロイメント) デリバリーモード, データ データ暗号化, データストア, 定義, データベース データベース ID, データベースレプリケーター, 設計上の考慮事項, 40 デーモン 基本, 1 定義, トピック発行者, トラブルシューティング DNS 問題, 42 トランザクション ID, トークン, トークンサービス, ドメイン, 定義, ドライバー RPC ドライバー, ネットワーク Network File System (NFS), Network Time Protocol (NTP), VLAN, 85, ネットワーク ID, ネットワーク UUID, ネットワークアドレス変換 (NAT), ネットワークコントローラー, ネットワークセグメント, ネットワークタイムプロトコル (NTP), 86 February 1, 2016 ネットワークノード, ネットワークマネージャー, ネットワークワーカー, パブリック, プライベートネットワーク, マルチホスト, 8, 86 仮想, 定義, 検査, 99 絵ネットワークマネージャ, 84 設定, 32 設計上の考慮事項, 45 開発オプション, 84 ネットワークデザイン ネットワークサービス, 86 ネットワークトポロジー deployment options, 84 マルチvsシングルホストネット ワーク, 86 管理ネットワーク, 81 ネットワーク名前空間, ネットワーク設計 IPアドレス計画, 82 ネットワークトポロジー OpenStack VMとVLAN, 85 パブリックアドレスオプション, 82 第1段階, 81 ノース・サウス通信, ノード swift ストレージノード, ストレージノード, プロキシノード, 定義, ハイパースレッディング, 47 ハイパーバイザー KVM, 6 コンピュートノードの診断, 98 ハイパーバイザープール, 定義, 選択, 48 ハイパーリンク, ハイブリッドクラウド, ハードウェア 378 OpenStack 運用ガイド 仮想ハードウェア, 57 拡張性プランニング, 65 設計上の考慮事項, 39 ハードリブート, バイト, 定義, バイナリ バイナリオブジェクト, 68 定義, バックエンドの対話 store, 74 バックエンド操作 カタログ, ストア, 定義, パスワード, 94 パブリック API, パブリック IP アドレス, パブリックイメージ, パブリックネットワーク, パーソナリティーファイル, パーティション ディスクパーティショニング, 30 パーティションインデックス, パーティションインデックス値, 定義, ビット, 定義, ビルダーファイル, ファイアウォール, ファイバーチャネル, ファイルシステム 共有, 51 選択, 53 非共有, 52 ファンアウト交換, フィルタリング イングレスフィルタリング, 定義, フラットネットワーク, フラットモードインジェクション, フレーバー, 57, フレーバー ID, フロントエンド, 定義, ブラウザー, 定義, February 1, 2016 ブロックストレージ, 4, 70 ブロックデバイス, 72, ブロックマイグレーション, 53, ブータブルディスクイメージ, プライベート IP アドレス, プライベートイメージ, プライベートネットワーク, プラグイン, 定義, プロキシサーバー, プロキシノード, プロジェクト プロジェクト ID, プロジェクト VPN, 定義, 103, 現在の一覧の取得, 100 プロバイダー, プロビジョニング/デプロイメント tips for, 34 ネットワークでプロ忌めんとオプ ション, 84 自動デプロイメント, 29 自動設定, 33 遠隔管理, 33 プロビジョニング/構築 構築シナリオ, 40 プロミスキャスモード, プール, プールメンバー, ヘルスモニター, ベースイメージ, ホスト, 定義, ホストアグリゲート, 63, ボタンクラス, ボリューム Volume API, ボリューム ID, ボリュームコントローラー, ボリュームドライバー, ボリュームノード, ボリュームプラグイン, ボリュームマネージャー, ボリュームストレージ, 70 ボリュームワーカー, 379 OpenStack 運用ガイド ポリシーサービス, ポート ポート UUID, 仮想, 定義, マイグレーション, 4, 53, マニフェスト マニフェストオブジェクト, 定義, マネジメント API (参照 管理 API) マネージャー, マルチスレッド, 47 マルチホスト, マルチホストネットワーク, 8, 42, 86 メカニズムドライバー, メタデータ OpenStack イメージサービス, 43 メタデータエージェント, メッセージ 一時メッセージ, 永続メッセージ, 設計上の考慮事項, 41 非永続キュー, 非永続交換, メッセージキュー, 41, メッセージバス, メッセージブローカー, メモリーオーバーコミット, メンバーシップ, メンバーシップリスト, モジュール、タイプ, 1 モニター (LBaaS), モニター (Mon), ユーザー, 定義, ユーザーデータ, ユーザートレーニング セキュリティグループ, 130 ユーザー管理 クォータ, 106 プロジェクトの追加, 104 ユーザーの一覧表示, 100 用語, 103 February 1, 2016 ライブマイグレーション, 4, 53, 73, ラウンドロビンスケジューラー, ラージオブジェクト, リクエスト ID, リサイズ, リバランス, リビルド, リファレンスアーキテクチャー, リブート ハード対ソフト, , リング リングビルダー, 定義, リージョン, 61, ルーター, ルーティングキー, レガシーネットワーク (nova) vs. OpenStack Networking (neutron), 8 オプションの拡張機能, 10 コンポーネントの概要, 4 サポート対象機能, 4 詳しい説明, 8 選択の理由, 5 レガシーネットワーク(nova) マルチホストネットワークの利点, 8 レコード basics of, レコード ID, レジストリサーバー, レジストリー (参照 Image サービス) レスキューイメージ, レプリケーション レプリカ数, レプリケーター, 定義, レートリミット, ロール ロール ID, 定義, ワーカー, 38, 一時イメージ, 380 OpenStack 運用ガイド 一時キュー, 一時ボリューム, 一時メッセージ, 一時交換 (参照 非永続交換) 一時停止, 一貫性ウインドウ, 交換, 交換種別, 仮想 IP, , 仮想 VLAN, 仮想CPU (vCPU), 仮想サーバー, 仮想スイッチ (vSwitch), 仮想ネットワーク, , 仮想ネットワークインタフェース (VIF), 仮想プライベートネットワーク (VPN), 仮想ポート, 仮想マシン, 57 仮想マシン (VM), 仮想マシンイメージ, 仮想化技術, 47 休止, 定義, 作業環境 users and projects, 100 コマンドラインツール, 91 ダッシュボード, 91 ネットワークの検査, 99 実行中のインスタンス, 100 保護プロパティー, 充填優先スケジューラー, 公開鍵認証, 共有, 共有 IP アドレス, 共有 IP グループ, 共有ストレージ, 51, 共有ネットワーク, 分割オブジェクト, 分割メソッド, 60 分散仮想ルーター (DVR), 分散優先スケジューラー, 割り当て, 定義, February 1, 2016 割り当て解除, 定義, 同期ポイント, 固定 IP アドレス, 固定IPアドレス, 82, 82 圧縮, 外部ネットワーク, 定義, 多要素認証, 子セル, 帯域 制限, 129 定義, 帯域幅 ハードウェアの仕様, 59 承認, 44 拡張 定義, 拡張仕様, 定義, 拡張属性 (xattr), 拡張機能 設計上の考慮事項, 43 排他キュー, 接続, 定義, 暗号化, 定義, 最大転送単位 (MTU), 永続キュー, 永続ボリューム, 永続メッセージ, 永続交換, 監査, 直接交換, 直接使用者, 直接発行者, 確保, 定義, 管理 API, 管理サーバー, 管理ネットワーク, 81, 絶対制限, 育成プロジェクト, 自動 ACK, 自動宣言, 自動設定, 33 親セル, 設定オプション 381 OpenStack 運用ガイド 高可用性, 59 設計上の考慮事項 API サポート, 42 イメージ, 43 コンダクターサービス, 41 サービスの分離, 40 スケジューリング, 43 ダッシュボード, 44 データベースの選択, 40 ネットワーク, 45 ネットワーク設計, 81 ハードウェアの考慮点, 39 メッセージキュー, 41 拡張機能, 43 認証/承認, 44 設計上の考慮点 クラウドコントローラーサービス, 37 認可, 認可ノード, , 認証, 38, 44, 94, 認証トークン, 95, 認証局 (Compute), 認証情報, 94 論理ボリュームマネージャー (LVM), 識別情報プロバイダー basics of, 負荷分散, 超過利用, 退避, 定義, 連合認証, 連結オブジェクト, 遅延削除, 運用者, 重み付け, 重み付けコスト, 重複排除, 関連付け解除, 隔離, 静的 IP アドレス, 非推奨認証, 非永続キュー, February 1, 2016 非永続ボリューム (参照 一時ボリュー ム) 非永続交換, 高可用性, 59, A access control list (ACL), 176 account auditor, account quotas, 111 account reaper, account server, account service, accounts, 119 ACL (参照 アクセス制御リスト) Active Directory, 39, address pool, 162 Address Resolution Protocol (ARP), admin API, 122 advanced configuration (参照 configuration options) Advanced Message Queuing Protocol (AMQP), 6, 38, 60, Advanced RISC Machine (ARM), alerts intelligent, 227 (参照 logging/monitoring) resource, 223 Amazon Kernel Image (AKI), Amazon Machine Image (AMI), Amazon Ramdisk Image (ARI), AMD 仮想化, 47 Anvil, Apache, 44, Apache License 2.0, Apache Web Server, API (application programming interface) API エンドポイント, API キー, API サーバー, API トークン, API バージョン, 382 OpenStack 運用ガイド February 1, 2016 API 拡張, API 拡張プラグイン, パブリック API, 設計上の考慮事項, 42 API (Application Programming Interface) API エンドポイント, 93 API コール、検査, 95 Application Service Provider (ASP), rally, Bexar, binary binary results in trending, 229 block device, 163 Block Storage, 113, 233, block storage, 140, 163 Block Storage API, BMC (Baseboard Management Controller), Bootstrap Protocol (BOOTP), Border Gateway Protocol (BGP), bps, bugs, reporting, 254 builder files, 234 burn-in testing, 66 arptables, Asynchronous JavaScript and XML (AJAX), ATA over Ethernet (AoE), auditor, Austin, AuthN, authorization, 120 AuthZ, AWS (Amazon Web Services), AWS CloudFormation テンプレート, B C backup restore and disaster recovery as a service, backup/recovery considerations, 231 databases, 232 file systems, 232 items included, 231 recovering backups, 234 bandwidth design considerations for, 45 recognizing DDOS attacks, 123 プライベート vs. パブリックネット ワークの推奨事項, 70 barbican, Bare metal service ironic, bare, 定義, base image, 129 Bell-LaPadula モデル, Benchmark サービス CA (認証局), cache pruner, Cactus, CALL, capability scaling and, 65 capacity cache, capacity planning, 65 capacity updater, CAST (RPC プリミティブ), ceilometer, 224, CentOS, 4, Ceph, 76, CephFS, CERN (European Organization for Nuclear Research), 280 Challenge-Handshake Authentication Protocol (CHAP), changes since, Chef, 29, 89, cinder, 92, CirrOS, Cisco neutron プラグイン, cloud controllers enabling RabbitMQ, 219 383 OpenStack 運用ガイド file system backups and, 232 log information, 215 new compute nodes and, 183 planned maintenance of, 172 process monitoring and, 221 rebooting, 172 scalability and, 266 total failure of, 173 Cloud Infrastructure Management Interface (CIMI), cloud-init, cloudadmin, Cloudbase-Init (参照 cloud-init) cloudpipe cloudpipe イメージ, 定義, Clustering, CMDB (構成管理データベース), Command-line interface (CLI), 187 Common Internet File System (CIFS), Compute Compute API, Compute サービス, 107, コンピュートコントローラー, コンピュートホスト, コンピュートワーカー, 定義, 最もシンプルなアーキテクチャー, 4 compute nodes adding, 183 backup/recovery of, 232 failures, 178 maintenance, 173 config drive, 158 configuration management, 182 configuration options geographical storage considerations, 264 high availability, 263 IPv6 support, 263 periodic task implementation, 262 security, 263 February 1, 2016 wide availability of, 261 congress, containers quota setting, 111 Containers サービス magnum, cooperative threading, 262 CPU (central processing unit) overcommitting, 53 ハイパースレッディングをオンにす る, 48 選択, 47 Cross-Origin Resource Sharing (CORS), Crowbar, CSAIL (Computer Science and Artificial Intelligence Lab), 278 cURL, 95 customization custom log statements, 218 dashboard, 252 development environment creation for, 238 Object Storage, 240 OpenStack Compute (nova) Scheduler, 247 paths available, 237 D DAC (discretionary access control), 128 DAC (任意アクセス制御), daemons running on CLI, 187 DAIR, 279 dashboard, 252 data inspecting/recovering failed instances, 175 preventing loss of, 231 Data processing サービス sahara, Database サービス, 384 OpenStack 運用ガイド databases backup/recovery of, 232 Image service, 127 instance information in, 169 maintenance/debugging, 184 nova-network troubleshooting, 204 Debian, debugging (参照 logging/monitoring; maintenance/debugging) Designate, Desktop-as-a-Service, developer, development environments, creating, 238 DevStack customizing dashboard, 252 customizing Object Storage (swift), 240 customizing OpenStack Compute (nova) scheduler, 247 development environment creation, 238 定義, DHCP (Dynamic Host Configuration Protocol) basics of, debugging, 205 DHCP エージェント, DHTML (Dynamic HyperText Markup Language), Diablo, dispersion, Django, 252, DNS DNS レコード, DNS (Domain Name Server, Service or System) debugging, 209 DNS エイリアス, 42 DNS (Domain Name Serverサービス、シ ステム) DNS サービスの選択, 87 February 1, 2016 DNS (ドメインネームシステム、サー バー、サービス) 定義, DNS サービス designate, dnsmasq, Docker, 48 drivers differences between, 261 DRTM (dynamic root of trust measurement), E EBS ブートボリューム, ebtables, EC2 EC2 API, EC2 アクセスキー, EC2 シークレットキー, EC2 互換 API, Elastic Block Storage (EBS), Essex, ESX ハイパーバイザー, 48 ESXi ハイパーバイザー, 48, ETag, euca2ools, Eucalyptus Kernel Image (EKI), Eucalyptus Machine Image (EMI), Eucalyptus Ramdisk Image (ERI), F FakeLDAP, Fedora, Fibre Channel over Ethernet (FCoE), file injection, 162 file systems backup/recovery of, 232 Firewall-as-a-Service (FWaaS), Flat マネージャー, FlatDHCP マネージャー, flavor, 128 floating IP address, 4, 204 385 OpenStack 運用ガイド February 1, 2016 Floating IP アドレス, Folsom, FormPost, freezer, Fully Automatic Installation (FAI), 32 functional testing, 246 G Hyper-V, 48, hypervisors differences between, 261 複数実行, 49 I generic receive offload (GRO), generic routing encapsulation (GRE), glance glance API サーバ, 43 glance API サーバー, glance registry, 43 Glance レジストリ, python-glanceclient, 92 GlusterFS, 77, Governance service congress, Graphic Interchange Format (GIF), Graphics Processing Unit (GPU), Green Threads, Grizzly, 3, H Hadoop, Hadoop Distributed File System (HDFS), handover, hard drives, replacing, 181 hardware maintenance/debugging, 183 Havana, 3, heat, Heat Orchestration Template (HOT), help, resources for, 253 high availability, 263 horizon プラグイン, Host Bus Adapter (HBA), IaaS (Infrastructure-as-a-Service) basics of, Icehouse 定義, ID 番号, Identity backup/recovery, 233 basics of, Identity バックエンド, イメージ ID, プラグインサポート, 44 認証の判定, 44 Identity service Identity service API, 103 サービスおよびエンドポイントの表 示, 97 Identity サービス Identity service API, IDS (Intrusion Detection System), image quotas, 107 Image service backup/recovery of, 233 database tables, 127 quota setting, 107 データベースクエリー, 127 Image サービス Image サービス API, イメージ UUID, イメージキャッシュ, イメージストア, イメージメンバーシップ, イメージレジストリー, イメージ所有者, イメージ状態, パブリックイメージ, images 386 OpenStack 運用ガイド CLI options for, 127 deleting, 127 sharing between projects, 126 INI, instances boot failures, 158 database information, 169 instance-specific data, 159 maintenance/debugging, 174 starting, 157 実行中の一覧, 100 Intel 仮想化技術/primary>, 47 intelligent alerting, 227 interface states, checking, 191 Internet Control Message Protocol (ICMP), Internet Service Provider (ISP), Internet Small Computer System Interface (iSCSI), IOPS 定義, ip a command, 191 IP Address Management (IPAM), IP addresses floating, 162, 204 IP アドレス floating, 4 Floating, shared, パブリック, プライベート, 固定, 定義, 静的, ip6tables, IPL (Initial Program Loader), IPMI (Intelligent Platform Management Interface), ipset, iptables, 203, IPv6, enabling support for, 263 IPアドレス アドレス計画, 82 February 1, 2016 パブリックアドレスオプション, 82 分類, 82 固定, 82, 82 ironic, iSCSI Qualified Name (IQN), iSCSI プロトコル, ISO9660 形式, itsec, J Java, JavaScript, JavaScript Object Notation (JSON), Jenkins, Juno, database-as-a-service tool, 303 nova network deprecation, 301 K Kerberos, kernel-based VM (KVM) ハイパーバイ ザー, 6, 48, Key management サービス barbican, keystone, 92, Kickstart, Kilo, Compute bare-metal deployment, 303 Compute V3 API, 303 scheduler improvements, 304 upcoming release of, 297 upgrades in, 301 L L2 エージェント, L2 ネットワーク, L3 エージェント, L3 ネットワーク, Launchpad, Liberty, IPv6 support, 263 387 OpenStack 運用ガイド libvirt, Lightweight Directory Access Protocol (LDAP), Linux コンテナ (LXC), 48 Linux コンテナー (LXC), Linux ブリッジ neutron プラグイン, live snapshots, 165 Load-Balancer-as-a-Service (LBaaS), logging/monitoring adding custom log statements, 218 ceilometer project, 224 central log management, 219 intelligent alerting, 227 log location, 215 logging levels, 216 OpenStack-specific resources, 224 process monitoring, 222 RabbitMQ web management interface, 219 reading log messages, 216, 217 resource alerting, 223 StackTack tool, 224 tailing logs, 186 trending, 228 コンピュートノードおよび, 54 LVM (Logical Volume Manager), 78 M magnum, mailing lists, 253 maintenance/debugging, 171-189 (参照 troubleshooting) /var/lib/nova/instances, 179 cloud controller planned maintenance, 172 cloud controller total failure, 173 complete failures, 181 compute node planned maintenance, 173 compute node reboot, 174 February 1, 2016 compute node total failures, 178 configuration management, 182 databases, 184 determining component affected, 186 hardware, 183 instances, 174 rebooting following, 172 reporting bugs, 254 schedule of tasks, 185 storage node reboot, 180 storage node shut down, 180 swift disk replacement, 181 uninstalling, 189 volumes, 178 manila, melange, memcached, Message サービス zaqar, Meta-Data Server (MDS), metadata instance metadata, 159 metering/telemetry, 224 migration, 73 mistral, MIT CSAIL (Computer Science and Artificial Intelligence Lab), 278 Mitaka, Modular Layer 2 (ML2) neutron プラグ イン, monasca, monitoring intelligent alerting, 227 metering and telemetry, 224 OpenStack-specific resources, 224 process monitoring, 222 resource alerting, 223 trending, 228 (参照 logging/monitoring) Monitoring, MultiNic, 86, murano, 388 OpenStack 運用ガイド N February 1, 2016 Nagios, 222 namespaces, troubleshooting, 212 Nebula, NeCTAR Research Cloud, 277 netadmin, NetApp ボリュームドライバー, network design network topology multi-NIC provisioning, 86 network namespaces, troubleshooting, 212 Networking API, networks configuration management, 182 neutron Networking API, neutron プラグイン, neutron マネージャー, python-neutronclient, 92 Newton, Nexenta ボリュームドライバー, NIC (network interface cards), 81 No ACK, nodes adding, 183 storage nodes, 180 nova Compute API, deprecation of, 301 nova-network, python-novaclient, 92 O Object Storage adding nodes, 184 backup/recovery of, 234 customization of, 240 geographical considerations, 264 Object Storage API, 67 quota setting, 111 最もシンプルなアーキテクチャー, 4 objects persistent storage of, 67 ストレージの決定, 68 Ocata, Oldie, Open Cloud Computing Interface (OCCI), Open Virtualization Format (OVF), Open vSwitch, neutron プラグイン, troubleshooting, 210 Open vSwitch (OVS) エージェント, OpenLDAP, OpenStack basics of, documentation, 253 コード名, モジュールタイプ, 1 OpenStack community additional information, 259 contributing to, 258 customization and, 237 getting help from, 253 reporting bugs, 254 security information, 258 use cases CERN, 280 DAIR, 279 MIT CSAIL, 278 NeCTAR, 277 working with roadmaps aspects to watch, 300-304 influencing, 299 release cycle, 297 OpenStack Networking (neutron) third-party component configuration, 22 コンポーネント概要, 11 設定指針, 11 詳細, 13 OpenStack コミュニティー 参加, 258 openSUSE, 389 OpenStack 運用ガイド February 1, 2016 Orchestration, orphan, Oslo, cloud controller or storage proxy, 172 compute node, 174 recon, recovery, 234 (参照 backup/recovery) Red Hat Enterprise Linux (RHEL), Reliable, Autonomic Distributed Object Store (RADOS), Remote Procedure Call (RPC), resources generic vs. OpenStack-specific, 224 resource alerting, 223 RESTful Web サービス, rings ring builders, 234 Role Based Access Control (RBAC), P Paste framework, 240 path failures, 201 path MTU discovery (PMTUD), PCI パススルー, periodic tasks, 262 persistent storage, 67 ping packets, 192 pip ユーティリティ, 92 Platform-as-a-Service (PaaS), preseed, 定義, process monitoring, 222 Project Members tab, 118 projects sharing images between, 126 Puppet, 29, 89, Python, 240, 252, Python Package Index (PyPI), 92 rollbacks preparing for, 266 process for, 272 rootwrap, RPC ドライバー, rsync, rsyslog, 220 RXTX キャップ/クォータ, Q QEMU Copy On Write 2 (QCOW2), Qpid, 41, Quick EMUlator (QEMU), 48, R S RabbitMQ, 41, 219, Rackspace Cloud Files, RADOS Block Device (RBD), radvd, RAID (Redundant Array of Independent Disks), 30 rally, RAM オーバーコミット, 53, RAM フィルター, raw 形式, RDO (Red Hat Distributed OpenStack), 4, 11 reboot S3 ストレージサービス, sahara, SAML アサーション, scaling burn-in testing, 66 capacity planning, 65 schedulers customization of, 247 secure shell (SSH), security groups, 162 security issues configuration options, 263 failed instance data inspection, 175 390 OpenStack 運用ガイド February 1, 2016 middleware example, 240 reporting/fixing vulnerabilities, 258 scheduler example, 247 SELinux, senlin, servers 不安定性の回避, 65 service restoration, 181 shared file system storage shared file systems service, 67 Shared File Systems API, Shared File Systems サービス, Sheepdog, 79, Simple Cloud Identity Management (SCIM), Single-root I/O Virtualization (SRIOV), SmokeStack, SolidFire Volume Driver, solum, SPICE (Simple Protocol for Independent Computing Environments), SQL-Alchemy, SQLite, StackTach, 224, StaticWeb, storage block storage, 140, 163, 233 commodity storage, 75 geographical considerations, 264 object storage, 67 storage proxy maintenance, 172 インストーラーストレージ・ソ リューション, 49 ストレージワーカー, 38 ファイルレベル, 73 storage node, 180 SUSE Linux Enterprise Server (SLES), swauth, swift Object Storage API, 67, python-swiftclient, 92 swift middleware, 240 swift ストレージノード, swift プロキシサーバー, swift ミドルウェア, swift All in One (SAIO), sysadmin, systems administration (参照 user management) T tailing logs, 187 tcpdump, 201 Telemetry, telemetry/metering, 224 TempAuth, Tempest, TempURL, testing burn-in testing, 66 functional testing, 246 tombstone, Torpedo, trending monitoring cloud performance with, 228 report examples, 229 vs. alerts, 229 TripleO, troubleshooting burn-in testing, 66 checking interface states, 191 detecting path failures, 201 DNS issues, 209 getting help, 253 iptables, 203 network namespaces, 212 nova-network database, 204 nova-network DHCP, 205 nova-network traffic, 192 Open vSwitch, 210 OpenStack traffic, 193-200 391 OpenStack 運用ガイド trove, U Ubuntu, 4, uninstall operation, 189 upgrading controlling cost of, 266 final steps, 271 pre-upgrade testing, 266 preparation for, 266 process overview, 266 rolling back failures, 272 use cases CERN, 280 DAIR, 279 MIT CSAIL, 278 NeCTAR, 277 user data, 161 user management associating users with projects, 118 creating new users, 116 handling disruptive users, 123 User Mode Linux (UML), user training block storage, 140, 163 flavors, 128 floating IPs, 162 images, 125 instances, 157, 169 security groups, 162 February 1, 2016 VM Remote Control (VMRC), VMware API, 48, VNC プロキシ, volume maintenance/debugging, 178 vSphere, vulnerability tracking/management, 258 W weight, 65 Workflow サービス mistral, X Xen, Xen API Xen Cloud Platform (XCP), Xen Storage Manager Volume Driver, XenServer ハイパーバイザー, 48, XFS, Z zaqar, ZeroMQ, ZFS, 78 Zuul, V VIF UUID, Virtual Disk Image (VDI), virtual extensible LAN (VXLAN), Virtual Hard Disk (VHD), Virtual Network Computing (VNC), VirtualBox, VLAN ネットワーク, VLAN マネージャー, VLANネットワーク, 85 VM disk (VMDK), 392
© Copyright 2024 Paperzz