MongoDBスライス導入の実践

6678 ワード

この記事では、MongoDB高可用性モードの導入手順を記録します.その他の導入方法については、前の記事を参照してください.
まず機械を用意して、私はここで会社のクラウドプラットフォームで3台のDB serverを作成して、ipはそれぞれ10.199.14.84、10.199.14.89、10.199.14.90です.
mongodbの最新の安定バージョンをそれぞれインストールします.
bashwget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.12.tgz
tar -xzvf mongodb-linux-x86_64-2.4.12.tgz
mv mongodb-linux-x86_64-2.4.12 /usr/lib

ソフト接続をしたり、公式の方法でmongo shellを環境変数に追加したりします.
bashln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongo /usr/bin/mongo
ln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongos /usr/bin/mongos
ln -s /usr/lib/mongodb-linux-x86_64-2.4.12/bin/mongod /usr/bin/mongod

データを格納するディレクトリを個別に作成します.
bashmkdir -p /data/mongodb && cd /data/mongodb/ && mkdir -p conf/data conf/log mongos/log shard{1..3}/data shard{1..3}/log

起動configサーバを別々に構成するには、次の手順に従います.
bashmongod --configsvr --dbpath /data/mongodb/conf/data --port 27100 --logpath /data/mongodb/conf/confdb.log --fork --directoryperdb

configサービスがすべて起動したことを確認した後、ルーティングサーバ(mongos)を起動します.
bashmongos --configdb 10.199.144.84:27100,10.199.144.89:27100,10.199.144.90:27100 --port 27000 --logpath /data/mongodb/mongos/mongos.log --fork

それぞれ配置して各スライスコピーセットを起動し、ここでコピーセット名はそれぞれshard1shard2shard3:
bashmongod --shardsvr --replSet shard1 --port 27001 --dbpath /data/mongodb/shard1/data --logpath /data/mongodb/shard1/log/shard1.log --directoryperdb --fork

mongod --shardsvr --replSet shard2 --port 27002 --dbpath /data/mongodb/shard2/data --logpath /data/mongodb/shard2/log/shard2.log --directoryperdb --fork

mongod --shardsvr --replSet shard3 --port 27003 --dbpath /data/mongodb/shard3/data --logpath /data/mongodb/shard3/log/shard3.log --directoryperdb --fork

次に、各物理マシンにプライマリノード、レプリカノード、および仲裁ノードがあると仮定するレプリカセットを構成します.
shard 1の設定(登録84、マスターノードが明示的に指定されていない場合、登録されたマシンマスターノードが選択されます):
bashmongo --port 27001
use admin
rs.initiate({
    _id: 'shard1',
    members: [
        {_id: 84, host: '10.199.144.84:27001'},
        {_id: 89, host: '10.199.144.89:27001'},
        {_id: 90, host: '10.199.144.90:27001', arbiterOnly: true}
    ]
});

shard 2の構成(ログイン89):
bashmongo --port 27001
use admin
rs.initiate({
    _id: 'shard2',
    members: [
        {_id: 84, host: '10.199.144.84:27002', arbiterOnly: true},
        {_id: 89, host: '10.199.144.89:27002'},
        {_id: 90, host: '10.199.144.90:27002'}
    ]
});

shard 3の構成(ログイン90):
bashmongo --port 27001
use admin
rs.initiate({
    _id: 'shard3',
    members: [
        {_id: 84, host: '10.199.144.84:27002'},
        {_id: 89, host: '10.199.144.89:27002', arbiterOnly: true},
        {_id: 90, host: '10.199.144.90:27002'}
    ]
});

次に、ルーティングをスライスクラスタ構成に設定し、84と仮定して1台のマシンに勝手にログインします.
bashmongo --port 27000
use admin
db.runCommand({addShard: 'shard1/10.199.144.84:27001,10.199.144.89:27001,10.199.144.90:27001'});
db.runCommand({addShard: 'shard2/10.199.144.84:27002,10.199.144.89:27002,10.199.144.90:27002'});
db.runCommand({addShard: 'shard3/10.199.144.84:27003,10.199.144.89:27003,10.199.144.90:27003'});

構成されたshardを表示するには、次の手順に従います.
bashmongo --port 27000
use admin
db.runCommand({listshards: 1});

結果:
bash{
    "shards" : [
        {
            "_id" : "shard1",
            "host" : "shard1/10.199.144.84:27001,10.199.144.89:27001"
        },
        {
            "_id" : "shard2",
            "host" : "shard2/10.199.144.89:27002,10.199.144.90:27002"
        },
        {
            "_id" : "shard3",
            "host" : "shard3/10.199.144.90:27003,10.199.144.84:27003"
        }
    ],
    "ok" : 1
}

このうち仲裁(ARBITER)ノードは列挙されていない.
スライスをテストします.
bashmongo --port 27000
use admin
db.runCommand({enablesharding: 'dbtest'});
db.runCommand({shardcollection: 'dbtest.coll1', key: {id: 1}});
use dbtest;
for(var i=0; i<10000; i++) db.coll1.insert({id: i, s: 'str_' + i});

dbtestが既に存在する場合は、idインデックスが確立されていることを確認する必要があります!
一定時間経過後、運転db.coll1.stats()明示スライス状態:
bash{
    "sharded" : true,
    "ns" : "dbtest.coll1",
    "count" : 10000,
    ...
    "shards" : {
        "shard1" : {
            "ns" : "dbtest.coll1",
            "count" : 0,
            "size" : 0,
            ...
        },
        "shard2" : {
            "ns" : "dbtest.coll1",
            "count" : 10000,
            "size" : 559200,
            ...
        }
    }
    ...
}

ここでスライスは有効になっているが,割り当てが不均一であるだけで,すべてのデータがshard 2に存在していることがわかる.スライスkeyの選択ポリシーは、公式ドキュメントを参照できます.2.4リリースでは、hashed shard keyアルゴリズムを使用して、ドキュメントの均一な分布を保証します.
bashmongo --port 27000
use admin
sh.shardCollection('dbtest.coll1', {id: 'hashed'});

hashedアルゴリズムを使用した後、同じテストを行い、挿入されたデータはほぼ均一に分布します.
bash{
    "sharded" : true,
    "ns" : "dbtest.coll1",
    "count" : 10000,
    ...
    "shards" : {
        "shard1" : {
            "ns" : "dbtest.coll1",
            "count" : 3285,
            "size" : 183672,
            ...
        },
        "shard2" : {
            "ns" : "dbtest.coll1",
            "count" : 3349,
            "size" : 187360,
            ...
        },
        "shard3" : {
            "ns" : "dbtest.coll1",
            "count" : 3366,
            "size" : 188168,
            ...
        }
    }
}

詳細については、MongoDB Shardingを参照してください.
アプリケーションでは、MongoClientdb接続を作成します.
javascriptMongoClient.connect('mongodb://10.199.144.84:27000,10.199.144.89:27000,10.199.144.90:27000/dbtest?w=1', function(err, db) {
    ;
});

本編元住所:https://github.com/chemdemo/chemdemo.github.io/issues/9