XenServerによるお手軽開発
       サーバ運用
      BPStudy#47
お前、誰よ

● 岡野真也
● @tokibito
● id:nullpobug
   ○ 偏った言語信者の垂れ流し
● 株式会社ビープラウド勤務
   ○ Python
   ○ 社内インフラ整備
今日の話題
XenServer
なぜXenServer?
BeProudで使ってます
BeProudはこんな会社(1)

● 主にWebシステムの受託開発をやってます
  ○ Linux
     ■ Debian/Ubuntu/CentOS
  ○ nginx/Apache
  ○ MySQL/PostgreSQL
  ○ Python/PHP/Ruby/Perl/Java
BeProudはこんな会社(2)

● 人数
  ○ 10人ぐらい(2008) → 30人ぐらい(2011)
業務での課題

● 本番に近い環境
● お客さんに見てもらう
● 外部システムとの連携
● バッチ処理
● 作業再開が楽(gnu screenとか)
● Wiki
● プロジェクト/課題管理
● ソースコードリポジトリ
● 他にもいろいろ..
開発作業用のサーバがほしい
じゃあサーバを用意しよう
その前に
大事なこと(前提条件)

● コストをかけすぎない(お金、時間)
   ○ お金稼ぐのが本業
● 今やらなくていいことはやらない
   ○ 過剰なものはいらない
   ○ 必要以上に複雑にしない
     ■ メンテナンスコスト
     ■ 移行コスト
どういうサーバを用意する?

● レンタルサーバ
   ○ 共用
   ○ 専用サーバ
   ○ VPS
● 自前で用意
   ○ データセンターに設置
   ○ 社内に設置
どういうサーバを用意する?(2)

● プロジェクトが増えたらどうする?
   ○ 物理サーバ増やす?
   ○ HTTP/VirtualHost?
   ○ chroot?
   ○ 仮想化を使う?
考える...

● プロジェクトごとに別の環境を作りたい
   ○ 共用サーバでは難しい
● 1プロジェクトの期間は平均でも1~3ヶ月
   ○ データセンターにサーバ設置は高い
   ○ 専用サーバでもちょっと高い
じゃあ
社内にサーバ設置
それと
仮想化で。
コンピュータの仮想化って?

● 「仮想化」
   ○ 単語にはいろんな意味がある
● ここで話題にしてるのは仮想マシン(Virtual Machine,
  VM)
   ○ ソフトウェアで仮想的にコンピュータを構成
   ○ 1台のコンピュータで何台ものVMを動かす
それでXenServer?
なぜXenServer?

● VPSを借りるより自前サーバの仮想化
   ○ 性能/機能面で有利
● KVMやXenは知識ないと大変そうに思った
● 2009年4月当時VMwareESXiは4コア上限
   ○ 8コアマシン使いたかった
● XenServerが無償で使えるようになると聞いて。
XenServerってどんなもの?

● Citrix Systemsの製品
● サーバの仮想化向け
● 無償版がある
   ○ 機能の多い上位版がある
● ハードウェアの上で直接動作するOS
● LinuxやWindowsを動かすことができる
Xenとの関係は?

● Xenはオープンソースのソフトウェア(GPL)
● XenはXenSource Incが中心で開発
● CitrixがXenSourceを買収
● XenServerはXenをベースとした製品
じゃあハードウェアは?
ハードウェアはこんなの

● ハードウェアは20~30万円程度の据え置き型
  ○ お金あんまりかけられない
  ○ ラックは置き場所や電源に困る
     ■ 2009年当時のオフィスは4,5人でいっぱい
  ○ CPUはXeonで4コアか8コアマシン
  ○ メモリは4~16GBぐらい
インストールしてみた
インストールについて(XenServer)

1. Citrixのサイトでアカウント作成後にisoをダウンロード
2. isoイメージからCDを作成してインストール
3. XenCenterを管理用端末にインストール
4. ライセンスファイルを取得
5. XenCenter経由でライセンスファイルをインストール
    ○ 無償版ライセンスは1年ごとに更新
XenCenterについて

● Windows用です...
● XenServerとXenServer上のVMを管理/操作
● リモート接続(HTTPS)
● OpenXenManager
   ○ XenCenterクローン
   ○ オープンソース
   ○ PyGTK
      ■ Ubuntuなら比較的動かしやすいかも?
インストールについて(ゲストOS)

● XenCenterから操作
● テンプレートを使う
   ○ WindowsやRedHat, SUSE, Debianなど
● isoイメージからインストール
   ○ Windows共有(CIFS)などでファイルを共有
ここが便利(1)

● XenCenter
   ○ GUIだし複数ホストの管理も楽
● スナップショット
   ○ 壊しても戻せる
● バックアップと複製
   ○ VM単位でバックアップできるので復元が楽
   ○ 同じ構成の環境を簡単に作れる
      ■ VMのテンプレート
         ■ 数分ですぐに使えるVMを用意できる
ここが便利(2)

● リソース割り当て
   ○ CPU/メモリ/ハードディスクの割り当てを変更しや
     すい
   ○ 別のホストにVMを移動して動かすとか
やった!これで便利になった!
運用開始からしばらくして...
さらなる課題

● 設定が面倒くさい
  ○ ネットワークの設定が面倒くさい
     ■ IPを固定にしたり
     ■ ホスト名を書き換えたり
  ○ ユーザの追加が面倒くさい
     ■ パスワード設定とそれの通知が大変
        ■ →鍵認証に変更
        ■ LDAPも考えたけどまだ早い
とりあえずスクリプト書いた

    Pythonで...
https://gist.github.com/1113337
設定用のスクリプト

● 設定ファイルの内容をテキスト置換
   ○ /etc/hostname
      ■ ホスト名をスクリプトで設定
   ○ /etc/hosts
      ■ 自分のホスト名をスクリプトで設定
   ○ /etc/network/interfaces
      ■ IPアドレスをスクリプトで設定
● ユーザ作成時の作業を簡単に
   ○ /etc/skel/
   ○ 公開鍵をスクリプトで設定
運用管理

● VMの管理
   ○ スプレッドシートで管理表作成(IPや用途)
   ○ 不要なVMは停止する(リソース確保)
● VMの作成
   ○ ルーチンワーク化を進める
(demo)
ルーチンワーク化する

● プロジェクト開始
   ○ →開発用サーバの申請(ユーザ,IPなど)
     ■ →管理者が手順に従ってVM作成
● リソース不足
   ○ →リソース追加申請
     ■ →管理者が手順に従ってリソース追加
"今は"これで足りてます
じゃあ今後は?
今後...

● バックアップの強化
  ○ ハードウェア障害怖い
  ○ 定期的にVMを自動バックアップ
    ■ S3に保存するとか
今後.......

● もっと会社の人数が増えたら
   ○ サーバ数増
      ■ 設定がさらに大変になる
         ■ 自動化をさらに進めるとか...
      ■ ネットワークの問題
         ■ 帯域とかアドレス割り当て
   ○ ユーザ数増
      ■ ユーザ管理が大変になる
         ■ PAM/LDAPとか...
必要になったら考える!

  (上位の製品使用の検討とかも)
おまけ
APIを使ってみる

● XenServerはXMLRPCのAPIを使える
● SDKがあるよ
● XenAPI.py
   ○ http://community.citrix.
     com/display/xs/XenServer+Python+API+Sampl
     es
● xswizard
   ○ XenAPI.pyのラッパーモジュール
   ○ 作ってみました
   ○ easy_install xswizard
from      xswizard.api               import         API
# APIオブジェクトを取得
api = API(           'http://192.168.100.1
/' ,    'username'           ,   'password'            )
# テンプレートのクローンを作成
vm = api.
get_instant_template_by_name
( 'ubuntu10.04-server'                      )   ¥
  .clone(          'new-ubuntu-server'                     )
# テンプレートからVMにする
vm.provision()
# VM起動
vm.start()
おしまい

ご清聴ありがとうございました

XenServerによるお手軽開発サーバ運用