六、MongoDB副本集本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性
1.为什么要使用副本集
提供主从复制能力,热备能力,故障转移能力
2.构建方式
rs.initiate()rs.add("localhost:40001")rs.add("localhost:40002",{arbiterOnly:true})3.监控
db.isMasrter()rs.status()4.副本集的工作原理
实际上MongoDB对副本集的操作跟mysql主从操作是差不多的,先看一下mysql的主从数据流动过程
主binlog -> 从relay.log -> 从bin.log -> 从数据库而MongoDB主要依赖的日志文件是oplog
主oplog -> 从oplog写操作先被记录下来,添加到主节点的oplog里 。与此同时,所有从结点复制oplog 。首先,查看自己oplog里最后一条的时间戳;其次,查询主节点oplog里所有大于此时间戳的条目;最后,把那些条目添加到自己的oplog里并应用到自己的库里 。从节点使用长轮询立即应用来自主结点oplog的新条目 。
当遇到以下情况,从节点会停止复制
- 如果从节点在主节点的oplog里找不到它所同步的点,那么会永久停止复制
- 一旦某个从节点没能 在主节点的oplog里找到它已经同步的点,就无法再保证这个从结点的完美副本
- replset.minvalid 包含指定副本集成员的初始化同步信息
- system.replset 保存在副本集配置文档
- system.indexes 标准索引说明容器
- me slaves 主要用于写关注
db.oplog.rs.findOne()
- ts 保存了该条目的BSON时间戳
- t 是从纪元开始的描述
- i是计数器
- op 表示操作码
- ns 标明了有关的命名空间
每个副本集成员每秒钟ping一次其他所有成员,可以通过rs.status()看到节点上次的心跳检测时间戳和健康状况 。
6.故障转移
这个点没必要过多描述,但是有一个特殊场景,如果从节点和仲裁节点都被杀了,只剩下主节点,他会把自己降级成为从节点 。
7.提交与回滚
如果主节点的数据还没有写到从库,那么数据不能算提交,当该主节点变成从节点时,便会触发回滚,那些没写到从库的数据将会被删除,可以通过rollback子目录中的BSON文件恢复回滚的内容 。
8.驱动与复制
(1)使用单节点链接
只能链接到主节点,如果链接到从节点的话,会被拒绝写入操作,但是如果没有使用安全模式,因为mongo的fire and forget 特性,会把拒绝写入的异常给吃掉 。
(2)使用副本集方式链接
能根据写入的情况自动进行故障转移,但是当副本集进行新的选举时,还是会出现故障,如果不使用安全模式,依旧会出现写不进去,但现实成功的情况 。
(3)写关注
可以使用写关注来关注数据是否已经被写入MongoDB的库中,使用写关注会消耗性能,需要在速度和持久性之间做出权衡 。
七、分片分片是数据库切分的一个概念实现,这里也是简单总结为什么要使用分片以及分片的原理,操作 。
1.为什么需要分片
当数据量过大,索引和工作数据集占用的内存就会越来越多,所以需要通过分片负载来解决这个问题
2.分片的工作原理
(1)分片组件
- 分片:每个分片都是一个副本集
- mongos路由器:是一个路由器,将读写请求指引到合适的分片上
- 配置服务器config:持久化分片集群的元数据,包括:全局集群配置;每个数据库、集合和特定范围数据位置;一份变更记录,保存了数据在分片之间进行迁移的历史信息 。配置服务器之间不是副本集形式存在,mongos向配置服务器提交信息时是两阶段提交,保证配置服务器之间的一致性 。
分片一个集合:分片是根据一个属性的范围进行划分的,MongoDB使用所谓的分片键让每个文档在这些范围里找到自己的位置
块:是位于一个分片中的一段连续的分片键范围,可以理解为若干个块组成分片,分片组成MongoDB的全部数据
(3)拆分与迁移
块的拆分:初始化时只有一个块,达到最大块尺寸64MB或100000个文档就会触发块的拆分 。把原来的范围一分为二,这样就有了两个块,每个块都有相同数量的文档 。
推荐阅读
- 腾讯会员怎么取消自动续费
- 躺平是什么意思
- 绿茶有几种,其功效是什么?
- 淘宝直播间人气怎么能上升 淘宝直播怎么才能把人气做起来
- 梦见便秘自己抠出来了 梦见便秘是什么意思
- 昙花的花期是什么时候 昙花的花期是多长时间
- 世界上最高的果树是什么 世界上有多少种水果树
- 冬天开空调还需要盖被子吗 开空调盖被子是什么心理
- 违章停车贴条怎么处理,处罚多少钱 违章停车被贴条没写金额怎么处理
- 花小猪打车怎么看不到车牌 用花小猪打车看的到司机的车牌号码吗