MongoDB分片搭建

jopen 9年前發布 | 14K 次閱讀 MongoDB NoSQL數據庫

一、環境

$ cat /etc/redhat-release 
CentOS Linux release 7.0.1406 (Core) 
$ uname -a
Linux zhaopin-2-201 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ mongo --version
MongoDB shell version: 3.0.6

二、配置Shard Server

1.創建目錄

$ sudo mkdir -p /data/mongodb/{data/{sh0,sh1},backup/{sh0,sh1},log/{sh0,sh1},conf/{sh0,sh1}}
2.準備配置文件

第一個分片:

$ sudo vim /data/mongodb/conf/sh0/mongodb.conf

base

port = 27010 maxConns = 800 filePermissions = 0700 fork = true noauth = true directoryperdb = true dbpath = /data/mongodb/data/sh0 pidfilepath = /data/mongodb/data/sh0/mongodb.pid oplogSize = 10 journal = true

security

nohttpinterface = true rest = false

log

logpath = /data/mongodb/log/sh0/mongodb.log logRotate = rename logappend = true slowms = 50 replSet = sh0 shardsvr = true</pre>

第二個分片:

$ sudo vim /data/mongodb/conf/sh1/mongodb.conf

base

port = 27011 maxConns = 800 filePermissions = 0700 fork = true noauth = true directoryperdb = true dbpath = /data/mongodb/data/sh1 pidfilepath = /data/mongodb/data/sh1/mongodb.pid oplogSize = 10 journal = true

security

nohttpinterface = true rest = false

log

logpath = /data/mongodb/log/sh1/mongodb.log logRotate = rename logappend = true slowms = 50 replSet = sh1 shardsvr = true</pre>

3.啟動Shard Server

$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 41492
child process started successfully, parent exiting
$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 41509
child process started successfully, parent exiting
$ ps aux | grep mongo | grep -v grep
root     41492  0.5  0.0 518016 54604 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
root     41509  0.5  0.0 516988 51824 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
$ mongo --port 27010
MongoDB shell version: 3.0.6
connecting to: 127.0.0.1:27010/test
>
bye
$ mongo --port 27011
MongoDB shell version: 3.0.6
connecting to: 127.0.0.1:27011/test
>
bye

三、配置Config Server

1.創建目錄

$ sudo mkdir -p /data/mongodb/{data/{cf0,cf1,cf2},backup/{cf0,cf1,cf2},log/{cf0,cf1,cf2},conf/{cf0,cf1,cf2}}
2.準備配置文件

第一個配置服務器:

$ sudo vim /data/mongodb/conf/cf0/config.conf

base

port = 27000 maxConns = 800 filePermissions = 0700 fork = true noauth = true directoryperdb = true dbpath = /data/mongodb/data/cf0 pidfilepath = /data/mongodb/data/cf0/config.pid oplogSize = 10 journal = true

security

nohttpinterface = true rest = false

log

logpath = /data/mongodb/log/cf0/config.log logRotate = rename logappend = true slowms = 50 configsvr = true</pre>

第二個配置服務器:

$ sudo vim /data/mongodb/conf/cf1/config.conf

base

port = 27001 maxConns = 800 filePermissions = 0700 fork = true noauth = true directoryperdb = true dbpath = /data/mongodb/data/cf1 pidfilepath = /data/mongodb/data/cf1/config.pid oplogSize = 10 journal = true

security

nohttpinterface = true rest = false

log

logpath = /data/mongodb/log/cf1/config.log logRotate = rename logappend = true slowms = 50 configsvr = true</pre>

第三個配置服務器:

$ sudo vim /data/mongodb/conf/cf2/config.conf

base

port = 27002 maxConns = 800 filePermissions = 0700 fork = true noauth = true directoryperdb = true dbpath = /data/mongodb/data/cf2 pidfilepath = /data/mongodb/data/cf2/config.pid oplogSize = 10 journal = true

security

nohttpinterface = true rest = false

log

logpath = /data/mongodb/log/cf2/config.log logRotate = rename logappend = true slowms = 50 configsvr = true</pre>

3.啟動

$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
about to fork child process, waiting until server is ready for connections.
forked process: 41759
child process started successfully, parent exiting
$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf1/config.conf
about to fork child process, waiting until server is ready for connections.
forked process: 41774
child process started successfully, parent exiting
$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf2/config.conf
about to fork child process, waiting until server is ready for connections.
forked process: 42170
child process started successfully, parent exiting
$ ps aux | grep mongo | grep -v grep
root     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
root     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
root     41855  0.4  0.0 467828 51684 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
root     41870  0.4  0.0 467828 52312 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf1/config.conf
root     42170  0.9  0.0 467824 52392 ?        Sl   10:37   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf2/config.conf

四、配置Query Routers

1.創建目錄

$ sudo mkdir -p /data/mongodb/{data/{ms0,ms1},backup/{ms0,ms1},log/{ms0,ms1},conf/{ms0,ms1}}
2.準備配置文件

第一個配置服務器:

$ sudo vim /data/mongodb/conf/ms0/mongos.conf

base

port = 30000 maxConns = 800 filePermissions = 0700 fork = true pidfilepath = /data/mongodb/data/ms0/mongos.pid

log

logpath = /data/mongodb/log/ms0/mongos.log logRotate = rename logappend = true configdb = 172.30.2.201:27000,172.30.2.201:27001,172.30.2.201:27002</pre>

第二個配置服務器:

$ sudo vim /data/mongodb/conf/ms1/mongos.conf

base

port = 30000 maxConns = 800 filePermissions = 0700 fork = true pidfilepath = /data/mongodb/data/ms1/mongos.pid

log

logpath = /data/mongodb/log/ms1/mongos.log logRotate = rename logappend = true configdb = 172.30.2.201:27000,172.30.2.201:27001,172.30.2.201:27002</pre>

3.啟動

$ sudo /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
about to fork child process, waiting until server is ready for connections.
forked process: 42233
child process started successfully, parent exiting
$ sudo /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms1/mongos.conf
about to fork child process, waiting until server is ready for connections.
forked process: 42286
child process started successfully, parent exiting
$ ps aux | grep mongo | grep -v grep
root     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
root     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:07 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
root     41855  0.4  0.0 546724 37812 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
root     41870  0.4  0.0 546724 38188 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf1/config.conf
root     42170  0.6  0.0 546720 41960 ?        Sl   10:37   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf2/config.conf
root     42233  0.5  0.0 233536 10188 ?        Sl   10:38   0:00 /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
root     42286  0.4  0.0 241728  9056 ?        Sl   10:38   0:00 /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms1/mongos.conf

五、初始化單節點副本集

配置副本集的好處是為了高可用,配置單節點是我自己為了節省時間,后續添加節點和副本集的操作一樣,分片的配置不需要修改

分片一:

$ mongo --port 27010
MongoDB shell version: 3.0.6
connecting to: 127.0.0.1:27010/test
> use admin
switched to db admin
> cfg={_id:"sh0", members:[ {_id:0,host:"172.30.2.201:27010"}] }
{
        "_id" : "sh0",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "172.30.2.201:27010"
                }
        ]
}
> rs.initiate( cfg );
{ "ok" : 1 }
sh0:OTHER> rs.status();
{
        "set" : "sh0",
        "date" : ISODate("2015-10-09T02:45:39.178Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.30.2.201:27010",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 2197,
                        "optime" : Timestamp(1444358731, 1),
                        "optimeDate" : ISODate("2015-10-09T02:45:31Z"),
                        "electionTime" : Timestamp(1444358731, 2),
                        "electionDate" : ISODate("2015-10-09T02:45:31Z"),
                        "configVersion" : 1,
                        "self" : true
                }
        ],
        "ok" : 1
}
sh0:PRIMARY>
bye

分片二:

$ mongo --port 27011
MongoDB shell version: 3.0.6
connecting to: 127.0.0.1:27011/test
> cfg={_id:"sh1", members:[ {_id:0,host:"172.30.2.201:27011"}] }
{
        "_id" : "sh1",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "172.30.2.201:27011"
                }
        ]
}
> rs.initiate( cfg );
{ "ok" : 1 }
sh1:OTHER> rs.status();
{
        "set" : "sh1",
        "date" : ISODate("2015-10-09T02:46:32.961Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 0,
                        "name" : "172.30.2.201:27011",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 2244,
                        "optime" : Timestamp(1444358790, 1),
                        "optimeDate" : ISODate("2015-10-09T02:46:30Z"),
                        "electionTime" : Timestamp(1444358790, 2),
                        "electionDate" : ISODate("2015-10-09T02:46:30Z"),
                        "configVersion" : 1,
                        "self" : true
                }
        ],
        "ok" : 1
}
sh1:PRIMARY>
bye

六、配置分片

$ mongo --port 30000
MongoDB shell version: 3.0.6
connecting to: 127.0.0.1:30000/test
mongos> use admin;
switched to db admin
mongos> sh.addShard("sh0/172.30.2.201:27010");
{ "shardAdded" : "sh0", "ok" : 1 }
mongos> sh.addShard("sh1/172.30.2.201:27011");
{ "shardAdded" : "sh1", "ok" : 1 }
mongos> use mydb;
switched to db mydb
mongos> db.createCollection("test");
{
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(1444358911, 1),
                "electionId" : ObjectId("56172a4bc03d9b1667f8e928")
        }
}
mongos> sh.enableSharding("mydb");
{ "ok" : 1 }
mongos> sh.shardCollection("mydb.test", {"_id":1});
{ "collectionsharded" : "mydb.test", "ok" : 1 }
mongos> sh.status();
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("561728b4030ea038bcb57fa0")
}
  shards:
        {  "_id" : "sh0",  "host" : "sh0/172.30.2.201:27010" }
        {  "_id" : "sh1",  "host" : "sh1/172.30.2.201:27011" }
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "mydb",  "partitioned" : true,  "primary" : "sh0" }
                mydb.test
                        shard key: { "_id" : 1 }
                        chunks:
                                sh0     1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : sh0 Timestamp(1, 0)

可見分片已經配置完成了

七、添加開機啟動項

$ sudo vim /etc/rc.local
/opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
/opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
/opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
/opt/mongodb/bin/mongod --config /data/mongodb/conf/cf1/config.conf
/opt/mongodb/bin/mongod --config /data/mongodb/conf/cf2/config.conf
/opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
/opt/mongodb/bin/mongos --config /data/mongodb/conf/ms1/mongos.conf

來自:http://my.oschina.net/aven92/blog/514669

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!