MongoDB分片搭建

· 2015年度PG大象会报名地址:http://postgres2015.eventdove.com/

· PostgreSQL中国社区: http://postgres.cn/index.php/home

· PostgreSQL专业1群: 3336901(已满)

· PostgreSQL专业2群: 100910388

· PostgreSQL专业3群: 150657323

· PostgresChina微信公众号     PostgreSQL用户会微博二维码

一、环境

1$ cat /etc/redhat-release  2CentOS Linux release 7.0.1406 (Core)  3$ uname -a 4Linux 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 5$ mongo --version 6MongoDB shell version: 3.0.6 7 8node1: 172.30.2.201 9node2: 172.30.2.202 10node3: 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.准备配置文件

第一个分片:

1$ sudo vim /data/mongodb/conf/sh0/mongodb.conf 2# base 3port = 27010 4maxConns = 800  5filePermissions = 0700 6fork = true 7noauth = true 8directoryperdb = true 9dbpath = /data/mongodb/data/sh0 10pidfilepath = /data/mongodb/data/sh0/mongodb.pid 11oplogSize = 10 12journal = true 13# security 14nohttpinterface = true 15rest = false 16# log  17logpath = /data/mongodb/log/sh0/mongodb.log 18logRotate = rename 19logappend = true 20slowms = 50 21replSet = sh0  22shardsvr = true

第二个分片:

1$ sudo vim /data/mongodb/conf/sh1/mongodb.conf 2# base 3port = 27011 4maxConns = 800  5filePermissions = 0700 6fork = true 7noauth = true 8directoryperdb = true 9dbpath = /data/mongodb/data/sh1 10pidfilepath = /data/mongodb/data/sh1/mongodb.pid 11oplogSize = 10 12journal = true 13# security 14nohttpinterface = true 15rest = false 16# log 17logpath = /data/mongodb/log/sh1/mongodb.log 18logRotate = rename 19logappend = true 20slowms = 50 21replSet = sh1 22shardsvr = true
3.启动Shard Server
1$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf 2about to fork child process, waiting until server is ready for connections. 3forked process: 41492 4child process started successfully, parent exiting 5$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf 6about to fork child process, waiting until server is ready for connections. 7forked process: 41509 8child process started successfully, parent exiting 9$ ps aux | grep mongo | grep -v grep 10root     41492  0.5  0.0 518016 54604 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf 11root     41509  0.5  0.0 516988 51824 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf 12$ mongo --port 27010 13MongoDB shell version: 3.0.6 14connecting to: 127.0.0.1:27010/test 15> 16bye 17$ mongo --port 27011 18MongoDB shell version: 3.0.6 19connecting to: 127.0.0.1:27011/test 20> 21bye

三、配置Config Server

在3个节点分别执行:

1.创建目录
$ sudo mkdir -p /data/mongodb/{data/cf0,backup/cf0,log/cf0,conf/cf0}
2.准备配置文件
1$ sudo vim /data/mongodb/conf/cf0/config.conf 2# base 3port = 27000 4maxConns = 800 5filePermissions = 0700 6fork = true 7noauth = true 8directoryperdb = true 9dbpath = /data/mongodb/data/cf0 10pidfilepath = /data/mongodb/data/cf0/config.pid 11oplogSize = 10 12journal = true 13# security 14nohttpinterface = true 15rest = false 16# log 17logpath = /data/mongodb/log/cf0/config.log 18logRotate = rename 19logappend = true 20slowms = 50 21configsvr = true
3.启动
1$ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf 2about to fork child process, waiting until server is ready for connections. 3forked process: 41759 4child process started successfully, parent exiting 5$ ps aux | grep mongo | grep -v grep 6root     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf 7root     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf 8root     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.准备配置文件
1$ sudo vim /data/mongodb/conf/ms0/mongos.conf 2# base 3port = 30000 4maxConns = 800 5filePermissions = 0700 6fork = true 7pidfilepath = /data/mongodb/data/ms0/mongos.pid 8# log 9logpath = /data/mongodb/log/ms0/mongos.log 10logRotate = rename 11logappend = true 12configdb = 172.30.2.201:27000,172.30.2.202:27000,172.30.2.203:27000

3.启动

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

五、初始化副本集

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

分片一:

1$ mongo --port 27010 2MongoDB shell version: 3.0.6 3connecting to: 127.0.0.1:27010/test 4> use admin 5switched to db admin 6> 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"} ] } 7{ 8        "_id" : "sh0", 9        "members" : [ 10                { 11                        "_id" : 0, 12                        "host" : "172.30.2.201:27010" 13                }, 14                { 15                        "_id" : 1, 16                        "host" : "172.30.2.202:27010" 17                }, 18                { 19                        "_id" : 2, 20                        "host" : "172.30.2.203:27010" 21                } 22        ] 23} 24> rs.initiate( cfg ); 25{ "ok" : 1 } 26sh0:OTHER> rs.status() 27{ 28        "set" : "sh0", 29        "date" : ISODate("2015-10-23T05:33:31.920Z"), 30        "myState" : 1, 31        "members" : [ 32                { 33                        "_id" : 0, 34                        "name" : "172.30.2.201:27010", 35                        "health" : 1, 36                        "state" : 1, 37                        "stateStr" : "PRIMARY", 38                        "uptime" : 270, 39                        "optime" : Timestamp(1445578404, 1), 40                        "optimeDate" : ISODate("2015-10-23T05:33:24Z"), 41                        "electionTime" : Timestamp(1445578408, 1), 42                        "electionDate" : ISODate("2015-10-23T05:33:28Z"), 43                        "configVersion" : 1, 44                        "self" : true 45                }, 46                { 47                        "_id" : 1, 48                        "name" : "172.30.2.202:27010", 49                        "health" : 1, 50                        "state" : 5, 51                        "stateStr" : "STARTUP2", 52                        "uptime" : 7, 53                        "optime" : Timestamp(0, 0), 54                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 55                        "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"), 56                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.295Z"), 57                        "pingMs" : 1, 58                        "configVersion" : 1 59                }, 60                { 61                        "_id" : 2, 62                        "name" : "172.30.2.203:27010", 63                        "health" : 1, 64                        "state" : 5, 65                        "stateStr" : "STARTUP2", 66                        "uptime" : 7, 67                        "optime" : Timestamp(0, 0), 68                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 69                        "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"), 70                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.293Z"), 71                        "pingMs" : 1, 72                        "configVersion" : 1 73                } 74        ], 75        "ok" : 1 76} 77sh0:PRIMARY> 78bye

分片二:

1$ mongo --port 27011 2MongoDB shell version: 3.0.6 3connecting to: 127.0.0.1:27011/test 4> use admin 5switched to db admin 6> 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"} ] } 7{ 8        "_id" : "sh1", 9        "members" : [ 10                { 11                        "_id" : 0, 12                        "host" : "172.30.2.201:27011" 13                }, 14                { 15                        "_id" : 1, 16                        "host" : "172.30.2.202:27011" 17                }, 18                { 19                        "_id" : 2, 20                        "host" : "172.30.2.203:27011" 21                } 22        ] 23} 24> rs.initiate( cfg ); 25{ "ok" : 1 } 26sh1:OTHER> rs.status(); 27{ 28        "set" : "sh1", 29        "date" : ISODate("2015-10-23T05:36:02.365Z"), 30        "myState" : 1, 31        "members" : [ 32                { 33                        "_id" : 0, 34                        "name" : "172.30.2.201:27011", 35                        "health" : 1, 36                        "state" : 1, 37                        "stateStr" : "PRIMARY", 38                        "uptime" : 406, 39                        "optime" : Timestamp(1445578557, 1), 40                        "optimeDate" : ISODate("2015-10-23T05:35:57Z"), 41                        "electionTime" : Timestamp(1445578561, 1), 42                        "electionDate" : ISODate("2015-10-23T05:36:01Z"), 43                        "configVersion" : 1, 44                        "self" : true 45                }, 46                { 47                        "_id" : 1, 48                        "name" : "172.30.2.202:27011", 49                        "health" : 1, 50                        "state" : 5, 51                        "stateStr" : "STARTUP2", 52                        "uptime" : 5, 53                        "optime" : Timestamp(0, 0), 54                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 55                        "lastHeartbeat" : ISODate("2015-10-23T05:36:01.168Z"), 56                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.175Z"), 57                        "pingMs" : 0, 58                        "configVersion" : 1 59                }, 60                { 61                        "_id" : 2, 62                        "name" : "172.30.2.203:27011", 63                        "health" : 1, 64                        "state" : 5, 65                        "stateStr" : "STARTUP2", 66                        "uptime" : 5, 67                        "optime" : Timestamp(0, 0), 68                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"), 69                        "lastHeartbeat" : ISODate("2015-10-23T05:36:01.167Z"), 70                        "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.172Z"), 71                        "pingMs" : 0, 72                        "configVersion" : 1 73                } 74        ], 75        "ok" : 1 76} 77sh1:PRIMARY> 78bye

六、配置分片

1$ mongo --port 30000 2MongoDB shell version: 3.0.6 3connecting to: 127.0.0.1:30000/test 4mongos> use admin; 5switched to db admin 6mongos> sh.addShard("sh0/172.30.2.201:27010,172.30.2.202:27010,172.30.2.203:27010"); 7{ "shardAdded" : "sh0", "ok" : 1 } 8mongos> sh.addShard("sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203:27011"); 9{ "shardAdded" : "sh1", "ok" : 1 } 10mongos> use mydb; 11switched to db mydb 12mongos> db.createCollection("test"); 13{ 14        "ok" : 1, 15        "$gleStats" : { 16                "lastOpTime" : Timestamp(1444358911, 1), 17                "electionId" : ObjectId("56172a4bc03d9b1667f8e928") 18        } 19} 20mongos> sh.enableSharding("mydb"); 21{ "ok" : 1 } 22mongos> sh.shardCollection("mydb.test", {"_id":1}); 23{ "collectionsharded" : "mydb.test", "ok" : 1 } 24mongos> sh.status(); 25--- Sharding Status --- 26  sharding version: { 27        "_id" : 1, 28        "minCompatibleVersion" : 5, 29        "currentVersion" : 6, 30        "clusterId" : ObjectId("561728b4030ea038bcb57fa0") 31} 32  shards: 33        {  "_id" : "sh0",  "host" : "sh0/172.30.2.201:27010,172.30.2.202:27010,172.30.2.203:27010" } 34        {  "_id" : "sh1",  "host" : "sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203:27011" } 35  balancer: 36        Currently enabled:  yes 37        Currently running:  no 38        Failed balancer rounds in last 5 attempts:  0 39        Migration Results for the last 24 hours: 40                No recent migrations 41  databases: 42        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" } 43        {  "_id" : "mydb",  "partitioned" : true,  "primary" : "sh0" } 44                mydb.test 45                        shard key: { "_id" : 1 } 46                        chunks: 47                                sh0     1 48                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : sh0 Timestamp(1, 0)

可见分片已经配置完成了

七、添加开机启动项

1$ sudo vim /etc/rc.local 2ulimit -SHn 65535 3/opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf 4/opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf 5/opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf 6/opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf

八、备注

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )