Sensu,Chef,OpenStack,Fog を使ったオレオレオートスケーラを作ってみた!

こんにちは。@jedipunkz です。 今まで監視システムの Sensu やクラウドプラットフォームの OpenStack、コンフィギュ レーションマネージメントツールの Chef やクラウドライブラリの Fog 等使ってきま したが、これらを組み合わせるとオレオレオートスケーラ作れるんじゃないか?と思い、 ちょろっと作ってみました。 ちなみに自分はインフラエンジニアでしかも運用の出身なので Ruby に関しては初心者 レベルです。Chef で扱っているのと Rails アプリを作った経験はありますが、その程 度。Fog というクラウドライブラリにコントリビュートしたことはアリますが..。ちな みに Fog のコントリビュート内容は OpenStack Neutron(当時 Quantum) の仮想ルータ の操作を行う実装です。 そんな自分ですが…設計1周間・実装1周間でマネージャと CLI が出来ました。 また暫く放置していたマネージャと CLI に WebUI くっつけようかなぁ?と思って sinatra の学習を始めたのですが、学習を初めて 1.5 日で WebUI が動くところまで行 きました。何故か?Ruby には有用な技術が揃っているから・・!(´;ω;`)ブワッ オレオレオートスケーラ ‘sclman’ の置き場所 https://github.com/jedipunkz/sclman スクリーンショット +++ 構成は? +-------------- public network +-------------+ | |sclman-api.rb| +----+----+---+ | sclman.rb | | vm | vm |.. | |sclman-cli.rb| +-------------+ +-------------+ +-------------+ +-------------+ | openstack | | chef server | | sensu server| | workstation | +-------------+ +-------------+ +-------------+ +-------------+ | | | | +---------------+---------------+---------------+--------------- management network ‘sclman’ っていう名前です。上図の workstation ノードで稼働します。処理の流れは ...

Journal 用 SSD を用いた Ceph 構成の構築

こんにちは、@jedipunkz です。 前回、‘Ceph のプロセス配置ベストプラクティス’ というタイトルで記事を書きました。 http://jedipunkz.github.io/blog/2014/01/29/ceph-process-best-practice/ 今回はこの記事にあるポリシに従って下記のような特徴を持った構成を作る手順を具体 的に書いていきたいと思います。 ceph01 - ceph04 の4台構成 ノードに HDD 2台搭載されていることを前提 (/dev/sdb, /dev/sdc) ノードに Journal 用 SSD 1台搭載されていることを前提 (/dev/ssd) ceph04 は mds サービス稼働 ceph05 は ceph-deploy を実行するためのワークステーション 最終的に ceph04 から Ceph をマウントする mon は ノード単位で稼働 osd は HDD 単位で稼働 mds は ceph04 に稼働 構成 : ハードウェアとノードとネットワークの関係 public network +-------------------+-------------------+-------------------+-------------------+--------- | | | | | +--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+ | ceph01 | | ceph02 | | ceph03 | | ceph04 | | ceph05 | | +-----+ +-----+ | | +-----+ +-----+ | | +-----+ +-----+ | | | | | | | sdb | | sdc | | | | sdb | | sdc | | | | sdb | | sdc | | | | | | | +-----+-+-----+ | | +-----+-+-----+ | | +-----+-+-----+ | | | | | | | ssd | | | | ssd | | | | ssd | | | | | | | +-------------+ | | +-------------+ | | +-------------+ | | | | | +--------+--------+ +--------+--------+ +--------+--------+ +-----------------+ +-----------------+ | | | cluster network +-------------------+-------------------+------------------------------------------------- 構成 : プロセスとノードとネットワークの関係 public network +-------------------+-------------------+-------------------+-------------------+--------- | | | | | +--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+ | ceph01 | | ceph02 | | ceph03 | | ceph04 | | ceph05 | | +-----+ +-----+ | | +-----+ +-----+ | | +-----+ +-----+ | | +-------------+ | | | | | osd | | osd | | | | osd | | osd | | | | osd | | osd | | | | mds | | | | | +-----+-+-----+ | | +-----+-+-----+ | | +-----+-+-----+ | | +-------------+ | | | | | mon | | | | mon | | | | mon | | | | | | | +-------------+ | | +-------------+ | | +-------------+ | | | | | +--------+--------+ +--------+--------+ +--------+--------+ +-----------------+ +-----------------+ | | | cluster network +-------------------+-------------------+------------------------------------------------- 注意 : 上記の図だと ssd : mon が対に見えますが、そうではありません。 ...

Ceph のプロセス配置ベストプラクティス

Ceph はブロック型の分散ストレージファイルシステムです。POSIX のファイルシステ ムとしてマウント出来ます。Linux の Kernel ドライバや FUSE ドライバを用いてマウ ントします。またブロックデバイスとしてマウントする方法もあります。 だいぶ前ですが、Ceph に関する記事を以前下記の通り書きました。 http://jedipunkz.github.io/blog/2013/05/25/ceph-cluster-network/ http://jedipunkz.github.io/blog/2013/05/11/ceph-deploy/ Ceph の構築方法について記したブログだったのですが、今まで mon, osd, mds の各プ ロセスをそれぞれ何台のノードに対して配置し、またそれぞれのプロセス幾つを何に対 して配置するのか?という疑問が付きまとわっていました。node, disk, process のそ れぞれの数の関係について知りたいなぁと思っていました。幾つかのドキュメントを読 んでいて、ぼんやり見えてきた事があるのでそれを今回はまとめたいと思います。 また、皆さん気になるトコロだと思われる容量設計についても軽く触れたいと思います。 参考資料 http://ceph.com/docs/master/rados/configuration/mon-config-ref/ http://www.sebastien-han.fr/blog/2013/12/02/ceph-performance-interesting-things-going-on/ 各要素の数の関係 ハードウェア要素である node, disk(hdd), ssd そしてソフトウェア要素である mon, osd, mds の数の関係はどのようにするべきか?基本となる関係は 1 mds process / node 1 mon process / node 1 osd process / disk n jornal ssd device / disk / node だと考えられます。僕が今のところ理想かなぁと思っている構成をまとめたいと思いま す。 下記の図がそれです。 +------------------------+ | client | +------------------------+ | +--------------------------+--------------------------+-------------------------------+------------------------- | | | | public network +------------------------+ +------------------------+ +------------------------+ +------------------------+ | mon | | mon | | mon | | mds | +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------------------------+ | osd | | osd | | osd | | osd | | osd | | osd | | osd | | osd | | osd | | | +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+ | | | disk | | disk | | disk | | disk | | disk | | disk | | disk | | disk | | disk |....> | | +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+ +------+scale | node | | ssd | | ssd | | ssd | | | +------------------------+ +------------------------+ +------------------------+ | | | node | | node | | node | | | +------------------------+ +------------------------+ +------------------------+ +------------------------+ | | | | +--------------------------+--------------------------+-------------------------------+------------------------- cluster network mds と node の関係 mds はリモートクライアントへのファイルシステムサービスの提供を行うことや特性が 全く異なることから別ノードに切り出しました。また mds は幾つかのノードで稼働さ せる事も可能。が、mds はそれぞれのサービスを HA 組む仕組みは持っていないので どれか一方の mds をクライアントは指し示す必要があり、その mds が停止すれば直 ちに障害に発展します。 ...

第17回 OpenStack 勉強会で話してきました

こんにちは。@jedipunkz です。 昨晩、第17回 OpenStack 勉強会が開催されました http://connpass.com/event/4545/ ここで発表をしてきましたぁ!発表タイトルは “rcbops/chef-cookbooks” です。 何を発表したかと言うと詳しくは上記のスライドを見ていただくとして、簡単に言うと “RackSpace 社のエンジニアが管理している Chef Cookbooks でOpenStack 構成を作ろ う” ってことです。 今日知ったのですがどうも昨晩は初心者向けの勉強会という位置付けだったらしく..少 しだけディープな話題を話してしまったかもしれません!すいません!>< でもとても楽しく発表出来ましたし、逆に質問のコーナーで最新の情報も教えてもらえ たり!なんと Havana 対応の v4.2.0 以降では Swift の Cookbooks が消えてしまった とか!… 皆 Swift 好きくないの?…; ; rcbops/chef-cookbooks はずっと追っていますが、ものすごいスピードで開発進んでい るので、今後ぜひみなさん使ってみて下さいー。 最後に詳しい利用方法を記した僕のブログの URL を貼り付けておきます。 OpenStack Havana を Chef でデプロイ http://jedipunkz.github.io/blog/2013/11/17/openstack-havana-chef-deploy/ Swift HA 構成を Chef でデプロイ http://jedipunkz.github.io/blog/2013/07/26/swift-ha-chef-deploy/ 実用的な Swift 構成を Chef でデプロイ http://jedipunkz.github.io/blog/2013/10/27/swift-chef/

Chef で自律的クラスタを考える

こんにちは。@jedipunkz です。 Serf の登場があったり、ここ最近オーケストレーションについて考える人が増えた気 がします。システムをデプロイしてその後各ノード間の連結だったりも同じ Chef, Puppet 等のコンフィギュレーションツールで行うのか?全く別のツールで?.. 最近 Serf というツールの登場がありました。 僕も Serf を触ってつい先日ブログに書きました。有用なツールだと思います。シ ンプルだからこそ応用が効きますし、リアルタイム性もあり、将来的に異なるネットワー クセグメント上のノードとも連結出来るようになりそうですし、とても期待です。 話が少し飛びますが.. いつも Rebuild.fm を楽しく聞いているのですが Immutable Infrastructure の話題の 時にオーケストレーションの話題になって、どうも ‘Chef でも自律的なクラスタを組 むことが認知されていないのでは?’ と思うようになりました。もちろん Chef でやる べき!とは言い切りませんし、今後どうなるかわかりません。Opscode の中の人も ‘オー ケストレーションは自分でやってね’ というスタンスだったとずいぶん前ですが聞きま した。Serf を等のオーケストレーションツールを使う使わないの話は今回はしないの ですが Chef でも自律的クラスタを組むことは出来ますよ〜というのが今回の話題。 まえがきが長くなりました。 今回は Chef で自律的クラスタを構成する方法を記したいと思います。 haproxy 等を利用すれば尚良いと思いますが、よりクラスタを組むのが簡単な nginx を今回は利用したいと思います。 https://github.com/opscode-cookbooks/nginx 構成 ‘web’ という Role 名と ’lb’ という Role 名で単純な HTTP サーバとしての nginx ノードを複数台と、ロードバランサとしての nginx ノードを1台でクラスタを構成しま す。また共に environment 名は同じものを利用します。別の environment 名の場合は 別クラスタという区切りです。 ...

CoreOS etcd のクラスタとその応用性

こんにちは。@jedipunkz です。 皆さん CoreOS は利用されたことありますか?CoreOS は軽量な docker との相性の良 い OS です。下記が公式サイト。 http://coreos.com/ 特徴としては下記の3つがあります。 etcd systemd docker ここではこの中の etcd について注目していきたいと思います。etcd はクラスタエイ ブルな KVS データベースです。コンフィギュレーションをクラスタ間で共有すること がなので、オーケストレーションの分野でも期待出来るのでは?と個人的に感じていま す。今回は etcd のクラスタ構成構築の手順とその基本動作の確認、またどう応用出来 るのか?について記していきたいと思います。 参考 URL http://coreos.com/using-coreos/etcd/ https://github.com/coreos/etcd ビルド go 1.1 or later をインストールして etcd のコンパイル準備を行います。Ubuntu Saucy のパッケージを用いると容易に行えます。 % apt-get -y install golang coreos/etcd を取得しビルド % git clone https://github.com/coreos/etcd % cd coreos % ./build % ./etcd --version v0.2.0-rc1-60-g73f04d5 CoreOS の用意 ここではたまたま手元にあった OpenStack を用いて CoreOS のイメージを登録してい みます。ベアメタルでも可能ですのでその場合は手順を読み替えて作業してみてくださ い。OpenStack 等クラウドプラットフォームを利用する場合は metadata サービスが必 須となるので注意してください。 ...

Ironic でベアメタル OpenStack !..の一歩手前

こんにちは。@jedipunkz です。 アドベントカレンダーの季節がやって参りました。 Ironic を使って OpenStack でベアメタルサーバを扱いたい!ということで色々とやっ ている最中 (今週から始めました..) なのですが、まだまだ incubator プロジェクト ということもあって実装が追い付いていなかったりドキュメントも揃っていなかったり とシンドい状況w ここ2日程で集めた情報を整理するためにも 2013年 OpenStack アド ベントカレンダーに参加させてもらいますー。 参考資料のまとめ まずは公式 wiki ページ。逆に言うとここに記されている以上の情報は無いんじゃ?あ とはコード読め!の世界かも..。 https://wiki.openstack.org/wiki/Ironic devtest_undercloud です。上の資料の中でも手順の中で度々こちらにジャンプしている。 同じく incubator プロジェクトの TrippleO のデベロッパ用ドキュメントになっている。 上記の公式 wiki の情報を合わせ読むことで Ironic を使ったデプロイの手順に仕上がります。 http://docs.openstack.org/developer/tripleo-incubator/devtest_undercloud.html ソースコードとドキュメント。あとでドキュメント作成方法を記しますが、こちらを取 得して作成します。 https://github.com/openstack/ironic ドキュメントサイト。まだ情報が揃っていません。よって上の github から取得したモ ノからドキュメントを作る方法を後で書きます。 http://docs.openstack.org/developer/ironic/ launchpad サイト。全てのバグ情報やブループリント等が閲覧出来ます。まだ絶賛開発 中なので読む必要があると思います。 https://launchpad.net/ironic ドキュメントを作る +++ 公式 ドキュメントサイトは一応、上記の通りあるのですが、ドキュメントも絶賛執筆 中ということで所々抜けがあります。また公式ドキュメントサイトがどのスパンで更新 されているか分からないので、いち早く情報をゲットしたい場合ドキュメントを作る必 要があると思います。ということで、その作り方を記していきます。尚、公式 wiki サ イトにも手順が載っていますが Vagrant と Apache を用いた方法になっているので、 普通に Ubuntu サーバが手元にある環境を想定して読み替えながら説明していきます。 必要なパッケージのインストールを行います。 % sudo apt-get update % sudo apt-get install -y git python-dev swig libssl-dev python-pip \ libmysqlclient-dev libxml2-dev libxslt-dev libxslt1-dev python-mysqldb \ libpq-dev % sudo pip install virtualenv setuptools-git flake8 tox % sudo easy_install nose ソースコード・ドキュメントを取得します。 ...

sensu-chef で監視システム Sensu を管理 #2

こんにちは。@jedipunkz です。 以前、Sensu を Chef で管理する方法について書きました。 http://jedipunkz.github.io/blog/2013/06/20/sensu-chef-controll/ これは今年(2013)の6月頃の記事ですが、この時はまだ sensu-chef を include して使う別の Chef Cookbook が必要でした。また Redis 周りの Cookbooks が完成度あまく、またこれも 公式とは別の Cookbooks を改修して再利用する形でした。この作業は結構しんどかっ た記憶があるのですが、最近 GlideNote さんのブログを読んで( ゚д゚)ハッ!と思い、 sensu-chef を再確認したのですが、だいぶ更新されていました。 下記が sensu-chef です。 https://github.com/sensu/sensu-chef この Chef Cookbook 単体で利用できる形に更新されていて、plugins, checks 等は Recipe に追記することで対応可能になっていました。早速利用してみたので簡単に使 い方を書いていきます。 下記が Sensu の管理画面です。最終的にこの画面に監視対象のアラートが上がってきます。 {% img /pix/sensu.png %} 使い方 sensu-chef を取得する。chef-repo になっています。 % git clone https://github.com/sensu/sensu-chef.git ~/chef-repo-sensu bundle にて Gemfile に記述の在る gem パッケージをインストールします。 % cd ~/chef-repo-sensu % bundle install .chef/ 配下の設定は割愛します。chef サーバの情報に合わせて設定します。 ...