Upload
ryo-kuroda
View
606
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
共用ホスティングでのLL管理Ryo Kuroda @lamanotrama
所属
GMOペパボ 技術基盤チーム
経歴• ~30才 郵便局の窓口に座ってた
• 京都のWebホスティング会社で4年弱
• ペパボで5年弱 • ヘテムル • Sqale • 他いろいろ
本題LL(lightweight language)をそこそこ効率的に監理、運用でき
るツールを作りました。
求められる仕様 !契約して直ぐに好きな言語で色々さくっと動く環境
• 色々使える
• PHP、Perl、Ruby、Pyhton
• それぞれ複数のバージョンから選択できる
• モジュール(ライブラリ)が最初からそれなりに揃っている
• お客んさんは中でコンパイルできないしね
!
現場の声
• 大量のRPMつくるのは辛い
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!そこで、
xbuild使って設定ファイルベースでばんばんインストール出来る君
!
+ 差分同期スクリプト
xbuildとは
モヒカン界の至宝 @tagomoris 氏作
https://github.com/tagomoris/xbuild !
hoge-install <version> <install_path> !な感じで、本番環境のLLをセットアップできるやつ
!
anybuild
.|-- README.md|-- any-install|-- any-perl-install|-- any-php-install|-- any-python-install|-- any-ruby-install|-- functions`-- sync-lang
anybuild - configuration /etc/anybuild/"## perl$ "## cpanfile$ &## versions.txt"## php$ "## definitions$ $ "## 5.3.19-heteml$ $ &## 5.4.11-heteml$ "## pearfile$ "## peclfile$ &## versions.txt"## python"## ruby$ "## Gemfile$ &## versions.txt&## sync-lang
./any-install !
ビルドサーバ上で実行
1. 各言語のversions.txtの各行をxbuildの引数に渡して、ビルドしまくる
2. cpanfileとかGemfileとか読んでモジュールをインストールしまくる
./sync-lang push|pull
1. any-install実行前にビルド済みデータをrsyncサーバからローカルにpull
2. any-installで(差分)ビルド、インストールしたものをrsyncサーバにpush
3. 本番サーバで実行してrsyncサーバからデータをpull
こんな感じ+----------+ +--------------+ LL runtimes +--------------+----------+| build VM | built LL runtimes | | for Role A | Ahost001 | Ahost002 || | <--------------------- | | -------------> | | |+----------+ | | +--------------+----------+ | | lang server | LL runtimes ^ | incremental update | (rsyncd) | for Role A | +-------------------------------> | | ---------------------------------+ | | | | | | -+ +--------------+ | | | | LL runtimes | LL runtimes | for Role B | for Role B v v +--------------+---------------+ | Bhost001 | Bhost002 | +--------------+---------------+
Vagrant + Puppet + anybuild
anybuildの設定、依存RPM
(*-devel)等はpuppetで管理
Vagrantのpuppet provisionerでもろもろ完了# 手元で[@mac puppet]# vi roles/web/files/etc/anybuild/perl/cpanfile[@mac puppet]# git commit -m ‘お客さんの要望でHoge.pmを追加’[@mac puppet]# VM_ROLE=web vagrant provision cent6_anybuild!# 本番サーバ全台で[@web001 ~]# sudo /usr/local/anybuild/sync-lang pull
現場の声(再掲)
• 大量のRPMつくるのは辛い
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールに時間かかるの辛い
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(yum|puppet)が太るの辛い
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバ毎の仕様差を生まないようにするには…
• 履歴監理…
!
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバの仕様はsync-lang pullで揃う
• 履歴監理…
!
現場の声(再掲)
• 大量のRPMつくらずrsyncでファイル同期するだけ
• ビルド、インストールはビルドサーバで一回だけ
• リポジトリ(puppet)にはanybuildの設定だけ
• サーバの仕様はsync-lang pullで揃う
• 履歴がpuppetのリポジトリに集約される
!
やったね!