Mongodb集群与分片
说明
架构图:
Server1 Server2 Server3
Shard1
Shard2
注释:
1. 分别在3台机器上运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13) 组成replica set1,作为cluster的shard1。
2. 分别在3台机器上运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23) 组成replica set2,作为cluster的shard2。
3. 分别在3如机器上运行一个mongod实例,作为3个config server。
4. 在一个机器上运行一个mongos实例,用于客户端连接。
主机 IP 端口信息
Server1 172.26.2.88 Mongod shard11:27017
Mongod shard12:27018
Mongod shard1:20000
Mongos:30000
Server2 172.26.2.89 Mongod shard11:27017
Mongod shard12:27018
Mongod shard1:20000
Mongos:30000
Server3 172.26.2.99 Mongod shard11:27017
Mongod shard12:27018
Mongod shard1:20000
Mongos:30000
步骤
创建数据目录:
Server1:
mkdir –p /home/mongo/data/shard11
mkdir –p /home/mongo/data/shard21
Server2:
mkdir –p /home/mongo/data/shard12
mkdir –p /home/mongo/data/shard22
Server3:
mkdir –p /home/mongo/data/shard13
mkdir –p /home/mongo/data/shard23
配置shard1用到的replSet
Server1:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongo/data/shard11/ -oplogSize 100 -logpath /home/mongo/log/shard11.log -logappend –fork
Server2:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongo/data/shard12/ -oplogSize 100 -logpath /home/mongo/log/shard12.log -logappend –fork
Server3:
./mongod -shardsvr -replSet shard1 -port 27017 -dbpath /home/mongo/data/shard13/ -oplogSize 100 -logpath /home/mongo/log/shard13.log -logappend –fork
初始化replSet
连接任意一台机器的mongo:
./mongo localhost:27017
config = {_id:"shard1",members:[{_id:0,host:'172.26.2.88:27017'},{_id:1,host:'172.26.2.89:27017'},{_id:2,host:'172.26.2.99:27017'}]} 或
config={_id:"shard1",members:[{_id:0,host:'172.26.2.88:27017',priority:2},{_id:1,host:'172.26.2.89:27017'},{_id:2,host:'172.26.2.99:27017'}]}
rs.initiate(config)
rs.status()
配置shard2用到的replSet:
Server1:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongo/data/shard21/ -oplogSize 100 -logpath /home/mongo/log/shard21.log -logappend –fork
Server2:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongo/data/shard22/ -oplogSize 100 -logpath /home/mongo/log/shard22.log -logappend –fork
Server3:
./mongod -shardsvr -replSet shard2 -port 27018 -dbpath /home/mongo/data/shard23/ -oplogSize 100 -logpath /home/mongo/log/shard23.log -logappend –fork
初始化replSet:
连接任意一台机器的mongo:
./mongo localhost:27018
config={_id:"shard2",members:[{_id:0,host:'172.26.2.88:27018',priority:1},{_id:1,host:'172.26.2.89:27018',priority:2},{_id:2,host:'172.26.2.99:27018'}]}
rs.initiate(config)
rs.status()
配置3机器的config
Server1:
./mongod -configsvr -dbpath /home/mongo/data/config -port 20000 –logpath /home/mongo/config/config.log -logappend –fork
Server2:
./mongod -configsvr -dbpath /home/mongo/data/config -port 20000 -logpath /home/mongo/config/config.log --logappend --fork
Server3:
./mongod -configsvr -dbpath /home/mongo/data/config -port 20000 -logpath /home/mongo/config/config.log --logappend –fork
配置mongos
./mongos -configdb 172.26.2.88:20000,172.26.2.89:20000,172.26.2.99:20000 -port 30000 -chunkSize 1 -logpath /home/mongo/log/mongos.log -logappend –fork
配置分片
登陆mongos admin
./mongo 172.26.2.88:30000/admin
加入shards
如果shard是单台服务器,用:
>db.runCommand({ addshard :“<serverhostname>[:<port>]”})
如果shard是replica sets,用:
>db.runCommand({ addshard : “replicaSetName/<serverhostname>[:<port>],<serverhostname>[:<port>]..”})
如本机执行:
db.runCommand({ addshard:"shard1/172.26.2.88:27017,172.26.2.89:27017,172.26.2.99:27017",name:"p1",maxsize:20480})
db.runCommand({ addshard:"shard2/172.26.2.88:27018,172.26.2.89:27018,172.26.2.99:27018",name:"p2",maxsize:20480})
注释:
name为用于置顶shard的名字,不指定的话系统自动分配
maxsize为指定各个shard可用的最大磁盘空间
查看shard是否添加成功
>db.runCommand({listshards:1})
如果列出了以上两个shards,表示添加成功
激活数据库分片
>db.runCommand({enablesharding:”<dbname>”})
通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,一旦激活数据库分片,数据库中不同的 collection将被存放在不同的shard上,但一个collection仍旧存放在同一个shard上,要使单个collection也分片,还 需单独对collection作些操作
如:
>db.runCommand({enablesharding:"test"})
查看数否生效:
>db.printShardingStatus()
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "s1", "host" : "shard1/192.168.10.207:27017,192.168.10.208:27017,192.168.10.209:27017" }
{ "_id" : "s2", "host" : "shard2/192.168.10.207:27018,192.168.10.208:27018,192.168.10.209:27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "test", "partitioned" : true, "primary" : "s1" }
注释:
一旦enable了个数据库,mongos将会把数据库里的不同数据集放在不同的分片上。除非数据集被分片(下面会设置),否则一个数据集的所有数据将放在一个分片上。
Collection分片
db.runCommand({ shardcollection : "<namespace>",key : <shardkeypatternobject>})
例如:
db.runCommand({shardcollection:”test.colle1”,key:{id:1}})
常用命令:
设置从库可读
从库执行:db.getMongo().setSlaveOk();
创建Collections
db.createCollection(name, { size : ..., capped : ..., max : ... } )创建非分布式数据集,相当于关系型数据库中的表,别看后面一堆参数,其实通常用的就db.createCollection(name)这个命令,比如db.createCollection(“coll_1”)
创建Collection索引
db.coll_1.ensureIndex({"id":1}),第一个参数为字段名,第二参数值为1则索引为升序;-1则为降序
删除Collections
db.coll_1.drop(),删数据集
删除数据
db.coll_1.remove(query)
删除索引
db.coll_1.dropIndex(name) 删除指定的索引;
db.coll_1.dropIndexes()删除所有索引;
db.coll_1.getIndexes()查看索引信息
删除带有分片的Collection
db.colle2.drop()
查询插入相关
db.coll_1.count(query);db.coll_1.find(query );db.coll_1.insert(obj);db.coll_1.update(query, object[, upsert_bool]);db.coll_1.save(obj);
查看分片状态
db.printShardingStatus();
查看Collection状态
db.collect2.stats()
导入导出
导出:
./mongoexport -h localhost -p 30000 -d test -c colle3 -o /home/mongo/colle3.dat
-h 服务器
-p 端口号
-d 数据库名
-c Collection名
-o 导出路径
-f 指定要导出的字段
-csv 导出为csv格式
导入:
./mongoimport -h localhost -p 30000 -d test -c collec2 /home/mongo/colle3.dat
隐式创建collection.
备份恢复
备份:
./mongodump -h localhost -p 30000 -d test -o /home/mongo/test.dmp
-h 服务器
-p 端口号
-d 数据库名
-c Collection名
-o 导出路径
默认创建test.dmp目录
恢复:
./mongorestore -h localhost -p 30000 -d test /home/mongo/test.dmp/*
可通过./mongorestore –help 查询
分享到:
相关推荐
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
主要涉及的内容是如何搭建在windows环境下的mongodb集群,包括安装mongodb、mongodb单机下启动、搭建集群环境等内容,适合开始使用mongodb的人使用,很直接明了,很有帮助,值得下载!
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
总结来说,MongoDB 3.0.3 的集群分片搭建涉及复制集、分片、配置服务器、mongos 路由器的创建和管理。理解这些概念和技术对于优化大规模数据存储和处理至关重要。正确配置和管理 MongoDB 集群,能确保高可用性、可...
目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4
- MongoDB集群通常由多个节点组成,包括数据分片(shards)、配置服务器(config servers)以及查询路由器(mongos)。 - 本例中的集群架构包含两个数据分片(shard1和shard2)和一个配置服务器。 ##### 3.2 创建数据目录...
本文将详细介绍在MongoDB 3.6版本中如何增加分片集群的ACL(访问控制列表)权限,以及在搭建分片集群过程中可能遇到的一些问题及其解决方案。 ### MongoDB分片集群简介 MongoDB分片集群是一种分布式数据存储结构,...
### 搭建高可用MongoDB集群:分片与节点创建详解 #### 一、引言 在现代的大数据环境中,单一服务器往往无法满足日益增长的数据处理需求。MongoDB作为一种高性能、分布式文档型NoSQL数据库,能够很好地解决大规模...
在搭建 MongoDB 分片集群时,首先你需要了解以下几个核心概念: 1. **复制集(Replica Set)**:提供数据冗余和故障转移,确保高可用性。每个复制集由多个成员组成,其中一个是主节点,其他是副节点。数据变更首先...
本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica Set),从而实现 MongoDB 集群的自动化管理和高可用性。 在本解决方案中,我们首先需要安装 Kubernetes 环境,并且需要准备好 NFS ...
### MongoDB集群搭建教程 #### 一、主从模式详解 **主从模式**是MongoDB中最常见的复制方式之一,主要用于实现数据库同步备份、故障恢复以及读取扩展等功能。该模式的核心在于建立一个主节点和一个或多个从节点,...
MongoDB4.2分片及副本集群搭建详细指导手册,详细描述了MongoDB4.2数据库服务器集群的搭建以及副本和分片服务的配置过程及具体操作指令。
mongodb实现主从读写分离和数据分片的2中部署方式
配置服务器是MongoDB集群的重要组成部分,负责管理分片的状态信息。启动命令如下: ```bash /usr/mongodb/bin/mongod --configsvr --replSet cfgReplSet --dbpath /data/mongodbtest/config/data --port 21000 --log...
总结,搭建Spring+MongoDB集群涉及安装MongoDB、配置复制集和分片、设置Spring应用的数据库连接、创建数据访问层以及进行测试和维护。这个过程旨在提高应用程序的稳定性和性能,特别是在大数据量和高并发场景下。...
mongodb集群搭建完成后,需要进行数据库测试和使用,以便验证mongodb的高可用性和高性能。 读和写的分离 mongodb的读和写操作需要分离,以便提高mongodb的高性能和高可用性。 mongodb高可用完全分布集群的搭建...
MongoDB分片副本集集群搭建的知识点包含了以下几个方面: 1. MongoDB分片架构的基本组成:MongoDB分片架构由mongos(路由服务器)、config-server(配置服务器)和shard(分片服务器)三部分组成。mongos负责作为...
MongoDB搭建分片集群windows端
mongodb集群部署脚本,包括mongos启动、mongodb config启动,mongodb分片启动,mongodb副本集仲部署等脚本
本文将详细介绍如何在CentOS 7操作系统下,搭建一个MongoDB 3.4版本的集群,且包括分片(sharding)与副本集(replica set)两大特性。搭建这样的集群,旨在创建一个高性能、高可用且能够水平扩展的数据库架构。 在...