成功网站案例分析,田园官方网站建设,seo发包技术教程,郑州网站建设 .cc一、MongoDB实现高可用
1. MongoDB复制集(Replication Set) 在实际生产中#xff0c;MongoDB要实现高可用#xff0c;以免MongoDB单实例挂了#xff0c;服务不可用。MongoDB实现高可用是以MongoDB复制集的形式实现#xff0c;和集群部署概念相同#xff0c;MongoDB复制集…一、MongoDB实现高可用
1. MongoDB复制集(Replication Set) 在实际生产中MongoDB要实现高可用以免MongoDB单实例挂了服务不可用。MongoDB实现高可用是以MongoDB复制集的形式实现和集群部署概念相同MongoDB复制集有多个MongDB实例其中包含一个主节点和多个从节点组成。所有对MongoDB的写操作都写入到主节点从节点通过数据同步从主节点中复制数据(备节点不只是从主节点上同步数据还可以选择一个离自己最近心跳延时最小的节点来复制数据)以保证数据的高可用。 复制集高可用依赖于两个功能实现: 1.数据被写入后数据迅速的同步到另一个节点上。2.主节点发生故障后其他节点实例能自动的选取出一个新的替代节点。
在实现MongoDB复制集的同时也实现了以下几个功能:
读写分离: 不同类型的压力分别在不同的节点上执行异步容灾: 在数据中心故障时候快速切换到异地数据分发: 将数据从一个区域复制到另一个区域减少另一个区域的读延迟
2.复制集模式 通常复制集由三个节点组成来保障数据的高可用其中复制集模式可以分为PSS模型、PSA模式。
2.1 PSS模型官方推荐 PSS为一个primary节点和两个secondary节点既一主两从。 一旦主节点出现故障从节点会自动选举出一个新的主节点。
2.2 PSA模型 PSA为一个primary节点和一个secondary节点以及一Arbiter(仲裁)节点既一主一从一仲裁。 Arbiter节点不存储数据副本也不提供业务的读写操作。Arbiter节点发生故障不影响业务仅影响选举投票
3.复制集高可用依据
3.1 复制集选举方面 选举的过程中会进行投票选举选举中为避免平票的情况MongoDB的实例节点数要为奇数主要措施有两个:
为选举定时器增加少量的随机时间偏差这样避免各个节点在同一时刻发起选举提高成功率。 2 .使用仲裁者角色该角色不做数据复制也不承担读写业务仅仅用来投票。
3.2 自动故障转移 MongoDB节点之间会通过心跳机制进行通信复制集建立好之后就开启定时器实现心跳检测功能选举心跳检测失败后不会立即触发重新选举直到electionTimeout被触发。 electionTimeout触发选举需要满足的条件有: 1当前节点是备节点 (2)当前节点具备选举条件 (3)在心跳检测期间主节点还没能进行通信
3.3复制集同步数据
3.3.1 同步数据原理 主节点和备节点之间是通过opLog进行同步数据的opLog是一个固定集合的结构其中主节点向opLog写入数据备节点在opLog中读取数据以达到同步。 其中opLog保证节点有序备节点通过轮询的方式进行拉取数据。每个备节点都维护了一个offset,也就是从主节点拉取的最后一条日志的optime在执行同步时就通过这个optime向主节点的oplog集合发起查询。
每一条oplog记录都描述了一次数据的原子性变更对于oplog来说必须保证是幂等性的。
3.3.2 复制延迟以及解决办法 esmp;复制延迟情况的产生是因为主节点的写入速度太快了备节点从opLog上拉取不过来从而导致复制延迟。 复制延迟的解决方案有以下措施:
降低主节点的写入速度提高opLog的容量大小并保持监视避免字段使用太大的数组
二、MongoDB分片集群
1.分片 在大数据发展的时代数据存储会在多个不同的机器上要进行分布式的存储进行分片是一个好的措施将数据按某种方式进行切分存储在不同的机器上。
2.分片集群架构 对MongoDB进行分片集群部署有利于数据存放的横向拓展。分片集群架构除分片节点外还有配置节点、路由节点等。 数据分片: 分片用于存储真正的数据并提供最终的数据读写访问,通常是复制集的形式存在。
配置节点 配置节点不用于存储数据而是保存了整个分片集群中的元数据其中包含各个集合的分片策略以及分片的路由表等
查询路由mongosmongos是分片集群的访问入口其本身并不持久化数据。
3.分片策略 分片策略指的是将一个大的数据集合通过何种策略进行分配到多个分片节点上。 集群分片涉及到chunk,chunk指的是一个范围区间的数据集合在操作分片集合时会根据分片键找到对应的chunk,并向chunk所在分片发起请求。
4.分片算法 分片算法有范围分片和哈希分片两种。
范围分片: 按照一定的范围进行分片 hash分片会生成一个哈希值然后根据哈希值对范围分片的chunk进行切分。 hash算法使得数据分布更加均匀保证了随机性但在范围查询时哈希分片需要对所有的chuck进行检索效率低。
5. 数据均衡
5.1 实现均衡的措施 想要实现数据在不同的分片中数量是均衡的实现的方式有两种。 手动均衡(通过干预的方式进行均衡) 自动均衡: 以后台的方式监控chunk,chunk不均衡时进行搬迁以达到平衡。
5.2 chunk分裂
一个chunk的大小固定一旦数据量超过chunk大小chunk就会自动分裂分类两个大小相同的chunk。 chunk分裂是基于分片键进行的如果分片键的基数太小则可能因为无法分裂而会出现jumbo chunk超大块的问题。jumbo chunk对水平扩展有负面作用该情况不利于数据的均衡业务上应尽可能避免。