[Ubuntu]Mongodb2.0系のインストール手順と使い方メモ

Mongodb2.0系のインストール手順と使い方メモ


メモ書き程度


環境 Ubuntu 11.10


インストール手順


sudo cat "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" >> /etc/apt/sources.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
sudo aptitude update
sudo aptitude install mongodb-10gen

http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages


なお、インストールすると勝手に起動するようです


mongodbの各種ファイル


バイナリ


$ ll /usr/bin/mongo*
-rwxr-xr-x 1 root root 2682248 2011-12-16 01:33 /usr/bin/mongo*
-rwxr-xr-x 1 root root 8596624 2011-12-16 01:33 /usr/bin/mongod*
-rwxr-xr-x 1 root root 8589072 2011-12-16 01:33 /usr/bin/mongodump*
-rwxr-xr-x 1 root root 8559720 2011-12-16 01:33 /usr/bin/mongoexport*
-rwxr-xr-x 1 root root 8560392 2011-12-16 01:33 /usr/bin/mongofiles*
-rwxr-xr-x 1 root root 8580880 2011-12-16 01:33 /usr/bin/mongoimport*
-rwxr-xr-x 1 root root 8576776 2011-12-16 01:33 /usr/bin/mongorestore*
-rwxr-xr-x 1 root root 5229648 2011-12-16 01:33 /usr/bin/mongos*
-rwxr-xr-x 1 root root 8630152 2011-12-16 01:33 /usr/bin/mongostat*
-rwxr-xr-x 1 root root 8564488 2011-12-16 01:33 /usr/bin/mongotop*

mongodbのデフォルトのデータフォルダ


/var/lib/mongodb

mongodbの設定ファイル


/etc/mongodb.conf

mongodbの起動ファイル


/etc/init.d/mongodb

簡単な使い方


コンソールの起動


$ mongo

デフォルトはtest用のデータベースに接続されます


  • exit ... コンソールの終了
  • use [db_name] ... dbの変更(dbが存在しない場合は作成)
  • show dbs ... dbの一覧取得
  • show collections ... collectionの一覧を取得
  • db.[collection_name].find() ... 指定されたcollection_nameの一覧を取得

サンプル
※#はコメントを表しています(実際はだめ)


use test2
# test2 dbを作成(switchするだけ)
x = {name : "master_mongo", host : "127.0.0.1" }
# xという変数に{name: "master_mongo"...という値を設定
y = {name: "slave1", host: "192.168.1.4" }
# 同上
db.mongo.save(x)
# 現在いるdbのmongoという名前のcollectionにxを保存する
db.mongo.save(y)
# 同上
db.mongo.find()
# mongoに存在する値の一覧を取得する
db.mongo.find({name: "master_mongo"})
# mongoに存在するnameが"master_mongo"のデータを検索する(存在すれば表示)
db.mongo.remove(x)
# 変数xと同一の値のデータを削除する
db.mongo.remove({name: "slave1"})
# nameが"slave1"のデータを削除する

コマンドの色々メモ


mongoで正規表現を使って検索する


db.mongo.find({name: /mong/})

nameにmongが含まれているデータを表示する


db.mongo.find({name: /slave[\d]{1}$/})

slaveのあとに数値が1桁で終わっているデータを検索・表示する


mongoの検索結果を配列にして変数に格納する


z = db.mongo.find().toArray()

以下でデータの中身を表示(サンプルは2つ目のデータ)


z[1]

適宜追加していく
参考: http://www.mongodb.org/display/DOCS/Tutorial

スポンサーサイト

[Rails3.2]Rails3.2.0.rc2のメモ

Rails3.2.0.rc2インストール時のエラーなどなどをメモ


環境


rvmをmulti userモードでインストール(/usr/local/rvm)



# rvm list
rvm rubies

=> ruby-1.9.3-p0 [ i686 ]
# rvm gemset list
gemsets for ruby-1.9.3-p0 (found in /usr/local/rvm/gems/ruby-1.9.3-p0)
global
=> rails-head
# gem list
*** LOCAL GEMS ***

bundler (1.0.21)

railsインストール時のコマンド


gem install rails --pre --no-ri --no-rdoc

actionpack requires journey (~> 1.0.0.rc1)と出る場合


gemのバージョンが古いです
1.8.14にこのバグがfixされています


# gem -v
1.8.10

アップデート手順


gem install rubygems-update --no-ri --no-rdoc
update_rubygems

gem -vで1.8.14以上になっていることを確認しましょう
※現時点(2012/01/09)では1.8.15


検索用


Fetching: actionpack-3.2.0.rc2.gem (100%)
ERROR: Error installing rails:
actionpack requires journey (~> 1.0.0.rc1)


For a fresh install of rails 3.2.0.rc2 I can also confirm that updating rubygems to 1.8.14 fixes the problem.


https://github.com/rails/rails/issues/4317

分散オブジェクトストレージシステム「STF」をインストールしてみたよ [導入編]

STFを動作させる


いよいよlivedoorさんのSTFをインストールし、動作させてみたいと思います
とりあえずのゴールはSTFのdispatcherに対してHTTPリクエストを送り、オブジェクトを保存できるようにすることと、管理画面が見えるようになることです


なお、インストール先は(推奨場所とかがよくわからないので)、/var/www/以下としてします
また、ミドルウェア(MySQL5.1 with Q4M, Memchached, Perlbrew等)のインストールについてはこちらをご参照ください
※Nginxのインストールを上記でしていますが、今回は使いません


STFのダウンロードとcpanmによる依存ライブラリのインストール


cd /var/www
git clone git://github.com/stf-storage/stf.git
cd stf
cpanm --installdeps .

これまたすごく時間がかかります


DBD-mysql-4.020がFailでると思いますので、以下のように修正します


Fetching http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.020.tar.gz ... OK
==> Found dependencies: DBI
--> Working on DBI
Fetching http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz ... OK
Configuring DBI-1.616 ... OK
Building and testing DBI-1.616 ... OK
Successfully installed DBI-1.616
Configuring DBD-mysql-4.020 ... OK
Building and testing DBD-mysql-4.020 ... FAIL
! Installing DBD::mysql failed. See /root/.cpanm/build.log for details.
! Bailing out the installation for Test-mysqld-0.14. Retry with --prompt or --force.

cpanm --prompt --installdeps .

以下のように表示されますのでlを入力します


Configuring DBD-mysql-4.020 ... OK
Building and testing DBD-mysql-4.020 ... FAIL
Testing DBD-mysql-4.020 failed.
You can s)kip, r)etry, f)orce install, e)xamine build log, or l)ook ? [s] l

以下のようにDBD-mysql-4.020のworkingディレクトリに移動しますので
mysql.xsを修正します


Entering /root/.cpanm/work/1325356336.7830/DBD-mysql-4.020 with /bin/bash
# vi mysql.xs

以下の箇所を修正します(899行目)


using_322=is_prefix(mysql_get_server_info(imp_dbh->pmysql),"3.22");

修正後


using_322 = ((strncmp(mysql_get_server_info(imp_dbh->pmysql),"3.22",4) == 0) ? 1 : 0 );

make && make test && make installを実行してインストールします
再度STFのホームディレクトリへ移動し、cpanm --installdeps .を実行します
以下のように出ればOKです


# cpanm --installdeps .
--> Working on .
Configuring /var/www/stf ... OK
<== Installed dependencies for .. Finishing.

なお、Plack::Middleware::Reproxyがfailになることがあるようですが、再度実行すればきちんと入るようです


参考: http://dqn.sakusakutto.jp/2011/09/perl_dbdmysql_is_prefix.html


STF用のデータベースの作成


Q4M用にインストールしたMySQL5.1上にデータベースを作成します


/usr/local/q4m/bin/mysql -uroot

stfとstf_queueというデータベースを作成します


create database stf default character set utf8;
create database stf_queue default character set utf8;

stf用のテーブルを定義します


/usr/local/q4m/bin/mysql -uroot stf < /var/www/stf/misc/stf.sql

stf_queue用のテーブルを定義します
※q4m用のMySQLの場合は、FUNCTIONの定義等が完了しているようなので
sqlの上の部分を以下のようにコメントアウトします


vi /var/www/stf/misc/stf_q4m.sql

#INSTALL PLUGIN queue SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_wait RETURNS INT SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_end RETURNS INT SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_abort RETURNS INT SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_rowid RETURNS INT SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_set_srcid RETURNS INT SONAME 'libqueue_engine.so';
#CREATE FUNCTION queue_compact RETURNS INT SONAME 'libqueue_engine.so';

最後にsqlを流し込みます


/usr/local/q4m/bin/mysql -uroot stf_queue < /var/www/stf/misc/stf_q4m.sql

各種アプリケーションの起動


環境変数が多すぎて非常に面倒...
ということで適当にsh化して適当に動かす(まったく綺麗じゃないけど)


以下を適当なディレクトリにenvironment.inc(なんでincにしたのかは知らん)として保存
環境にあわせてコメントアウトの解除と設定の変更をしてください


export STF_HOST_ID=101
export STF_HOME=/var/www/stf
#export STF_QUEUE_TYPE=Schwartz
#export STF_DEBUG=1
#export STF_TIEMR=1

## Nginx
#export STF_NGINX_STYLE_PROXY=1
#export STF_NGINX_STYLE_REPROXY_ACCEL_REDIRECT_URL=/path/to/reproxy
#export USE_PLACK_REPROXY=1

## MySQL
export STF_MYSQL_DSN=dbi:mysql:stf:127.0.0.1:13306
export STF_MYSQL_USERNAME=root
export STF_MYSQL_PASSWORD=''
export STF_QUEUE_DSN=dbi:mysql:dbname=stf_queue:127.0.0.1:13306
export STF_QUEUE_USERNAME=root
export STF_QUEUE_PASSWORD=''

## Storage
# ここは自分でディレクトリを作る(書き込みできること)
export STF_STORAGE_ROOT=/var/www/stf_storage
export STF_STORAGE_PORT=8888

## Admin Interface
export STF_ADMIN_PORT=9000

以下をadmin.shとして保存


#!/bin/sh

. environment.inc
cd $STF_HOME
plackup -p $STF_ADMIN_PORT -a $STF_HOME/etc/admin.psgi

以下をstorage.shとして保存


#!/bin/sh

. environment.inc
cd $STF_HOME
plackup -p $STF_STORAGE_PORT -a $STF_HOME/etc/storage.psgi

以下をdispatcher.shとして保存


#!/bin/sh

. environment.inc
cd $STF_HOME
plackup -a $STF_HOME/etc/dispatcher.psgi

とここまで書いてdispatcher.shのほうにはポート指定がなかったことに気づいたけど
デフォルトの5000でいいやと思ってそのままにする


で最後にshを全部&つけて実行しておしまい
とりあえず動いたっぽいけど、dispatcher動いているのかな。。。
workerを動作させないとなんともよくわからない


Apache設定


管理画面はApacheで稼働させることにしてみます


miscをみるとdispatcher, storage共にApacheのmod_balancerを使っているようですが、
とりあえずは、Dispatcher Proxy等は動作させないでやってみたいと思います


Apacheの設定


virtualhostの設定に以下を追加します
大事なのはDocumentrootをstf/htdocsにすることとproxyの設定のところです


<VirtualHost *:80>
ServerName stf.namakesugi.net
DocumentRoot /var/www/stf/htdocs
<Directory "/var/www/stf/htdocs" >
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<Location />
Order allow,deny
Allow from all
</Location>

ProxyRequests Off
ProxyPass /static/ !
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>

Apacheを再起動させれば、一応Adminの画面が見えるようになります


管理画面は以下から参照できます
http://stf.namakesugi.net/
ID: namakesugi, PW: namakesugi


STFにファイルを格納する


githubのREADME通りにやってみます


bucketという名前のbucketを作成(わかりにくい)
以下を入力した後にCtrl + Dで抜けます(PUTだけど何か送る必要はない)


lwp-request -m PUT http://localhost:5000/bucket

bucketにobjectという名前のobjectを作成
適当に文字を入れて入力完了後にCtrl + Dで抜けます


lwp-request -m PUT http://localhost:5000/bucket/object

ここでは namakesugi[改行].[改行]net[改行][改行]と入れて見ました


bucketのobjectというobjectを取得


lwp-request http://localhost:5000/bucket/object

/var/www/stf_storage(stfのオブジェクトの保存先)に以下のようなファイルができていることを確認
/var/www/stf_storage/x/y/q/v/xyqvxbaphwcsqgtfvbipwugtaqwdog.dat


レプリケーションとかがまだだけどできたっぽいね!
一応上記管理画面からこのファイルがあることを確認できるかと思います
なお、Apache(Nginx)にproxyの設定をすれば、外部からこのSTFにオブジェクトを設置できるようになります


メモ


Dispatcherについて


DB(MySQL)操作ができないといけない
基本的にはデータベースへの書き込み,リクエストされたオブジェクトのURLを返却する
呼び出すのはlib/STF/API以下
lib/STF/Context.pm等を起動時に読み込む


Storageについて


Storage関連の操作をする
実際にファイルの書き込み、返却をするのはこいつ?
HTTP経由で操作可能


Workerについて


Q4M用のデータベースの中身を元に該当の操作用APIをコールする


よくわかっていないところ


オブジェクトを削除した場合はDispatcherは削除対象のobjectをobjectテーブルから削除し
deleted_objectテーブルにobjectテーブルの中身を移す
wokerはqueue_delete_objectテーブル(Queue)を取り出して該当のオブジェクトIDのデータを削除するAPIをコールする(この場合はlib/STF/API/Storage.pmかな?)
ここで,deleted_objectに入っているものをキューに登録するのはどの子なんだろうか、、、
ObjectHealth.pmあたりかな、、、enqueしているのあったし、、、でもrepairは見つけたけど他のはあったのかな
とソースを眺めている最中


STF関連の記事



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。