MongoDB分片搭建

来源:互联网 发布:android 源码 github 编辑:程序博客网 时间:2024/06/06 19:23

一、环境

$ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) $ uname -aLinux 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 --versionMongoDB shell version: 3.0.6node1: 172.30.2.201node2: 172.30.2.202node3: 172.30.2.203

二、配置Shard Server

在3个节点分别执行:

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# baseport = 27010maxConns = 800 filePermissions = 0700fork = truenoauth = truedirectoryperdb = truedbpath = /data/mongodb/data/sh0pidfilepath = /data/mongodb/data/sh0/mongodb.pidoplogSize = 10journal = true# securitynohttpinterface = truerest = false# log logpath = /data/mongodb/log/sh0/mongodb.loglogRotate = renamelogappend = trueslowms = 50replSet = sh0 shardsvr = true

第二个分片:

$ sudo vim /data/mongodb/conf/sh1/mongodb.conf# baseport = 27011maxConns = 800 filePermissions = 0700fork = truenoauth = truedirectoryperdb = truedbpath = /data/mongodb/data/sh1pidfilepath = /data/mongodb/data/sh1/mongodb.pidoplogSize = 10journal = true# securitynohttpinterface = truerest = false# loglogpath = /data/mongodb/log/sh1/mongodb.loglogRotate = renamelogappend = trueslowms = 50replSet = sh1shardsvr = true
3.启动Shard Server
$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.confabout to fork child process, waiting until server is ready for connections.forked process: 41492child process started successfully, parent exiting$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.confabout to fork child process, waiting until server is ready for connections.forked process: 41509child process started successfully, parent exiting$ ps aux | grep mongo | grep -v greproot     41492  0.5  0.0 518016 54604 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.confroot     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 27010MongoDB shell version: 3.0.6connecting to: 127.0.0.1:27010/test>bye$ mongo --port 27011MongoDB shell version: 3.0.6connecting to: 127.0.0.1:27011/test>bye

三、配置Config Server

在3个节点分别执行:

1.创建目录
$ sudo mkdir -p /data/mongodb/{data/cf0,backup/cf0,log/cf0,conf/cf0}
2.准备配置文件
$ sudo vim /data/mongodb/conf/cf0/config.conf# baseport = 27000maxConns = 800filePermissions = 0700fork = truenoauth = truedirectoryperdb = truedbpath = /data/mongodb/data/cf0pidfilepath = /data/mongodb/data/cf0/config.pidoplogSize = 10journal = true# securitynohttpinterface = truerest = false# loglogpath = /data/mongodb/log/cf0/config.loglogRotate = renamelogappend = trueslowms = 50configsvr = true
3.启动
$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.confabout to fork child process, waiting until server is ready for connections.forked process: 41759child process started successfully, parent exiting$ ps aux | grep mongo | grep -v greproot     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.confroot     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.confroot     41855  0.4  0.0 467828 51684 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf

四、配置Query Routers

在3个节点分别执行:

1.创建目录
$ sudo mkdir -p /data/mongodb/{data/ms0,backup/ms0,log/ms0,conf/ms0}
2.准备配置文件
$ sudo vim /data/mongodb/conf/ms0/mongos.conf# baseport = 30000maxConns = 800filePermissions = 0700fork = truepidfilepath = /data/mongodb/data/ms0/mongos.pid# loglogpath = /data/mongodb/log/ms0/mongos.loglogRotate = renamelogappend = trueconfigdb = 172.30.2.201:27000,172.30.2.202:27000,172.30.2.203:27000

3.启动

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

五、初始化副本集

配置副本集的好处是为了高可用,配置单节点是我自己为了节省时间,后续添加节点和副本集的操作一样,分片的配置不需要修改,在任何一个节点执行,这里在node1上执行

分片一:

$ mongo --port 27010MongoDB shell version: 3.0.6connecting to: 127.0.0.1:27010/test> use adminswitched to db admin> cfg={_id:"sh0"members:[ {_id:0,host:"172.30.2.201:27010"}, {_id:1,host:"172.30.2.202:27010"}, {_id:2,host:"172.30.2.203:27010"} ] }{        "_id" : "sh0",        "members" : [                {                        "_id" : 0,                        "host" : "172.30.2.201:27010"                },                {                        "_id" : 1,                        "host" : "172.30.2.202:27010"                },                {                        "_id" : 2,                        "host" : "172.30.2.203:27010"                }        ]}> rs.initiate( cfg );{ "ok" : 1 }sh0:OTHER> rs.status(){        "set" : "sh0",        "date" : ISODate("2015-10-23T05:33:31.920Z"),        "myState" : 1,        "members" : [                {                        "_id" : 0,                        "name" : "172.30.2.201:27010",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 270,                        "optime" : Timestamp(14455784041),                        "optimeDate" : ISODate("2015-10-23T05:33:24Z"),                        "electionTime" : Timestamp(14455784081),                        "electionDate" : ISODate("2015-10-23T05:33:28Z"),                        "configVersion" : 1,                        "self" : true                },                {                        "_id" : 1,                        "name" : "172.30.2.202:27010",                        "health" : 1,                        "state" : 5,                        "stateStr" : "STARTUP2",                        "uptime" : 7,                        "optime" : Timestamp(00),                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),                        "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"),                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.295Z"),                        "pingMs" : 1,                        "configVersion" : 1                },                {                        "_id" : 2,                        "name" : "172.30.2.203:27010",                        "health" : 1,                        "state" : 5,                        "stateStr" : "STARTUP2",                        "uptime" : 7,                        "optime" : Timestamp(00),                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),                        "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"),                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.293Z"),                        "pingMs" : 1,                        "configVersion" : 1                }        ],        "ok" : 1}sh0:PRIMARY>bye

分片二:

$ mongo --port 27011MongoDB shell version: 3.0.6connecting to: 127.0.0.1:27011/test> use adminswitched to db admin> cfg={_id:"sh1"members:[ {_id:0,host:"172.30.2.201:27011"}, {_id:1,host:"172.30.2.202:27011"}, {_id:2,host:"172.30.2.203:27011"} ] }{        "_id" : "sh1",        "members" : [                {                        "_id" : 0,                        "host" : "172.30.2.201:27011"                },                {                        "_id" : 1,                        "host" : "172.30.2.202:27011"                },                {                        "_id" : 2,                        "host" : "172.30.2.203:27011"                }        ]}> rs.initiate( cfg );{ "ok" : 1 }sh1:OTHER> rs.status();{        "set" : "sh1",        "date" : ISODate("2015-10-23T05:36:02.365Z"),        "myState" : 1,        "members" : [                {                        "_id" : 0,                        "name" : "172.30.2.201:27011",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 406,                        "optime" : Timestamp(14455785571),                        "optimeDate" : ISODate("2015-10-23T05:35:57Z"),                        "electionTime" : Timestamp(14455785611),                        "electionDate" : ISODate("2015-10-23T05:36:01Z"),                        "configVersion" : 1,                        "self" : true                },                {                        "_id" : 1,                        "name" : "172.30.2.202:27011",                        "health" : 1,                        "state" : 5,                        "stateStr" : "STARTUP2",                        "uptime" : 5,                        "optime" : Timestamp(00),                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),                        "lastHeartbeat" : ISODate("2015-10-23T05:36:01.168Z"),                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.175Z"),                        "pingMs" : 0,                        "configVersion" : 1                },                {                        "_id" : 2,                        "name" : "172.30.2.203:27011",                        "health" : 1,                        "state" : 5,                        "stateStr" : "STARTUP2",                        "uptime" : 5,                        "optime" : Timestamp(00),                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),                        "lastHeartbeat" : ISODate("2015-10-23T05:36:01.167Z"),                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.172Z"),                        "pingMs" : 0,                        "configVersion" : 1                }        ],        "ok" : 1}sh1:PRIMARY>bye

六、配置分片

$ mongo --port 30000MongoDB shell version: 3.0.6connecting to: 127.0.0.1:30000/testmongos> use admin;switched to db adminmongos> sh.addShard("sh0/172.30.2.201:27010,172.30.2.202:27010,172.30.2.203:27010");{ "shardAdded" : "sh0""ok" : 1 }mongos> sh.addShard("sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203:27011");{ "shardAdded" : "sh1""ok" : 1 }mongos> use mydb;switched to db mydbmongos> db.createCollection("test");{        "ok" : 1,        "$gleStats" : {                "lastOpTime" : Timestamp(14443589111),                "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,172.30.2.202:27010,172.30.2.203:27010" }        {  "_id" : "sh1",  "host" : "sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203: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(10)

可见分片已经配置完成了

七、添加开机启动项

$ sudo vim /etc/rc.localulimit -SHn 65535/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/mongos --config /data/mongodb/conf/ms0/mongos.conf

八、备注

    虽然也是3台机器,使用分片的好处是可以把两个分片的primary设置在不同的节点,这个可以分摊单节点的压力,当然有更多机器就可以把分片放到不同机器上。

原创粉丝点击