`
tullyliu
  • 浏览: 30892 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MongoDB分片和复本集介绍

阅读更多

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.  分片机制

AShard KeysMongoDB主要根据Shard Keys来划分数据,Shard Keys可以由文档的一个或者多个物理键值组成。

BChunksChunk是一组数据集合,在MongoDB中,Chunk表示为collectionminKeymaxKey构成的三元组,一个Chunk包括了Shard Key取值在minKeymaxKey之间一组文档集合,但Chunk并不存放实际数据。整个MongoDBchunk元信息存放在config数据库的chunks Colecttion中。

CAutoSplitMoveChunk: Chunk的大小达到ChunkSize(默认为200MB,在mongos启动时可以设置)时,MongoDB会根据minKeymaxKey的一个中间值将一个Chunk分裂(Split)为两个Chunk,分裂完毕后,MongoDB会根据各个Shard的负载情况,决定是否将新Chunk移动到其他ShardMoveChunk)。

3.  配置

以单机配置2Shard1Config1Mongos为例

      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指明mongodoplog collection大小,单位为MBmongodb的每次操作都会先写入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 Serverip地址.(建议使用ip地址配置,使用hostname在某些情况下会有错误导致mongod进程挂掉)Name指明分片的名称,可以随意配置。

> db.runCommand({ enablesharding :"dbname"} );

配置数据库允许分片

> db.runCommand( { shardcollection : "dbname.colname",key : {keyname:1} });

配置collectionshard key

      E.  常用命令

>use admin;

>db.printSharingStatus();

可以查看整个集群的分片情况

>use dbname;

>db.colname.stats();

可以查看某个具体Collection的分片情况

 

 

复本集--Replica Set

1.       复本集(Replica Set)介绍

Replica Set是伴随着MongoDB分片技术产生的,Relpica SetMongoDBShard环境中使用的复制技术。一组Replica Set支持17台服务器,在一个复本集中各个服务器数据保持完全一致。通过Relpica SetMongoDB实现了自动错误处理和自动错误恢复。

在一个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>添加分片。

 

 

2
0
分享到:
评论

相关推荐

    k8s 安装 mongodb 分片(Sharding)+ 副本集(Replica Set)

    k8s 安装 MongoDB 分片(Sharding)+ 副本集(Replica Set)是结合 Kubernetes(k8s)和 MongoDB 实现高可用性和高性能的解决方案。本解决方案通过使用 Kubernetes 部署 MongoDB 分片(Sharding)和副本集(Replica ...

    mongodb分片与副本集详细配置方案

    MongoDB 是一个高性能、分布式、开源的文档型数据库,它支持分片(sharding)和副本集(replica sets)来实现水平扩展和高可用性。分片是将数据分散到多个物理节点上,以处理大数据量和高并发场景;副本集则是为了...

    MongoDB分片介绍

    MongoDB 分片是一种水平扩展策略,用于处理大数据量和高并发场景。通过将数据分散到多个物理节点(称为分片,或 shard),分片技术能够提高数据库的读写性能和存储容量。以下是对MongoDB分片的详细说明: 1. **启动...

    mongodb分片备份

    本文将详细介绍MongoDB的分片备份以及复制集的备份方法。 **1. 分片备份** MongoDB 分片是将大数据集分散到多个物理节点上,以提高查询性能和存储容量。分片备份主要涉及配置服务器(Config Server)的备份。配置...

    MongoDB4.2分片及副本集群搭建

    MongoDB4.2分片及副本集群搭建 MongoDB集群 MongoDB分片 MongoDB副本 MongoDB副本集群

    mongodb分片设计

    每个分片可以是一个单一的MongoDB服务器,也可以是一个副本集(Replica Set),从而为数据提供冗余和高可用性。配置服务器是保存整个分片集群元数据的关键组件,它记录了所有分片的信息和集群的数据分布情况。 数据...

    mongodb分片集群增加acl

    本文将详细介绍在MongoDB 3.6版本中如何增加分片集群的ACL(访问控制列表)权限,以及在搭建分片集群过程中可能遇到的一些问题及其解决方案。 ### MongoDB分片集群简介 MongoDB分片集群是一种分布式数据存储结构,...

    实验五 MongoDB分片部署与启动

    1. **启动分片功能**:在服务器nosql01中登录mongos的MongoDB客户端,切换到数据库`gateway`,并向分片集群中添加三个Shard,分别为`shard1`、`shard2`和`shard3`。 #### 实验注意事项 - 在实验过程中,需要注意...

    MongoDB分片副本级

    MongoDB分片副本级 详细的讲述了MongoDB分片副本级配置

    Mongodb分片副本集集群搭建

    总结以上知识点,搭建MongoDB分片副本集集群需要考虑架构设计、版本兼容性、配置服务器和分片服务器的设置、机器规划以及配置参数等方面。了解这些知识点并结合实际操作,可以有效避免搭建过程中遇到的常见问题,...

    mongodb副本集加分片集群安全认证使用账号密码登录

    mongodb副本集加分片集群安全认证使用账号密码登录

    mongodb中文API及分布式分片实例详解

    1. 分片概念:分片是将大数据集分散到多个物理节点上的过程,以提高读写性能和存储容量。MongoDB通过分片实现水平扩展。 2. 设置分片集群:首先,需要启动配置服务器、分片服务器和路由进程。配置服务器存储分片...

    mongodb分片

    MongoDB的分片技术是一种用于处理大数据量的分布式数据库策略,它通过将数据水平分割并分布在多个服务器上,以提高存储容量和数据处理性能。在MongoDB中,分片(Sharding)是解决大规模数据存储和高并发访问的有效...

    13、MongoDB分片集群&高级集群架构详解-ev.rar

    13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群架构详解_ev.rar13、MongoDB分片集群&高级集群...

    MongoDB企业级分片集群搭建视频.zip

    目录 1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 ...17 MongoDB分片集群的使用介绍.mp4

    mongodb分片linux安装文档

    你需要在这三台服务器上分别安装 MongoDB 并配置不同的角色:mongos(路由服务)、config server(配置服务器)和 shard server(分片服务器)。 1. **安装 MongoDB** - 下载适用于 Red Hat Enterprise Linux 7 的...

    centos7下mongodb4.0.6分片集群搭建(psa)-用户认证关键问题汇总

    公司单节点升级到分片下,搜索了一圈大多数MongoDB集群的部署方案都是分片+副本集,没有讲述如何从单节点升级到分片+复制集的方法,亲自试验后记录整个过程以及中间的参考内容和疑难解决,以备后查。内容包含复制集+...

    mongoDB分片技术处理方案

    在数据量不断增长的情况下,为了保持高效的查询性能和存储能力,MongoDB提供了分片(Sharding)技术。分片是将大型数据集分散到多个物理节点上的一种策略,每个节点存储数据的一部分,从而实现水平扩展。 一、...

    第四十三章:MongoDB分片结合复制集1

    在MongoDB 3.2版本之后,分片必须与复制集结合使用,以确保数据的高可用性和持久性。 **一、分片概述** 分片是将数据库横向扩展的方式,它将数据分散到多台机器上,每个分片仅存储数据集的一部分,确保所有分片的...

    mongodb4.22分片及副本集搭建

    mongodb4.22分片及副本集搭建

Global site tag (gtag.js) - Google Analytics