现在网上很多教程都在讲MongoDB分片配置,但大多都没有经过实战,胡乱转载。而且用的MongoDB版本不同各种配置眼花寮乱,让入门者莫衷一是。
最近我也做了MongoDB分片,贴出自己的配置。并且把需要注意的问题和大伙聊聊,不恰当的地方希望大家指正。 也同时希望让后来者能绕过这些问题。
正式环境为了保证数据安全都要进行备份的,关于分片复制请见alibaba教程:http://www.taobaodba.com/html/525_525.html
我配置的集群是测试用的,没有复制。只是简单的分片存储数据进行测试。在测试的时候又分片,又复制,那么多机器也麻烦。这一点网上的很多例子都是错误的,为此我也花了很多时间。
我配置完成后的结构图为:
我的Mongo版本为:mongodb-linux-x86_64-2.0.8,计算机为普通Pc。
在这里我要特别说明:
1.大数据情况下最好是64位机器,32位机器不能创建大于2GB的单个文件。 小数据量无所谓
2.集群中的每台计算机的系统最好都是一样的,不要32位,64位搭配
-- 我在开始做测试就是这样,2台64,2台32.当注入300W左右的数据,索引大于3-4G时32位机器出错了,32位系统上不能创建大于2GB的单个文件。整个集群瘫痪,我为此找了很长时间的原因
|
让我们开始吧!
mongo从下载后解压后的目录结构如下:我们视安装目录为:${MONGO_INSTALL}
先在第一台计算机上在${MONGO_INSTALL}下分别执行:
1 |
bin/mongod -shardsvr -port 27017 -dbpath=/data/shard11/ -logpath=/data/shard11.log --fork |
再在另一台机器上也分别执行:
1 |
bin/mongod -shardsvr -port 27017 -dbpath=/data/shard12/ -logpath=/data/shard12.log --fork |
正常情况下你能启动这两个节点的。如果启动不成功。那就是mkdir -p /data/shard11没有成功创建。
在Ubuntu系统下你需要root权限:
1 |
sudo mkdir
/data/shard11
|
2 |
sudo chmod
-R 777 /data/shard11
|
然后启动。在终端中分别执行检查Mongod进程是否成功启动:
如果任何一台没有启动成功,重复上面的,直到找出原因。
OK,现在我们成功的分别在2太计算机上启动了1个mongod实例,mongod是真正存储数据的进程。进群中还需要一个配置服务器,用来存储在各个节点中共享的配置信息,存储数据的元信息[METADATA],也如上面我结构图中config.
config不会占用太多资源的。我们在其中任何一台上面启动Mono的Config,shell如:
1 |
bin/mongod -configsvr -dbpath=/data/config -port 20000 -logpath=/data/config.log --fork |
也许你已经注意到,在2台shard的启动参数中加了-shardsvr,在配置实例中加了-configsvr。 mongo就是这样进行区分的。当然复制的配置应该是:-replSet setName。 setName就是复制集群的别名。
当以上都启动成功,我们可以开启mongos服务了。在任何一台机器上执行:
3 |
bin/mongos -configdb ip:20000 -port 30000 -chunkSize 512 -logpath=/data/mongos.log --fork |
请注意上面的IP,这个IP应该是你启动config的那台机器ip和port。
如果顺利的话,你也应该能轻松的启动mongos进程的。可以执行查看:ps -ef |grep mongos
现在就剩下配置了。让mongos进程知道哪些机器是需要加入到分片的。在任何一台机器上执行[mongosip为启动mongos服务的机器IP]:
1 |
bin/mongo ip:30000/admin |
注意后边的admin,配置分片必须要链接admin集合。链接成功后你就可以把分片加入集群:
1 |
db.runCommand({ "addshard" : "192.168.1.23:27017" })
|
2 |
db.runCommand({ "addshard" : "192.168.1.22:27017" })
|
上边的两个ip都是第一次启动的shard的ip地址,不是config 。
如果顺利,你应该能看到{ ”ok“ : 1}的字样。这样你就成功的把两个shard加入了分片。现在你还需要制定分片的规则。
1 |
db.runCommand({ "shardcollection" : "dbname.tablename" ,
"key" :{ "primaryKey" :1}})
|
最后你还需要激活分片的设置。
1 |
db.runCommand({ "enablesharding" :
"ndmongo" })
|
OK,走到最后你应该成功的配置了分片。
现在你需要在刚才指定dbname和tablename插入一定数量的数据。测试集群:
1 |
db.printShardingStatus() |
你能看到类似如下的输出[shard中有2台机器,并且databases也存在你的dbname的partitioned为true的信息]:
现在你应该能体验自己的分片了。
如果你的机器是64位的,你用我的配置应该很容易的就成功了。如果你用的32位的,你应该还要注意在启动shard的时候加上:
--journal
因为64位默认启动开启journal的,32位没有。至于journal什么作用我也不太清楚,读者自己google吧。
因为我开始测试时用的机器32,64都有,出现了这么多烦人的问题。 希望其他跟我一样的人不要重蹈复辙
相关推荐
#### 一、MongoDB集群与分片概述 MongoDB是一种非常流行的非关系型数据库系统,以其灵活的数据模型、高性能和可扩展性而受到广泛欢迎。随着数据量的增长,单一MongoDB实例可能无法满足高可用性和性能需求,因此需要...
### 配置MongoDB分片集群的ACL 在完成分片集群的搭建后,需要设置ACL来增加安全性。MongoDB通过提供认证和授权机制来限制对数据库的访问。 - **认证**:启用用户认证,要求所有客户端提供有效的用户名和密码才能...
在部署 MongoDB 分片(Sharding)和副本集(Replica Set)后,我们需要配置 MongoDB 的配置文件,以便 MongoDB 可以连接到 Kubernetes 集群并使用持久存储。 本解决方案的优点主要包括: * 高可用性:MongoDB 分片...
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
MongoDB 分片集群部署是为了解决大数据量存储和高并发访问的问题,它将数据分布式地存储在多个服务器上,从而实现水平扩展...然而,正确配置和管理分片集群是一项复杂任务,需要对MongoDB的特性和最佳实践有深入理解。
config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉...
MongoDB 提供了一种名为分片集群(Sharding Cluster)的架构,它允许通过水平扩展来处理海量数据,避免单点故障,并提供数据冗余。 在分片集群中,有三个核心组件: 1. **Shard Server**:存储实际数据块的 mongod...
在这个“MongoDB集群测试代码”中,我们关注的是MongoDB的两个关键特性:副本集(Replica Set)和分片(Sharding),以及如何通过配置文件和脚本来进行集群的设置与测试。 1. **副本集(Replica Set)**: - 副本...
在MongoDB集群部署中,配置文件对于设定节点的角色和参数至关重要。在“conf”目录下的文件可能包括以下内容: 1. **mongod.conf**:主节点配置文件,定义了该节点的角色(如分片服务器、配置服务器或复制集成员)...
首先需要为每个分片实例配置MongoDB服务,并指定端口和数据存储路径。 ```bash c:\mongodb\bin\mongod --dbpath=c:\mongodb\db\ --port 27020 d:\mongodb\bin\mongod --dbpath=d:\mongodb\db\ --port 27021 ``` ...
4. **配置服务器(Config Server)**:存储关于分片集群的元数据,如分片信息、副本集状态等。 从单节点升级到分片集群的步骤大致如下: 1. **安装 MongoDB**:在所有服务器上安装 MongoDB,并以服务方式启动和...
总结,搭建Spring+MongoDB集群涉及安装MongoDB、配置复制集和分片、设置Spring应用的数据库连接、创建数据访问层以及进行测试和维护。这个过程旨在提高应用程序的稳定性和性能,特别是在大数据量和高并发场景下。...
2. 设置分片集群:首先,需要启动配置服务器、分片服务器和路由进程。配置服务器存储分片信息,分片服务器承载数据,路由进程处理客户端请求并分发到正确分片。 3. 添加分片:使用`sh.addShard`命令添加分片到集群...
MongoDB 分片是一种水平扩展策略,用于处理大数据量和高并发场景...总的来说,MongoDB的分片技术旨在提供可扩展性和高性能,通过合理配置和管理,能够在大规模数据存储和高并发访问的环境中保持系统稳定性和响应速度。
MongoDB中的分片实现涉及到几个核心概念:分片(Shards)、配置服务器(Config Servers)以及分片集群行为(Sharded Cluster Behavior)。每个分片可以是一个单一的MongoDB服务器,也可以是一个副本集(Replica Set...
配置服务器存储着所有分片集群的信息,包括分片分布、集合切片等。对配置服务器进行备份至关重要,因为它们是整个分片集群的核心。 **Config 服务器备份:** 备份命令使用 `mongodump` 工具,指定 `-h` 参数为配置...
本教程将详细讲解如何安装和配置MongoDB的分片集群。 首先,我们需要了解MongoDB分片的概念。在MongoDB中,分片(Sharding)是指将数据分布在多个物理节点上,以实现水平扩展,即增加存储容量和处理能力。每个分片...
MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置
MongoDB4.2分片及副本集群搭建详细指导手册,详细描述了MongoDB4.2数据库服务器集群的搭建以及副本和分片服务的配置过程及具体操作指令。