MongoDB分片
- 格式:docx
- 大小:52.89 KB
- 文档页数:23
mongo数据同步方案Mongo数据同步方案随着互联网的快速发展,数据的存储和管理变得越来越重要。
MongoDB作为一种非关系型数据库,因其高效、灵活、可扩展等特点,被越来越多的企业所采用。
然而,在多个MongoDB实例之间进行数据同步却是一个比较复杂的问题。
本文将介绍几种常见的Mongo数据同步方案。
一、基于MongoDB自带的复制集MongoDB自带的复制集是一种常见的数据同步方案。
它通过将数据从一个主节点同步到多个从节点,实现数据的备份和故障恢复。
在复制集中,主节点负责写入数据,从节点则负责读取数据。
当主节点出现故障时,从节点会自动选举出新的主节点,保证数据的可用性。
二、基于MongoDB的分片集群MongoDB的分片集群是一种可扩展的数据同步方案。
它将数据分散存储在多个节点上,通过分片键将数据分片,实现数据的水平扩展。
在分片集群中,每个节点都可以读取和写入数据,数据的同步由MongoDB自动完成。
当节点出现故障时,MongoDB会自动将数据迁移到其他节点上,保证数据的可用性。
三、基于第三方工具的数据同步方案除了MongoDB自带的复制集和分片集群,还有一些第三方工具可以实现Mongo数据的同步。
例如,使用Logstash可以将MongoDB中的数据同步到Elasticsearch中,实现数据的搜索和分析。
使用Kafka可以将MongoDB中的数据同步到其他系统中,实现数据的异构同步。
使用Robo 3T可以将MongoDB中的数据同步到本地文件中,实现数据的备份和恢复。
综上所述,Mongo数据同步方案有多种选择,可以根据实际需求选择合适的方案。
如果需要实现数据的备份和故障恢复,可以选择MongoDB自带的复制集;如果需要实现数据的水平扩展,可以选择MongoDB的分片集群;如果需要实现数据的异构同步,可以选择第三方工具。
无论选择哪种方案,都需要注意数据的一致性和可用性,保证数据的安全和稳定。
mongodb原理和架构MongoDB是一个开源的文档数据库,使用JSON格式存储数据。
它采用了分布式架构,支持水平扩展,具有高可用性和高性能。
一、MongoDB的架构1.1 单节点架构MongoDB最基本的架构是单节点架构,即一个MongoDB实例只有一个进程在运行。
这种架构的好处是简单易用,适用于小规模的应用场景。
但是,单节点架构的缺点也很明显,它无法处理大量的数据和高并发的请求。
1.2 副本集架构为了解决单节点架构的问题,MongoDB引入了副本集架构。
副本集由多个MongoDB实例组成,其中一个是主节点,其他节点是从节点。
主节点负责处理所有的写操作和大部分的读操作,从节点负责复制主节点的数据并处理一部分读操作。
当主节点宕机或者网络故障时,从节点会自动选举出一个新的主节点。
副本集架构的优点是能够提供高可用性和数据冗余,同时也可以通过读写分离来提高性能。
但是,副本集架构也存在一些问题,比如需要协调节点之间的数据同步和选举过程,以及从节点可能会因为网络延迟导致数据滞后。
1.3 分片架构当数据量达到一定规模时,副本集架构也无法满足需求。
此时,MongoDB提供了分片架构。
分片架构由多个MongoDB实例组成,其中每个实例称为一个分片。
每个分片只负责一部分数据的存储和处理。
分片架构可以通过水平扩展来提高性能和容量。
分片架构的核心是分片键,它是用来将数据分配到不同分片的依据。
MongoDB支持两种分片键,一种是区间分片键,另一种是哈希分片键。
区间分片键将数据根据一定的范围划分到不同的分片中,而哈希分片键则是将数据根据哈希值分配到不同的分片中。
分片架构的优点是能够水平扩展,支持大规模的数据存储和处理。
但是,分片架构也存在一些问题,比如需要协调各个分片之间的数据同步和查询优化,以及需要处理跨分片的事务和索引。
二、MongoDB的原理2.1 存储引擎MongoDB支持多种存储引擎,其中最常用的是WiredTiger。
mongodb高手课笔记MongoDB高手课笔记。
MongoDB是一种开源的文档数据库管理系统,它具有高度的灵活性和可扩展性,适用于各种应用场景。
在MongoDB高手课中,我们学习了许多关于MongoDB的高级概念和技术。
下面是我整理的一些笔记,希望能对你有所帮助。
1. 数据建模:MongoDB是面向文档的数据库,数据以文档的形式存储,每个文档是一个键值对的集合,类似于JSON对象。
在设计数据模型时,要根据应用的查询需求和数据访问模式来决定文档结构和集合的组织方式。
通过嵌套文档和引用文档的方式来处理关联数据,并根据具体情况选择合适的方式。
2. 查询优化:使用索引可以大大提高查询性能。
在设计索引时,要考虑查询的字段、查询的频率以及数据的写入性能之间的平衡。
使用复合索引可以优化多个字段的组合查询。
了解查询计划和慢查询日志可以帮助我们分析和优化查询性能。
3. 数据分片:MongoDB支持数据分片,可以将数据分布在多个节点上,实现水平扩展。
在进行数据分片时,要考虑数据的划分策略、数据的均衡性以及分片键的选择。
了解数据迁移和数据平衡的机制,可以帮助我们监控和管理分片集群。
4. 安全性和权限控制:MongoDB提供了多种安全性和权限控制的机制,包括访问控制、认证和授权。
启用访问控制可以限制对数据库的访问,并设置用户的角色和权限。
使用TLS/SSL可以加密数据传输,增加数据的安全性。
5. 备份与恢复:定期进行数据备份是保证数据安全的重要手段。
可以使用mongodump工具进行备份,使用mongorestore工具进行恢复。
可以使用副本集来实现数据的冗余备份和高可用性。
6. 性能监控和调优:使用MongoDB提供的性能监控工具,如mongostat和mongotop,可以实时监控数据库的状态和性能指标。
根据监控数据,可以进行性能调优,如优化查询、调整索引、增加硬件资源等。
以上只是MongoDB高手课中的一些重点内容,MongoDB还有很多其他的高级特性和用法。
mongodb分片集群重启方法MongoDB是当下非常流行的NoSQL数据库之一,它具有高性能、可扩展性和灵活性等优势,广泛应用于各种大规模的数据存储和处理场景。
在实际使用中,为了提高系统性能和容量,常常需要将MongoDB部署为分片集群。
然而,重启分片集群是常见的操作之一,本文将介绍如何正确地重启MongoDB分片集群。
一、重启前的准备工作在进行MongoDB分片集群重启之前,我们需要做一些准备工作,以确保数据的完整性和可用性。
1.备份数据:重启操作可能会导致数据丢失或损坏,因此在重启前应进行数据备份,以便出现问题时可以进行恢复。
2.停止数据写入:在重启之前,需要停止对数据库的写入操作,以免在重启过程中出现数据不一致的情况。
3.检查集群状态:使用MongoDB提供的命令行工具或GUI工具,检查分片集群的状态,确保所有分片节点和配置节点都正常运行。
二、重启分片节点重启分片节点是保证分片集群正常运行的关键步骤。
下面是重启分片节点的具体步骤:1.选择一个分片节点:根据实际情况选择一个分片节点进行重启,可以根据负载情况或其他指标进行选择。
2.停止MongoDB进程:使用命令行工具连接到选定的分片节点,执行以下命令停止MongoDB进程:```use admindb.shutdownServer()```3.等待MongoDB完全停止:等待一段时间,确保MongoDB完全停止。
可以通过查看日志文件或使用命令行工具连接到其他分片节点来确认。
4.启动MongoDB进程:使用命令行工具连接到选定的分片节点,执行以下命令启动MongoDB进程:```mongod --config /path/to/mongod.conf```其中,`/path/to/mongod.conf`是MongoDB配置文件的路径,根据实际情况进行设置。
5.检查分片节点状态:使用命令行工具连接到选定的分片节点,执行以下命令检查分片节点的状态:```use admindb.runCommand({replSetGetStatus: 1})```确保节点重新加入分片集群,并且状态正常。
mongodb 高可用方案MongoDB是一种流行的NoSQL数据库管理系统,具有高可用性是其重要特点之一。
为了确保在任何时间都能正常地访问和操作数据库,需要实施适当的高可用方案。
本文将介绍几种常见的MongoDB高可用方案,旨在帮助读者选择适合自己业务需求的方案。
一、复制集复制集是MongoDB中实现高可用性的一种方式。
它由一个主节点和多个从节点组成,主节点负责处理所有写操作,从节点复制主节点的数据,并可以处理读操作。
当主节点出现故障时,从节点会选举出一个新的主节点来接替其职责,从而实现故障切换。
配置复制集的步骤如下:1. 启动MongoDB实例并指定一个唯一的复制集名称。
2. 配置主节点,包括设置认证、启用日志记录等。
3. 配置从节点,设置复制集名称和主节点信息。
4. 将从节点添加到复制集中。
5. 检查复制集状态,确保主从节点正常工作。
复制集能够提供一定程度的高可用性,但主节点仍然是单点故障。
因此,为了进一步增强高可用性,可以考虑使用分片集群。
二、分片集群分片集群是MongoDB中实现水平扩展和高可用性的一种方式。
它将数据分散存储在多个节点上,每个节点上存储部分数据,从而实现数据的分布式存储和负载均衡。
当某个节点出现故障时,其他节点会自动接管它的职责,保证数据的可用性。
配置分片集群的步骤如下:1. 启动MongoDB实例并设置为分片模式。
2. 创建并配置一个或多个config服务器,用于存储分片集群的元数据。
3. 启动并配置一个或多个分片服务器,用于存储实际的数据。
4. 将数据分布到不同的分片服务器上,可以根据需求选择不同的分片策略。
5. 添加或删除分片服务器时,需要进行相应的配置。
分片集群能够提供更高的可用性和更高的性能,但也需要更多的配置和管理工作。
三、多数据中心复制对于分布在多个地理位置的业务需求,可以考虑采用多数据中心复制方案来实现高可用性。
该方案将数据复制到多个数据中心,在数据中心之间进行同步,从而实现地理冗余和灾备恢复。
mongodb 分片原理MongoDB 分片是一种用于处理大量数据的横向扩展方法,允许将数据分布到多个服务器上。
分片可以在MongoDB 中实现水平扩展,提高系统的容量和性能。
以下是MongoDB 分片的基本原理:1. 分片键(Shard Key):-在MongoDB 中,数据根据一个称为分片键(Shard Key)的字段进行分片。
分片键的选择非常关键,它应该能够确保数据均匀分布,避免热点(hotspot)问题。
-分片键通常是在文档中的一个字段,MongoDB 根据这个字段的值来决定将文档存储在哪个分片上。
2. 分片集合(Sharded Collection):-分片集合是一个普通的MongoDB 集合,但被配置为进行分片。
这样的集合存储在多个分片服务器上,每个分片负责存储数据的一部分。
3. Config 服务器:-MongoDB 使用Config 服务器来跟踪每个分片中数据的范围和位置。
Config 服务器存储了分片集合的元数据,包括分片键的范围和分片的位置信息。
4. Mongos 路由器:-Mongos 是一个路由器,它位于应用程序和MongoDB 分片集群之间。
应用程序通过Mongos 与整个集群交互,Mongos 负责将请求路由到适当的分片上。
5. 数据迁移:-当有新的分片加入集群或现有的分片移除时,MongoDB 会自动进行数据迁移。
数据迁移确保分片集合中的数据保持均匀分布。
6. 均衡器(Balancer):- MongoDB 集群中有一个均衡器,它会监视每个分片上的数据量,并在需要时触发数据迁移以保持均衡。
均衡器可以手动启动或自动运行。
MongoDB 分片的主要优势在于它允许数据库在数据量增加时水平扩展,通过添加更多的分片来处理更多的负载。
分片键的选择和分片集群的规划是关键的设计决策,因为它们直接影响了系统的性能和可扩展性。
mongo 参数MongoDB是一种开源的、基于文档的NoSQL数据库。
它以其灵活性、可扩展性和高性能而闻名。
在本文中,我们将讨论MongoDB的一些重要参数及其功能和用法。
1. --dbpath: 这个参数指定了MongoDB数据库文件的存储路径。
默认情况下,数据文件存储在/data/db目录下。
通过使用--dbpath参数,我们可以指定一个自定义的数据库文件存储路径。
2. --port: 这个参数用于指定MongoDB服务器的端口号。
默认情况下,MongoDB服务器监听27017端口。
通过使用--port参数,我们可以指定一个不同的端口号。
3. --bind_ip: 这个参数用于指定MongoDB服务器绑定的IP地址。
默认情况下,MongoDB服务器会绑定所有可用的IP地址。
通过使用--bind_ip参数,我们可以指定只绑定特定的IP地址。
4. --auth: 这个参数用于启用MongoDB的身份验证机制。
当启用身份验证后,连接到MongoDB服务器的客户端必须提供有效的用户名和密码。
这个参数对于保护数据库中敏感数据非常重要。
5. --slowms: 这个参数用于指定MongoDB慢查询的阈值。
当一个查询的执行时间超过指定的阈值时,MongoDB会将其记录为慢查询。
通过使用--slowms参数,我们可以设置一个合适的阈值来监控慢查询。
6. --journal: 这个参数用于启用MongoDB的日志功能。
当启用日志功能后,MongoDB会将所有的写操作记录到日志文件中,以便在发生故障时进行恢复。
这个参数对于确保数据的一致性和持久性非常重要。
7. --replSet: 这个参数用于启用MongoDB的复制集功能。
复制集是一组相互关联的MongoDB服务器,其中一个服务器被称为主服务器,其余服务器被称为从服务器。
通过使用--replSet参数,我们可以创建一个复制集并配置主从关系。
8. --shardsvr: 这个参数用于启用MongoDB的分片功能。
mongoDB分片操作指南-------by gongyong说明:每片只有一台mongod服务器,总共两片,一台配置服务器,一台mongos路由,事实在正式生产时,每一片应该是一个replica set其中红色部分要特别注意,不可遗漏紫色部分为命令一,mongodb分片模型图:图片解说:该图是mongodb的分片模型图,mongodb将大量的数据文件进行切割,将切割的数据块分别保存到不同的片上,其中每个片为一个副本集,而对外通过mongos提供统一接口,用户实际上感觉不到内部分片机制。
Replica Set(副本集),mongodb集群的一种实现方式,该副本集由一台活跃Mongodb服务器(节点)和两台非活跃Mongodb服务器(节点)组成,其中活跃节点会由Mongodb自动选举产生,数据插入在活跃节点,备份到非活跃节点,默认非活跃节点不可进行读写操作,可配置在非活跃节点进行读操作。
Mongos:mongo路由器,对外屏蔽内部数据存储,客户端只需要连接mongos,mongos会根据实际情况将操作分发到不同的片(Replica Set)注:mongos启动前需要启动配置服务器,有多少个片就有多少个配置服务器。
二,建立分片步骤如下:1.在一台机器上模拟两个shard,启动:[root@localhost mongodb]# ./bin/mongod --dbpath /opt/mongodb/data_tmp --logpath /opt/mongodb/log_tmp --port 27017 --fork --shardsvr[root@localhost mongodb]# ./bin/mongod --dbpath /opt/mongodb/data_tmp2 --logpath /opt/mongodb/log_tmp2 --port 27018 --fork --shardsvr2.启动配置服务器[root@localhost mongodb]# ./bin/mongod --dbpath /opt/mongodb/data_config/ --logpath /opt/mongodb/log_config --port 10000 --fork --configsvr3.启动mongos[root@localhost mongodb]# ./bin/mongos --port 20000 --configdb localhost:10000 --logpath /opt/mongodb/log_mongos --fork --chunkSize 54.连接上mongos,连接方式如下:[root@localhost mongodb]# ./bin/mongo localhost:20000/admin5.连接上mongos后,在mongos上添加片mongos> db.runCommand({addshard:"localhost:27017",allowLocal:true}) { "shardAdded" : "shard0000", "ok" : 1 }mongos> db.runCommand({addshard:"localhost:27018",allowLocal:true}) { "shardAdded" : "shard0001", "ok" : 1 }查看片信息mongos> db.runCommand({listshards:1}){"shards" : [{"_id" : "shard0000","host" : "localhost:27017"},{"_id" : "shard0001","host" : "localhost:27018"}],"ok" : 1}6.关键步骤,在mongos上连接上配置服务器,(疑问:连接上配置服务器后所有的操作时在mongos上操作还是在配置服务器上操作?客户端是连接的mongos吗?还是连接的配置服务器?)mongos> config=connect("localhost:10000")connecting to: localhost:10000localhost:10000> config=config.getSisterDB("config")config建立test数据库:> test=db.getSisterDB("test")test开启该数据库分片功能:> db.runCommand({enablesharding:"test"}){ "ok" : 1 }开启people集合的分片功能:> db.runCommand({shardcollection:"test.people",key:{name:1}}) { "collectionsharded" : "test.people", "ok" : 1 }7.准备工作完毕,分片功能搭建完成,下面就可以进行操作了查看分片信息:> db.printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 }shards:{ "_id" : "shard0000", "host" : "localhost:27017" }{ "_id" : "shard0001", "host" : "localhost:27018" }databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }test.people chunks:shard0000 1{ "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 0 }可以看出,此处只有一个分片在使用中查看集合信息> show collectionspeoplesystem.indexes在people集合插入信息> db.people.insert({name:"sky_people",sex:"male",age:25});> db.people.find(){ "_id" : ObjectId("4efbaab954d27d6f8972cc71"), "name" : "sky_people", "sex" : "male", "age" : 25 }查看people集合信息> db.people.stats(){"sharded" : true,"flags" : 1,"ns" : "test.people","count" : 1,"numExtents" : 1,"size" : 72,"storageSize" : 8192,"totalIndexSize" : 16352,"indexSizes" : {"_id_" : 8176,"name_1" : 8176},"avgObjSize" : 72,"nindexes" : 2,"nchunks" : 1,"shards" : {"shard0000" : {"ns" : "test.people","count" : 1,"size" : 72,"avgObjSize" : 72,"storageSize" : 8192,"numExtents" : 1,"nindexes" : 2,"lastExtentSize" : 8192,"paddingFactor" : 1,"flags" : 1,"totalIndexSize" : 16352,"indexSizes" : {"_id_" : 8176,"name_1" : 8176},"ok" : 1}},"ok" : 1}查看分片信息,可以发现,由于插入的信息量小,故所有的信息都存储在一个片上> db.printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 }shards:{ "_id" : "shard0000", "host" : "localhost:27017" }{ "_id" : "shard0001", "host" : "localhost:27018" }databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }test.people chunks:shard0000 1{ "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0000 { "t" : 1000, "i" : 0 }插入大量信息,然后查看信息,可以发现,信息已经存储在不同的片上了> for(i=0;i<10000;i++){... db.people.insert({name:"sky_people"+i,sex:"male",age:25+i});... }> db.printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 }shards:{ "_id" : "shard0000", "host" : "localhost:27017" }{ "_id" : "shard0001", "host" : "localhost:27018" }databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }test.people chunks:shard0000 2shard0001 1{ "name" : { $minKey : 1 } } -->> { "name" : "sky_people" } on : shard0000 { "t" : 2000, "i" : 1 }{ "name" : "sky_people" } -->> { "name" : "sky_people999" } on : shard0000 { "t" : 1000, "i" : 3 }{ "name" : "sky_people999" } -->> { "name" : { $maxKey : 1 } } on : shard0001 { "t" : 2000, "i" : 0 }删除片的命令db.runCommand( { removeshard : "localhost:27031"} )。
MongoDB是一种流行的NoSQL数据库,它提供了高效的数据存储和处理能力。
在MongoDB 中,单个表的数据量级是一个重要的话题,因为它会影响数据库的性能和可扩展性。
当数据量级达到一定程度时,MongoDB的性能和可扩展性会受到挑战。
具体来说,当表中的数据量达到GB或TB级别时,MongoDB的性能和可扩展性可能会受到影响。
这是因为MongoDB是一个内存中的数据存储,它依赖于内存来快速检索数据。
当数据量级过大时,内存消耗也会随之增加,导致性能下降和系统资源占用过多的问题。
为了应对大表的数据量级,MongoDB提供了以下几种策略:1. 分片(Sharding):MongoDB的分片功能可以将数据分布在多个节点上,以提高性能和可扩展性。
通过将数据按照一定的规则分布在不同的节点上,MongoDB可以在需要时动态地将查询分配到不同的节点上,从而优化性能。
2. 索引优化:合理的索引可以大大提高查询效率。
在大型表中,适当的索引可以帮助减少查询的时间复杂度,从而提高性能。
然而,过多的索引可能会导致查询效率下降,因此需要根据实际情况进行权衡。
3. 压缩(Compression):MongoDB支持数据压缩,可以减少存储空间的使用,从而提高存储效率。
对于大型表来说,压缩可以显著降低存储成本。
4. 备份和恢复策略:对于大型表,备份和恢复策略也是非常重要的。
使用适当的备份和恢复工具和方法,可以确保数据的安全性和完整性。
总之,对于大型表的数据量级,MongoDB提供了多种策略来应对性能和可扩展性的挑战。
通过合理地使用分片、索引优化、压缩和备份和恢复策略,可以确保在处理大量数据时保持高效和可靠的性能。
然而,需要注意的是,对于非常大的数据量级,可能需要考虑使用其他类型的数据库系统,如分布式数据库或数据仓库。
mongo 设置集合分片规则MongoDB是一种非关系型数据库,它以文档的形式存储数据。
在MongoDB中,数据存储在集合(Collection)中,而集合可以根据一定的规则进行分片(Sharding),以实现数据的分布式存储和查询。
在MongoDB中,集合分片是将一个集合的数据分散存储在多个服务器上的过程。
这样做的好处是可以增加数据的存储容量和查询性能。
下面将介绍一些关于MongoDB集合分片的规则和注意事项。
1. 集合分片的原则集合分片的原则是根据数据的某个字段(通常是主键)进行划分,确保相同数据被分配到同一个分片上。
这样可以保证数据在分布式环境中的一致性和可查询性。
2. 分片键的选择分片键的选择非常重要,它直接影响到分片的效果和查询性能。
一般来说,分片键应该是唯一的、均匀分布的,并且与查询的频率高相关。
例如,如果一个集合中的数据按照用户ID进行查询频繁,那么可以选择用户ID作为分片键。
3. 分片策略MongoDB提供了多种分片策略,可以根据不同的需求选择合适的策略。
常用的分片策略有范围分片、哈希分片和标签分片。
- 范围分片:根据分片键的范围进行划分,例如按照时间范围进行划分,将数据按照时间段存储在不同的分片上。
- 哈希分片:根据分片键的哈希值进行划分,将数据均匀地存储在多个分片上。
- 标签分片:根据用户自定义的标签进行划分,可以实现数据的灵活存储和查询。
4. 分片集群的部署分片集群的部署需要考虑多个因素,包括分片数量、复制因子、硬件配置等。
一般来说,分片数量应该和数据量保持一定的比例,复制因子应该根据数据的可用性要求进行设置,硬件配置应该满足查询性能的要求。
5. 分片的动态调整在实际应用中,数据的分布会随着时间的推移发生变化,因此需要对分片进行动态调整。
MongoDB提供了动态迁移和重平衡机制,可以在运行时对分片进行增加、删除和移动。
总结起来,MongoDB的集合分片是一种实现数据分布式存储和查询的重要机制。
MongoDB之sharding【一】1、启动相关进程在shard server上启动mongod,使用--shardsvr 命令行参数。
对于主从对,使用--pairwith命令行选项。
建议一个shard server只运行一个mongod进程。
在config server上启动mongod,使用--configsvr命令行参数。
如果config server不是一台独立的服务器,为其分配一个独立的dbpath,--dbpath命令行参数。
启动mongos,使用--configdb参数指明配置的数据库地址。
2、shell配置分片在启动好的mongos服务器上运行这些命令,然后通过它运行所有的配置命令。
注:应该使用特定的admin数据库来存储这些命令,尽管通过mongos运行时,数据会存储在config server上,所以在集群的生命周期内这些命令只需运行一次即可。
./mongo <mongos-hostname>:<mongos-port>/admin> dbadmin>3、增加一个分片,每个分片包括两台服务器(一对主从)或单机(Alpha 2只支持单机)。
> db.runCommand( { addshard : "<serverhostname>[:<port>]" } );{"ok" : 1 , "added" : ...}多台配置用逗号分隔(alpha3及以上版本)。
可选参数maxSize可用户设置该分片可使用的磁盘空间,默认为整个磁盘。
该参数目前1.4及1.4以前的版本是无效的,1.5版本及以后才会有效。
> db.runCommand( { listshards : 1 } );查看已存在的分片。
4、enable一个数据库,必须为分片enable一个数据库,否则数据将全被存在分片上。
> db.runCommand( { enablesharding : "<dbname>" } );一旦enable了个数据库,mongos将会把数据库里的不同数据集放在不同的分片上。
除非数据集被分片,否则一个数据集的所有数据将放在一个分片上。
5、数据集分片,使用shardcollection 命令分隔数据集,key自动生成。
> db.runCommand( { shardcollection : "<namespace>",key : <shardkeypatternobject>} )比如,分片测试数据库中的GridFS块集。
> db.runCommand( { shardcollection : "test.fs.chunks", key : { _id : 1 } } ){"ok" : 1}配置shard key唯一:db.runCommand( { shardcollection : "ers" , key : { email : 1 } , unique : true } );6、相关操作命令,官方操作命令1)、db.createCollection(name, { size : ..., capped : ..., max : ... } )创建非分布式数据集,相当于关系型数据库中的表,别看后面一堆参数,其实通常用的就db.createCollection(name)这个命令,比如db.createCollection(“coll_1”)。
2)、db.coll_1.drop(),删数据集。
3)、db.coll_1.ensureIndex({"id":1}),第一个参数为字段名,第二参数值为1则索引为升序;-1则为降序。
db.coll_1.dropIndex(name) 删除指定的索引;db.coll_1.dropIndexes()删除所有索引;db.coll_1.getIndexes()查看索引信息。
4)、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.coll_1.remove(query)。
query 表达式的文档7、案例:两组分片(一组两台,一组一台)、三个config db、一个mongos,一台测试服务器。
首先建立数据库存放位置,这里只为测试,所以就在当前目录了,mkdir data分别到mongodb的安装目录的bin/目录下启动mongodb$ ./mongod --pairwith 10.13.127.212:18020 --dbpath data --port 18020 //启动第一组分片(10.13.127.211:18020)$ ./mongod --pairwith 10.13.127.211:18020 --dbpath data --port 18020 //启动第一组分片(10.13.127.212:18020)$ ./mongod --dbpath data --port 18020 //启动第二组分片(10.13.127.210:18020)$ ./mongod --configsvr --dbpath /var/mongodb/sky/18022 --port 18022 //启动config server(10.13.127.210:18022,10.13.127.211:18022,10.13.127.212:18022)$ ./mongos --configdb 10.13.127.210:18022,10.13.127.211:18022,10.13.127.212:18022 //启动mongos,指定config serverps:config server可以配置多台,mongos启动时指定config server,多个config server之间用英文逗号隔开,中间注意不要有空格,而且你会发现config server的台数只能为单数不能是双数。
服务启动好了之后,可使用ps -ef|grep mongo查看运行情况,开始使用mongodb了。
$ ./mongo --host 10.13.127.211 // 连接到mongos上,可使用--port指定端口> show dbsadminconfigLocal> use admin> db.runCommand( { addshard : "10.13.127.211:18020,10.13.127.212:18020", allowLocal : true } ) //增加第一组分片> db.runCommand( { addshard : "10.13.127.210:18020", allowLocal : true } ) //增加第二个分片> db.runCommand({listshards:1}) //查看分片情况,会看到分片的信息,共两块{"_id" : ObjectId("4bd27bb39e2b00a5f7d5f0dd"),"host" : "10.13.127.210:18020"},{"_id" : ObjectId("4bd27bd39e2b00a5f7d5f0de"),"host" : "10.13.127.211:18020,10.13.127.212:18020"}> config = connect("10.13.127.210:18022") //连接config server,需要在mongos服务器上操作> config = config.getSisterDB("config") //获取配置信息注:这两步好像没有什么作用,而且也无法连接。
> test = db.getSisterDB("test") //新增数据库test> db.runCommand( { enablesharding : "test" } )> db.runCommand( { shardcollection : "test.people", key : {name : 1} } ) //建立分片数据集people> db.printShardingStatus(); //查看分片状态信息,会看到shards和databases的详细信息,包括刚建立的test的主分片信息和test.people的分片信息。
my chunks{ "name" : "test", "partitioned" : true, "primary" : "10.13.127.211:18020,10.13.127.212:18020", "sharded" : { "test.people" : { "key" : { "name" : 1 }, "unique" : false } }, "_id" :ObjectId("4bd2813fbaaa646853a4b33a") }my chunkstest.people { "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on :10.13.127.211:18020,10.13.127.212:18020 { "t" : 1272086852000, "i" : 1 }10.13.126.173:18020 { "t" : 1272086192000, "i" : 1 }> use test //进入test数据库switched to db test> db.createCollection("user_001") //建立数据集user_001,该数据集与people数据集不一样,它不分片{ "ok" : 1 }> show collections //查看数据集情况peoplesystem.indexesuser_001> db.people.insert({name:"sky_people",sex:"male",age:25}); //插入一条记录了> db.people.find(){ "_id" : ObjectId("4bbc38a39e8b5e76dcf4c5a3"), "name" : "sky_people", "sex" : "male", "age" : 25 }> er_001.insert({name:"Falcon.C",sex:"male",age:25});> er_001.find(); //查看记录{ "_id" : ObjectId("4bbc371c9e8b5e76dcf4c5a2"), "name" : "sky", "sex" : "female", "age" : 25 }>db.people.stats() //查看people数据集信息,刚才插入的数据放在10.13.127.210:18020分片上{"sharded" : true,"ns" : "test.people","count" : 1,"size" : 72,"storageSize" : 8192,"nindexes" : 2,"nchunks" : 1,"shards" : {"10.13.127.211:18020,10.13.127.212:18020" : {"ns" : "test.people","count" : 1,……> er_001.stats() //查看user_001数据集信息{"sharded" : false,"ns" : "er_001","count" : 1,"size" : 68,……}当数据量增大到一定程度的时候(貌似是64M,即一个数据块的大小),数据块chunks开始分块,由一开始的一块变成多块时,数据块chunks就会开始迁移到其他分片了。