Copyright © NIFTY Corporation All Rights Reserved.
EC システムに Chef を
導入してみた
2013年7月23日
ニフティ株式会社
千家 啓陽
1. 自己紹介
2. Chef 導入のきっかけ
3. Chef で環境構築する手順
4. Chef Server とは?
5. サーバーを役割毎にまとめよう
6. デモ
7. 使ってみた感想
8. TIPS
9. まとめ
アジェンダ
- 1 -
自己紹介
- 2 -
• 2009年入社 (5年目)
• ECシステムアプリ開発&インフラ運用
• PHPer
• 認定スクラムマスター
千家 啓陽
• フロントエンド: 買い物カゴ
• バックエンド:在庫管理、受注管理、…
ECシステムとは?
- 4 -
based on
Chef 導入のきっかけ
- 5 -
3年に1度の OS リプレースが
超面倒。
- 6 -
環境
• 開発 (dev)
• 検証 (check)
• 本番 (service)
役割
• Web/Apl
• DB
• Session
• Work
• Batch
- 7 -
現在のシステム構成
×
- 8 -
dev check service
Web/Apl *8
DB Master
DB Slave *6
Work *2
Batch *2
Session *2
Web/Apl
Work/Batch
DB
Master/Slave
Se...
インストールしたいミドルウェア
- 9 -
Web/Apl
Work/Batch
Apache / PHP / MySQL Client
DB MySQL Server / MySQL Client
Session Redis / Monit ...
tar xvf freetype-2.3.8.tar
cd freetype-2.3.8
make clean
./configure
make all
make install
tar zxvf jpegsrc.v6b.tar.gz
cd j...
- 11 -
dev check service
Web/Apl
Web/Apl
Work/Batch
Web/Apl
Work/Batch
x1 x1 x8
• 一部の設定値は環境毎に異なる。
• 時々バージョンアップも行う。
• 手順書も更...
- 12 -
こんなの全部
手動でやる?
- 13 -
Chef
新dev
- 14 -
旧dev
Web/Apl
Work/Batch
DB
Master/Slave
Web/Apl
Work/Batch
DB
Master/Slave
Session
Chef
新dev環境に Chef Server を導...
- 15 -
Web/Apl/Work/Batch
Chef Client
DB
Chef Client
Session
Chef Client
Chef
Chef Server
&
Workstaion
Chef で環境構築する手順
- 16 -
1. ローカル環境に VM を作る
2. ローカル VM で Cookbook を作る
3. Cookbook をリポジトリにコミットする
4. Chef Server にアップロードする
5. chef-client を実行する
流れ
- 1...
Vagrant でローカル
VM を作る。
※
Oracle VirtualBox 上に
簡単に VM を作ること
ができるフリーソフト。
http://www.vagrantup.com/
Vagrant.configure('2') do ...
`vagrant provision`
を叩いてエラーが出な
くなるまで。
サーバー毎に異なる値
は、attributes ファイ
ルに書いて、上書き可
能にしておく。
$ vim recipes/default.rb
$ vagrant pr...
バージョン管理するた
め、SCM (ソース管理
システム) に登録する。
$ svn commit site-cookbooks/
- 20 -
3. Cookbook をリポジトリにコミットする
リポジトリ内の
cookbook を Chef
Server にアップロード
する。
@chef server
$ cd /chef-repo
$ svn update
$ knife cookbooks upload –a –o
site-c...
Cookbook を実行し、
環境を構築する。
@chef client
$ sudo chef-client
- 22 -
5. chef-client を実行する
Chef Server とは?
- 23 -
Chef ファミリー
- 24 -
OSS Chef
• 無料 (OSS)
• 構築/運用は自
力で
Hosted Chef
• 有料 (5ノード
までは無料)
• Opscodeが運
用
Private Chef
• 有料
• Opscode...
Chef Solo の基本構成
- 25 -
Node
cook
book
cook
book
cook
book
Node
cook
book
cook
book
cook
book
全 node が cookbook リポジトリを持つ。
Chef Server の基本構成
- 26 -
Chef Server
Workstation
NodeNodeNode
ノード情報
cookbooks
knife
knife
chef-client
Workstation から knife コマンドを使って
ほとんどの作業を行う。
• Cookbooks の登録、編集
• Node の追加、編集
• Node の検索
Chef Server の運用
- 27 -
典型的なオペレーション
- 28 -
Chef Server
Workstation
Node
(moja001)
knife ssh ‘name:moja00*’
‘sudo chef-client’
chef-client
Node
(mo...
• 台数が多すぎて、個別の Node に入って
コマンドを叩くのが面倒な場合
• Environment を使いたい場合
• 高度な検索機能を使いたい場合
• 各 Node の状態を一元管理したい場合
Chef Server を使うケース
- ...
メリット デメリット
• Workstation 1台で全
てのオペレーションを
行える
• Chef Server にデータ
を集約できる
• 柔軟な検索機能
• Environment
• ミドルウェアが大量に
入る
• 運用ノウハウが少な...
サーバーを役割毎にまとめよう
- 31 -
サーバーの役割毎に、導入するアプリを指
定する機能。
Roles
- 32 -
Role Recipes
web Apache / PHP / MySQL Client
db MySQL Server / MySQL Client
sessio...
name 'web'
description ‘web/aplサーバー'
run_list [
'recipe[apache2-ec]',
'recipe[mysql-ec::client]',
'recipe[php-ec]'
]
Role ...
- 34 -
実際に適用した例
新dev
Web/Apl
Work/Batch
DB
Master/Slave
Session
Build
Chef
"role[web]“,
“role[work]”
"role[session]”
"role...
サーバー毎に異なる値
は、あらかじめ
Attributes として切り
出しておくことで、値
を個別に指定できる。
レプリ先のIP、ログ出
力先パスなど。
@dev環境のDBサーバー)
{
"mysql_ec": {
"server": {
"...
- 36 -
最終的な構成 (予定)
dev check service
Web/Apl
DB Master
DB Slave
Work
Batch
Session
Web/Apl
Work/Batch
DB
Master/Slave
Sess...
Chef Server なら、各ノードの Role と
Attribute を一元管理できる。
サーバーの役割と設定値が
明確に。
- 37 -
デモ
- 38 -
デモ
- 39 -
1. WebUI を動かしてみる
2. ノード側の設定を書き換える
→Workstation から
`knife ssh “sudo chef-client”`
→設定が元に戻る
• 閲覧はいいけど、編集しづらい。
• knife コマンドで十分。
WebUI
- 40 -
knife
- 41 -
$ knife node list
$ knife node show {nodename}
$ EDITOR=vim knife node edit
{nodename}
$ knife ssh {query} {c...
使ってみた感想
- 42 -
• Cookbook さえ作ってしまえば後が超楽。
–環境構築は `chef-client` 一発。
–設定ファイルが一括管理できる。
• 誰でも同じ環境をすぐ作れる。
• 各環境の設定がバージョン管理できる。
“Infrastracture ...
• 学習が大変。
–概念がややこしい!
–情報源が基本的に英語。
• 環境が作りこまれている場合、公式
cookbook を使えない。自分で作る。
• Chef Server の管理方法を覚える必要が
ある。
悪かったこと
- 44 -
良かったこと >> 悪かったこと
メリット >> 学習コスト
時間をかけても学ぶ価値あり。
トータルで見ると
- 45 -
TIPS
- 46 -
• 最初は Chef Solo + Vagrant で勉強する
のがおすすめ。
• 慣れたら Vagrant VM 上で Chef
Server/Client 構成を作って試してみれば
OK。
• 5台程度の小規模システムなら、Chef
Sol...
• knife cookbook test で構文テストが可能。
• 一部の公式 cookbook (MySQL等) はテク
ニカルすぎてオーバーライドしづらい。
自分で作ったほうが早い。
cookbook の作り方
- 48 -
まとめ
- 49 -
• 自動化はクラウド時代に必須の技術。
• 学習コストは必ずペイされる!
• 属人化解消のためにも。
- 50 -
Chef
- 51 -
Upcoming SlideShare
Loading in …5
×

20130723 ecシステムにchefを導入してみた v1.0

1,334
-1

Published on

Published in: Technology, Self Improvement
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,334
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

20130723 ecシステムにchefを導入してみた v1.0

  1. 1. Copyright © NIFTY Corporation All Rights Reserved. EC システムに Chef を 導入してみた 2013年7月23日 ニフティ株式会社 千家 啓陽
  2. 2. 1. 自己紹介 2. Chef 導入のきっかけ 3. Chef で環境構築する手順 4. Chef Server とは? 5. サーバーを役割毎にまとめよう 6. デモ 7. 使ってみた感想 8. TIPS 9. まとめ アジェンダ - 1 -
  3. 3. 自己紹介 - 2 -
  4. 4. • 2009年入社 (5年目) • ECシステムアプリ開発&インフラ運用 • PHPer • 認定スクラムマスター 千家 啓陽
  5. 5. • フロントエンド: 買い物カゴ • バックエンド:在庫管理、受注管理、… ECシステムとは? - 4 - based on
  6. 6. Chef 導入のきっかけ - 5 -
  7. 7. 3年に1度の OS リプレースが 超面倒。 - 6 -
  8. 8. 環境 • 開発 (dev) • 検証 (check) • 本番 (service) 役割 • Web/Apl • DB • Session • Work • Batch - 7 - 現在のシステム構成 ×
  9. 9. - 8 - dev check service Web/Apl *8 DB Master DB Slave *6 Work *2 Batch *2 Session *2 Web/Apl Work/Batch DB Master/Slave Session *2 Web/Apl Work/Batch DB Master/Slave
  10. 10. インストールしたいミドルウェア - 9 - Web/Apl Work/Batch Apache / PHP / MySQL Client DB MySQL Server / MySQL Client Session Redis / Monit / Keepalived Build Jenkins / Selenium Server / Munin Server
  11. 11. tar xvf freetype-2.3.8.tar cd freetype-2.3.8 make clean ./configure make all make install tar zxvf jpegsrc.v6b.tar.gz cd jpeg-6b/ make clean ./configure --enable-shared make mkdir /usr/local/man mkdir /usr/local/man/man1 make install bunzip2 libpng-1.2.33.tar.bz2 tar xvf libpng-1.2.33.tar cd libpng-1.2.33 make clean ./configure make make install tar zxvf zlib-1.2.3.tar.gz cd zlib-1.2.3 make clean ./configure make make install tar zxvf libiconv-1.12.tar.gz cd libiconv-1.12 make clean ./configure make make install tar zxvf libxml2-2.6.26.tar.gz cd libxml2-2.6.26 make clean ./configure make make install tar zxvf fontconfig-2.6.0.tar.gz cd fontconfig-2.6.0 make clean ./configure --sysconfdir=/etc -- prefix=/usr -- mandir=/usr/share/man make make install tar zxvf gd-2.0.35.tar.gz cd gd-2.0.35 make clean ./configure make make install tar zxvf httpd-2.2.22.tar.gz cd httpd-2.2.22 make clean - 10 - Webサーバーの手動インストール手順 ./configure ¥ -- prefix=/usr/local/apache2.2.22 ¥ --disable-autoindex ¥ --disable-imagemap ¥ --disable-userdir ¥ --enable-deflate ¥ --enable-headers ¥ --enable-proxy ¥ --enable-proxy-connect ¥ --enable-proxy-ftp ¥ --enable-proxy-http ¥ --enable-proxy-ajp ¥ --enable-proxy-balancer ¥ --enable-ssl ¥ --enable-rewrite ¥ --enable-expires ¥ --enable-so ¥ --enable-info make make install vim /etc/init.d/apache chmod 755 /etc/init.d/apache chkconfig --add apache chkconfig --list apache cd /usr/local tar zxvf /service/store/install- src/mysql-5.1.37-linux-i686- glibc23.tar.gz ln -s /usr/local/mysql-5.1.37- linux-i686-glibc23 mysql tar zxvf php-5.2.9.tar.gz cd php-5.2.9 make clean './configure' '--with- mysql=/usr/local/mysql' '--with- apxs2=/usr/local/apache2/bin/apxs ' '--enable-zend-multibyte' '-- enable-mbstring' '--enable- mbregex' '--with-jpeg- dir=/usr/local/include' '--with- freetype- dir=/usr/local/include/freetype2' '--enable-gd-native-ttf' '-- enable-gd-jis-conv' '--with-gd' '--with-zlib' '--with-zlib- dir=/usr' '--with-xmlrpc' '-- with-curl' '--with-libxml- dir=/usr/local/' '--enable-zip' '--with-pdo- mysql=/usr/local/mysql' make make test make install pear channel-update pear.php.net wget http://xdebug.org/files/xdebug- 2.2.1.tgz tar zxf xdebug-2.2.1.tgz cd xdebug-2.2.1 phpize ./configure && make cp modules/xdebug.so /usr/local/lib/php/extensions/no- debug-non-zts-20060613 vim /usr/local/lib/php.ini …
  12. 12. - 11 - dev check service Web/Apl Web/Apl Work/Batch Web/Apl Work/Batch x1 x1 x8 • 一部の設定値は環境毎に異なる。 • 時々バージョンアップも行う。 • 手順書も更新が必要。
  13. 13. - 12 - こんなの全部 手動でやる?
  14. 14. - 13 - Chef
  15. 15. 新dev - 14 - 旧dev Web/Apl Work/Batch DB Master/Slave Web/Apl Work/Batch DB Master/Slave Session Chef 新dev環境に Chef Server を導入してみた。
  16. 16. - 15 - Web/Apl/Work/Batch Chef Client DB Chef Client Session Chef Client Chef Chef Server & Workstaion
  17. 17. Chef で環境構築する手順 - 16 -
  18. 18. 1. ローカル環境に VM を作る 2. ローカル VM で Cookbook を作る 3. Cookbook をリポジトリにコミットする 4. Chef Server にアップロードする 5. chef-client を実行する 流れ - 17 -
  19. 19. Vagrant でローカル VM を作る。 ※ Oracle VirtualBox 上に 簡単に VM を作ること ができるフリーソフト。 http://www.vagrantup.com/ Vagrant.configure('2') do |global_config| vms.each_pair do |name, opts| global_config.vm.define name do |config| vm_name = name.to_s config.vm.box = vm_name config.vm.hostname = vm_name config.vm.box_url = opts[:box] config.vm.synced_folder *synced_folder config.vm.network :private_network, ip: opts[:ip] config.vbguest.auto_update = false config.vm.provision :chef_solo do |chef| chef.cookbooks_path = cookbook_paths chef.roles_path = roles_path chef.http_proxy = proxy chef.https_proxy = proxy chef.run_list = opts[:run_list] chef.json = opts[:json] end end end end $ vagrant up - 18 - 1. ローカル環境に VM を作る
  20. 20. `vagrant provision` を叩いてエラーが出な くなるまで。 サーバー毎に異なる値 は、attributes ファイ ルに書いて、上書き可 能にしておく。 $ vim recipes/default.rb $ vagrant provision … [2013-06-17T06:07:39+00:00] FATAL: NameError: Cannot find a resource for hogehoge on centos version 6.3 $ vim recipes/default.rb $ vagrant provision … [2013-06-17T06:04:45+00:00] INFO: Report handlers complete - 19 - 2. ローカル VM で Cookbook を作る
  21. 21. バージョン管理するた め、SCM (ソース管理 システム) に登録する。 $ svn commit site-cookbooks/ - 20 - 3. Cookbook をリポジトリにコミットする
  22. 22. リポジトリ内の cookbook を Chef Server にアップロード する。 @chef server $ cd /chef-repo $ svn update $ knife cookbooks upload –a –o site-cookbooks/ - 21 - 4. Chef Server にアップロードする
  23. 23. Cookbook を実行し、 環境を構築する。 @chef client $ sudo chef-client - 22 - 5. chef-client を実行する
  24. 24. Chef Server とは? - 23 -
  25. 25. Chef ファミリー - 24 - OSS Chef • 無料 (OSS) • 構築/運用は自 力で Hosted Chef • 有料 (5ノード までは無料) • Opscodeが運 用 Private Chef • 有料 • Opscodeが運 用 • プライベート 環境で使える 詳細: http://www.opscode.com/chef/
  26. 26. Chef Solo の基本構成 - 25 - Node cook book cook book cook book Node cook book cook book cook book 全 node が cookbook リポジトリを持つ。
  27. 27. Chef Server の基本構成 - 26 - Chef Server Workstation NodeNodeNode ノード情報 cookbooks knife knife chef-client
  28. 28. Workstation から knife コマンドを使って ほとんどの作業を行う。 • Cookbooks の登録、編集 • Node の追加、編集 • Node の検索 Chef Server の運用 - 27 -
  29. 29. 典型的なオペレーション - 28 - Chef Server Workstation Node (moja001) knife ssh ‘name:moja00*’ ‘sudo chef-client’ chef-client Node (moja002)
  30. 30. • 台数が多すぎて、個別の Node に入って コマンドを叩くのが面倒な場合 • Environment を使いたい場合 • 高度な検索機能を使いたい場合 • 各 Node の状態を一元管理したい場合 Chef Server を使うケース - 29 -
  31. 31. メリット デメリット • Workstation 1台で全 てのオペレーションを 行える • Chef Server にデータ を集約できる • 柔軟な検索機能 • Environment • ミドルウェアが大量に 入る • 運用ノウハウが少ない • ネットワーク設定が面 倒 • knife コマンドを覚え る必要がある Chef Server のメリット・デメリット - 30 - 20~30台以上のシステムなら、メリットが 上回るかも?
  32. 32. サーバーを役割毎にまとめよう - 31 -
  33. 33. サーバーの役割毎に、導入するアプリを指 定する機能。 Roles - 32 - Role Recipes web Apache / PHP / MySQL Client db MySQL Server / MySQL Client session Redis / Monit / Keepalived build Java / Jenkins / Selenium Server
  34. 34. name 'web' description ‘web/aplサーバー' run_list [ 'recipe[apache2-ec]', 'recipe[mysql-ec::client]', 'recipe[php-ec]' ] Role の例: Web/Apl サーバー - 33 -
  35. 35. - 34 - 実際に適用した例 新dev Web/Apl Work/Batch DB Master/Slave Session Build Chef "role[web]“, “role[work]” "role[session]” "role[db]” "role[build]”
  36. 36. サーバー毎に異なる値 は、あらかじめ Attributes として切り 出しておくことで、値 を個別に指定できる。 レプリ先のIP、ログ出 力先パスなど。 @dev環境のDBサーバー) { "mysql_ec": { "server": { "roles": [ “master”, ”slave" ], "master": { "slave_ips": [ "172.16.83.1", “172.16.83.2" ], "app_ips": [ "172.16.83.11" ] } } } } - 35 - Attributes (属性値)
  37. 37. - 36 - 最終的な構成 (予定) dev check service Web/Apl DB Master DB Slave Work Batch Session Web/Apl Work/Batch DB Master/Slave Session Web/Apl Work/Batch DB Master/Slave web db work Sessionsession
  38. 38. Chef Server なら、各ノードの Role と Attribute を一元管理できる。 サーバーの役割と設定値が 明確に。 - 37 -
  39. 39. デモ - 38 -
  40. 40. デモ - 39 - 1. WebUI を動かしてみる 2. ノード側の設定を書き換える →Workstation から `knife ssh “sudo chef-client”` →設定が元に戻る
  41. 41. • 閲覧はいいけど、編集しづらい。 • knife コマンドで十分。 WebUI - 40 -
  42. 42. knife - 41 - $ knife node list $ knife node show {nodename} $ EDITOR=vim knife node edit {nodename} $ knife ssh {query} {command} –x {user} –a {attirubtes}
  43. 43. 使ってみた感想 - 42 -
  44. 44. • Cookbook さえ作ってしまえば後が超楽。 –環境構築は `chef-client` 一発。 –設定ファイルが一括管理できる。 • 誰でも同じ環境をすぐ作れる。 • 各環境の設定がバージョン管理できる。 “Infrastracture as Code” 良かったこと - 43 -
  45. 45. • 学習が大変。 –概念がややこしい! –情報源が基本的に英語。 • 環境が作りこまれている場合、公式 cookbook を使えない。自分で作る。 • Chef Server の管理方法を覚える必要が ある。 悪かったこと - 44 -
  46. 46. 良かったこと >> 悪かったこと メリット >> 学習コスト 時間をかけても学ぶ価値あり。 トータルで見ると - 45 -
  47. 47. TIPS - 46 -
  48. 48. • 最初は Chef Solo + Vagrant で勉強する のがおすすめ。 • 慣れたら Vagrant VM 上で Chef Server/Client 構成を作って試してみれば OK。 • 5台程度の小規模システムなら、Chef Solo で十分。 学習方法 - 47 -
  49. 49. • knife cookbook test で構文テストが可能。 • 一部の公式 cookbook (MySQL等) はテク ニカルすぎてオーバーライドしづらい。 自分で作ったほうが早い。 cookbook の作り方 - 48 -
  50. 50. まとめ - 49 -
  51. 51. • 自動化はクラウド時代に必須の技術。 • 学習コストは必ずペイされる! • 属人化解消のためにも。 - 50 - Chef
  52. 52. - 51 -
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×