MongoDB 的分片技术

    在MongoDB中分片技术 也就是集群。需要1台配置服务器配置各个节点的配置信息,1台路由服务器来知道每一台节点都在哪个地方并给用户提供各个节点数据的访问功能,还有多台节点服务器,存储节点数据。

    当前我有三台机器192.168.0.114,192.168.0.115,192.168.0.116,规划如下:

   搭建配置服务器:192.168.0.114

   搭建路由服务器:192.168.0.114

   搭建3个节点:192.168.0.114,192.168.0.115,192.168.0.116

(192.168.0.114 既做配置服务器,又做路由服务器,同时还做一个节点)

1    搭建配置服务器

      配置服务器参数

1[root@dghost var]# cat /etc/mong_config1.conf 2dbpath=/var/config1--指定配置路径 3logpath=/var/log/mongodbs/log1.log--指定日志路径 4port=28001--指定配置端口 5logappend=true--指定打开节点开关 6fork=true--指定后台运行

当前这里我们搭建3个配置,其他两个如下:

1[root@dghost var]# cat /etc/mong_config2.conf 2dbpath=/var/config2 3logpath=/var/log/mongodbs/log2.log 4port=28002 5logappend=true 6fork=true 7configsvr=true 8 9[root@dghost var]# cat /etc/mong_config3.conf 10dbpath=/var/config3 11logpath=/var/log/mongodbs/log3.log 12port=28003 13logappend=true 14fork=true 15configsvr=true

启动这3个配置

1[root@dghost var]# mongod -f /etc/mong_config1.conf 2about to fork child process, waiting until server is ready for connections. 3forked process: 2360 4child process started successfully, parent exiting 5[root@dghost var]# mongod -f /etc/mong_config2.conf 6about to fork child process, waiting until server is ready for connections. 7forked process: 2374 8child process started successfully, parent exiting 9[root@dghost var]# mongod -f /etc/mong_config3.conf 10about to fork child process, waiting until server is ready for connections. 11forked process: 2388 12child process started successfully, parent exiting 13[root@dghost var]# ps -ef|grep mong 14root 2360 1 0 15:19 ? 00:00:00 mongod -f /etc/mong_config1.conf 15root 2374 1 1 15:19 ? 00:00:00 mongod -f /etc/mong_config2.conf 16root 2388 1 2 15:19 ? 00:00:00 mongod -f /etc/mong_config3.conf 17root 2401 2022 0 15:19 pts/0 00:00:00 grep mong

2    搭建路由服务器

    路由服务器要配置所有的节点都在哪

1[root@dghost var]# cat /etc/mong_rount.conf 2port=28000--这个端口是路由端口 3configdb=192.168.0.114:28001,192.168.0.114:28002,192.168.0.114:28003--指定所有节点的IP和配置端口 4logpath=/var/log/mongodbs/mongos.log--指定路由的日志 5logappend=true 6fork=true

    启动路由服务器

1[root@dghost var]# mongos -f /etc/mong_rount.conf 2about to fork child process, waiting until server is ready for connections. 3forked process: 2406 4child process started successfully, parent exiting 5[root@dghost var]# ps -ef|grep mong 6root 2360 1 0 15:19 ? 00:00:01 mongod -f /etc/mong_config1.conf 7root 2374 1 0 15:19 ? 00:00:01 mongod -f /etc/mong_config2.conf 8root 2388 1 0 15:19 ? 00:00:01 mongod -f /etc/mong_config3.conf 9root 2406 1 0 15:22 ? 00:00:00 mongos -f /etc/mong_rount.conf 10root 2466 2022 0 15:22 pts/0 00:00:00 grep mong 11

到现在我们在192.168.0.114 上搭建了3个配置,1个路由。所有供又4个进程。

3    搭建所有的分片节点

1[root@dghost var]# mkdir /data/mongodb -p 2# 先建立一个节点存储数据的路径 3[root@dghost var]# cat /data/mongodb/mongo1.conf 4dbpath=/data/mongodb 5logpath=/data/mongodb/mongo1.log 6fork=true 7port=27020 8shardsvr=true 9# 配置好节点启动参数 10[root@dghost var]# mongod -f /data/mongodb/mongo1.conf 11about to fork child process, waiting until server is ready for connections. 12forked process: 2499 13child process started successfully, parent exiting 14#节点1 启动成功,启动的节点都这样做

节点搭建好之后做分片

1[root@dghost var]# mongo 192.168.0.114:28000 2MongoDB shell version: 2.6.4 3connecting to: 192.168.0.114:28000/test 4#登陆路由服务器 5mongos> show dbs 6admin (empty) 7config 0.016GB 8mongos> use admin 9# 进入admin库 10mongos> db.runCommand({addshard:"192.168.0.114:27020",allowLocal:true}) 11{ "shardAdded" : "shard0000", "ok" : 1 } 12#添加节点成功 13mongos> db.runCommand({addshard:"192.168.0.115:27020"}) 14{ "shardAdded" : "shard0001", "ok" : 1 } 15#再加一个节点 16mongos> use config 17switched to db config 18mongos> db.shards.find() 19{ "_id" : "shard0000", "host" : "192.168.0.114:27020" } 20{ "_id" : "shard0001", "host" : "192.168.0.115:27020" } 21# 检查已经添加的连个节点 22switched to db admin 23mongos> db.runCommand({"enablesharding":"test_database"}) 24{ "ok" : 1 } 25# 在admin 下需要指定哪个库需要分片 26mongos> db.runCommand({"shardcollection":"test_database.test_table","key":{"_id":1}}) 27{ "collectionsharded" : "test_database.test_table", "ok" : 1 } 28# 继续指定哪个表需要分片 29mongos> db.databases.find() 30{ "_id" : "admin", "partitioned" : false, "primary" : "config" } 31{ "_id" : "test_database", "partitioned" : true, "primary" : "shard0000" } 32# 库test_database 已经被设置未分片成功了 33mongos> db.chunks.find() 34{ "_id" : "test_database.test_table-_id_MinKey", "lastmod" : Timestamp(1, 0), "lastmodEpoch" : ObjectId("58ff0371b44f90194e6a262e"), "ns" : "test_database.test_table", "min" : { "_id" : { "$minKey" : 1 } }, "max" : { "_id" : { "$maxKey" : 1 } }, "shard" : "shard0000" } 35# 这个也可以检查 36mongos> sh.status() 37--- Sharding Status --- 38 sharding version: { 39 "_id" : 1, 40 "version" : 4, 41 "minCompatibleVersion" : 4, 42 "currentVersion" : 5, 43 "clusterId" : ObjectId("58fef935b44f90194e6a2496") 44} 45 shards: 46 { "_id" : "shard0000", "host" : "192.168.0.114:27020" } 47 { "_id" : "shard0001", "host" : "192.168.0.115:27020" } 48 databases: 49 { "_id" : "admin", "partitioned" : false, "primary" : "config" } 50 { "_id" : "test_database", "partitioned" : true, "primary" : "shard0000" } 51 test_database.test_table 52 shard key: { "_id" : 1 } 53 chunks: 54 shard0000 1 55 { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0) 56# 这个也可以检查

后面可以插入大量数据并检查,看是不是数据已经分片了

点赞
收藏

评论区

加载中...

相关推荐

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 )