Submit Search
Chefを利用した運用省力化とDevOpsの取り組みについて
•
43 likes
•
7,272 views
Yuuki Namikawa
Follow
DevLOVE Conference 2012
Read less
Read more
1 of 42
Download now
Downloaded 155 times
More Related Content
Chefを利用した運用省力化とDevOpsの取り組みについて
1.
- DevLove Conference
2012 - Chefを利⽤した運⽤省⼒化と DevOpsの取り組みについて 並河 祐貴 (Yuuki NAMIKAWA) id:rx7 / @namikawa 1
2.
自己紹介 並河 祐貴 (a.k.a.
id:rx7) (株)サイバーエージェント所属 エンジニア Blog: http://d.hatena.ne.jp/rx7/ Twitter: @namikawa 著書・寄稿多数 2
3.
これまでのキャリア 海岸沿いのSIer (2004〜2008) 先端技術調査・導入(R&D)、現場PJ支援(SI)
社内システム企画・運用、社内教育 SonicGarden (2008〜2010) B2B/B2C向けWebサービス、クラウド導入支援 企画/営業/PR/サービス構築/運用/顧客サポート CyberAgent (2010〜) Webサービス構築/運用/いわゆるマネジメント 3
4.
今日の話は・・・ 弊社のサービスとそれらの運用について 最近のアメーバピグのシステム構成とか DevOpsの話はあまりしません
ごめんなさい Chefを利用したプログラマブルなシステム基盤 実際に使ってどうだったか つまり主に「Chef」の話をしに来ました! 4
5.
アメーバピグ (Ameba Pigg)
5
6.
アメーバピグ (Ameba Pigg)
アバター仮想空間サービス きせかえ、おでかけ、ゲーム – カジノ、つり、ライフ(庭)、アイランド(島)、カフェ(店)、 ワールド(街) ユーザ数 1300万人 (2012/09, Amebaユーザの約半数) トラフィック (アバター/ゲーム) 約7〜8Gbps / ピーク帯 同時接続ユーザ数 (アバター/ゲーム) 約40万ユーザ / ピーク帯 6
7.
アメーバピグのアーキテクチャ
Other... HTTP Web User TCP memcached Socket (or none) Socket (Java or node.js...) アバターサービスとゲームで DB 実装言語やミドルウェアは (MySQL or MongoDB...) 異なりますが、基本的な構成は 同一となります。 7
8.
これまでの(主にシステムの)変遷 本体(アバターサービス)だけでも・・・ 自作サーバ導入 DBにFusion-ioのハードウェアを採用
Chefの導入 ネットワーク回線・LBの統合 データセンター移設 2系統化によるメンテナンス時間短縮 8
9.
ピグでのシステム運用スタイル 職種は一応存在する アプリエンジニア(Dev?) インフラエンジニア(Ops?)... チーム・体制
各施策ごとに機能開発を担当するチーム 非機能部分(性能・安定・効率化)を担当するチーム 基本的にシステム運用は全員プレイ モニタリングも 障害対応も リリースやサーバ設定も 当番はありますが、基本的にエンジニア全員で担当します 9
10.
システム運用する上で 運用改善の過程でツールによる作業効率化 アプリケーションのデプロイ サーバを増設する
設定変更を反映する ...etc アプリ/インフラ双⽅の協⼒が必要 セットアップ、パフォーマンスチューニング、トラブ ルシューティング... DevとOpsで作業の境界は一切設けていないです タッグを組まないと解決できない課題が多数 10
11.
少し昔の話
11
12.
僕が今の会社に入って 一番最初にやった仕事
12
13.
ピグのWeb/APサーバを3台増設 その時に渡された手順書(1台分)
13
14.
14
15.
アメーバピグの規模感 アメーバピグ サーバ台数: 約270台
– Web/APサーバ40台、Socketサーバ70台 – DB(MySQL+FIO)サーバ6台 x 2(スタンバイ) – API, Storage, Hadoop Cluster, Mobile, Smart Phone – Auth, Ranking, Backup etc ピグライフ サーバ台数: 約280台 – Socket(node.js)サーバ80台、DB(MongoDB)サーバ150台 – Statサーバ20台、Log管理・解析、Smart Phone…etc ピグアイランド・ピグカフェ・ピグワールド ライフとほぼ同等のシステム構成 サーバ台数は、3サービスで約440台 (テスト環境もあわせると) サーバ台数は、ざっと1000台超の規模 15
16.
1000台規模のサーバ群 DCは3箇所に分散 ⇒ 1箇所へ集約中 ほぼ物理サーバ
+ 一部社内クラウド + CDN 次は、パブリッククラウドも 監視はmon + munin monにはかなり限界を感じているのでリプレースを検 討中... 全サーバを「Chef」で管理 16
17.
ピグのサーバ増設・運用管理 サービス・システム規模、共に右肩上がり 急な増設を求められることもあります ビッグイベントにあわせて30台入れちゃうとか 想定を超えるスピードでサービスが成⻑するとか 数十台のサーバに同じ設定を入れたりも そこで「Chef」を使ってみました
17
18.
それ、 クラウド使ったら でk(ry
クラウドも、運用を効率化する1要素 ミドルウェアの設定管理や、プロセスの状態管理も 含めて今回は「Chef」で自動化する話をします 18
19.
Chefの概要 http://www.flickr.com/photos/jonathanbeard/3307862620/
19
20.
「Chef」とは
サーバの構築作業やシステム管理のツール システムのあるべき状態を設定する オープンソース、Ruby製 利用実績 37signals Engine Yard Rackspace hosting etc… http://www.flickr.com/photos/jonathanbeard/3307862620/ 20
21.
サーバ構築・システム管理自動化の必要性
手作業では、そもそも時間がかかる 数十台、数百台のレベルになると・・・ 同じ役割のサーバごとに環境差異が発⽣したりとか サーバ投入までのリードタイムが⻑くなることで 機会損失を発⽣させることは避けたい 人為的なミスを抑えたい 作業漏れ、ルーチン作業でのオペミス 作業者によって、スキルにバラつき 運用中のサーバでのミスは特に無くしたい 設定に間違いがあっても自動化しておく事で即修正可能 http://www.flickr.com/photos/jonathanbeard/3307862620/ 21
22.
それ、シェルスクリプトでよくね?
サーバの状態が記述できるフレームワーク 基本的なタスクが備わっている 管理タスクの品質をできるだけ揃える Chefでは内部DSLを採用 Rubyでの柔軟な記述ができる プラットフォームの差異が吸収できる ディストリビューションによってコマンドに差異 yumとaptとか http://www.flickr.com/photos/photomequickbooth/4062072718/ 22
23.
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/ 23
24.
Chefでの”主な”登場人物
Node Role Cookbook Recipe Template Attribute 時間の都合上、基本を簡単にご紹介します http://www.flickr.com/photos/jonathanbeard/3307862620/ 24
25.
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/ 25
26.
Chefのリポジトリ構造 (Cookbook)
cookbooks/ 設定したいパラメータ(各サーバ 固有のものやデフォルト値など) |-- attributes を記述したもの |-- definitions |-- files |-- libraries システムのあるべき姿、 |-- providers つまり設定内容を実際に 記載したRubyスクリプト |-- recipes |-- resources `-- templates サーバへ配置する設定ファイルの テンプレートで、eRubyで記述する http://www.flickr.com/photos/jonathanbeard/3307862620/ 26
27.
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/ 27
28.
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/ 28
29.
Chefのちょっとイケていないところ
サーバのセットアップが面倒くさい サーバセットアップは最初だけなので許容できる Ubuntuだと割と楽かも。クライアントは簡単 名前がSEO的に致命的 Chef, Cookbook, Recipe, knife... リアルに調べ物をする時に困ります (dry-runができない) テスト環境が必須 (クラウド・仮想化が最適) 10.14系から利用可能に! http://www.flickr.com/photos/photomequickbooth/4062072718/ 29
30.
Chefの運用 http://www.flickr.com/photos/jonathanbeard/3307862620/
30
31.
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/ 31
32.
Kickstartでの %post スクリプト
1. Chef Clientのインストール 2. /etc/chef/client.rb の配置 3. “node_name”を取得・上記ファイルに設定 4. /etc/chef/validation.pemを配置 5. chef-clientコマンドを実⾏ 実際のOSインストール時にPXE Boot時に⼊⼒するラベル例 boot: 1 node=chef-test01 http://www.flickr.com/photos/jonathanbeard/3307862620/ 32
33.
Chefを活用したサーバ増設
今はオンプレミスな物理環境を想定 クラウド環境でも応用可能 EC2だと、事前にAMIを作成しておいて、user-dataに Node名を指定して... (弊社のOpenStackクラウド基盤を活用) http://www.flickr.com/photos/jonathanbeard/3307862620/ 33
34.
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/ 34
35.
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/ 35
36.
Chefを使う上でやっていること
各nodeのChef適用は、chef-clientを実⾏ tomahawk: 複数のサーバで同じコマンドを実⾏ “knife ssh”, “knife ssh_cheto” 等も NodeのAttributeの登録 JSONファイルを自動⽣成して登録・バージョン管理 RoleもJSONファイル形式でバージョン管理 アンインストール・削除等の処理も忘れずに Environment(0.10〜)の活用 development, staging, productionの分別 http://www.flickr.com/photos/jonathanbeard/3307862620/ 36
37.
Chefを使う上でやっていること
verbose_logging false デフォルトではInfoログが出過ぎる 影響のあった変更処理のみロギング why-run (0.10.14〜) Chefでの処理をnodeに反映しないテストモード CouchDBのバックアップ Chefサーバのバックアップ、/etc/chef 以下も – (Chefリポジトリをバージョン管理していて、そちらのバック アップがあれば特に必要ないかも) http://www.flickr.com/photos/jonathanbeard/3307862620/ 37
38.
Chefを運用する上での課題
Recipeが正しいことを保障するには? 仮想マシン等を活用してテスト – VirtualBoxの制御ができるVagrantが便利 – 本当に正しい処理が⾏われているかは人手での確認が必要 why-run – これも人手での判断が必要 Recipeのユニットテスト – 場合によっては十分、nodeが正しい状態を保障しきれない nodeでの自作チェックスクリプト・F/W http://www.flickr.com/photos/jonathanbeard/3307862620/ 38
39.
Cookbookでのコミュニケーション
セットアップ手順のチェックをRecipe (Cookbook)という名のコードベースで DevとOpsのクロスチェック Cookbook/Node/Role等、バージョン管理して いるので、過去との差分も確認しやすい 誰でもRead/Writeできる場所にあるので、みん なでメンテナンスできる DevとOpsの新しいコミュニケーションツール http://www.flickr.com/photos/jonathanbeard/3307862620/ 39
40.
これからChefを勉強する⽅へ
chef-solo が便利 chef-server を必要とせず、ローカルにCookbookを 適用できる 小環境ならこれで十分 他にも、VMとかでテストとか練習とか Chefのインタラクティブシェル “shef” Opscode Platform (Hosted Chef) Chefのホスティング環境 (サーバ) 5 nodes までなら、無料で試せる http://www.flickr.com/photos/jonathanbeard/3307862620/ 40
41.
まとめと今後の展望
Chefを活用することで多くのサーバの増設・管理 にかかる負担を軽減 あるべき状態に自動で設定・維持できる ルールを少し覚えれば、誰でも簡単に設定が書ける 内部DSLなので、Rubyを覚えれば処理も柔軟に書ける クラウド等の基盤サービスと連携して、インフラ 構築/運用の完全オートメーションができる仕組 みにしたい http://www.flickr.com/photos/jonathanbeard/3307862620/ 41
42.
Chefでサーバ管理の省⼒化
をはじめてみませんか? http://www.flickr.com/photos/jonathanbeard/3307862620/ 42
Download