日向夏特殊応援部隊

俺様向けメモ

Note of MogileFS #04 MogileFS Serverのインストール(2) (覚書)

前回のエントリの続きです。
主に下記のリンク先を参考にインストールしています。


そして書きかけです。w

  1. http://mogilefs.schtuff.com/another_how_to_install_mogilefs_debian_sarge
  2. http://www.sixapart.jp/techtalk/2006/10/dev_mogilefs_install.html*1

store先のディレクトリを作成

# mkdir -p /var/mogdata/dev1
# mkdir -p /var/mogdata/dev2

でこのdev1とかは後で分かります。

databaseの作成

前回svnから取ってきた人は/trunk/serverにあるmogdbsetupを使うと簡単に出来ます。

# mogdbsetup --help

Usage: mogdbsetup [opts]

Options:

                  Default      Description
                  ============ ===========================================
 --verbose        <off>        Be verbose about what's happening.

 --dbhost=        localhost    hostname or IP to MySQL server

 --dbname=        mogilefs     database name to create/upgrade

 --dbrootuser=    root         MySQL administrator username.  Only needed
                               for initial setup, not subsequent upgrades

 --dbrootpass=    <blank>      MySQL administrator password.  Only needed
                               for initial setup, not subsequent upgrades

 --dbuser=        mogile       Regular MySQL user to create and/or use
                               for MogileFS database.  This is what the
                               mogilefsd trackers connect as.

 --dbpass=        <blank>      You should change this, especially if your
                               MySQL servers are accessible to other users
                               on the network.  But they shouldn't be
                               if you're running MogileFS, because MogileFS
                               assumes your network is closed.

  --yes                        Run without questions.

対話式にインストール出来るんで、そのまま答えてしまいましょう。

# ./mogdbsetup 

This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts.

Continue? [N/y]: y

Create database name 'mogilefs'? [Y/n]: Y

Grant all privileges to user 'mogile', connecting from anywhere, to the mogilefs database? [Y/n]: Y

これでデータベースが出来ているはずです。
確認してみましょう。

# /usr/local/mysql/bin/mysql -u mogile mogilefs
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 99 to server version: 4.1.16-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
+--------------------+
| Tables_in_mogilefs |
+--------------------+
| class              |
| device             |
| domain             |
| file               |
| file_on            |
| file_on_corrupt    |
| file_to_delete     |
| file_to_replicate  |
| host               |
| server_settings    |
| tempfile           |
| unreachable_fids   |
+--------------------+
12 rows in set (0.00 sec)

今確認しましたけど、デフォルトではMyISAMになっちゃうみたいですね。
ソース見ないと回避の方法が分からないですね。そのうち調べます。

mogstoredのセットアップ

/trunk/server/confの中にmogstored.conf, mogilefsd.confの二つのファイルがあります。
特にmogstored.confなんですけど、このシンタックスはどうも1.0系の物らしくて動いてくれません。w

# mkdir -p /etc/mogilefs/
# cp *.conf /etc/mogilefs/

とするんですが、この中にあるmogstored.confに関しては下記のようにして下さい。

httplisten=127.0.0.1:7500
mgmtlisten=127.0.0.1:7501
docroot=/var/mogdata
httplisten
httpリクエストを受け付けるIP:Port
mgmtlisten
管理サーバーのIP:Port
docroot
ファイルのstore先のルート

これでmogstoredが起動するはずです。


mogstoredのオプションにhelpは無いのですが、設定されてないので、--helpをつけるとGetOptionsがこけるのでhelpが見れます。*2

Usage: mogstored [OPTS]

OPTS:
 --daemonize  -d        Daemonize
 --config=<file>        Set config file (default is /etc/mogilefs/mogstored.conf)
 --httplisten=<ip:port> IP/Port HTTP server listens on
 --mgmtlisten=<ip:port> IP/Port management/sidechannel listens on
 --docroot=<path>       Docroot above device mount points.  Defaults to /var/mogdata

下の三項目がconfigで設定出来る項目って考えて良いと思います。

# mogstored -d

で起動しましょう。

mogilefsdのセットアップ

先ほど/etc/mogilefsにコピーしたmogilefsd.confを下記のように設定します。

daemonize = 1
db_dsn = DBI:mysql:mogilefs:host=localhost
db_user = mogile
# db_pass = 
conf_port = 7001
listener_jobs = 10
delete_jobs = 1
replicate_jobs = 5
mog_root = /mnt/mogilefs
reaper_jobs = 1
daemonize
-d, --daemonオプションと一緒, daemon化する
conf_port
Clientからのリクエストを受け付けるポート
listener_jobs
Clientからのリクエスト処理数
delete_jobs
削除の際のprocess数
replicate_jobs
レプリケーションのprocess数
mog_root
多分nfsでのマウント関連?*3
reaper_jobs
どうもファイル削除関連のjobらしい

query_jobs'));

monitor_jobs
監視jobのprocess数

またmogileユーザーを作っていない場合は、作っておきましょう。

# /usr/sbin/adduser mogile

これでmogileユーザーにてmogilefsdを起動します。

# sudo -u mogile mogilefsd

プロセスを見てみましょう。

# ps auxw | grep mog
root     11656  0.0  0.8 24128 8944 ?        S    08:03   0:00 /usr/bin/perl -w /usr/bin/mogstored -d
mogile   11677  1.1  1.0 16832 11104 ?       S    08:08   0:00 /usr/bin/perl /usr/bin/mogilefsd
mogile   11678  0.0  1.0 16832 11096 ?       S    08:08   0:00 /usr/bin/mogilefsd [checker]
mogile   11679  0.1  1.0 16832 11136 ?       S    08:08   0:00 /usr/bin/mogilefsd [replicate]
mogile   11680  0.3  1.0 16832 11140 ?       S    08:08   0:00 /usr/bin/mogilefsd [replicate]
mogile   11681  0.0  1.0 16832 11140 ?       S    08:08   0:00 /usr/bin/mogilefsd [replicate]
mogile   11682  0.1  1.0 16832 11132 ?       S    08:08   0:00 /usr/bin/mogilefsd [replicate]
mogile   11683  0.1  1.0 16832 11140 ?       S    08:08   0:00 /usr/bin/mogilefsd [replicate]
mogile   11684  0.1  1.0 16832 11104 ?       S    08:08   0:00 /usr/bin/mogilefsd [delete]
mogile   11685  0.0  1.0 16832 11084 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11686  0.0  1.0 16832 11084 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11687  0.0  1.0 16832 11084 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11688  0.0  1.0 16832 11088 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11689  0.0  1.0 16832 11088 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11690  0.0  1.0 16832 11088 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11691  0.0  1.0 16832 11088 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11692  0.0  1.0 16832 11092 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11693  0.0  1.0 16832 11092 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11694  0.0  1.0 16832 11096 ?       S    08:08   0:00 /usr/bin/mogilefsd [queryworker]
mogile   11695  0.0  1.0 16832 11140 ?       S    08:08   0:00 /usr/bin/mogilefsd [monitor]
mogile   11696  0.0  1.0 16832 11140 ?       S    08:08   0:00 /usr/bin/mogilefsd [reaper]
root     11699  0.0  0.0  6120  772 pts/1    R+   08:08   0:00 grep mog

起動してますね。

mogadmによるtrackersの設定確認

mogadmコマンドはMogileFS::Utilsをインストールした場合に含まれるコマンドで、実際のMogileFSの管理はこのコマンドで行うみたいです。

# mogadm 
Usage:
    mogadm [config options] <argument(s)> [argument options]

Options:
    --lib=/path/to/lib
            Set this option to a path to include this directory in the
            module search path.

    --trackers=10.0.0.117:7001,10.0.0.118:7001,...
            Use these MogileFS trackers for status information.

Arguments:
    check   Check to ensure that all of the MogileFS system components are
            functioning and that we can contact everybody. The quickest way
            of ensuring that the entire MogileFS system is functional from
            the current machine's point of view.

    host add <host> [host options]
    host modify <host> [host options]
    host mark <host> <status>
    host delete <host>
    host list
            Functions for manipulating hosts. For add and modify, host
            options is in the format of normal command line options and can
            include anything in the "HOST OPTIONS" section.

    device add <host> [device id]
    device mark <host> <device id> <status>
    device delete <host> <device>
    device list
            Adding, editing, and deleting devices. The device id is optional
            in the add command: if you provide one, it will be setup using
            the provided id; else, a new id is assigned and provided to you
            for setting up the device.

            When marking devices, the status can be one of
            {alive|down|dead|readonly}.

    domain add <domain>
    domain delete <domain>
    domain list
            Simple commands for managing MogileFS domains. Note that you
            cannot delete a domain unless it has no classes and is devoid of
            files.

    class add <domain> <class> [class options]
    class modify <domain> <class> [class options]
    class delete <domain> <class>
    class list
            Commands for working with classes. Please see the "CLASS
            OPTIONS" section for the options to use with add/modify. Also,
            delete requires that the class have no files in it before it
            will allow the deletion.

特に気にせずMogileFSのモジュール郡をインストールした場合はlibの指定は不要です。


基本的にはhostはクラスタの登録。deviceは格納先の設定、domain, classで仮想上のファイルの区分けを行うって言う仕組みで合ってると思います。


従って順次値を設定していく事になります。


ここでは二台のサーバー構成でmogilefsを運用する事をサンプルにします。
それぞれのIPは*410.255.255.30, 10.255.255.31であるとします。


databaseは同じ場所を指すようにmogilefsd.confに記述して下さい。


このような複数構成の場合はmogadmや他のコマンドも同様にtrackersオプションを明示的に指定しないといけません。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" check
Checking trackers...
        10.255.255.30:7001 ... OK
        10.255.255.31:7001 ... OK
Checking hosts...
No devices found on tracker(s).


このような形で表示されるはずです。

まずはhostの登録からはじめましょう。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host add 10.255.255.30
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host add 10.255.255.31
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host list
10.255.255.30 [1]: down
  IP:       10.255.255.30:7500

10.255.255.31 [2]: down
  IP:       10.255.255.31:7500

恐らくこのように表示されるはずです。
hostの初期markはdownになっています。諸々設定が完了した時にremarkする必要があります。


次にdeviceの登録をします。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device add 10.255.255.30 1
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device add 10.255.255.31 2

ここで再度check, device listを確認しておきましょう。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" check
Checking trackers...
        10.255.255.30:7001 ... OK
        10.255.255.31:7001 ... OK

Checking hosts...
        [ 1] 10.255.255.30 ... skipping; status = down
        [ 2] 10.255.255.31 ... skipping; status = down
No devices found on tracker(s).
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device list
10.255.255.30 [1]: down
                   used(G) free(G) total(G)
  dev1: down       0.000   0.000   0.000  

10.255.255.31 [2]: down
                   used(G) free(G) total(G)
  dev2: down       0.000   0.000   0.000  

まだダウンしてますね。このdeviceも後ほどremarkする必要があります。


最後にdomain, classを設定しましょう。

[root@oridev02 homepage]# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" domain add www.art-code.org
[root@oridev02 homepage]# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" class add www.art-code.org testdata

この後にdomain listを確認します。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" domain list
 domain               class                mindevcount
-------------------- -------------------- -------------
 www.art-code.org     default                   0
 www.art-code.org     testdata                  2

ここに出てくるmindevcountですが、man mogadmによれば、

CLASS OPTIONS
       --mindevcount=
               Number of devices the files in this class should be replicated
               across.  Can be set to anything >= 1.

との事なので、deviceごとに含まれるファイルがいくつのdeviceにレプリカを作るかって言う設定値ですね。


この時点で、device, hostとremarkしていきます。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device mark 10.255.255.30 1 alive
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device mark 10.255.255.31 2 alive
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host mark 10.255.255.30 alive
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host mark 10.255.255.31 alive

最後にdevice list, host listをもう一度見てみましょう。

# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" device list
10.255.255.30 [1]: alive
                   used(G) free(G) total(G)
  dev1: alive      0.000   0.000   0.000  

10.255.255.31 [2]: alive
                   used(G) free(G) total(G)
  dev2: alive      0.000   0.000   0.000 
# mogadm --trackers="10.255.255.30:7001,10.255.255.31:7001" host list
10.255.255.30 [1]: alive
  IP:       10.255.255.30:7500

10.255.255.31 [2]: alive
  IP:       10.255.255.31:7500

これにてセットアップは完了です。


次回はtelnet, mogtoolにて動作の確認及びその中身、
またMogileFS::Clientを実際に使ってアクセスしてみます。

*1:先にやられてしまいましたw

*2:ちょっと汚いすね

*3:まだ良く分からない、多分要らない予感

*4:こちらの都合上w