おがさわらなるひこのオープンソースとかプログラミングとか印刷技術とか

おがさわらなるひこ @naru0ga が技術系で興味を持ったりなんだりしたことをたまーに書くブログです。最近はてなダイアリー放置しすぎて記事書くたびにはてな記法忘れるのではてなブログに移行しました。

クリエイティブ・コモンズ・ライセンス
特に断りがない場合は、本ブログの筆者によるコンテンツは クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。

カーネル読書会番外編:Ganeti: An Opensource Project at Google

Google で社内システム運用をやってる Iustin Pop 氏*1によるセミナー。
クラスタリング環境における仮想環境管理システム Ganeti について、「カーネル読書会番外編」として行われたので行ってきた。


システム管理なんてまったく自分の専門外だし、知識もないし、行っていいのかな、と思ったけど、行かずに後悔するよか行って後悔するほうがいいよなってことで行ってきたのです。

結論から言えば、非常に面白くかつ刺激的でした。
当たり前だけど知らないことを知るから勉強会なわけで、そりゃある程度ドメインナレッジがあればもっといろんなことを知ったり、自分で考えたりできるんだろうけど、フリーで行っても、やっぱり新しいことを知ることそのものが楽しいんだな、と思ったんでありました。

急遽開催されたイベントだけど、アレンジしてくれた関根さん、アナウンスしてくれたよしおかさんに感謝です。


以下メモ書きを元に講演要約しますが、ぜんぜん知らない分野で、なおかつオール英語で、体調不良で脳みそが半ば停止状態で、しかもプレゼンテーション資料が vi で開いたアジェンダのみというステキすぎる状態だったので、全然間違ってる可能性大だけど、オイラみたいな阿呆は恥をかかないと物を覚えないので、コメントなりトラバなりでガンガン突っ込んでくださいまし。

ちなみに YLUG カーネル読書会番外編: Google Ganetiに参加してきました@TechTalkManiacs および YLUG カーネル読書会番外編: Google Ganeti@kawaguti's chronicle をむちゃくちゃ参考にしてるので感謝とともにリンクを。

なんで作ったの?

  • Google 社内システムの管理用にちょこっとした管理ツールが欲しくなった
  • 物理マシンの CPU やメモリや HDD はまちまち。それを等しく管理するのは大変。Deployment の苦労が膨大。
  • なら仮想化 (Virtualization) だ!
  • 物理マシンをクラスタリングして仮想マシンを提供すれば共有ストレージとかいらないっしょ?*2

Ganeti の特徴

  • ぶっちゃけていってしまえば他のアリモノのテクノロジのラッパー。
  • Virtualization については XenKVMファイルシステムについては LVM を使ってる。分散ストレージは DRDB。それに皮をかぶせた。
  • Ganeti のゴールの一つは Fault Torrelant。Ganeti 自身の update のためにシステムを止めたくはないので、インターフェース抽象化が必要。
  • 今だとサポートしてる仮想OSはDebianUbuntu。無修正で動く。

ここで一個スライドを見せられて構成図が出たのだが自分の字が汚くて読めない……と思ったら Xen Summit Asia のページに PDF でプレゼンが載ってたよ! Xen Summit Asia 事務局さん GJ! ということで4ページを見ましょう。
ていうかこの資料さえあればオイラの日記いらないか?(^^;)

なぜ OSS なのか?

  • たとえば File System のサポートなどをどんどんやってくれることを期待している。
  • DebianUbuntu がカスタマイズなしで動くようになったのもコミュニティのおかげ
  • システム構成はさまざま (仮想マシン・実マシン)。コミュニティで開発していればいろいろな組み合わせで使われ評価される。
  • ただし現状は OSS といっても Google の内部プロジェクトなので プロジェクト参加には Agreement に同意する必要がある
Q
何人ぐらい関わっているのか? Google内外含めて。
A
(ちゃんと聞き取れなかったですけど) そんなには多くない。ユーザもMLを見るかぎりはそれほどではないようだ。なぜならまだテストプロジェクトなのでドキュメントは多くないし、Debian/Ubuntu 以外を動かすにはコードをいじらなければならない現状なので。

DEMO

  • 最初にクラスタに突っ込みたいノード (それぞれの物理マシン) が名前解決できるようにしておく
    • デモ中に /etc/hosts を自動的に書き換えてたみたいだから、DNS じゃなくて hosts じゃなきゃダメなのかな?
  • 次に、クラスタの作成
# gnt-cluster init 
  • ノード管理は gnt-node コマンドで行う
    • あるクラスタに所属するノードのリストを見るのは gnt-node list
    • ノードをクラスタに追加するのは gnt-node add
  • gnt-os でサポート OS を表示できるが、デフォルトだと debootstrap*3 のみ
    • ここらへん管理者が手でしこしこやれば Ubuntu とかも追加できるってことかな?
  • インスタンス (= 仮想マシン) 管理は gnt-instance コマンドにて。
    • add サブコマンドで仮想マシンを作る。
      • 複数ノードを指定する (Primary と Secondary)
      • ディスクサイズなんかも指定するが、今のバージョンだと必ず二つの論理ボリュームができる (/ と swap)。将来はもっと自由度を高める予定。
    • console サブコマンドでインスタンスのコンソールを表示してごにょごにょできる
    • migrate サブコマンドは名前のとおりマイグレート。一個のノードがお亡くなりになって入れ替えても、コマンド一発で (システム止めずに) 入れ替え可能。
Q
すべてのノードは平等なのか?
A
基本的には Primary/Secondary の考え方がある。変更は Primary に入れて、Secondary に migrate する。ただし、コマンド (failover) で簡単に Primary を入れ替え可能。

次のバージョンでは

  • クラスター管理の自由度が上がる
    • 複数の Hypervisor を混在できる*4
    • Primary Node が死んでも migrate できるようにする (今だと運悪く Primary が死ぬと復旧できない)
  • Java ベースの GUI の提供

Q&A

Q
一つのノードは複数クラスタに属することができるか?
A
できない。
Q
Primary / Secondary がいるのは物理的制約?*5
A
そのとおり。主に DRDB による。*6
Q
failover と migrate の違いは?
A
failover は全ノードを止めて reconfigure して up する。migrate はシステムを止めない。そこが大きな違い。

プレゼン後の雑談

せっかくなので直接話したいと思って Iustin さんのところに行ってきた。

聞いたら、Ganeti は (ほぼ) all Python。ステップ数にして wc で30000で、マジコードだといらないコードとかも多いから、大体 20KLOC ぐらいじゃないかって。
そんなもんでできちゃうんだ。ふーん。

基本的には Xen とか LVM とかをラッパークラスでくるんと包んでそれを呼んでるだけなので、細かいチューニングとかはできないっぽい。
「じゃあ機能的には Xen や LVM や DRDB や……が提供している以上のことはできなくて、ただそれを抽象化して管理コストを下げてるって理解でいい?」といったら「そうだよ」とのこと。

大失敗したのはさ、質問に夢中になって、ふと気づいたらピザがぜんぜんなくなってて、Iustin さんずっと俺らと話してたから、なんも食べてないんだよ。ピザ確保して持っていってあげればよかった。ごめんなさい (><)。


Iustin さんに心の中で詫びながら名刺交換した後、仮想化についてしばしみなさんと雑談。

仮想化の一つの応用は QA Lab とかだよねって話。
もうさ、死んだような環境いっぱい持ってんじゃん。QA って。
Windows に限っても、今 Available な環境だけで、全サービスパックの環境とかさ。それの 32/64 とかのバリエーション。
そういうのを物理マシンで持ってる必要なくて、マシン数減らしていけるだけでもメリット大きいよねって話。

ただウチみたいな会社だと Connectivity だけはどうしても実環境で保証しなきゃいけないからダメなんだよ、って言ったら憐れんだ目で見られましたよ。トホホ。


あと Windows 9x の話でやたら盛り上がったなあ。まあ話を振ったのはオレなんだけど。

Win95 のすごいところってさ、DOS 窓で起動してるアプリが叩く割り込み全部捕まえてるんだけど、知らない割り込みがきた場合は「そのまんまハードウェアに投げる」って処理になってること。普通の OS では考えられないよね。だってその処理バグってたらシステムまるごと吹っ飛ぶもん。

あと LPT1: を fopen して書き込むような処理をすると、それを lpt.vxd が捕まえて、わざわざ Windowsスプーラに投げ直すとか。でないと Windows 側と干渉しちゃうから。

そういう汚いことをたくさんやって互換性を保つってのが MS の強みだと。なのに、Vista なんかだと既存との互換性を落とすような変更 (主にセキュリティ回り) をたくさん入れちゃった。セキュリティで散々クレームつけられてきたから気持ちはわからんでもないけど、互換性のない Windows なんかに魅力はないですよと。

そこら辺から「ベストな 9x は Win95 OSR2」「でも OSR 2.5 の USB サポートはゴミだからダメ」「USB 使うなら Win98 SP2」「Me は誰しも認めるダメ OS」「Me と Vista は同じでしょ」「Vista の功績はメモリの値段を下げたことぐらい」「そもそもワープロとネットで最低2GBとかって何よ」「プリンタ屋的には XPS は意味あるんだけど、WPF のみじゃ使う奴いねーし」「まぁ Windows 7 に期待ですかね」「Windows 7 は売れるでしょうね。Vista やだけど XP もう売ってないし、ってところはけっこう溜まってるから」みたいな話題がどわーっと。


次はバリバリのシステム屋さんが話してるところに割り込んでみた。

Virtualization によって管理する Physical Device の数は圧倒的に減ったけど、実際に管理しなきゃいけないサーバの数はずっとずっと増えたとか、Virtualization とはいっても例えばファイルシステムへのアクセスは振り分けてくれるわけじゃないから、例えば IBM の System Z とかだと仮想マシン 100 台とか収容してくれるんだけど、いっぺんに cron 走ると悲鳴をあげちゃうからタイミングを微妙にずらすとか、あとシステム更新のときに全仮想マシンを落とさなきゃいけないんだけどいっぺんに落とすとこれまた固まっちゃうから、少しずつ落としていく必要があってシャットダウンだけで半日作業だとか、ラックマウントにぎちぎちにディスク詰め込むと1トンとかになるからフリースペースなんかに配置すると床が抜けちゃうよとか、ディスクとテープが一緒になってて、あんまりアクセスされてないデータ (~= 仮想マシン) は自動的にテープに追い出して、必要な時に再ロードしてくれるマシンがあるとか、なんでお客さんは Oracle 指名買いするんだろう、あんなに高いのに、とか、オイラの仕事とはぜんぜん関係ない話がたくさん聞けてすんごく楽しかったです。


月曜日ということもあり二次会に突入することもなくそのまま解散。
でも、充実した数時間でした。

Thanks a lot! Mr.Iustin Pop!

*1:Google Switzerland 所属。Xen Summit Asia のために来日されてたらしい。

*2:ここ何て意味だか聞き取れなくて、本人に聞きに行ったなんて秘密だ。よしおかメソッドによれば堂々と手を挙げて質問すべきなんだけど、あまりにも低レベルで気後れしたのよ。ダメだなあ、オレ。

*3:ご存知 Debian のネットインストーラ

*4:と言っていたような気がするけど、違うのかなぁ。サポートする、というだけだとちょっとつまんないな。

*5:ここもヒアリング自信なし。「何か」の理由は物理的制約か、という質問だったのは間違いないのだが……。

*6:ここ、私は「ファイルシステムが理由だよ」と言っていたように聞こえましたが、Wassr で「DRDB が原因と言っていた」との指摘をうけ、わたしの空耳か文脈の取り違えと判断して訂正しました。