実験用に複数(3台)の仮想マシンを用意する手順を学ぶこと。
Droongaは分散型のデータ処理システムなので、クラスタを構成するには複数の台のコンピュータを用意する必要があります。 安全のためにも(そしてより良い性能を得るためにも)、Droongaノードにはそれ用のコンピュータを用意することが望ましいです。
有効なレプリケーションのためには、2台以上のコンピュータが必要です。 また、クラスタ構成の管理を試してみるには、3台以上のコンピュータが必要となります。
しかしながら、仮に、単に検証や開発をしたい場合でも、複数の仮想マシンのインスタンスをVPSサービスで利用するにはお金がかかります。 そのような用途では、あなたの手持ちのコンピュータ上でプライベートな仮想マシンを使うのがおすすめです。
幸いなことに、Vagrantを使うと仮想マシンを簡単に管理することができます。 このチュートリアルでは、Vagrantを使って3台の仮想マシンを用意する手順を解説します。
まず最初に、仮想マシンのホストとなるPCを用意する必要があります。 仮想マシンは多くのRAMを要求する場合があるため、ホストマシンにはできれば8GB以上のメモリがあることが望ましいです。
多くの場合、メジャーなプラットフォーム向けにはビルド済みのバイナリが使われるため、それほど多くのRAMは必要ではありません。 しかしながら、仮想マシン上で動作する環境がマイナーなディストリビューションであったり、そのディストリビューションの最新のバージョンであった場合には、その環境向けのビルド済みバイナリが用意されていないことがあり得ます。そのような場合、バイナリは自動的にコンパイルされますが、その際に2GB程度のメモリが要求されます。 ネイティブ拡張のビルド時に奇妙なエラーに遭遇した場合は、仮想マシンのメモリの割り当て量を増やして再度インストールを行って下さい。 (このチュートリアルの付録も参照して下さい。)
Vagrantには、仮想マシンを実行するためのバックエンドが必要です。ここでは推奨環境のVirtualBoxをインストールすることにします。
例えば、ホストマシンがUbuntuで動作するPCなのであれば、VirtualBoxは以下のようにapt
コマンドでインストールできます:
$ sudo apt-get install virtualbox
その他の環境では、VirtualBoxのWebサイトにある手順に従ってVirtualBoxをインストールして下さい。
次に、Vagrantをインストールします。VagrantのWebサイトにある手順に従って、Vagrantをインストールして下さい。 例えば、ホストマシンがx64のUbuntu PCなのであれば、以下の要領です:
$ wget https://dl.bintray.com/mitchellh/vagrant/vagrant_1.6.5_x86_64.deb
$ sudo dpkg -i vagrant_1.6.5_x86_64.deb
注意: Ubuntu 14.04ではapt-get install vagrant
でもVagrantをインストールできますが、これは使わないで下さい。この方法でインストールできるVagrantはバージョンが古いため、Vagrant Cloudからboxをインポートできません。
Vagrant Cloudのサイトから、実験に使うためのboxを選びます。 例えばUbuntu Trusty (x64)のboxを使うのであれば、以下のようにします:
$ mkdir droonga-ubuntu-trusty
$ cd droonga-ubuntu-trusty
$ vagrant init ubuntu/trusty64
この操作で、設定ファイルのVagrantfile
が自動生成されます。
しかし、このファイルはDroongaクラスタの実験のために、以下のように完全に書き換えてしまいます:
Vagrantfile
:
n_machines = 3
box = "ubuntu/trusty64"
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
n_machines.times do |index|
config.vm.define :"node#{index}" do |node_config|
node_config.vm.box = box
node_config.vm.network(:private_network,
:ip => "192.168.100.#{50 + index}")
node_config.vm.host_name = "node#{index}"
node_config.vm.provider("virtualbox") do |virtual_box|
virtual_box.memory = 2048
end
end
end
end
注:このVagrantfile
では、3つの仮想マシンを2GB(2048MB)のメモリを伴って定義しています。
ですので、ホストマシンは6GB以上のメモリを搭載している必要があります。
もしホストマシンのメモリがそこまで多くないのであれば、この時点では512
(512MB)などの適当な値を設定しておいて下さい。
仮想マシンは、vagrant up
というコマンドで起動できます:
$ vagrant up
Bringing machine 'node0' up with 'virtualbox' provider...
Bringing machine 'node1' up with 'virtualbox' provider...
Bringing machine 'node2' up with 'virtualbox' provider...
...
これにより、Vagrantは自動的に仮想マシンのイメージをVagrant CloudのWebサイトからダウンロードし、それが終わり次第仮想マシンを起動します。
用意が完了すると、仮想ネットワーク上のIPアドレスとして192.168.100.50
、192.168.100.51
、192.168.100.52
をそれぞれ持つ3台の仮想マシンが動作している状態になります。
仮想マシンが正しく動いていることを確認しましょう。
仮想マシンにはvagrant ssh
コマンドを使って以下のようにログインできます:
$ vagrant ssh node0
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
...
vagrant@node0:~$ exit
仮想マシンにログインするためには、通常のssh
コマンドではなく、vagrant ssh
コマンドを使わなくてはなりません。
また、その前にはVagrantfile
があるディレクトリにcd
する必要もあります。
これは少々面倒です。
ですので、SSHクライアントのローカル設定ファイルに、以下のようにして仮想マシンのための設定を追加しておきましょう:
$ vagrant ssh-config node0 >> ~/.ssh/config
$ vagrant ssh-config node1 >> ~/.ssh/config
$ vagrant ssh-config node2 >> ~/.ssh/config
これで、vagrant ssh
コマンドを使わずとも、仮想マシンの名前を指定してログインできるようになります:
$ ssh node0
ネームサーバがないので、各仮想マシンはお互いのホスト名を名前解決する事ができません。 そのため、現時点ではそれぞれのIPアドレスを直接書く必要があります。 これは非常に面倒です。
なので、各仮想マシンのhostsファイルを以下のように編集しておきましょう:
/etc/hosts
:
127.0.0.1 localhost
192.168.100.50 node0
192.168.100.51 node1
192.168.100.52 node2
これで、各マシンはお互いにホスト名を指定して通信できるようになります。
仮想マシンは、vagrant halt
コマンドでまとめて終了できます:
$ vagrant halt
これで、Vagrantがすべての仮想マシンを完全に終了させてくれます。
仮想マシンの中で行ったすべての変更を取り消したい場合は、単純にvagrant destroy -f
というコマンドを実行すればOKです:
$ vagrant destroy -f
$ vagrant up
これで、すべての変更を取り消して、仮想マシンをまっさらの状態で起動し直すことができます。 この方法はインストールスクリプトの改修などの作業をする時に便利でしょう。
手持ちのコンピュータが十分なサイズのメモリを搭載していないとしても、諦める必要はありません。
各仮想マシンに2GBのメモリが必要になるのは、Rroongaのネイティブ拡張をビルドする必要があるからです。 言い換えると、既にビルド済みのバイナリがあるのであれば、Droongaノードはそこまでのメモリがなくても動作します。
ですので、以下のようにすると、各仮想マシンに順番にDroongaのサービスをインストールしていくことができます:
vagrant halt
ですべての仮想マシンを終了する。virtualbox
でVirtualBoxのコンソールを開く。ホストマシンが(リモートにある)サーバで、あなたが主に手元の別のPCを操作している状況において、仮想マシン内で動作しているHTTPサーバに手元のPCから直接接続したいと思うことがあるかもしれません。 例えば、Google Chrome、Mozilla FirefoxのようなWebブラウザを使って管理ページを操作してみたい場合などです。
このような場面では、OpenSSHのポートフォワーディング機能を使うと良いでしょう。 以下のコマンドをホストマシン上で実行してください。
% ssh vagrant@192.168.100.50 \
-i ~/.vagrant.d/insecure_private_key \
-g \
-L 20041:localhost:10041
これにより、仮想マシンnode0
(192.168.100.50
)上のdroonga-http-server
が提供している管理ページに、http://(ホストマシンのIPアドレスまたはホスト名):20041/
というURLで実際にアクセスする事ができます。
この時、ホストマシン上で動作しているOpenSSHのクライアントによって、20041
番ポートに流れ込んできたパケットはすべて仮想マシン内の10041
番ポートに転送されます。
vagrant@
というユーザ名と認証に使う秘密鍵を指定する必要があるので注意してください。-g
オプションの指定が必要です。このチュートリアルでは、Droongaノード用に3台の仮想マシンを用意する手順を学びました。
これで、「使ってみる」のチュートリアルを複数ノードで実践できます。