linux daemonとsupervisordの美味しい関係

21
Linux daemonと supervisordの美味しい関係 python,RoRのアプリの素敵なデーモン化 @myb1126

Upload: kazushige-takeuchi

Post on 13-May-2015

2.935 views

Category:

Technology


2 download

DESCRIPTION

Supervisordとinit.dの起動の図やらなんやら。 合わせてこちらもご参照ください。 http://d.hatena.ne.jp/graceful_life/20131201/1385912995

TRANSCRIPT

Page 1: Linux daemonとsupervisordの美味しい関係

Linux daemonとsupervisordの美味しい関係

python,RoRのアプリの素敵なデーモン化

@myb1126

Page 2: Linux daemonとsupervisordの美味しい関係

(Daemon)アプリを作るときに、 覚える事が超たくさん

Kernel

init

HTTPD

framework

Application

apache

色んな言語 セキュリティ データベース

Page 3: Linux daemonとsupervisordの美味しい関係

新人に言われた一言

initってなんですか?Kernel

init

HTTPD

framework

Application

Page 4: Linux daemonとsupervisordの美味しい関係

(  Д ) ゚ ゚

Page 5: Linux daemonとsupervisordの美味しい関係

よくよく考えて見れば昔はシンプルなところからスタートして 全部自分でやらなければならなかった。

!しかし、考えてみて欲しい。

お前は何を考えて、 $ sudo /etc/init.d/****d restart を

打ってるんだ! !!!

しかし、ここで貶すのは簡単だが、今の現状を見つめなおしてみたい。

Page 6: Linux daemonとsupervisordの美味しい関係

コンフィグだけで 良くなってきてた。

Kernel

init

HTTPD

framework

Application

Apache

modulepassenger mod_wsgi mod_php

railsWSGI (python) php

Webアプリ プログラミング

コンフィグ

ちょっと前まではこんな感じでしたよね

Page 7: Linux daemonとsupervisordの美味しい関係

最近は、一介のプログラマが触る領域は赤線部分ですよね。

Apache

mod_authn

プログラミング

コンフィグ

Kernel

init

daemon

HTTPD

framework

Application

nginx (rproxy +static file dist)

framework +

その言語用のサーバ

コンフィグ (他の人の仕事)

(色んなフェーズを飛ばしますが)

Page 8: Linux daemonとsupervisordの美味しい関係

赤線の部分の話をします。

Apache

mod_authn

Kernel

init

HTTPD

framework

Application

nginx

framework +

その言語用のサーバ

コンフィグ(他の人の仕事)

Page 9: Linux daemonとsupervisordの美味しい関係

最近の動向• nginx (えんじんえっくす)

• 超高速フロントエンドサーバ&リバースプロキシ

• 情報が多くなってきた。ので、今回は対象外

• Apache

• 認証モジュールが豊富

• 過去のノウハウでみんな生きてる?有用な情報が少なめ。一時期みんなSSOとかで盛り上がってたのに。(オワコン?)

• フレームワーク

• サーバが乱立&フレームワークごとでノウハウが分散

• 同じ役割を担っているにも関わらず、各情報に中々辿りつけない。

• と言うか単一のフレームワークでも死ぬ

Page 10: Linux daemonとsupervisordの美味しい関係

そもそもdaemonとは• daemon

• Linuxの(Windowsで言うところの)サービス

• nginx / apache/ sambaなども全部daemon

• 作り方

• fork、親(fork元)は死ぬ

Page 11: Linux daemonとsupervisordの美味しい関係

init.d• Linuxの起動時に走るプロセス(init)から呼び出されるスクリプトの配置ディレクトリ

• 便利なユーティリティ(シェル関数)が用意されている

• ubuntu /lib/lsb/init-functions

• centos /etc/rc.d/init.d/functions

• やってること

• 一般的な操作の定義:start/stop/restart/status等のインターフェースを提供

• pidfile名やオプションをコマンドオプションなどで渡す。

Page 12: Linux daemonとsupervisordの美味しい関係

supervisord• 汎用のdaemon化ツール

• daemon共通の設定(ログファイル等)を扱い、プロセスをdaemon化する。

• やってること

• forkした後、コマンドでオプションを渡して起動

• 設定は、iniファイルに記載

• 面倒くさいお決まりの起動スクリプトを書かなくて良い!!!

• (但しsupervisordのinitscriptは、自分で配置しなければならない。※後述)

Page 13: Linux daemonとsupervisordの美味しい関係

init.dinit ****d(親) ****d(子)

forkfork

Page 14: Linux daemonとsupervisordの美味しい関係

init+supervisordinit supervisord ****d

fork

fork

iniファイル 読み込み

Page 15: Linux daemonとsupervisordの美味しい関係

****dって?• 各フレームワークごとにサーバがある。

• python:WSGI仕様のサーバ:gunicorn,uwsgi 等

• Ruby on Rails:unicorn,thin,passenger,mongrel 等

• その他自作プログラムでももちろん可能!

• プロトタイピング時、実運用時プロダクトの特性に合わせて、サービスを作ろう!

Page 16: Linux daemonとsupervisordの美味しい関係

個人的おすすめ• 各言語

• python: gunicon

• ruby on rails : unicorn

• 加えて、以下の機構を利用する。

• unicornherder <https://github.com/alphagov/unicornherder>

Page 17: Linux daemonとsupervisordの美味しい関係

unicornherder って何?• gunicorn / unicorn のラッパー

• WSGI準拠のpythonアプリと、railsアプリを同様の設定で動かすことが出来る!!!

• 起動方法

• unicornherder -u (gunicorn | unicorn | gunicorn_django) ̶pidfile (pidfile) ̶ hogehoge

• 参考

• zero-downtime deployments with unicorn and supervisors <http://bit.ly/InqWFu>

Page 18: Linux daemonとsupervisordの美味しい関係

アーキテクチャが 統一できました!!

Apache

mod_authn

Kernel

init

HTTPD

framework

Application

nginx

Apps on framework

!!

supervisord

unicornherder

gunicorn unicorn

redmine等自作App

構築手順は教えるの面倒くさいけど、 運用の人は覚えることが減って楽みたいです。

Page 19: Linux daemonとsupervisordの美味しい関係

※• supervisord は、pipから導入すると、init scriptを自分で配置しなければならない。

• <https://github.com/Supervisor/initscripts>

• ここまでの内容を元に、試してみてね

• 起動スクリプト /etc/init.d/supervisord

• 設定ファイル  /etc/sysconfig/supervisord

• debugは、shellなのでお決まりの方法で出来ます。

• sh -x /etc/init.d/supervisord (start|restart|stop)

• (これが言いたいがために超遠回りした。。。)

Page 20: Linux daemonとsupervisordの美味しい関係

まとめ• 最近調べてた&教えなきゃいけないインフラ?周りのことについて共有

• /etc/init.d/***d はdaemon起動スクリプト

• pythonやRoRアプリのデーモン化は、supervisord + unicornherderを使うと便利

• Linuxの常識を覚えたり、アーキテクチャの統一したり、shell scriptなんかも大事!

Page 21: Linux daemonとsupervisordの美味しい関係

Happy Daemon Life !

ご閲覧ありがとうございました。

http://bit.ly/1j6tDsR