(C)Copyright 1996-2015 SAKURA Internet Inc.
壮絶!さくらのレンタルサーバ構築・運用の舞台裏
Developer Summit 2015 KANSAI
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 中山 幸治 @knakayama
• 新卒で入社して3年目
• インターネットサービス事業部
• 主にレンタルサーバの運用を担当
自己紹介
(C)Copyright 1996-2015 SAKURA Internet Inc.
さくらのレンタル
サーバ リセール
サービス始めました
宣伝
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 事業者様向けにさくらのレンタルサーバをご提供
• 事業者様は弊社レンタルサーバをエンドユーザ
様にご提供
• サービスの運用/保守は弊社でサポート
• アカウント一括登録機能など高機能なコンパネ
を用意しました
• 高速なサービスのご提供が可能となっています
さくらのレンタルサーバ リセールサービス
(C)Copyright 1996-2015 SAKURA Internet Inc.
ぜひご活用
下さい
さくらのレンタルサーバ リセールサービス
(C)Copyright 1996-2015 SAKURA Internet Inc.
今日の発表
タイトル
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
壮絶!さくらの
レンタルサーバ
構築・運用の舞台裏
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
煽り過ぎでは
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 7月中頃デブサミで発表してくれと依頼される
• 以前弊社イベント(さくらの夕べ)で発表した
経験があったため
• 発表タイトルは自分で決めてねと言われる
• 「さくらのレンタルサーバ運用の現場」
でお願いしますと伝える
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
• タイトルが大げさだったのでネタ系で挑む
• スベる
• 心に傷を負う
• 無難なタイトルにしたい ← 今ここ
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
ええ。。。
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
ハードルを
上げてみた
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
やったぜ
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
Kさんありがとう
ございます!
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
前置きは
以上です
発表タイトルが決まった経緯
(C)Copyright 1996-2015 SAKURA Internet Inc.
• デプロイ
• バージョン管理
• 監視
• 構築
アジェンダ
(C)Copyright 1996-2015 SAKURA Internet Inc.
歴史のあるサービス
の場合必ず技術的
負債が発生する
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
さくらのレンタル
サーバはお陰様で
生誕11年
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
11年サービスを続けていると
当時は最適なアーキテクチャ
であっても時が経過する内に
問題点が出てくる
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
いわゆるBlue-Greenデプロ
イメントのように既存サービ
スをそっくり作り変えるよう
なことは現実的に難しい
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
そのため既存サービス
を時代に合わせて進化
させていく必要がある
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
なので各アジェンダ
は以下の流れで発表
します
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのように
行っていたか
現在はどのように
行っているか
各アジェンダの流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
デプロイ
デプロイ
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのよう
に行っていたか
デプロイ
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのように行っていたか
$ cat list | xargs –P n ssh
(C)Copyright 1996-2015 SAKURA Internet Inc.
• listファイルに対象のホスト名を記述
• xargsの-Pオプションで並列にssh
• デプロイ毎に手順書を作る
• 作成した手順書をレビューして作業実施
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 手順書の書き方が人によって異なる
– レビューがしづらい
• デプロイ毎に同じような手順書を書く必要がある
– 無駄な工数の発生
• listファイルへの記述漏れ&不要な記述
– インシデントの発生
• デプロイに失敗したホストが分かりづらい
– 作業漏れの誘発
以前の方法における問題点
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 誰がいつ/どのホストに/何を実施したのか
把握しづらい
– 作業履歴が辿りづらい
以前の方法における問題点
(C)Copyright 1996-2015 SAKURA Internet Inc.
現在はどのよう
に行っているか
デプロイ
(C)Copyright 1996-2015 SAKURA Internet Inc.
Ansible
+
Serverspec
+
GitHub Flow
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• masterブランチからデプロイ用にブランチ切る
• デプロイ作業をAnsibleのplaybookとして記述
現在はどのように行っているか
$ git checkout –b mainte/hoge
(C)Copyright 1996-2015 SAKURA Internet Inc.
• Serverspecでテストコード記述
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• デプロイの作成が終わったらPull Request
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• レビューをして問題がなければmasterにmerge
• ansible-playbookコマンドでデプロイ
• Serverspecでデプロイ内容確認
現在はどのように行っているか
$ ansible-playbook -i ./bin/hosts.sh site.yml
--limit bar
$ git merge --no-ff mainte/foo
$ git push –u origin master
$ rake serverspec:baz -t -j n -m
(C)Copyright 1996-2015 SAKURA Internet Inc.
• Gitリポジトリを見れば誰が/何時/何を/どの
ホストにデプロイしたのか分かる
– 作業履歴の検索性向上
• 同じような作業をplaybookとして使い回せる
– 無駄な工数の低減
• playbookは単なるyamlなので作業者による記述
方法のブレが少ない
– レビューしやすい
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• デプロイに失敗したホストはretryファイルに
記述してくれる
– 作業漏れの防止
• 並列実行もしてくれる(forksオプション)
– デプロイ時間も申し分ない
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• Dynamic Inventoryを使用することでデプロイ
毎に対象ホストを記述したファイルを用意する
必要がなくなった
現在はどのように行っているか
$ ansible-playbook -i ./bin/hosts.sh site.yml
(C)Copyright 1996-2015 SAKURA Internet Inc.
• -i オプションにplaybookの対象ホストを特定の
形式のJSONで返すスクリプトを指定
• その形式でJSON返せば言語は何でもOK
• サーバの役割&環境毎にグルーピングする
– バックアップサーバ/DBサーバ/ホストサーバ/etc
– production/staging
Dynamic Inventory
(C)Copyright 1996-2015 SAKURA Internet Inc.
• _meta属性のhostvarsでホスト固有の設定を
入れる
– pythonのパス指定している
– FreeBSD/Linux混在環境のため
• これを記述しないとホスト毎に--hostつきで
実行されてしまい遅すぎて使いものにならない
Dynamic Inventory
(C)Copyright 1996-2015 SAKURA Internet Inc.
Dynamic Inventory
(C)Copyright 1996-2015 SAKURA Internet Inc.
Serverspecを使う理由
テストコードを書く大前提として、
利用しているサーバ構成管理ツールを
信頼し、インフラコードを書く自分や
他人を信頼しないという立場を取りま
しょう。
(C)Copyright 1996-2015 SAKURA Internet Inc.
• Ansibleはサーバを「あるべき状態」にしてくれる
• しかし何が「あるべき状態」か判断してくれない
– ファイルのパーミッション間違えても間違った状態を
「あるべき状態」と判断してしまう
• なので作業ミス防止のため使っている
Serverspecを使う理由
(C)Copyright 1996-2015 SAKURA Internet Inc.
バージョン管理
バージョン管理
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのよう
に行っていたか
バージョン管理
(C)Copyright 1996-2015 SAKURA Internet Inc.
CVS
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
ツラい
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
ツラさは説明しなく
ても分かると思うの
で割愛します
以前の方法における問題点
(C)Copyright 1996-2015 SAKURA Internet Inc.
現在はどのよう
に行っているか
バージョン管理
(C)Copyright 1996-2015 SAKURA Internet Inc.
Git
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
普通ですね
Git
(C)Copyright 1996-2015 SAKURA Internet Inc.
CVSからGitへの
移行方法
CVSからGitへ
(C)Copyright 1996-2015 SAKURA Internet Inc.
• git-cvsimport 使って変換する
• 踏み台サーバ経由でcvsサーバにアクセス
するのでCVS_RSHでsshのラッパースクリプト
指定する
CVSからGitへ
#!/bin/sh
target=“$*”
ssh -i <priv-key> -tt hoge “sudo ssh $target”
(C)Copyright 1996-2015 SAKURA Internet Inc.
CVSからGitへ
• -v verbosity
• -a imports all commits
• -d cvs root
• -C git repo
$ export CVS_RSH=“/path/to/cvssh.sh”
$ git cvsimport -v -a -
d :ext:cvs@hoge:/path/to/cvsroot -C <git-
repo> <cvs-repo>
(C)Copyright 1996-2015 SAKURA Internet Inc.
• このままだとcommitログがAuthor: cvs <cvs>
なので変換する必要がある
• 幸いCVSのcommitログにはby <user> と書く
習慣があったのでそれを利用する
• 変換にはgit-filter-branchを使って一括
で変換する
CVSからGitへ
(C)Copyright 1996-2015 SAKURA Internet Inc.
• --commit-filter commitの書き換え
• GIT_AUTHOR_(NAME|EMAIL) commitした人
• git-commit-tree 新しいcommitオブジェクト作る
CVSからGitへ
(C)Copyright 1996-2015 SAKURA Internet Inc.
• commitログがUTF-8で書かれてないものを
git-rebaseで変換
• commitログ変換したいだけなのでreword
• 手動で行った。。。
• 刺し身たんぽぽ
CVSからGitへ
$ git rebase -i HEAD~n
(C)Copyright 1996-2015 SAKURA Internet Inc.
監視
監視
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのよう
に行っていたか
監視
(C)Copyright 1996-2015 SAKURA Internet Inc.
• DBサーバ(MySQL)でInnoDBのクラッシュが発生
• 外部からSQL実行できるか/mysqldプロセスが
動作しているかという点は監視できていた
• すぐにCrash Recoverするのでアラートが発砲
しないため障害に気付けなかった
• 対応が遅れるとmysqldプロセス自体が起動しない
などの障害に至る
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
現在はどのよう
に行っているか
監視
(C)Copyright 1996-2015 SAKURA Internet Inc.
ログ監視
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• InnoDBのクラッシュが発生する原因は多岐に渡る
• ストレージ,H/W,データベースのデータ自体
• そのためMySQLのerrorログにCrashが発生した
と記述されたことを監視する
• ログ監視はZabbixで行う
現在はどのように行っているか
InnoDB: Database was not shut down normally!
(C)Copyright 1996-2015 SAKURA Internet Inc.
• logrt ローテーションされるlogを監視
• regexp 指定した文字列が出力されているか
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
構築
構築
(C)Copyright 1996-2015 SAKURA Internet Inc.
データベース
(C)Copyright 1996-2015 SAKURA Internet Inc.
• コンパネからボタンをポチポチクリックする
だけですぐに使える
• MySQL
• バージョンは(4.0/5.1/5.5)
• phpmyadminも使える
レンサバデータベース
(C)Copyright 1996-2015 SAKURA Internet Inc.
構築フロー
構築の流れ
(C)Copyright 1996-2015 SAKURA Internet Inc.
• ラック確保
• 機材確保
• ラック工事
• ネットワーク設定
• サーバ構築
構築フロー
(C)Copyright 1996-2015 SAKURA Internet Inc.
• ファシリティ部門にラック確保依頼を出す
• データベース残数を調査してサーバが不足する
ことが無いようにする必要がある
• 現在のところ1日約100データベース消費される
• 1ラック約3ヶ月もつ
• 適したラックを選定する必要がある
• 現在のサーバは1Uサーバなのでコールド/ホット
にする必要がある(空調に区別がある場合)
ラック確保
(C)Copyright 1996-2015 SAKURA Internet Inc.
ラックの利用状況の例
・コールドアイル
冷たい風が出てくるとこ
ろ
・ホットアイル
サーバから排出された温
まった風が出てくるとこ
ろ
・1Uサーバの場合前面か
ら冷たい風を受けて、背
面から温まった風を出す
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 物流を担当している部署へ確保依頼出す
• 不足していれば発注も行う
• 現在の構成では1ラックにつき
– 1Uサーバ x 12
– SSD/HDD x 30
– メモリ 8G x 158
– WAN側スイッチ x 1
– LAN側スイッチ x 1
ラック確保 -> 機材確保
(C)Copyright 1996-2015 SAKURA Internet Inc.
• ラックが使用できる状態にする作業
• データセンターチームに依頼を出す
• ゴミ掃除
• マウントレール取り付け
• 電源タップ取り付け
• etc
機材確保 -> ラック工事
(C)Copyright 1996-2015 SAKURA Internet Inc.
こんな感じでデータセンター
チームの方々に作って
もらいます
ラック図
(C)Copyright 1996-2015 SAKURA Internet Inc.
• WAN/LAN用スイッチの設定
• ネットワーク担当部署に依頼
• WAN側スイッチはエッジルータに接続
• LAN側スイッチはIPMI接続に使用するために使う
• 使用可能なIPの割り出しなどもお願いする
• 割り出された範囲からIP選んでDNS登録
ラック工事 -> ネットワーク設定
(C)Copyright 1996-2015 SAKURA Internet Inc.
ネットワーク構成
(C)Copyright 1996-2015 SAKURA Internet Inc.
• データセンターチームでPXEブート&セット
アップスクリプト実行し最低限の設定実施
• ラックに設置してパッケージスクリプトの適用
• 構築後の動作検証
• 各種細々とした登録作業
– 監視/ラック図/リソースグラフ/etc
• 完成
ネットワーク設定 -> サーバ構築
(C)Copyright 1996-2015 SAKURA Internet Inc.
以前はどのよう
に行っていたか
構築
(C)Copyright 1996-2015 SAKURA Internet Inc.
構築手順書
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 構築手順書見ながらサーバにsshで入って
コマンドぽちぽち打って構築する
– 10台前後とはいえ時間かかりすぎる
– 作業ミスの誘発
• 不要/非効率な各種サーバへの登録作業
– 大昔に作ったリソースグラフへの登録など
– 運用/CS部門に聞いても誰も使ってない。。。
– 監視サーバへの登録手動で行っている
以前はどのように行っていたか
(C)Copyright 1996-2015 SAKURA Internet Inc.
現在はどのよう
に行っているか
構築
(C)Copyright 1996-2015 SAKURA Internet Inc.
SSH禁止
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• あえてsshを禁止することでサーバ内オペ
レーションせず効率的なサーバ構築を目指す
• 手順書をAnsible化
• 検証作業もServerspec化
– 外部からのアクセス検証にはまだシェルを使ってる
• 監視サーバ(Zabbix)への登録はZabbix APIを利用
• リソースグラフはZabbixのスクリーン機能使う
現在はどのように行っているか
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 今のところRubyのzabbixapiというモジュール
を利用している
Zabbix API
(C)Copyright 1996-2015 SAKURA Internet Inc.
• リソースグラフを複数サーバ間で比較できる機能
• 誰も使ってなかったグラフサーバへの代替
として利用中
• 障害対応時などに同じ構成のサーバとリソースを
比較することで障害原因の特定に役立てている
• サーバの傾向などの分析にも利用中
Zabbix Screen
(C)Copyright 1996-2015 SAKURA Internet Inc.
Zabbix Screen
(C)Copyright 1996-2015 SAKURA Internet Inc.
• Zabbix Screenの登録もAPI利用
– 今のところXML作ってimportしてる。。。
– Ansibleの2.xからZabbix API叩けるようなので検証中
Zabbix Screen
(C)Copyright 1996-2015 SAKURA Internet Inc.
Zabbix Screen
(C)Copyright 1996-2015 SAKURA Internet Inc.
• 歴史あるサービスは時代に追従する必要がある
• 放置しておくととてもツラいことになる
• 最初からモダンなインフラ環境がそろっている
のもいいけど、どうやって作り変えていくかと
考えていくことに楽しさがある
• 若干エモいですが割と今は仕事が楽しいです
まとめ
(C)Copyright 1996-2015 SAKURA Internet Inc.
さくらではモダンなインフラ構築
方法を知りつつ歴史あるサービス
にどう適用していくかを考え出せ
るエンジニアを募集中です!
一緒に改善していきませんか?
求人情報です
(C)Copyright 1996-2015 SAKURA Internet Inc.
ご静聴ありがとう
ございました
終わり

【デブサミ関西B4】 壮絶!さくらのレンタルサーバ構築・運用の舞台裏

  • 1.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 壮絶!さくらのレンタルサーバ構築・運用の舞台裏 Developer Summit 2015 KANSAI
  • 2.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 中山 幸治 @knakayama • 新卒で入社して3年目 • インターネットサービス事業部 • 主にレンタルサーバの運用を担当 自己紹介
  • 3.
    (C)Copyright 1996-2015 SAKURAInternet Inc. さくらのレンタル サーバ リセール サービス始めました 宣伝
  • 4.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 事業者様向けにさくらのレンタルサーバをご提供 • 事業者様は弊社レンタルサーバをエンドユーザ 様にご提供 • サービスの運用/保守は弊社でサポート • アカウント一括登録機能など高機能なコンパネ を用意しました • 高速なサービスのご提供が可能となっています さくらのレンタルサーバ リセールサービス
  • 5.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ぜひご活用 下さい さくらのレンタルサーバ リセールサービス
  • 6.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 今日の発表 タイトル 発表タイトルが決まった経緯
  • 7.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 壮絶!さくらの レンタルサーバ 構築・運用の舞台裏 発表タイトルが決まった経緯
  • 8.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 煽り過ぎでは 発表タイトルが決まった経緯
  • 9.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 7月中頃デブサミで発表してくれと依頼される • 以前弊社イベント(さくらの夕べ)で発表した 経験があったため • 発表タイトルは自分で決めてねと言われる • 「さくらのレンタルサーバ運用の現場」 でお願いしますと伝える 発表タイトルが決まった経緯
  • 10.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • タイトルが大げさだったのでネタ系で挑む • スベる • 心に傷を負う • 無難なタイトルにしたい ← 今ここ 発表タイトルが決まった経緯
  • 11.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 発表タイトルが決まった経緯
  • 12.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ええ。。。 発表タイトルが決まった経緯
  • 13.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 発表タイトルが決まった経緯
  • 14.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ハードルを 上げてみた 発表タイトルが決まった経緯
  • 15.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 発表タイトルが決まった経緯
  • 16.
    (C)Copyright 1996-2015 SAKURAInternet Inc. やったぜ 発表タイトルが決まった経緯
  • 17.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Kさんありがとう ございます! 発表タイトルが決まった経緯
  • 18.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 前置きは 以上です 発表タイトルが決まった経緯
  • 19.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • デプロイ • バージョン管理 • 監視 • 構築 アジェンダ
  • 20.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 歴史のあるサービス の場合必ず技術的 負債が発生する 各アジェンダの流れ
  • 21.
    (C)Copyright 1996-2015 SAKURAInternet Inc. さくらのレンタル サーバはお陰様で 生誕11年 各アジェンダの流れ
  • 22.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 11年サービスを続けていると 当時は最適なアーキテクチャ であっても時が経過する内に 問題点が出てくる 各アジェンダの流れ
  • 23.
    (C)Copyright 1996-2015 SAKURAInternet Inc. いわゆるBlue-Greenデプロ イメントのように既存サービ スをそっくり作り変えるよう なことは現実的に難しい 各アジェンダの流れ
  • 24.
    (C)Copyright 1996-2015 SAKURAInternet Inc. そのため既存サービス を時代に合わせて進化 させていく必要がある 各アジェンダの流れ
  • 25.
    (C)Copyright 1996-2015 SAKURAInternet Inc. なので各アジェンダ は以下の流れで発表 します 各アジェンダの流れ
  • 26.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのように 行っていたか 現在はどのように 行っているか 各アジェンダの流れ
  • 27.
    (C)Copyright 1996-2015 SAKURAInternet Inc. デプロイ デプロイ
  • 28.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのよう に行っていたか デプロイ
  • 29.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのように行っていたか $ cat list | xargs –P n ssh
  • 30.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • listファイルに対象のホスト名を記述 • xargsの-Pオプションで並列にssh • デプロイ毎に手順書を作る • 作成した手順書をレビューして作業実施 以前はどのように行っていたか
  • 31.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 手順書の書き方が人によって異なる – レビューがしづらい • デプロイ毎に同じような手順書を書く必要がある – 無駄な工数の発生 • listファイルへの記述漏れ&不要な記述 – インシデントの発生 • デプロイに失敗したホストが分かりづらい – 作業漏れの誘発 以前の方法における問題点
  • 32.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 誰がいつ/どのホストに/何を実施したのか 把握しづらい – 作業履歴が辿りづらい 以前の方法における問題点
  • 33.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 現在はどのよう に行っているか デプロイ
  • 34.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Ansible + Serverspec + GitHub Flow 現在はどのように行っているか
  • 35.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 現在はどのように行っているか
  • 36.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • masterブランチからデプロイ用にブランチ切る • デプロイ作業をAnsibleのplaybookとして記述 現在はどのように行っているか $ git checkout –b mainte/hoge
  • 37.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • Serverspecでテストコード記述 現在はどのように行っているか
  • 38.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • デプロイの作成が終わったらPull Request 現在はどのように行っているか
  • 39.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • レビューをして問題がなければmasterにmerge • ansible-playbookコマンドでデプロイ • Serverspecでデプロイ内容確認 現在はどのように行っているか $ ansible-playbook -i ./bin/hosts.sh site.yml --limit bar $ git merge --no-ff mainte/foo $ git push –u origin master $ rake serverspec:baz -t -j n -m
  • 40.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • Gitリポジトリを見れば誰が/何時/何を/どの ホストにデプロイしたのか分かる – 作業履歴の検索性向上 • 同じような作業をplaybookとして使い回せる – 無駄な工数の低減 • playbookは単なるyamlなので作業者による記述 方法のブレが少ない – レビューしやすい 現在はどのように行っているか
  • 41.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • デプロイに失敗したホストはretryファイルに 記述してくれる – 作業漏れの防止 • 並列実行もしてくれる(forksオプション) – デプロイ時間も申し分ない 現在はどのように行っているか
  • 42.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • Dynamic Inventoryを使用することでデプロイ 毎に対象ホストを記述したファイルを用意する 必要がなくなった 現在はどのように行っているか $ ansible-playbook -i ./bin/hosts.sh site.yml
  • 43.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • -i オプションにplaybookの対象ホストを特定の 形式のJSONで返すスクリプトを指定 • その形式でJSON返せば言語は何でもOK • サーバの役割&環境毎にグルーピングする – バックアップサーバ/DBサーバ/ホストサーバ/etc – production/staging Dynamic Inventory
  • 44.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • _meta属性のhostvarsでホスト固有の設定を 入れる – pythonのパス指定している – FreeBSD/Linux混在環境のため • これを記述しないとホスト毎に--hostつきで 実行されてしまい遅すぎて使いものにならない Dynamic Inventory
  • 45.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Dynamic Inventory
  • 46.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Serverspecを使う理由 テストコードを書く大前提として、 利用しているサーバ構成管理ツールを 信頼し、インフラコードを書く自分や 他人を信頼しないという立場を取りま しょう。
  • 47.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • Ansibleはサーバを「あるべき状態」にしてくれる • しかし何が「あるべき状態」か判断してくれない – ファイルのパーミッション間違えても間違った状態を 「あるべき状態」と判断してしまう • なので作業ミス防止のため使っている Serverspecを使う理由
  • 48.
    (C)Copyright 1996-2015 SAKURAInternet Inc. バージョン管理 バージョン管理
  • 49.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのよう に行っていたか バージョン管理
  • 50.
    (C)Copyright 1996-2015 SAKURAInternet Inc. CVS 以前はどのように行っていたか
  • 51.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ツラい 以前はどのように行っていたか
  • 52.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ツラさは説明しなく ても分かると思うの で割愛します 以前の方法における問題点
  • 53.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 現在はどのよう に行っているか バージョン管理
  • 54.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Git 現在はどのように行っているか
  • 55.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 普通ですね Git
  • 56.
    (C)Copyright 1996-2015 SAKURAInternet Inc. CVSからGitへの 移行方法 CVSからGitへ
  • 57.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • git-cvsimport 使って変換する • 踏み台サーバ経由でcvsサーバにアクセス するのでCVS_RSHでsshのラッパースクリプト 指定する CVSからGitへ #!/bin/sh target=“$*” ssh -i <priv-key> -tt hoge “sudo ssh $target”
  • 58.
    (C)Copyright 1996-2015 SAKURAInternet Inc. CVSからGitへ • -v verbosity • -a imports all commits • -d cvs root • -C git repo $ export CVS_RSH=“/path/to/cvssh.sh” $ git cvsimport -v -a - d :ext:cvs@hoge:/path/to/cvsroot -C <git- repo> <cvs-repo>
  • 59.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • このままだとcommitログがAuthor: cvs <cvs> なので変換する必要がある • 幸いCVSのcommitログにはby <user> と書く 習慣があったのでそれを利用する • 変換にはgit-filter-branchを使って一括 で変換する CVSからGitへ
  • 60.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • --commit-filter commitの書き換え • GIT_AUTHOR_(NAME|EMAIL) commitした人 • git-commit-tree 新しいcommitオブジェクト作る CVSからGitへ
  • 61.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • commitログがUTF-8で書かれてないものを git-rebaseで変換 • commitログ変換したいだけなのでreword • 手動で行った。。。 • 刺し身たんぽぽ CVSからGitへ $ git rebase -i HEAD~n
  • 62.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 監視 監視
  • 63.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのよう に行っていたか 監視
  • 64.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • DBサーバ(MySQL)でInnoDBのクラッシュが発生 • 外部からSQL実行できるか/mysqldプロセスが 動作しているかという点は監視できていた • すぐにCrash Recoverするのでアラートが発砲 しないため障害に気付けなかった • 対応が遅れるとmysqldプロセス自体が起動しない などの障害に至る 以前はどのように行っていたか
  • 65.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 現在はどのよう に行っているか 監視
  • 66.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ログ監視 現在はどのように行っているか
  • 67.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • InnoDBのクラッシュが発生する原因は多岐に渡る • ストレージ,H/W,データベースのデータ自体 • そのためMySQLのerrorログにCrashが発生した と記述されたことを監視する • ログ監視はZabbixで行う 現在はどのように行っているか InnoDB: Database was not shut down normally!
  • 68.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • logrt ローテーションされるlogを監視 • regexp 指定した文字列が出力されているか 現在はどのように行っているか
  • 69.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 構築 構築
  • 70.
    (C)Copyright 1996-2015 SAKURAInternet Inc. データベース
  • 71.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • コンパネからボタンをポチポチクリックする だけですぐに使える • MySQL • バージョンは(4.0/5.1/5.5) • phpmyadminも使える レンサバデータベース
  • 72.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 構築フロー 構築の流れ
  • 73.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • ラック確保 • 機材確保 • ラック工事 • ネットワーク設定 • サーバ構築 構築フロー
  • 74.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • ファシリティ部門にラック確保依頼を出す • データベース残数を調査してサーバが不足する ことが無いようにする必要がある • 現在のところ1日約100データベース消費される • 1ラック約3ヶ月もつ • 適したラックを選定する必要がある • 現在のサーバは1Uサーバなのでコールド/ホット にする必要がある(空調に区別がある場合) ラック確保
  • 75.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ラックの利用状況の例 ・コールドアイル 冷たい風が出てくるとこ ろ ・ホットアイル サーバから排出された温 まった風が出てくるとこ ろ ・1Uサーバの場合前面か ら冷たい風を受けて、背 面から温まった風を出す
  • 76.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 物流を担当している部署へ確保依頼出す • 不足していれば発注も行う • 現在の構成では1ラックにつき – 1Uサーバ x 12 – SSD/HDD x 30 – メモリ 8G x 158 – WAN側スイッチ x 1 – LAN側スイッチ x 1 ラック確保 -> 機材確保
  • 77.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • ラックが使用できる状態にする作業 • データセンターチームに依頼を出す • ゴミ掃除 • マウントレール取り付け • 電源タップ取り付け • etc 機材確保 -> ラック工事
  • 78.
    (C)Copyright 1996-2015 SAKURAInternet Inc. こんな感じでデータセンター チームの方々に作って もらいます ラック図
  • 79.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • WAN/LAN用スイッチの設定 • ネットワーク担当部署に依頼 • WAN側スイッチはエッジルータに接続 • LAN側スイッチはIPMI接続に使用するために使う • 使用可能なIPの割り出しなどもお願いする • 割り出された範囲からIP選んでDNS登録 ラック工事 -> ネットワーク設定
  • 80.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ネットワーク構成
  • 81.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • データセンターチームでPXEブート&セット アップスクリプト実行し最低限の設定実施 • ラックに設置してパッケージスクリプトの適用 • 構築後の動作検証 • 各種細々とした登録作業 – 監視/ラック図/リソースグラフ/etc • 完成 ネットワーク設定 -> サーバ構築
  • 82.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 以前はどのよう に行っていたか 構築
  • 83.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 構築手順書 以前はどのように行っていたか
  • 84.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 構築手順書見ながらサーバにsshで入って コマンドぽちぽち打って構築する – 10台前後とはいえ時間かかりすぎる – 作業ミスの誘発 • 不要/非効率な各種サーバへの登録作業 – 大昔に作ったリソースグラフへの登録など – 運用/CS部門に聞いても誰も使ってない。。。 – 監視サーバへの登録手動で行っている 以前はどのように行っていたか
  • 85.
    (C)Copyright 1996-2015 SAKURAInternet Inc. 現在はどのよう に行っているか 構築
  • 86.
    (C)Copyright 1996-2015 SAKURAInternet Inc. SSH禁止 現在はどのように行っているか
  • 87.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • あえてsshを禁止することでサーバ内オペ レーションせず効率的なサーバ構築を目指す • 手順書をAnsible化 • 検証作業もServerspec化 – 外部からのアクセス検証にはまだシェルを使ってる • 監視サーバ(Zabbix)への登録はZabbix APIを利用 • リソースグラフはZabbixのスクリーン機能使う 現在はどのように行っているか
  • 88.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 今のところRubyのzabbixapiというモジュール を利用している Zabbix API
  • 89.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • リソースグラフを複数サーバ間で比較できる機能 • 誰も使ってなかったグラフサーバへの代替 として利用中 • 障害対応時などに同じ構成のサーバとリソースを 比較することで障害原因の特定に役立てている • サーバの傾向などの分析にも利用中 Zabbix Screen
  • 90.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Zabbix Screen
  • 91.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • Zabbix Screenの登録もAPI利用 – 今のところXML作ってimportしてる。。。 – Ansibleの2.xからZabbix API叩けるようなので検証中 Zabbix Screen
  • 92.
    (C)Copyright 1996-2015 SAKURAInternet Inc. Zabbix Screen
  • 93.
    (C)Copyright 1996-2015 SAKURAInternet Inc. • 歴史あるサービスは時代に追従する必要がある • 放置しておくととてもツラいことになる • 最初からモダンなインフラ環境がそろっている のもいいけど、どうやって作り変えていくかと 考えていくことに楽しさがある • 若干エモいですが割と今は仕事が楽しいです まとめ
  • 94.
    (C)Copyright 1996-2015 SAKURAInternet Inc. さくらではモダンなインフラ構築 方法を知りつつ歴史あるサービス にどう適用していくかを考え出せ るエンジニアを募集中です! 一緒に改善していきませんか? 求人情報です
  • 95.
    (C)Copyright 1996-2015 SAKURAInternet Inc. ご静聴ありがとう ございました 終わり