cedec2015_openstack で運用する private cloud の泥臭い(リアル)な話
TRANSCRIPT
OpenStack で運用する Private Cloud の泥臭い (リアルな) 話
グリー株式会社 インフラストラクチャ本部 大山 裕泰 (オオヤマ ヒロヤス)
CEDEC 2015- 20150827
自己紹介
オオヤマ ヒロヤス
大山 裕泰開発 - オリジナルカーネル OnixOS 開発 2008 年下期 IPA 未踏事業採択 (スーパークリエータ認定)
- OpenFlow Controller JAXON Author
- OpenFlow Controller Trema Contributorhttp://www.noxrepo.org/2012/03/335
著書 - 次世代ネットワーク制御技術 OpenFlow入門 [著者 石井秀治, 大山裕泰, 河合栄治] [発行 株式会社KADOKAWA アスキー・メディアワークス]
登壇 - JANOG33: ゴチャゴチャネットワークの可視化・OAM (高嶋隆一, 大山裕泰, 高橋正和) - JANOG34: DCネットワークの新時代? -ホワイトボックススイッチの利用可否-
(石田渉, 大山裕泰)
オオヤマ ヒロヤス
大山 裕泰
開発環境用 Private Cloud の話
概要編
目的 / 特徴* エンジニア向け開発環境の提供 - OpenStack (Juno) を利用
Service Quality
Functionality/AgilityAWS
オンプレミス環境
個人用開発マシン
従来の開発環境基盤
かつての開発環境基盤* XCP -> XenServer - インスタンスの運用を運用者が実施 - 社内で運用できる人がわずか - 保守的な運用
* 物理マシン - 管理コストが高い - サポートなし
OpenStack 導入による変化* 運用コストの低減 / デリバリータイムの短縮 - インスタンスの運用をユーザがオンデマンドで実施
* 管理コストの低減 - 誰がどのリソースをどれだけ使っている (使える) か システマチックに管理可能
(そもそも)
OpenStack とは?
概要* クラウド環境を作るための OpenSource Software (OSS) - 特定のベンダーに依存しない運営体制 (OpenStack Foundation) - 協賛・サポート企業を含め 500 社が参画 ( Intel, HP, IBM, Rackspace, Redhat, SUSE, AT&T, Canonical 他多数 )
* 国内の多くの企業が OpenStack を積極採用 - Fujitsu, NTT Com, GMO, Yahoo! Japan, Rakuten, GREE 他多数
[出典] “So, What is the Core of OpenStack?” より
利用している部分
全体像
主なコンポーネント* nova - 仮想マシンリソースの管理を行うソフトウェアコンポーネント - Amazon EC2, S3 と API 互換を持つ
* keystone - OpenStack の統合認証機構 - 各コンポーネントに対して HTTP 経由での認証インターフェイスを提供 - LDAP を含む様々な認証手法をサポート
* glance - 全てのデータアセット (主にインスタンスのイメージ) を管理するコンポーネント
主なコンポーネント* neutron - NaaS (Network as a Service) を実現するコンポーネント - 仮想 L2 / L3 ネットワークの管理・構築を行う - その他 SDN, SecurityGroup 等をサポート
* cinder - BlockStorage Service を提供するコンポーネント - VM インスタンスに対して仮想 BlockStorage デバイスを提供する - バックエンドのストレージシステムをユーザに対して抽象化
* horizon - ダッシュボードクライアント (WEB UI) を提供するコンポーネント
Private Cloud の
環境 / 構築手法について
システム概要* ハードウェア - (ほぼ) 全ての機器を社内資産から流用 - 激安で Private Cloud 環境を構築
機材に掛けたコスト
+
Controller (Master) Nova, Neutron(Server), Glance, Cinder Horizon, RabbitMQ, MySQL, ...
Controller (Slave) Nova, Neutron(Server), Glance, Cinder Horizon, RabbitMQ, MySQL, ...
VRRP
Network (Master) Neutron (L3-Agent, DHCP-Agent, Metadata-Agent)
Network (Slave) Neutron (L3-Agent, DHCP-Agent, Metadata-Agent)
Compute Node Compute Node Compute Node Compute Node Monitoring (sensu) Monitoring (sensu)
* ソフトウェア / サーバ構成 - OpenStack (Juno) を使用
- 2014/10 リリース。最新版は Kilo (2015/05 リリース)
システム概要
chef によるプロビジョニング* “The Environment Cookbook Pattern” に基づいた手法 - 複数の組織・チームによる cookbook 開発のための手法として注目 - cookbook を複数のレイヤに分割。コードの可読性 / 再利用性が向上
Environment
Wrapper
Application
WrapperWrapper
ApplicationApplication
Base
chef によるプロビジョニング* “The Environment Cookbook Pattern” に基づいた手法 - 複数の組織・チームによる cookbook 開発のための手法として注目 - cookbook を複数のレイヤに分割。コードの可読性 / 再利用性が向上
Environment
Wrapper
Application
WrapperWrapper
ApplicationApplication
Base
* 各コンポーネント / アプリケーション毎に存在 * コンポーネントを構築する処理のみ記述する (但し、他のサーバと関連する処理は行わない)
chef によるプロビジョニング* “The Environment Cookbook Pattern” に基づいた手法 - 複数の組織・チームによる cookbook 開発のための手法として注目 - cookbook を複数のレイヤに分割。コードの可読性 / 再利用性が向上
Wrapper
Application
WrapperWrapper
ApplicationApplication
Base* Application cookbook 毎に存在 * Application に特化した Attributes を記述
Environment
chef によるプロビジョニング* “The Environment Cookbook Pattern” に基づいた手法 - 複数の組織・チームによる cookbook 開発のための手法として注目 - cookbook を複数のレイヤに分割。コードの可読性 / 再利用性が向上
Environment
Wrapper
Application
Wrapper
ApplicationApplication
Base
* システムに一つだけ存在し、役割毎にレシピを記述 * Wrapper cookbook を呼び出す処理 “のみ” を記述 * システム全体の Attributes を記述
Wrapper
chef によるプロビジョニング* “The Environment Cookbook Pattern” に基づいた手法 - 複数の組織・チームによる cookbook 開発のための手法として注目 - cookbook を複数のレイヤに分割。コードの可読性 / 再利用性が向上
Wrapper
Application
Wrapper
ApplicationApplication
Base
* システムに一つだけ存在 * 全ての環境に共通な設定を記述
Environment
Wrapper
運用設計について
テナント設計* テナント (Tenannt) - リソース (CPU, Memory, Storage, Network, ... ) を管理する存在
* 個人アカウント毎にテナントを作成 - リソース制限等の管理を個人毎に行うため
Quota 設定* 特定のユーザによるシステムリソースの枯渇問題の回避
* ユーザ毎にリソースの上限を個別に変更 - 多くのリソースを必要とするユーザには、多くを割り当て 多くのリソースを必要としないユーザには、少ないリソースを割り当てる
* テナントに対して、各種リソースの上限値を設定 - CPU コア数 - Floating IP アドレス数 - BlockStorage 容量
HostAggregate* 異なるスペックのサーバリソースを効率的に利用 - 各サーバの種類毎に VM の収容設計を実施
物理マシンのリソースキャパシティ
← 仮想マシンの消費リソース
HostAggregate* 異なるスペックのサーバリソースを効率的に利用 - 各サーバの種類毎に VM の収容設計を実施
Resource Fragment
HostAggregate* 異なるスペックのサーバリソースを効率的に利用 - 各サーバの種類毎に VM の収容設計を実施
物理マシン
仮想マシンc4m32s30
c8m64s60
c12m4s30
c24m8s60
c1m2s10
c2m4s20
c(コア数) m(メモリサイズ[GB]) s(ストレージサイズ)
HA cHA bHA a
HostAggregate* 異なるスペックのサーバリソースを効率的に利用 - 各サーバの種類毎に VM の収容設計を実施
物理マシン
仮想マシンc4m32s30
c8m64s60
c12m4s30
c24m8s60
c1m2s10
c2m4s20
BlockStorage* 高可用性で大容量のストレージの提供 - ダッシュボードから ボリュームの切出し / アタッチ / デタッチ を実施 - インスタンスからはブロックデバイスとして認識される
/dev/vdb
裏セグ for BlockStorage* BlockStorage のトラフィックを分離させる - FlexLink により裏セグ帯域を 4Gbps に拡張
BlockStorage 用ネットワークセグメント
データトラフィック用ネットワークセグメント
グリーの Private Cloud での
オリジナルカスタマイズ
DNS 連携* インスタンスにドメイン名を設定したい * 実現方法 - cloud-init にレコード登録処理を仕込むやり方 - Neutron l3-plugin にレコード登録/削除処理を仕込むやり方 (GREE 方式) - designate を使うやり方
DNS 連携 [1/3]* ネットワーク構成 - シングルフラットネットワーク / DHCP による IP アドレスの割り当て
DHCP サーバ
OpenStack インスタンス
DNS 連携 [1/3]* 制約 / 特徴 - インスタンスが起動するまで IP アドレスがわからない
* 実現方法 - インスタンス起動時に実行される処理機構 (cloud-init) に レコード登録処理を追加する
DNS
依頼 作成
登録
DHCP サーバ
IP アドレス 取得
DNS 連携 (GREE 方式) [2/3]* ネットワーク構成 - Network Node を用いた (OpenStack Networking) 構成
* 特徴 - Floating IP アドレスを用いてインスタンスにアクセスする
External Network
Tenant Network
IPaddr: A’ (Floating IP Address)
OpenStack インスタンス DHCP サーバ
IPaddr: A
Neutron
PowerDNS
dns-auto-register
L3GREEPlugin
PowerDNS SDK
Aレコードの登録/削除
CNAMEレコードの登録/削除
DNS 連携 (GREE 方式) [2/3]
Amazon Route53
API Call
* Designate を使用 - DNSaaS を提供する OpenStack プロジェクト (Incubated プロジェクト) - MiniDNS が DNS プロトコル (NOTIFY, AXFR) を喋ってサーバと連携 - スケーラブルな機構。eBay / PayPal で採用 (*1)
DNS 連携 [3/3]
(*1) Adopting Designate for Managing Mission Critical eBay/PayPal DNS, OepnStack Summit 2015
DNS 連携 [3/3]
Neutron
Designate
dashboardDesignate
Sink
any DNS
miniDNS
AXFR
運用について - トラブル編:過去に遭遇したトラブルなど -
過去に遭遇したトラブル - 1* 突然、あらゆる操作がエラーになる問題 - 現象:突然コントローラがあらゆる操作を受け付けなくなる - 原因:コントローラノードのストレージが溢れる ユーザがスナップショットを大量に取得 - 教訓:全ての機能を提供するのではなく、必要な機能を提供する
Controller Node (glance)
image snapshot
過去に遭遇したトラブル - 2* 謎のアプリケーションエラー問題 - 現象:オブジェクトの生成に失敗する - 現象:mmap に失敗する - 現象:発生しない VM もある
- 原因:ホストでメモリエラーが発生していた - 教訓:物理監視大切!
過去に遭遇したトラブル - 3* VM が時々起動しない問題 - 現象1:特定の物理ホスト群に対するインスタンスの起動が “たまに” 失敗 - 現象2:現象1 が再現するホスト群とそうでないホスト群が存在
HA bHA a
物理マシン
仮想マシン c8m64s60 c24m8s60
よく再現する 全く再現しない
過去に遭遇したトラブル - 3* VM が時々起動しない問題 - 現象1:特定の物理ホスト群に対するインスタンスの起動が “たまに” 失敗 - 現象2:現象1 が再現するホスト群とそうでないホスト群が存在
HA bHA a
物理マシン
仮想マシン c8m64s60 c24m8s60
よく再現する 全く再現しない
過去に遭遇したトラブル - 3
(*1) https://bugs.launchpad.net/nova/+bug/1333654
Neutron Server Compute Node
network-vif-plugged
* VM が時々起動しない問題 - 現象:特定の物理ホスト群に対するインスタンスの起動が “たまに” 失敗 - 原因:neutron-server から送られるイベント “network-vif-plugged" を compute ノードが取りこぼす (*1)
過去に遭遇したトラブル - 3
(*1) https://bugs.launchpad.net/nova/+bug/1333654
Neutron Server Compute Node
network-vif-plugged
* VM が時々起動しない問題 - 現象:特定の物理ホスト群に対するインスタンスの起動が “たまに” 失敗 - 原因:neutron-server から送られるイベント “network-vif-plugged" を compute ノードが取りこぼす (*1)
過去に遭遇したトラブル - 3* VM が起動するまでの処理の仕組み - イメージファイルの取得 (Glance) - ボリュームの参照 (Cinder) - ポート / セキュリティグループの設定 (Neutron-server)
過去に遭遇したトラブル - 3
(*1) https://bugs.launchpad.net/nova/+bug/1333654
Neutron Server Compute Node
network-vif-pluggednetwork-vif-unplugged
* network-vif-plugged イベントを取りこぼす原因 - ほぼ同時にインスタンスの作成・削除を実施した際に実施される 複数のイベントを同時に送る実装の問題 (*1)
過去に遭遇したトラブル - 3* VM が時々起動しない問題 - 現象1:特定の物理ホスト群に対するインスタンスの起動が “たまに” 失敗 - 現象2:現象1 が再現するホスト群とそうでないホスト群が存在
HA bHA a
物理マシン
仮想マシン c8m64s60 c24m8s60
よく再現する 全く再現しない
過去に遭遇したトラブル - 3* ホストスケジューラの仕組み (*1) - Filtering :起動できるホストの選定 - Weighting:起動するホストの重み付け
(*1) 詳細:ホストスケジューラの仕組み - GREE Engineers' Blog(出典:OpenStack Developer Manual -Filter Scheduler-)
振り返り / さいごに
振り返り* OpenStack は誰もが簡単に使えるものでもない - 機能開発においてはエンジニアリングスキルが求められる - 安定運用においては運用スキル・ナレッジが求められる
(上記を満たす組織環境において) * 高機能・柔軟な IaaS クラウド環境が獲得可能 - 国内外の OpenStack 利用企業において共通している - 多彩な要件に対して柔軟に対応可能
さいごに* 腕っこきのエンジニアを擁する企業さまへ - OpenStack により高機能・安定・柔軟な IaaS クラウド環境を構築し インフラ基盤を Next Level に成長させてみませんか
* これまで支えてくれた開発 / 運用コミュニティの方々へ感謝 - OpenStack ユーザ会の方々 - 企業の垣根を越えてさまざまな情報を共有してくれた方々 - VALinux さん, CTC さん, 楽天さん (などなど)