guo_wen_qiang头像

mongodb集群模式的原理




目录

一、原理

1 复制集(replset)

复制集架构图

复制集主从同步

复制集故障恢复

2 分片

3 片键


mongo集群部署一起结合着方便理解云服务器mongo搭建复制集-CSDN博客本文详细介绍了在云服务器上通过离线资源包方式安装MongoDB的完整流程,包括创建目录、上传解压安装包、配置环境变量、编写mongodb.conf启动配置文件、创建数据与日志目录、以配置文件方式启动mongod服务,以及使用mongo客户端或Navicat连接验证。创建复制集文件夹,将mongodb-linux-x86_64-rhel70-4.4.8.tgz文件解压到新目录中。# 进入任何一个mongo中,输入命令,查看复制集状态。 https://blog.csdn.net/guo13313/article/details/168774475?sharetype=blogdetail&sharerId=168774475&sharerefer=PC&sharesource=guo13313&spm=1011.2480.3001.8118

一、原理

数据可用与安全

可用性与安全性:数据冗余

1 复制集(replset)

在mongoDB中:复制集

复制集的主要意义在于实现服务高可用,类似于Redis中的哨兵模式

# 结构

一主多从多仲裁

  • Primary:可读可写
  • Secondary:只读
  • Arbiter:不读不写(仲裁)

实现高可用的同时,还有其他几个作用:

数据分发:将数据从一个区域复制到另一个区域,减少另一个区域的读延迟

读写分离:不同类型的压力分别在不同的节点上执行

异地容灾:在数据中心故障时快速切换到异地

复制集架构图

复制集成员:
Primary:主节点
一个复制集只能同时存在一个主节点,接受数据写入,接受读请求。
Secondary:从节点
一个复制集可同时存在多个从节点,从主节点同步数据,不可直接写入数据,
可以接受读请求。
Arbiter:投票节点只负责选主,不存储数据,不承载读写。

复制集主从同步

同步方式:全量同步与增量同步

1.全量同步:增加一个新的从节点;增量同步失效。
2.增量同步:正常同步;通过oplog。

oplog:主节点的操作日志。
ts:操作时间
o:操作内容
从节点记录自己最新的一次同步时间,之后每隔一段时间向主节点查询有没有更新的操作。

复制集故障恢复

复制集故障恢复:


主节点: 需要与复制集中一半以上的节点正常连通。

故障恢复:

        主节点挂掉之后,会有一个从节点提升为主节点。

选主策略:

        优先度最高,oplog最新且与复制集中一半以上的节点正常连通。

投票选举:Arbiter参与选举,不会选自己。

2 分片

解决性能与存储扩展

单机不能满足要求:
存储性能:

        硬盘存储空间不够
计算性能:

        内存不够,查询缓慢

        IO不够,写入缓慢

分片(sharding)
基本原理:按照某些字段的范围,把数据分布在不同的机器上。

mongos:路由服务器。

config:存储配置,分片等信息。

shard:存储数据的分片可以是单机mongod,也可以是复制集。
 

# 图

一次请求过程:
请求到mongos:mongos对外提供服务
mongos根据请求内容,查询本地缓存的config信息(虚线不是每次都去config查询),将请求发送到正确的shard。
shard处理完信息,返回给mongos。
mongos返回给请求方。

3 片键

#

片键就是mongos做路由的字段。

{x:5,y:10,z:13}

x是片键规则:

        x<3 到 shard1

        3<=x<8到shard2

        x>= 8到 shard3

片键应具备的特点:

  • 片键应使写入应在所有分片大致致均衡。
  • 片键应使查询尽可能不跨分片。
  • 并不一定存在完美的片键。
  • 避免选出明显糟糕的片键。

糟糕的片键:
_id: 自增,所有新数据都写到一个分片。与之类似,所有自增的片键都是不合适的。
与查询无关:

        即使写入均衡,查询会占用所有分片资源。比如用驱动生成的_id做hash(_id)片键。
基数小:比如一个boolean值或者几个有限的falg。

eg: 网盘

        记录用户信息,使用用户id:uid作为片键

写入是否均衡:不完美均衡,有活跃用户与僵尸用户的区别。
查询是否均衡:同上,不完美。
但是有相当大的基数,这种不完美是可以接受的。

#

使用集群前,做均衡与预分配

# 数据库结构

即使是一个分片,也推荐使用sharding

        一个分片的sharding性能会比单机差一些。

        后期好扩展。
即使是单机,也推荐使用复制集。
        oplog会浪费一部分磁盘空间。
        后期增加冗余方便。
如果可能,相互备份的节点

        (mongos,复制集成员,config,arbiter)

尽量部署在不同的机房。

        灾难性事件发生也有容错的余地。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/guo13313/article/details/168651477

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--