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

256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

AWSで今から始めるmongodb(1) インストールからサーバ接続まで

どもども、今日はスタバでベンティ飲んだら腹がタポタポくわのです。


そういえば、mongodbについて書いてないなぁと思いまして、自分の知識の定着の意味も含めてちょっとしばらく書いていこうかと思っています。

今日のテーマ

インストールからクライアントでの接続についてです。

mongodbとは?

まず、mongodbです。
mongodbはドキュメント指向データベースです。
ドキュメント指向ということで、データ形式JSONですべて表現されます。

PRIMARY> db.TestUser.findOne()
{
"_id" : "aaaaaaaaaaaaa",
"userid" : "akuwano",
"lastLoginTime" : NumberLong("1326287399283"),
"username" : "Akihiro Kuwano"
}

こんな感じ、また、スキーマレスなので途中でカラムが増えたりしたときもMySQLなどのようにALTER TABLEでの定義変更などは必要ありません。

詳しくはこの辺をどうぞ!


EC2インスタンスのlaunch方法

割愛。
quick-launch楽ちんですね。

インストール

インストールは、以下のようにmongodbのダウンロードサイトからバイナリをダウンロードしてみるのが一番簡単です。
せっかくなのでEC2インスタンスにインストールしてみましょう。

$ ssh -i akuwano.pem ec2-user@ec2-hogehoge.ap-northeast-1.compute.amazonaws.com
__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
[ec2-user@ip-hogehoge ~]$
See /usr/share/doc/system-release/ for latest release notes.
There are 18 security update(s) out of 26 total update(s) available
$ cd /usr/local
$ sudo wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz
$ sudo tar zxvf mongodb-linux-x86_64-2.0.2.tgz
$ cd mongodb-linux-x86_64-2.0.2

[root@ip-hogehoge mongodb-linux-x86_64-2.0.2]$ ls -R
.:
GNU-AGPL-3.0 README THIRD-PARTY-NOTICES bin

./bin:
bsondump mongo mongod mongodump mongoexport mongofiles mongoimport mongorestore mongos mongosniff mongostat mongotop

インストールされるファイルはこんな感じ。

設定〜起動

では次はインストール後の設定から起動まで。

cd /usr/local/mongodb-linux-x86_64-2.0.2
sudo mkdir -p /usr/local/mongodb-linux-x86_64-2.0.2/{logs,conf,data}

sudo su -c "cat <<'EOF' > /usr/local/mongodb-linux-x86_64-2.0.2/conf/mongod.conf
port = 27017
logpath=/usr/local/mongodb-linux-x86_64-2.0.2/logs/mongod.log
pidfilepath=/var/run/mongod1.pid
logappend=true
fork = true
dbpath=/usr/local/mongodb-linux-x86_64-2.0.2/data
directoryperdb=true
noauth = true

# Replication Options
#replSet = replSetTest001
rest = true

# Sharding Options
#shardsvr=true

# Journal Option
journal = true
EOF"


いよいよ起動!

sudo /usr/local/mongodb-linux-x86_64-2.0.2/bin/mongod -f /usr/local/mongodb-linux-x86_64-2.0.2/conf/mongod.conf

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 3 0 7112 4236 534524 0 0 37 426 26 27 0 0 95 4 0
0 3 0 7076 4236 534684 0 0 0 29876 462 836 0 4 0 93 4
0 3 0 7072 4240 534700 0 0 0 31024 509 869 0 4 0 93 4
0 2 0 7068 4240 534484 0 0 0 27240 394 171 0 4 0 88 8
0 3 0 6596 4240 535644 0 0 0 22948 408 505 0 4 0 95 1

しばらくはデータファイルのファイル確保でDISKをガリガリ書きますが、しばらく経てば終わります。

接続

次にローカルからmongoクライアントで接続してみましょう。

$ /usr/local/mongodb-linux-x86_64-2.0.2/bin/mongo
MongoDB shell version: 2.0.2
connecting to: test
>

OK

データのインサート

ちゃんとデータが入れられるかの確認、クライアントより
testdbデータベースの、testcolコレクションに、1オブジェクト追加してみます。


データ追加。

mongo> doc = { cdname: 'cdname001',
... cdtitle : 'Example CD Name'
... }
{ "cdname" : "cdname001", "cdtitle" : "Example CD Name" }
mongo>
mongo> db.testcol.insert(doc);


findで確認。

> db.testcol.find()
{ "_id" : ObjectId("4f25e4d097a5113670430159"), "cdname" : "cdname001", "cdtitle" : "Example CD Name" }

OKですね。

"_id" : ObjectId("4f25e4d097a5113670430159")はmongodb側で自動でつけてくれます、MySQLなどのRDBでいえばPK(PrimaryKey)にあたり、sharding*1の時のキーになります。

DBへのアクセス制限

これだと、誰でもアクセスできてしまうので、ユーザ、パスワードをつけてアクセス制限してみましょう。

$ /usr/local/mongodb-linux-x86_64-2.0.2/bin/mongo
MongoDB shell version: 2.0.2
connecting to: test
> use testdb
switched to db testdb
> db.addUser('user', 'password')
{
"updatedExisting" : true,
"n" : 1,
"connectionId" : 6,
"err" : null,
"ok" : 1
}
{
"_id" : ObjectId("4f25e51097a511367043015b"),
"user" : "user",
"readOnly" : false,
"pwd" : "3bcfc22a1cd6be41bc7814c13d3ce94c"
}
> use admin
switched to db admin
> db.addUser('user', 'password')
{
"updatedExisting" : true,
"n" : 1,
"connectionId" : 6,
"err" : null,
"ok" : 1
}
{
"_id" : ObjectId("4f25e50197a511367043015a"),
"user" : "user",
"readOnly" : false,
"pwd" : "3bcfc22a1cd6be41bc7814c13d3ce94c"
}
> exit

db.addUser('user', 'password') - ユーザ、パスワードの設定のためのコマンドになります。


$ ./mongo ec2-hoge.ap-northeast-1.compute.amazonaws.com:27017/testdb -u user -p HOGEHOGE
MongoDB shell version: 2.0.2
connecting to: ec2-hoge.ap-northeast-1.compute.amazonaws.com:27017/testdb
Mon Jan 30 09:46:51 uncaught exception: login failed
exception: login failed

アクセス不可。よしよし。

$ ./mongo ec2-hoge.ap-northeast-1.compute.amazonaws.com:27017/testdb -u user -p password
MongoDB shell version: 2.0.2
connecting to: ec2-hoge.ap-northeast-1.compute.amazonaws.com:27017/testdb
>

アクセスできましたー!
これでセキュリティもOKです。

EC2のセキュリティグループの設定

ここまでOKにしたら、AWSのManagementConsoleからEC2のセキュリティグループ設定を変更しましょう。
27017ポートへのアクセスを有効にします。画像参照。

[Apply Rule Changes]をおしたら有効になります。

これで完了。

これでmongodbがどこからでも使える状態になりました。
というのをたまに防備録的にまとめていきたいと思います。よろしくお願いします。

*1:後述予定(汗)