MongoDB在1.6版本中提供分片和复本集技术使得MongoDB真正具备了生产环境部署的能力。
分片--Sharding
1. MongoDB集群的构成
MongoDB集群主要有以下服务组成
A.分片服务(Shard Server),mongod 实例,2个以上,负责存储实际的数据分片,生产环境中一个Shard Server可由几台服务器组成一个Replica Set代替,避免主机单点故障。
B.配置服务(Config Server),mongod 实例,1个以上,负责存储整个集群的元数据。
C.路由服务(Routing Process),mongos实例,1个以上,客户端由此前端路由接入,且让整个集群看起来像单一数据库,客户端应用可以透明使用,Routing Process不存储数据,数据来自Config Server。
2. 分片机制
A.Shard Keys:MongoDB主要根据Shard Keys来划分数据,Shard Keys可以由文档的一个或者多个物理键值组成。
B.Chunks:Chunk是一组数据集合,在MongoDB中,Chunk表示为collection,minKey,maxKey构成的三元组,一个Chunk包括了Shard Key取值在minKey和maxKey之间一组文档集合,但Chunk并不存放实际数据。整个MongoDB的chunk元信息存放在config数据库的chunks Colecttion中。
C.AutoSplit和MoveChunk: 当Chunk的大小达到ChunkSize(默认为200MB,在mongos启动时可以设置)时,MongoDB会根据minKey和maxKey的一个中间值将一个Chunk分裂(Split)为两个Chunk,分裂完毕后,MongoDB会根据各个Shard的负载情况,决定是否将新Chunk移动到其他Shard(MoveChunk)。
3. 配置
以单机配置2个Shard,1个Config,1个Mongos为例
A. 启动Shard Server
分片1
./bin/mongod --shardsvr --port 27017 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/shard1.log --logappend --fork
分片2
./bin/mongod --shardsvr --port 27018 --dbpath ./data/shard2 --oplogSize 10000 --logpath ./data/shard1.log --logappend --fork
其中 shardsvr选项表示以分片方式启动mongod。
port指明mongod的服务端口。
dbpath指明mongod的数据存放位置。
oplogSize指明mongod的oplog collection大小,单位为MB,mongodb的每次操作都会先写入oplog,再实际操作,且在replica set模式中,该日志用于各个服务器间的同步,网速较慢时应该适当放大。
logpath指明mongod输出日志的位置
logappend指明日志以追加方式输出
fork指明mongod以后台服务形式启动
B. 启动Config Server
./bin/mongod –configsvr –dbpath ./data/config –port 20000 --logpath ./data/config.log --logappend –fork
Config Server实际上也是个mongo数据库,除了使用configsvr选项表示Config身份,其余跟Shard Server雷同
C. 启动Routing Process
./bin/mongos –configdb localhost:20000 --port 30000 --logpath ./data/mongos.log --logappend --fork
启动mongos,最主要的是要指定Config Server的位置
D. 配置分片
./bin/mongo localhost:30000
用mongo客户端连接mongos
> use admin;
切换到admin数据库
> db.runCommand( { addshard :"[ip]:27017",name:"s1"} );
> db.runCommand( { addshard :"[ip]:27018",name:"s2"} );
添加shard,[ip]为Shard Server的ip地址.(建议使用ip地址配置,使用hostname在某些情况下会有错误导致mongod进程挂掉)。Name指明分片的名称,可以随意配置。
> db.runCommand({ enablesharding :"dbname"} );
配置数据库允许分片
> db.runCommand( { shardcollection : "dbname.colname",key : {keyname:1} });
配置collection的shard key
E. 常用命令
>use admin;
>db.printSharingStatus();
可以查看整个集群的分片情况
>use dbname;
>db.colname.stats();
可以查看某个具体Collection的分片情况
复本集--Replica Set
1. 复本集(Replica Set)介绍
Replica Set是伴随着MongoDB分片技术产生的,Relpica Set是MongoDB在Shard环境中使用的复制技术。一组Replica Set支持1到7台服务器,在一个复本集中各个服务器数据保持完全一致。通过Relpica Set,MongoDB实现了自动错误处理和自动错误恢复。
在一个Replica Set中各个服务器有以下几种状态
A. Primary 主节点,一个复本集有且仅有一台服务器处于Primary状态,只有主节点才对外提供读写服务。如果主节点挂掉,复本集将会投票选出一个备用节点成为新的主节点。
B. Secondary 备用节点,允许有多台Secondary,每个备用节点的数据与主节点的数据是完全同步的。
C. Recovering 恢复中,当复本集中某台服务器挂掉或者掉线后数据无法同步,重新恢复服务后从其他成员复制数据,这时就处于恢复过程,数据同步后,该节点又回到备用状态。
D. Arbiter 仲裁节点,该类节点可以不用单独存在,如果配置为仲裁节点,就主要负责在复本集中监控其他节点状态,投票选出主节点已经恢复数据。该节点将不会用于存放数据。如果没有仲裁节点,那么投票工作将由所有节点共同进行。
E. Down 无效节点,当服务器挂掉或掉线时就会处于该状态。
2. 配置
以单机配置2个节点的复本集为例
A. 启动mongod
./bin/mongod --replSet setname --port 27017 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/set1.log --logappend –fork
./bin/mongod --replSet setname --port 27018 --dbpath ./data/shard1 --oplogSize 10000 --logpath ./data/set2.log --logappend –fork
其中replSet指明复本集的名称
B. 初始化复本集
./bin/mongo localhost:27017
用mongo连接复本集中任意一台机器
>use admin;
>config = {
_id: 'setname',
members: [
{_id: 0, host: '[ip]:27017'},
{_id: 1, host: '[ip]:27018'}
]
};
>rs.initiate(config);
主要用一个config对象初始化复本集。
其中_id: 'setname'表示复本集的名字,应与启动时设置的名字一致。
Members指明了复本集中各个服务器的ip和端口。
到此就配置完毕。
C. 常用命令
>use admin;
>rs.status();
查看复本集的状态。
>rs.add("[ip]:27020");
运行中添加新成员。
D. 分片中的复本集配置
可以为一个分片配置一组复本集,配置方式为增加--replSet setname选项
例如:
./bin/mongod –shardsvr –replSet shard1 –port 27019 --dbpath ./data/shard3$HOSTID --oplogSize 10000 –logpath ./data/shard3$HOSTID.log --logappend –fork
一组复本集的机器都启动后,用mongo登录到某台机器上初始化复本集,注意不是登录到mongos中。
添加分片时应使用如下命令
>db.runCommand( { addshard :"shard1/[ip1]:[port1], [ip2]:[port2]",name:"s1"} );
注意使用<replica setname>/<ip>:<port>,<ip>:<port>添加分片。
分享到:
相关推荐
MongoDB分片介绍
该文档详细讲述了对三个服务器的mongodb进行副本集与分片的部署。并给出测试方案和架构图。
MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群
mongodb的分片备份 复制集的备份和配置的备份
k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)
MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置
实验五 MongoDB分片部署与启动
英文当的mongodb分片设计以及原理,喜欢的可以下载来看看
mongodb集群分片操作以及增加acl,有什么问题联系我!
mongodb副本集加分片集群安全认证使用账号密码登录
mongodb 分片集群搭建过程(无副本),详细操作步骤,linux命令
13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...
目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4
公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...
搭建Mongodb分片集群的步骤文档,度娘上很多坑,被坑的可以看看,本文档专门埋坑。
mongodb4.22分片及副本集搭建
mongodb中文API及分布式分片实例详解。
mongoDB分片技术处理方案,内容详细
公司单节点升级到分片下,搜索了一圈大多数 MongoDB 集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解 决,以备后查。内容包含复制...
mongos,数据库集群请求的入口,...mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后....