2012/07/29

Linux環境でのbin/neo4j installコマンドの挙動

グラフDBの一つであるNeo4Jをいろいろ試す中で、 サーバースクリプトの引数にinstallオプションがある事に気がつきました。

いろいろ勝手にやってくれるのは便利なのですが、 それはそれで動きが分からないと不便なので、調べたことをメモしておきます。

環境はUbuntu 12.04 LTS 64bit版、JVMはOracle版のJava 1.6.0_33です。

マニュアルの説明

セクション18.1 Server InstallationではWindows, Linux, MacOSX毎の説明が書かれています。 ここではLinux用の記述について説明しています。

まず、導入から起動までの基本的なステップとして次のように書かれています。

  • $ bin/neo4j install
  • $ service neo4j-service status
  • $ service neo4j-service start

そして、導入ステップの中で次のような情報を入力や作業が行なわれるとされています。

  • ユーザー名 (デフォルトは"neo4j") の入力
  • ユーザーが存在しない場合の作成をスクリプトが行なう
  • dataディレクトリ以下のファイル所有者をユーザー名に変更

さらにセクション 22.9 にあるLinux用のパフォーマンスチューニングを実施するよう勧めています。

スクリプトの挙動

サービスとして起動させるために、何をするのかの説明はないので、スクリプトを普通に眺めていきます。

bin/neo4jスクリプトの中では、installservice()シェル関数の中で処理が行なわれています。

1. OS、JVMの判別

bin/utilsで定義されているdetectos, findjavaシェル関数でそれぞれOSとJVMの判別が行なわれています。

detectosの中では$ uname -sコマンドの出力をベースにDIST_OS変数に"linux"(solaris,cygwinなどの場合には正規化した値)が入るようになっています。

findjava関数はいろいろ泥くさい処理をしていて、例えばgentoo linuxの場合には$ java-config --jre-homeの出力をJAVA_HOME変数に設定するなどの処理をしています。 最終的にはJAVACMD変数にjavaコマンドのパスを格納して、それを後続の処理で使うようになっています。

2. /etc/init.d/neo4j-serviceファイルの配置

/etc/init.dディレクトリがある場合には、/etc/init.d/neo4j-serviceファイルはbin/neo4jへのシンボリックリンクとして作成されます。

その後で、$ update-rc.d neo4j-service defaults$ chown -R neo4j: data confのコマンドが実行されています。ユーザー名neo4jは適宜入力された名前に変更されて、ドキュメントにある通りの設定がされています。

グループ名の指定がないのがポイントと、いくつかドキュメントにない暗黙の設定があります。

インストール処理の自動化について

falseに設定されているHEADLESS変数は質問があるところで参照されて、もしtrueだと全ての設問にy(yes)を選択した挙動になります。 これを使う場合、外部から変数にtrueを設定する仕組みはないので、スクリプト自体を上書きする必要があります。

またwrapper_user変数は、作成するユーザー名の指定があって、通常は$ id -unから実行時のUIDの値が入りますが、$ sudo env wrapper_user=neo4jsrvr bin/neo4j installのようにするとコマンドラインからデフォルトのユーザーIDが指定できます。

この他にenvコマンドで同様に操作できるパラメータには次の変数がありました。

  • org_neo4j_server_webserver_port - ポート番号 (既存プロセスのステータス確認に使用)
  • wrapper_user - サーバーを実行するユーザーID
  • wrapper_ntservice_name - /etc/init.d/直下に作成するシンボリックリンクのファイル名 (serviceコマンドの引数に指定する名前)

ユーザーIDと/etc/init.d以下に配置されるファイル名の変更であれば、手動でHEADLESS=falseをtrueに変更して、envコマンドの引数でパラメータを指定すれば、対話的な処理なしにインストール作業を進めることができます。

org_neo4j_server_webserver_port は導入時のプロセスチェックにのみ使われて、confファイルは変更されません。 conf/neo4j-server.propertiesファイルを直接変更する必要があります。

上書きされるファイルについて

変更されたユーザー名については、conf/neo4j-wrapper.propertiesファイルが変更されます。 これによって$ sudo /etc/init.d/neo4j-service startのように実行すると、自動的に指定したユーザーIDでneo4jプロセスが起動します。

これ以外のパラメータは、confファイルを変更する必要があります。

さいごに

installオプションを実行すると、ファイルが展開されているディレクトリがそのまま使われます。 マニュアルにもありますが、/opt以下などにtar.gzを展開する必要があるでしょう。

その反面 data, conf ディレクトリは展開されたディレクトリに含まれているので、本番で運用するのであれば、これらデータ本体の配置は考慮する必要があります。

アップグレード時は、初回起動時にデータベース構造の更新処理が走る事になっているので、tar.gzを展開して、conf, dataを入れ替えるか、シンボリックリンクで適当なディレクトリを参照するようにしてあげるぐらいで良いようです。

その他に本番運用にはクラスタリングやオンラインバックアップなど、まだ考慮しなければいけない要素があるので、これから検証していく予定です。

0 件のコメント: