linux daemonとsupervisordの美味しい関係
Post on 13-May-2015
2.935 Views
Preview:
DESCRIPTION
TRANSCRIPT
Linux daemonとsupervisordの美味しい関係
python,RoRのアプリの素敵なデーモン化
@myb1126
(Daemon)アプリを作るときに、 覚える事が超たくさん
Kernel
init
HTTPD
framework
Application
apache
色んな言語 セキュリティ データベース
新人に言われた一言
initってなんですか?Kernel
init
HTTPD
framework
Application
( Д ) ゚ ゚
よくよく考えて見れば昔はシンプルなところからスタートして 全部自分でやらなければならなかった。
!しかし、考えてみて欲しい。
お前は何を考えて、 $ sudo /etc/init.d/****d restart を
打ってるんだ! !!!
しかし、ここで貶すのは簡単だが、今の現状を見つめなおしてみたい。
コンフィグだけで 良くなってきてた。
Kernel
init
HTTPD
framework
Application
Apache
modulepassenger mod_wsgi mod_php
railsWSGI (python) php
Webアプリ プログラミング
コンフィグ
ちょっと前まではこんな感じでしたよね
最近は、一介のプログラマが触る領域は赤線部分ですよね。
Apache
mod_authn
プログラミング
コンフィグ
Kernel
init
daemon
HTTPD
framework
Application
nginx (rproxy +static file dist)
framework +
その言語用のサーバ
コンフィグ (他の人の仕事)
(色んなフェーズを飛ばしますが)
赤線の部分の話をします。
Apache
mod_authn
Kernel
init
HTTPD
framework
Application
nginx
framework +
その言語用のサーバ
コンフィグ(他の人の仕事)
最近の動向• nginx (えんじんえっくす)
• 超高速フロントエンドサーバ&リバースプロキシ
• 情報が多くなってきた。ので、今回は対象外
• Apache
• 認証モジュールが豊富
• 過去のノウハウでみんな生きてる?有用な情報が少なめ。一時期みんなSSOとかで盛り上がってたのに。(オワコン?)
• フレームワーク
• サーバが乱立&フレームワークごとでノウハウが分散
• 同じ役割を担っているにも関わらず、各情報に中々辿りつけない。
• と言うか単一のフレームワークでも死ぬ
そもそもdaemonとは• daemon
• Linuxの(Windowsで言うところの)サービス
• nginx / apache/ sambaなども全部daemon
• 作り方
• fork、親(fork元)は死ぬ
init.d• Linuxの起動時に走るプロセス(init)から呼び出されるスクリプトの配置ディレクトリ
• 便利なユーティリティ(シェル関数)が用意されている
• ubuntu /lib/lsb/init-functions
• centos /etc/rc.d/init.d/functions
• やってること
• 一般的な操作の定義:start/stop/restart/status等のインターフェースを提供
• pidfile名やオプションをコマンドオプションなどで渡す。
supervisord• 汎用のdaemon化ツール
• daemon共通の設定(ログファイル等)を扱い、プロセスをdaemon化する。
• やってること
• forkした後、コマンドでオプションを渡して起動
• 設定は、iniファイルに記載
• 面倒くさいお決まりの起動スクリプトを書かなくて良い!!!
• (但しsupervisordのinitscriptは、自分で配置しなければならない。※後述)
init.dinit ****d(親) ****d(子)
forkfork
init+supervisordinit supervisord ****d
fork
fork
iniファイル 読み込み
****dって?• 各フレームワークごとにサーバがある。
• python:WSGI仕様のサーバ:gunicorn,uwsgi 等
• Ruby on Rails:unicorn,thin,passenger,mongrel 等
• その他自作プログラムでももちろん可能!
• プロトタイピング時、実運用時プロダクトの特性に合わせて、サービスを作ろう!
個人的おすすめ• 各言語
• python: gunicon
• ruby on rails : unicorn
• 加えて、以下の機構を利用する。
• unicornherder <https://github.com/alphagov/unicornherder>
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>
アーキテクチャが 統一できました!!
Apache
mod_authn
Kernel
init
HTTPD
framework
Application
nginx
Apps on framework
!!
supervisord
unicornherder
gunicorn unicorn
redmine等自作App
構築手順は教えるの面倒くさいけど、 運用の人は覚えることが減って楽みたいです。
※• 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)
• (これが言いたいがために超遠回りした。。。)
まとめ• 最近調べてた&教えなきゃいけないインフラ?周りのことについて共有
• /etc/init.d/***d はdaemon起動スクリプト
• pythonやRoRアプリのデーモン化は、supervisord + unicornherderを使うと便利
• Linuxの常識を覚えたり、アーキテクチャの統一したり、shell scriptなんかも大事!
Happy Daemon Life !
ご閲覧ありがとうございました。
http://bit.ly/1j6tDsR
top related