More Related Content
Similar to Using Chef for Infrastructure Automation of Ameba Pigg (20)
More from Yuuki Namikawa (11)
Using Chef for Infrastructure Automation of Ameba Pigg
- 1. Using Chef for Infrastructure
Automation of Ameba Pigg
Yuuki NAMIKAWA
Cyberagent Inc.
[DevOps Days Tokyo 2012]
1
- 2. 自己紹介
並河 祐貴 (a.k.a. id:rx7)
(株)サイバーエージェント所属
主にインフラエンジニア
Blog: http://d.hatena.ne.jp/rx7/
Twitter: @namikawa
著書・寄稿多数
2
- 6. アメーバピグ (Ameba Pigg)
アバター仮想空間サービス
きせかえ、おでかけ
ゲーム(カジノ、つり、ライフ(庭)、アイランド)
ユーザ数
1190万人 (2012/03, Amebaユーザの約半数)
トラフィック (アバター/ゲーム)
約6 7Gbps / ピーク帯
同時接続ユーザ数 (アバター/ゲーム)
約40万ユーザ / ピーク帯
6
- 15. アメーバピグ・ピグライフの規模感
アメーバピグ
サーバ台数: 約220台 (⇒ 150台まで削減予定)
– Web/APサーバ40台
– Socketサーバ75台
– DB(MySQL+FIO)サーバ6台 x 2(スタンバイ)
– API, Hadoop Cluster, Mobile, Smart Phone...
– etc...
ピグライフ
サーバ台数: 約250台
– Socket(node.js)サーバ70台、
– DB(MongoDB)サーバ150台
– Statサーバ20台
– etc...
15
- 17. それ、
クラウド使ったら
でk(ry
クラウドも、運用を捓厾化する1要素
ミドルウェアの設定拻 や、プロセスの状態拻 も
含めて今回は「Chef」で自動化する話をします
17
- 19. 「Chef」とは
サーバの構築作業やシステム拻 のツール
システムのあるべき状態を設定する
オープンソース、Ruby製
匏用実
37signals
Engine Yard
Rackspace hosting
etc…
http://www.flickr.com/photos/jonathanbeard/3307862620/ 19
- 20. サーバ構築・システム拻 自動化の必要勯
手作業では、そもそも時間がかかる
数十台、数百台のレベルになると・・・
同 叓厎のサーバごとに環境挽 が発生したりとか
サーバ匐入までのリードタイムが くなることで
機会損失を発生させることは避けたい
人為的なミスを抑えたい
作業 れ、ルーチン作業でのオ ミス
作業者によって、スキルにバラつき
運用中のサーバでのミスは特に無くしたい
設定に間違いがあっても自動化しておく事で即修正可能
http://www.flickr.com/photos/jonathanbeard/3307862620/ 20
- 21. それ、シェルスクリプトでよくね?
サーバの状態が記述できるフレームワーク
基本的なタスクが備わっている
拻 タスクの厍拾をできるだけ える
Chefでは内部DSLを採用
Rubyでの柔軟な記述ができる
プラットフォームの挽 が 厓できる
ディストリビューションによってコマンドに挽
yumとaptとか
http://www.flickr.com/photos/photomequickbooth/4062072718/ 21
- 22. Chefのシステムアーキテクチャ
Ruby
CouchDB Solr
Merb(Rack)
CouchDB
Chef-Solr
Indexer
Solr
RabbitMQ
Chef-Server
RabbitMQ (Java)
API
(Erlang)
Chef-Server
HTTP(REST)
WebUI JSON
Chef-Client
Chef-Client Knife
Chef-Client
Client
http://www.flickr.com/photos/jonathanbeard/3307862620/ 22
- 23. Chefでの”主な”登場人物
Node
Role
Cookbook
Recipe
Template
Attribute
時間の都合上、基本を簡単にご紹介します
http://www.flickr.com/photos/jonathanbeard/3307862620/ 23
- 24. Node, Role, Cookbook の関連(捁)
nginxのCookbook
サーバA
APサーバの
Passengerの
Role
Cookbook
サーバB
RubyのCookbook
サーバC gitのCookbook
Node Role Cookbook
拻 対拺の 拻 対拺の システムのあるべき形を
サーバ グルーピング 定義する設定
http://www.flickr.com/photos/jonathanbeard/3307862620/ 24
- 25. Chefのリポジトリ構造 (Cookbook)
cookbooks/ 設定したいパラメータ(各サーバ
固有のものやデフォルト値など)
|-- attributes
を記述したもの
|-- definitions
|-- files
|-- libraries システムのあるべき姿、
|-- providers つまり設定内容を実際に
記載したRubyスクリプト
|-- recipes
|-- resources
`-- templates サーバへ配置する設定ファイルの
テンプレートで、eRubyで記述する
http://www.flickr.com/photos/jonathanbeard/3307862620/ 25
- 26. Recipe、Templateの一捁
./recipe/default.rb ./templates/default/ports.conf.erb
package "apache2" do Listen <%= port %>
action :install NameVirtualHost *:<%=port %>
end
template "/etc/apache2/ports.conf" do
source "ports.conf.erb" ./attributes/default.rb
owner "root"
default[:port] = “8080"
group "root"
mode 0644
variables(
:port => node[:port]
)
end
“port”:”80” “node A”の情報を保持
[Node Attribute],
service "apache2" do
[Run List] 等
action [ :enable, :start ] recipeの設定
end
chef-client
node A Chef-Server
http://www.flickr.com/photos/jonathanbeard/3307862620/ 26
- 27. Chefで匏用できるResource
Cookbook File Mount
Cron Ohai
Deploy Package
Directory PowerShell Script
Erlang Call Remote Directory
Execute Remote File
File Route
Git Ruby Block
Group SCM
HTTP Request Script
Ifconfig Service
Link Subversion
Log Template
Mdadm User
http://www.flickr.com/photos/jonathanbeard/3307862620/ 27
- 28. Chefのちょっとイケていないところ
サーバのセットアップが面倒くさい
必要なのは最初だけなので、許容できる
クライアントは簡単
名前がSEO的に致命的
Chef, Cookbook, Recipe, knife...
リアルに調べ物をする時に困ります
dry-runができない
テスト環境が必須 (クラウド・仮想化が最適)
http://www.flickr.com/photos/photomequickbooth/4062072718/ 28
- 30. Chefを活用したサーバ増設
PXE + kickstart + Chef
1. 事前に chef-server 側でNodeの設定が必要
2. サーバに線を繋ぎ電源ON、PXEブート開始
3. Label No.とNode名を入 し、OSインストール開始
4. 同時に chef-client のインストールと設定
5. kickstart の %post で chef-client を実
kickstartのcfgファイル
通常のOS
インストールタスク 通信
client PXE+ksサーバ
chef-clientのインストール
OSインストール後 通信
chef-clientの設定
は直接通信
chef-clientの
Chef-Server
http://www.flickr.com/photos/jonathanbeard/3307862620/ 30
- 31. Chefを活用したサーバ増設
今はオンプレミスな物 環境を想定
クラウド環境でも応用可能
EC2だと、事前にAMIを作成しておいて、user-dataに
Node名を指定して...
(弊社のOpenStackクラウド基盤を活用したい)
http://www.flickr.com/photos/jonathanbeard/3307862620/ 31
- 32. Cookbookの使い方
Cookbookの捁
ネットワーク設定
H/Wに必要な設定
– 主にH/W固有で必要なドライバやRAIDチェックスクリプト等
各サーバ共通で必要な設定
– DNS, NTP, LDAP, 監視ライブラリ, 鍵交換等
各Roleで必要な設定
NodeへのCookbook設定 RoleへのCookbook設定
{ {
"run_list": [ "run_list": [
"recipe[network::xxxxx]", "recipe[ameba-common::pigglife]",
"recipe[hw::dell_r310]", "recipe[pigglife-mongodb::mongod]"
“role[pigglife-mongodb]" ]
] }
}
http://www.flickr.com/photos/jonathanbeard/3307862620/ 32
- 33. Cookbookでのコミュニケーション
セットアップ手順のチェックをRecipe
(Cookbook)という名のコードベースで
バージョン拻 しているので、厢掇との挽分も卾
認しやすい
誰でもRead/Writeできる場所にあるので、みん
なでメンテナンスできる
http://www.flickr.com/photos/jonathanbeard/3307862620/ 33
- 34. Chefを使う上でやっていること
Script Resource は基本的に使わない
挬 でも実 される
chef-client実 時のチェック・運用が面倒
挬 実 しても勬匑ないものしか使わない
過去、こんな感じで書いていました...
script “script_name" do
interpreter "bash"
user “username"
creates comp_dir + “script_name.done"
code <<-EOH
command
......
......
EOH
end
http://www.flickr.com/photos/jonathanbeard/3307862620/ 34
- 35. Chefを使う上でやっていること
各nodeのChef適用は、chef-clientを実
tomahawk: 数のサーバで同 コマンドを実
“knife ssh”, “knife ssh_cheto” を使いたい
NodeのAttributeの登録
JSONファイルを自動生成して登録・バージョン拻
アンインストール・削揄等の叀 も れずに
Environment(0.10 )の活用
development, staging, productionの分別
http://www.flickr.com/photos/jonathanbeard/3307862620/ 35
- 36. これからChefを勉強する方へ
chef-solo が 匏
chef-server を必要とせず、ローカルにCookbookを
適用できる
VMでテストとか練習とか
Chefのインタラクティブシェル
“shef”
Opscode Platform (Hosted Chef)
Chefのホスティング環境 (サーバ)
5 nodes までなら、無厄で試せる
http://www.flickr.com/photos/jonathanbeard/3307862620/ 36
- 37. まとめと今後の展望
Chefを活用することで多くのサーバの増設・拻
にかかる負担を軽減
あるべき状態に自動で設定・維持できる
ルールを少し覚えれば、誰でも簡単に設定が書ける
内部DSLなので、Rubyを覚えれば叀 も柔軟に書ける
クラウド等の基盤サービスと連携して、インフラ
構築/運用の完全オートメーションができる仕組
みにしたい
http://www.flickr.com/photos/jonathanbeard/3307862620/ 37