会社にKVM環境を構築したのでメモしておく2 - ゲスト構築&運用編 -
会社にKVM環境を構築したのでメモしておく1 - ホスト構築編 - - CREATE INDEXの続き。
ゲスト構築
ディスクイメージ作成
一番無難なqcow2で作成します。qcow2は作成時に全容量を確保しないので、ディスクスペースを有効に活用できます。詳細オプションはこちらを参照して下さい。qemu-img(1): QEMU disk image utility - Linux man page
# cd /var/lib/libvirt/images/ # qemu-img create -f qcow2 testvm.img 64G
ゲスト起動&インストール
ゲストを起動します。ここではドメインとして"testvm"、仮想CPUとして2、仮想RAMを4G、vncポートを5900として起動しています。ホスト同様にCenOS6.2を使用するので、os-variantはrhel6を指定しています。noautoconsoleはvncへの接続はWindowsPCから行うので、ゲスト起動時にホストからvncに起動しに行くのを防ぐために指定しています。他詳細オプションはこちら。virt-install(1): provision new virtual machines - Linux man page
# virt-install \ -connect=qemu:///system \ --cdrom=/var/iso/CentOS-6.2-x86_64-minimal.iso \ --name=testvm \ --ram=4096 \ --vcpus=2 \ --disk path=/var/lib/libvirt/images/testvm.img,format=qcow2 \ --os-variant=rhel6 \ --accelerate \ --network=bridge:br0 \ --graphics vnc,port=5900,keymap=ja \ --noautoconsole \ --hvm \ --virt-type=kvm
あとはゲストにvncで繋いで通常通りOSインストールを進めればOKです。インストールが終わると一旦ゲストはシャットダウンされます(リブートを選んでいても)
運用
ゲスト一覧表示
ゲスト一覧を表示します。--allオプションをつけるとshutoff状態のゲストも表示してくれるので、普段からこちらを使うようにしておくのが良いでしょう。
# virsh list --all
Id Name State
----------------------------------
- testvm shut off
ゲスト自動起動
何らかの原因でホストを再起動した時にすべてのゲストを起動するのは面倒です。なので、ホスト起動時にゲストも起動するように設定しておきます。
# virsh autostart testvm
因みにゲストの自動起動をやめたい時は--disableオプションを付けます。
# virsh autostart --disable testvm
ゲストの削除
まず、virsh上でドメインを削除します。その後、このゲストのイメージファイルを削除すればOKです。
# virsh undefine testvm # rm /var/lib/libvirt/images/testvm.img
ゲストのバックアップ&リストア
未検証ですがvirsh dumpxmlとvirsh create でできるみたいです。後日試します。
終わりに
ここまであればほぼ、KVMを使える状態にあるんじゃないかと思います。enjoy!
会社にKVM環境を構築したのでメモしておく1 - ホスト構築編 -
会社のサーバーを諸々整理するのにKVM使って構築したのでそのメモを残しておく(ホントはvmware esxiで構築したかったのだがハード発注には関わってなかったので、esxiで非サポートのRAIDボードが乗ってきたので断念)。
設定
ネットワーク設定
BondingとBridge interfaceの設定してnetworkを再起動。IP等は社内の環境なので念のため伏せてます。Bondingの設定はKVMで使う場合はmode3(broadcast)の方がいいかも?というのもネット上では見かけたのですが、未検証なことと、瞬断がクリティカルとなる用途を想定していない環境だったので、mode1(active-backup)としています。
- /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0" TYPE="Bridge" IPADDR="xx.xx.xx.xx" NETMASK="xx.xx.xx.xx" GATEWAY="xx.xx.xx.xx" BROADCAST="xx.xx.xx.xx" NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO="none" USERCTL="no"
- /etc/modprobe.d/bonding.conf
alias bond0 bonding
- /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0" NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO="none" USERCTL="no" BONDING_OPTS="mode=1 primary=eth0 miimon=100 updelay=5000" BRIDGE="br0"
- /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0" HWADDR="xx:xx:xx:xx:xx:xx" NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO="none" MASTER="bond0" SLAVE="yes" USERCTL="no"
- /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1" HWADDR="xx:xx:xx:xx:xx:xx" NM_CONTROLLED="no" ONBOOT="yes" BOOTPROTO="none" MASTER="bond0" SLAVE="yes" USERCTL="no"
# service network restart
ネットワークケーブルを交互に抜き差しして、failoverがきちんと行われることを確認します。あわせてbrctl showでBridge interfaceがあることを確認します。
# brctl show
bridge name bridge id STP enabled interfaces
br0 xxxx.xxxxxxxxxxxx
KVM設定
KVMに必要なパッケージをインストール&モジュールがロードされているのを確認。avahiがないとlibvirtdが立ち上がらないので、忘れずに入れる。
# yum groupinstall Virtualization "Virtualization Client" "Virtualization Platform" "Virtualization Tools" avahi # lsmod | grep kvm kvm_intel 50380 0 kvm 305081 1 kvm_intel
ホストマシンシャットダウン時にゲストマシンもシャットダウンするように設定。
- /etc/sysconfig/libvirt-guests
START_DELAY=20 ON_SHUTDOWN=shutdown SHUTDOWN_TIMEOUT=180
デフォルト設定ではvncが127.0.0.1でlistenして、他のPCから繋がらないのでここを修正。今回は社内サーバーということで0.0.0.0でlistenするようにしていますが、環境にあわせて下さい。
vnc_listen = "0.0.0.0"
起動&自動起動on
# service messagebus start # service avahi-daemon start # service libvirtd start # chkconfig messagebus on # chkconfig avahi-daemon on # chkconfig libvirtd on
ここまででKVM自体の設定は完成。ただこのままだと外部からvncへのポートが閉じられているのでiptablesの設定を変更します。
構築完了!
ここまで終われば後はゲストマシンを立ててあれこれできます。(長くなってしまったので、別エントリーに続く)
アジャイルサムライを読んだ。
読み終えたのは2月とかだったけど、その後何回か読み返してるし、自分の理解の整理も兼ねて感想をまとめておく。
キッカケ
今の上司がやたらと「プランを出せ」という人で、今までの仕事のやり方(主に社内B2Bでの経験)では行き詰まりを感じていた頃、twitterのTLに流れてきたのがこのエントリ。 Software Engineerにお勧めの技術書 - dann's blog - #
後発だけあってよくまとまってます。今からならこれから読むとよいかもしれません。
アジャイルはなんとなく理解しているつもりではいたけど、これを機にちゃんと勉強してみようと早速購入。
DevOps Day Tokyo 2012に参加してきた。

GMOさんで開催された、DevOps Day Tokyo 2012に参加してきました。主催の@jhottaさん、会場提供のGMOさん、そしてスポンサー企業の皆様、本当にありがとうございました。あと、事前に資料を頂けなくてぶっつけ本番だった通訳さん、本当にお疲れ様でした。特にChef関連のセッションは大変だったと思います。
資料はFBファンページにあげられるということと、ust録画があるということで(@understeerさんに感謝!)、気になったポイントを箇条書きで。
- 成功するアイデアは4%しか無い。だからアイデアに価値に変える活動であるDev/Opsは細かく行い継続的に改善することが必要。そのために自動化は必須。
- 要件がFixすることはない。要件が決まらない中でいかに開発を進めていくかが重要。
- PodcastのDevOps cafeオススメ。John WillisとDamon Edwardsでやってるよ!
- crowbarはchefをベースにbare metalレイヤーのプロビジョニングを実現したもの。
- crowbarのインストールすると(面倒くさい)Chefサーバーのインストールもカバーしてるのでオススメ。
- Damonのdev2opsも読むべき。
- Chefは近々dry-runをサポート、developer MLに入ることオススメ。
Open Space Session#2では僕はMonitoring & Metricsというセッションに参加。@jhottaさんに「最初のネタ出ししてw」と言われて、「リソース監視とビジネスメトリクスの可視化は取り組んでるんだけど…」というところからDamonが話を広げていく(というか一方的に喋るw)かたちで開始。Process monitoringが重要ということで、Ticket Trackingの他にデプロイや設定変更等のコマンド実行履歴や、そもそもサーバー上のファイル改ざんが起きていないかどうかもモニタリングすべきとのこと(TripwireやSplunkが使える)。そのためには、自動化が実現できてないといけないよー、という話。その次に自動化と継続的デリバリーをどう実現するか、に話題は移り、継続的デリバリーにはvisibility(上の話)、culture of testing、automationの3要素があるという話をしてくれました。culture of testingとは本番環境の変更に対するリスクを抑えるために変化は小さな単位で、しかも十分にテストしてから行う必要があり、それが強固なシステムを作ることに繋がるというお話。開発のアプローチとしてはTDDは必須とのこと。automationは下のレイヤーからBootstrap、Configuration、Orchestrationと3つのレイヤーからあるけど、ここへの取り組みは順番はあまり重要ではなく、やれるところから手をつけていけば良いとのこと。更に話はチームビルディングに飛び、devとopsに加えてProducer(アジャイル的には顧客かな?)が近いところでコミニュケーションをと取りながら仕事を進めていくのが重要、という話をしていることろでタイムアップとなりました。
Open Space Sessionが終わったところで@jhottaさんに「レポートよろしく」とまたも振られw,セッションのレポートをすることに。上に書いたことを何とか5分ぐらいで喋ってきました。
その後は懇親会にも参加。ust職人あるある〜インフラエンジニアあるあるで話が大盛上がりw。また、「日本だとDevOpsってOpsからDevへの一方的な片思いに近いよねー(なんとかしたい)」という話をしてきました。
ともあれ、9:30〜21:00と長丁場でしたが、内容は非常に濃く、ここで得たものを色々フィードバックしたいと思ってます。次(来年?)はDay"s"にしたい!という話もあり、非常に楽しみにしています!
Linuxエンジニア養成読本
ずーっと積み本してたんですが英語の勉強が一段楽したこともあり、夏休みの間に読もうと思って今日読み終えました。目次はこんな感じです。
- Chapter 1 ディストリビューションの系譜と今を理解する
- Chapter 2 カーネルのしくみを理解する
- Chapter 3 起動のしくみと今どきな機能
- Chapter 4 [最新]ファイルシステムのしくみ
- Chapter 5 UNIXコマンド[実践]基礎知識
- Chapter 6 シェルスクリプト[実践]基礎知識
- Chapter 7 パイプラインを使いこなそう
1,5-7はlinux初心者向きだけど、2-4は勉強になりました。僕みたいにアプリエンジニアからサーバーエンジニアにクラスチェンジしたような人はカーネルの仕組みとかの基本的な部分が断片的な知識になってたりするので、その辺を整理する意味ではよい本でした。UpstartとかBtrfsとかの新しいこともちょっと紹介的なところもあり。価格も安いのでおススメです。
EC2上にgitサーバーを構築してみる
最近仕事上でコード書くこと機会が完全に無くなってしまい、その関係で開発環境構築なんてことをすることも無くなってしまったので(しくしく)、オレオレ開発環境を作ってみようと立ち上がってみました。
とりあえず、こんな前提の環境を作ってみようかと。
将来的にはCI環境構築まで持って行きたいところですが、まずは手に届く範囲から。
方針
gitosisはgitosisの設定自体もgitで管理するもので、リポジトリ毎のアカウント管理や、新規リポジトリの作成もリモートからできるものです。便利そうなので使ってみることにします。
具体的な手順は下記の通り。EC2(Amazon Linux)とEBSは立ててある前提です。
gitosisインストール
gitosisはgitで引っ張ってきて入れます。epelリポジトリにもあるのでそちらを使ってもいいかもしれません。
$ git clone git://eagain.net/gitosis.git $ sudo python setup.py install
gitosis設定
gitosis用のユーザーを作成して、gitosisに公開鍵を登録します。今回はgitユーザーを作成し、ec2-userの公開鍵を登録することにします。ここで一つ注意なのが、gitosis用ユーザーのホームディレクトリ(/home/git)にリポジトリがあることが前提となっています。今回は/opt/gitをリポジトリ用ディレクトリにしたかったので、シンボリックリンクで対応しています。
まず、/optの中身をEBSにコピーしてから、/optとしてマウントします。
$ sudo mount /dev/sdf /mnt $ sudo mv -r /opt /mnt $ sudo umount /mnt $ sudo mount /dev/sdf /opt
/etc/fstabにも1行追加。
/dev/sdf /opt ext4 defaults,noatime 0 0
$ mkdir /opt/git $ ln -s /opt/git /home/git/repositories
gitユーザーに公開鍵を登録します。
$ sudo -H -u git gitosis-init < ~ec2-user/authorized_keys
post-updateの実行ビットが立っていないので、設定します。
$ chmod 755 /opt/git/gitosis-admin.git/hooks/post-update
とりあえず、サーバーの構築はこれで完了です。
Webのアクセス制限でIP制限とDigest認証を併用する方法
部門専用Webサーバー等で特定のIPからは無条件でアクセス許可しつつ、他のIPからはDigest認証かけたい場合の設定方法です。
AuthType Digest AuthName "member only" AuthUserFile /etc/httpd/.htdigest Require valid-user Satisfy Any Order deny,allow deny from all Allow from 192.168.0.0/24
ここでのポイントはSatisfy Any。Apacheのマニュアルはこちら。
ちなみにAnyをAllに変えると、IP制限かつDigest認証が必要になります。部門内でエライ人だけ閲覧可能、とかしたい場合には有効かもしれません。
![Linuxエンジニア養成読本 [仕事で使うための必須知識&ノウハウ満載!] (Software Design plus)](http://ecx.images-amazon.com/images/I/514HvFEtsIL._SL160_.jpg)