CentOS 5.10 64bit
MongoDB 2.9.4
MongoDB 2.9.4
■MongoDBインストール
vim /etc/yum.repos.d/10gen.repo
yum -y install mongo-10gen mongo-10gen-server --disablerepo=\* --enablerepo=10gen
service mongod start
mongo
でmongoコンソールが利用できることを確認する
service mongod stop
確認ができたらshardingノードを立ち上げるため一旦停止しておく
[10gen] name=10gen Repository baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64 gpgcheck=0 enabled=1 priority=1yum clean all
yum -y install mongo-10gen mongo-10gen-server --disablerepo=\* --enablerepo=10gen
service mongod start
mongo
でmongoコンソールが利用できることを確認する
service mongod stop
確認ができたらshardingノードを立ち上げるため一旦停止しておく
■shardサーバの起動
mkdir /data/db/shard1/
mkdir /data/db/shard2/
mongod --shardsvr --port 27017 --dbpath /data/db/shard1/
mongod --shardsvr --port 27018 --dbpath /data/db/shard2/
「--shardsvr」オプションをつけてmongodプロセスを起動します
2つのshardサーバを異なるポートで立ち上げます
初回はデータを作成するので起動まで時間がかかります
「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
mkdir /data/db/shard2/
mongod --shardsvr --port 27017 --dbpath /data/db/shard1/
mongod --shardsvr --port 27018 --dbpath /data/db/shard2/
「--shardsvr」オプションをつけてmongodプロセスを起動します
2つのshardサーバを異なるポートで立ち上げます
初回はデータを作成するので起動まで時間がかかります
「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
■configサーバの起動
mkdir /data/db/config
mongod --configsvr --port 37017 --dbpath /data/db/config
shardingのメタ情報を保存しておくmogodプロセスです
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
mongod --configsvr --port 37017 --dbpath /data/db/config
shardingのメタ情報を保存しておくmogodプロセスです
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
■mongosサーバの起動
mongos --configdb localhost:37017 --port 47017
「--configdb」オプションで先ほど起動したconfigサーバを指定します
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
「--configdb」オプションで先ほど起動したconfigサーバを指定します
shardsvr同様「--logpath」と「--fork」オプションを付与することでバックグランドで実行することが可能です
■起動プロセス確認
ここまでで起動したプロセスが以下のようになってれば問題ないです
root 6202 0.0 1.9 423840 39312 pts/6 Sl+ 18:23 0:00 mongod --shardsvr --port 27017 --dbpath /data/db/shard1/ root 6227 0.0 1.8 421756 38720 pts/9 Sl+ 18:23 0:00 mongod --shardsvr --port 27018 --dbpath /data/db/shard2/ root 6462 0.4 1.9 403340 40196 pts/8 Sl+ 18:29 0:00 mongod --configsvr --dbpath /data/db/config --port 37017 root 6477 0.0 0.4 115524 9120 pts/5 Sl+ 18:29 0:00 mongos --configdb localhost:37017 --port 47017
■sharding設定
mongosプロセス上に「admin」というコレクションが作成されていますので
adminコレクションに対して設定を追加していきます
mongo admin --port 47017
次にshard対象とするDBとコレクションとコレクションのキーを指定します
DBおよびコレクションは作成されていなくても問題ございません
adminコレクションに対して設定を追加していきます
mongo admin --port 47017
mongos> sh.addShard("localhost:27017"); { "shardAdded" : "shard0000", "ok" : 1 } mongos> sh.addShard("localhost:27018"); { "shardAdded" : "shard0001", "ok" : 1 } mongos> sh.status() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3, "minCompatibleVersion" : 3, "currentVersion" : 4, "clusterId" : ObjectId("53144b7514a80c8a98d45417") } shards: { "_id" : "shard0000", "host" : "localhost:27017" } { "_id" : "shard0001", "host" : "localhost:27018" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : false, "primary" : "shard0000" } { "_id" : "sharding_test", "partitioned" : false, "primary" : "shard0001" }27017と27018をシャードとして追加しました
次にshard対象とするDBとコレクションとコレクションのキーを指定します
DBおよびコレクションは作成されていなくても問題ございません
mongos> sh.enableSharding("sharding_test"); { "ok" : 1 } mongos> sh.shardCollection("sharding_test.test_collection",{name:1}); { "collectionsharded" : "sharding_test.test_collection", "ok" : 1 } { "ok" : 1 }これでtest_collectionはshardingできるようになったので実際にデータを投入して確認してみます
■データ登録確認
mongo --port 47017
データを登録してみます
mongosやshardサーバのログを眺めているとそれらしきログが流れていることがわかるかと思います
27017と27018にログインして確認したところ今回は27018にすべてのデータが入っていました
27017にはDBとコレクションのみ作成されていました
10万件ほどではデータは分散されないようで続けてデータを登録し続けたら100万件あたりでデータの分散が発生しました
データ27017と27018にありますがmongosから見るとその合計の値を確認することができます
■Tipsmongos> show dbs admin (empty) config 0.046875GB sharding_test 0.203125GB作成したsharding_testデータベースがあることがわかります
データを登録してみます
mongos> use sharding_test switched to db sharding_test mongos> i = 0; while ( i < 100000 ) { db.test_collection.save({name:i}); i = i + 1} 100000 mongos> db.test_collection.find(); { "_id" : ObjectId("531450466026cecc3ea4b71b"), "name" : 0 } { "_id" : ObjectId("531450466026cecc3ea4b71c"), "name" : 1 } { "_id" : ObjectId("531450466026cecc3ea4b71d"), "name" : 2 } { "_id" : ObjectId("531450466026cecc3ea4b71e"), "name" : 3 } { "_id" : ObjectId("531450466026cecc3ea4b71f"), "name" : 4 } { "_id" : ObjectId("531450466026cecc3ea4b720"), "name" : 5 } { "_id" : ObjectId("531450466026cecc3ea4b721"), "name" : 6 } { "_id" : ObjectId("531450466026cecc3ea4b722"), "name" : 7 } { "_id" : ObjectId("531450466026cecc3ea4b723"), "name" : 8 } { "_id" : ObjectId("531450466026cecc3ea4b724"), "name" : 9 } { "_id" : ObjectId("531450466026cecc3ea4b725"), "name" : 10 } { "_id" : ObjectId("531450466026cecc3ea4b726"), "name" : 11 } { "_id" : ObjectId("531450466026cecc3ea4b727"), "name" : 12 } { "_id" : ObjectId("531450466026cecc3ea4b728"), "name" : 13 } { "_id" : ObjectId("531450466026cecc3ea4b729"), "name" : 14 } { "_id" : ObjectId("531450466026cecc3ea4b72a"), "name" : 15 } { "_id" : ObjectId("531450466026cecc3ea4b72b"), "name" : 16 } { "_id" : ObjectId("531450466026cecc3ea4b72c"), "name" : 17 } { "_id" : ObjectId("531450466026cecc3ea4b72d"), "name" : 18 } { "_id" : ObjectId("531450466026cecc3ea4b72e"), "name" : 19 } Type "it" for more
mongosやshardサーバのログを眺めているとそれらしきログが流れていることがわかるかと思います
27017と27018にログインして確認したところ今回は27018にすべてのデータが入っていました
27017にはDBとコレクションのみ作成されていました
10万件ほどではデータは分散されないようで続けてデータを登録し続けたら100万件あたりでデータの分散が発生しました
データ27017と27018にありますがmongosから見るとその合計の値を確認することができます
shardサーバ、configサーバ、mongosサーバの停止はバックグラウンドで起動している場合はkillしてください
フォアグランドで実行している場合はCtrl+cで停止できます
とりあえず特定のコレクションに対してshardingさせるまではできましたフォアグランドで実行している場合はCtrl+cで停止できます
まだ未調査な部分(チャンクやreplecaSetとの複合など)が多いので何かあれば追記していきます
■参考サイト
0 件のコメント:
コメントを投稿