負荷分散のある環境で試したいけれど、開発環境はマシン1台しかない!
でもステージング環境で試すのはまだ怖い…
そんなときは、 VirtualBox を使って手元にステージングもどき環境を作ってしまうといいかも知れません。
ポイント
- 本番環境と似たサーバネットワークを、社内環境から隔離したかたちで手元に用意するのが目標
↑気軽に負荷分散環境での動作をシミュレート - 簡単にバーチャルマシンのコピーが作れるから、OSインストールなどの共通作業だけ先に済ませておける
事前設定
サーバネットワークに使うホストオンリーネットワークを作っておく。Oracle VM VirtualBox マネージャー(システムツール/Oracle VM VirtualBox)から
「ファイル」→「環境設定」→「ネットワーク」タブ
→「+」(追加)アイコン
→「(ドライバーの絵)」(編集)アイコン
→IPアドレスとネットワークマスクを入力して「OK」
→「OK」
共通作業
OSインストール
(省略;ISOイメージを光学メディアとして直接接続できるので活用!)事前ダウンロード
aptitude install -d パッケージ名… で、インストールする予定のあるパッケージをあらかじめダウンロードだけしておけるので、これも活用すると便利。準備できたら
一旦仮想マシンをシャットダウンします。個別マシン作成
元ネタの仮想マシンを右クリック→「clone」- 「Reinitialize the MAC address of all network cards」のチェックを忘れずに!
- 「Full Clone」を選択←元ネタにクローン側で行った変更が伝染しないようにするため
(山本のマシンだと、8Gのイメージをクローンするのに3分弱かかりました。)
起動する前にやること
ネットワーク設定(ハード?側)
できたクローンを右クリック→「設定」→「ネットワーク」タブ- 「アダプタ1」タブを選択 (こいつが仮想マシンの eth0; apt-get 用+ホストからのアクセス用)
- 「割り当て」→「NAT」←ブリッジだと無線接続時うまく動かない
- 「アダプタ2」タブを選択 (これは仮想マシンの eth1; 模擬サーバネットワークにつなげるため)
- ネットワークアダプタを有効化
- 「割り当て」→「ホストオンリー アダプタ」
- 「名前」→事前準備で作ったホストオンリーネットワークを選択
↑これで模擬サーバネットワークにつなげる - 「高度」→「アダプタタイプ」→「準仮想化ネットワーク (virtio-net)」
↑パフォーマンス(10倍くらい違うらしいです)
いざ起動!
初回はネットワーク設定がされていないので、DHCPのタイムアウトで待たされる。辛抱強く待ちましょう。
ネットワーク設定(ゲストOS側; Ubuntuゲストの例)
Ubuntu、というかいまどきのLinuxは、MACアドレスでインタフェース名を固定する機能があるが、クローンを作る場合はそれが障害になる。初回起動時に待たされる原因のほとんどはこれが原因です。
- /etc/udev/rules.d/70-persistent-net.rules 書き換え
NAME="eth0" の行を削除
NAME="eth1" の行を書き換え→ NAME="eth0" に
NAME="eth2" の行を書き換え→ NAME="eth1" に - /etc/network/interfaces 追記
auto eth1
iface eth1 inet static
address 10.0.0.11
netmask 255.255.0.0
↑IPアドレスとネットワークマスクは適切なものに読み替えて - 再起動!
ミドルウェアその他のインストール&設定
個別にインストール and/or 設定が必要なものは各プロジェクトのインフラ情報を参考に。その他
起動したままの状態で一時停止
仮想マシンのウィンドウを「閉じる」→「仮想マシンの状態を保存」を選択→ハイバネーションに似た状態になります。
スナップショット
「在りし日の仮想マシン 」として、大規模変更前などに仮想マシンの状態を記録しておくことができます。「Oracle VM VirtualBox マネージャー 」ウィンドウで、仮想マシンのアイコンを選択した状態で「スナップショット」タブを表示、カメラのようなアイコンを叩くとスナップショットが作成できます。
作ったスナップショットに仮想マシンの状態を巻き戻したり、クローンの仮想マシンを新たに起こしたりできます。
サーバネットワークのネットワーク経路が入らない?!
原因・再現性とも不明ながら、 eth1 のネットワークのための経路が入らない、もしくは何らかの理由で消えてしまうという現象がおこることがあるようです。「ゲストOSからホストOSへの ping は通るのに、ゲストOS同士や、ホストからゲストOSへの ping が通らない」のような奇妙な現象として観測されることも。
手動でネットワーク経路を追加してやることで、とりあえず修復できます。
- sudo route add -net 10.0.0.0/16 gw 10.0.0.11
0 件のコメント:
コメントを投稿