読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

mongodb入れてみるテスト(ダウンロード~web console~認証まで)

はじめに

本当は導入記事が書きたいわけじゃないんですが、せっかくなので順を追ってということで。。
めんどうだけど何かの為にはなるかなってことで。

ながれ

1.ダウンロード
2.インストール
3.ディレクトリ作ったりとか
4.起動確認
5.ユーザ認証有効化する
6.iptables有効にする
7.web console見てみる
8.おまけでmongoコマンドをパスに追加する<<

1.ダウンロード

http://www.mongodb.org/>Downloadsメニュー から最新版をダウンロードします。

ここのボタンを押すといきなりダウンロードが始まるので右クリックでリンクアドレスをコピーとかでURLをコピります

ってことでこっからはlinuxで作業
コピったURLをwgetでゲット

# cd /usr/local/src
# wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.8.tgz

2.インストール

インストールといっても解凍するくらいですね

# cp mongodb-linux-x86_64-2.4.8.tgz /usr/local
# cd /usr/local
# tar xvfz  mongodb-linux-x86_64-2.4.8.tgz

3.ディレクトリ作ったりとか

# cd /usr/local

※tgzはいらないので消す
# rm mongodb-linux-x86_64-2.4.8.tgz

※mongodbでアクセスできるようにリンクを貼る
# ln -s mongodb-linux-x86_64-2.4.8 mongodb

※データとログのdir作る
# mkdir -p /usr/local/mongodb/data/db
# mkdir /usr/local/mongodb/logs
# ls -la /usr/local/mongodb
total 88
drwxr-xr-x   7 root wheel  4096 Feb  6 19:39 ./
drwxr-xr-x. 34 root wheel  4096 Jan  9 21:56 ../
-rw-------   1  500 cam   34520 Aug  4  2013 GNU-AGPL-3.0
-rw-------   1  500 cam    1359 Aug  4  2013 README
-rw-------   1  500 cam   18436 Aug  4  2013 THIRD-PARTY-NOTICES
drwxr-xr-x   2 root wheel  4096 Feb  7 18:27 bin/
drwxr-xr-x   3 root wheel  4096 Jan  9 21:58 data/
drwxr-xr-x   2 root wheel  4096 Dec  4 19:30 etc/
drwxr-xr-x   2 root wheel  4096 Jan 24 14:54 logs/
lrwxrwxrwx   1 root wheel    26 Jan  9 21:55 mongodb-linux-x86_64-2.4.8 -> mongo

4.起動確認

おもむろに起動
# /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data/db
Thu Jan  9 21:58:42.341 [initandlisten] MongoDB starting : pid=46831 port=27017 dbpath=/usr/local/mongodb/data/db 64-bit host=hoge.co.jp
Thu Jan  9 21:58:42.341 [initandlisten] db version v2.4.8
Thu Jan  9 21:58:42.341 [initandlisten] git version: a350fc38922fbda2cec8d5dd842237b904eafc14
Thu Jan  9 21:58:42.341 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Thu Jan  9 21:58:42.341 [initandlisten] allocator: tcmalloc
Thu Jan  9 21:58:42.341 [initandlisten] options: { dbpath: "/usr/local/mongodb/data/db" }
Thu Jan  9 21:58:42.371 [initandlisten] journal dir=/usr/local/mongodb/data/db/journal
Thu Jan  9 21:58:42.371 [initandlisten] recover : no journal files present, no recovery needed
Thu Jan  9 21:58:43.445 [initandlisten] preallocateIsFaster=true 13.02
Thu Jan  9 21:58:44.534 [initandlisten] preallocateIsFaster=true 13.02
Thu Jan  9 21:58:46.667 [initandlisten] preallocateIsFaster=true 13.98
Thu Jan  9 21:58:46.667 [initandlisten] preallocateIsFaster check took 4.295 secs
Thu Jan  9 21:58:46.667 [initandlisten] preallocating a journal file /usr/local/mongodb/data/db/journal/prealloc.0
Thu Jan  9 21:58:55.463 [initandlisten] preallocating a journal file /usr/local/mongodb/data/db/journal/prealloc.1
Thu Jan  9 21:59:05.593 [initandlisten] preallocating a journal file /usr/local/mongodb/data/db/journal/prealloc.2
Thu Jan  9 21:59:14.766 [FileAllocator] allocating new datafile /usr/local/mongodb/data/db/local.ns, filling with zeroes...
Thu Jan  9 21:59:14.766 [FileAllocator] creating directory /usr/local/mongodb/data/db/_tmp
Thu Jan  9 21:59:14.945 [FileAllocator] done allocating datafile /usr/local/mongodb/data/db/local.ns, size: 16MB,  took 0.167 secs
Thu Jan  9 21:59:14.945 [FileAllocator] allocating new datafile /usr/local/mongodb/data/db/local.0, filling with zeroes...
Thu Jan  9 21:59:15.556 [FileAllocator] done allocating datafile /usr/local/mongodb/data/db/local.0, size: 64MB,  took 0.609 secs
Thu Jan  9 21:59:15.557 [initandlisten] command local.$cmd command: { create: "startup_log", size: 10485760, capped: true } ntoreturn:1 keyUpdates:0  reslen:37 791ms
Thu Jan  9 21:59:15.558 [initandlisten] waiting for connections on port 27017
Thu Jan  9 21:59:15.558 [websvr] admin web console waiting for connections on port 28017
Thu Jan  9 22:00:41.480 [signalProcessingThread] got signal 2 (Interrupt), will terminate after current cmd ends
Thu Jan  9 22:00:41.480 [signalProcessingThread] now exiting
Thu Jan  9 22:00:41.480 dbexit:
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: going to close listening sockets...
Thu Jan  9 22:00:41.480 [signalProcessingThread] closing listening socket: 9
Thu Jan  9 22:00:41.480 [signalProcessingThread] closing listening socket: 10
Thu Jan  9 22:00:41.480 [signalProcessingThread] closing listening socket: 11
Thu Jan  9 22:00:41.480 [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: going to flush diaglog...
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: going to close sockets...
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: waiting for fs preallocator...
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: lock for final commit...
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: final commit...
Thu Jan  9 22:00:41.480 [signalProcessingThread] shutdown: closing all files...
Thu Jan  9 22:00:41.481 [signalProcessingThread] closeAllFiles() finished
Thu Jan  9 22:00:41.481 [signalProcessingThread] journalCleanup...
Thu Jan  9 22:00:41.481 [signalProcessingThread] removeJournalFiles
Thu Jan  9 22:00:41.522 [signalProcessingThread] shutdown: removing fs lock...
Thu Jan  9 22:00:41.522 dbexit: really exiting now

日付が結構前なのはあしからずw
初期起動は若干時間がかかります
こんな感じで出てるとおり、アロケートするデータ領域を作ってるみたいです

done allocating datafile /usr/local/mongodb/data/db/local.0, size: 64MB, took 0.609 secs

おもむろに落とす
# ps aux | grep mongo
root     14304  0.4  0.4 2234284 52892 ?       Sl   Feb12   7:45 /usr/local/mongodb/bin/mongod ・・・省略

# kill -s SIGINT 14304 
おもむろにバックグラウンド起動
# /usr/local/mongodb/bin/mongod --fork --logpath /usr/local/mongodb/logs/mongodb.log --logappend --dbpath /usr/local/mongodb/data/db
about to fork child process, waiting until server is ready for connections.
forked process: 46860
all output going to: /usr/local/mongodb/logs/mongodb.log
child process started successfully, parent exiting

5.ユーザ認証有効化する

まだほとんどなにもしてないのにユーザ認証を有効化しますw

※adminデータベースのuser追加
# mongo
> use admin
switched to db admin
> db.addUser("admin","1234")
{
        "user" : "admin",
        "readOnly" : false,
        "pwd" : "8ed89808ef904343d0030043f3f44b33",
        "_id" : ObjectId("52f88b8d1232a89434a0e5a1")
}

※任意データベースのuser追加
> use hogedb
switched to db hogedb
> db.addUser("hoge","4321")
{
        "user" : "hoge",
        "readOnly" : false,
        "pwd" : "5e708034d0808a084341439843ff129f",
        "_id" : ObjectId("520a0123230d32aa4298b711")
}

> exit
bye

※いったん出てからmongoを落として再起動
# ps aux | grep mongo
root     32101  0.4  0.4 2234284 52892 ?       Sl   Feb12   7:45 /usr/local/mongodb/bin/mongod ・・・省略

# kill -s SIGINT 32101 

※認証入りでバックグラウンド起動
# /usr/local/mongodb/bin/mongod --logpath /usr/local/mongodb/logs/mongodb.log --fork --logappend --dbpath /usr/local/mongodb/data/db --profile 1 --slowms 100 --quiet --rest --auth
補足

ちなみに認証後はこんな感じでアクセスします

※ useは認証しなくても使える
> use hogedb

※ しかしオペレーションは怒られる
>show collections;
2013-10-16T20:55:06.692+0900 error: {
	"$err" : "not authorized for query on testdb.system.namespaces",
	"code" : 13
} at src/mongo/shell/query.js:131

※ 1が返ってくれば認証成功
> db.auth("hoge", "4321")
1

6.iptables有効にする

直近で使うことはないかもしれないですが、
td-agent(fluentd)と連携したり、web console眺めたりするためにポートを空けておきます

# sudo vi /etc/sysconfig/iptables
 -- vi追記 --
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27017 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 27018 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 28017 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 28018 -j ACCEPT
 ------------

※ iptables再起動
# sudo /etc/init.d/iptables restart
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]

27017はデフォルトのポートで、web consoleからアクセスする用が28017です

7.web console見てみる

こちらも興味あればベースですがさきほどポートはあけたので
ブラウザで`http://[ipアドレス]:28017`もしくは`http://[ドメイン]:28017`とアクセスするとweb consoleが表示されるはずです
f:id:tweeeety:20140529173312p:plain


8.おまけでmongoコマンドをパスに追加する

やらなくても良いんですが毎回/usr/local/mongodb/bin/mongoとか打つの面倒なのでパスを通します
.zshrcの一番下に下記2行を追記

# vi /home/hoge/.zshrc
-- vi編集 --
## mongo
export PATH=$PATH:/usr/local/mongodb/bin
----------

zshじゃない場合は適宜編集するファイルを変更してください
zshだとしても. zloginとかに追記しても良いかもです

ってことで導入メモでした