揭秘MongoDB副本集选举机制:如何避免脑裂与故障转移失败?

第一章:MongoDB副本集架构概述

MongoDB副本集(Replica Set)是一种高可用的数据库架构,通过维护多个数据副本来确保系统的容错性和数据冗余。副本集通常由一组mongod实例组成,其中一个为主节点(Primary),其余为从节点(Secondary)。主节点负责处理所有写操作,而从节点通过复制主节点的oplog(操作日志)来保持数据同步。

副本集的核心组件

  • 主节点(Primary):接收所有写入请求,并将操作记录写入本地oplog。
  • 从节点(Secondary):定期轮询主节点的oplog并应用变更,实现数据同步。
  • 仲裁节点(Arbiter):不存储数据,仅参与选举投票,用于在主节点故障时协助选出新的主节点。

数据同步机制

从节点通过一个持续的复制过程从主节点同步数据。该过程主要包括以下几个阶段:
  1. 从节点连接到主节点并读取其oplog。
  2. 将获取的操作记录应用到本地数据库。
  3. 定期检查并追赶主节点的最新状态。
// 查看副本集状态的Mongo Shell命令
rs.status();
// 输出包括各成员状态、角色、同步延迟等关键信息

选举机制与故障转移

当主节点不可达时,副本集会自动触发选举流程,选出新的主节点。选举基于多数派原则,要求至少有半数以上节点可达。为避免脑裂问题,可配置仲裁节点或使用优先级设置。
节点角色数据存储投票权适用场景
Primary是是生产环境主服务
Secondary是是数据备份与读扩展
Arbiter否是低成本高可用支持
graph TD A[Client Write] --> B{Primary Node} B --> C[Write to Data & oplog] C --> D[Secondary Pulls oplog] D --> E[Apply Changes Locally] E --> F[Data Consistent]

第二章:副本集选举机制深入解析

2.1 选举触发条件与节点状态转换

在分布式共识算法中,选举的触发通常依赖于节点的心跳超时机制。当从节点在指定时间内未收到来自主节点的有效心跳信号,将触发新一轮的领导者选举。
常见选举触发条件
  • 心跳超时:Follower 长时间未收到 Leader 心跳
  • 节点启动:新加入集群的节点尝试发起选举
  • 网络分区恢复:分区恢复后节点发现旧 Leader 不再活跃
节点状态转换流程
// 简化的状态转换逻辑
func (n *Node) onHeartbeatTimeout() {
    n.state = Candidate        // 转为候选者状态
    n.votes = 0
    n.startElection()         // 向其他节点请求投票
}
上述代码展示了节点在心跳超时后的状态迁移过程。n.state = Candidate 表示节点由 Follower 转为 Candidate,随后调用 startElection() 发起投票请求,进入选举流程。

2.2 Raft共识算法在MongoDB中的实现原理

MongoDB通过副本集(Replica Set)实现高可用,其底层选主与数据同步机制基于Raft共识算法的变种。虽然MongoDB并未完全照搬原始Raft,但核心思想一致:确保在任意时刻只有一个主节点(Primary)处理写请求。
角色状态与心跳机制
每个节点处于主节点、从节点(Secondary)或仲裁者(Arbiter)之一。主节点定期向从节点发送心跳,维持领导权。若从节点在设定时间内未收到心跳(默认10秒),则触发选举。

// mongod 配置示例:定义副本集成员
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongodb0:27017", priority: 2 },
    { _id: 1, host: "mongodb1:27017", priority: 1 },
    { _id: 2, host: "mongodb2:27017", arbiterOnly: true }
  ]
});
上述配置中,优先级(priority)影响选举倾向,仲裁者不存储数据,仅参与投票。
选举流程
当主节点失效,从节点进入“候选人”状态,递增任期号并发起投票请求。只有获得多数票的节点才能成为新主节点,防止脑裂。
节点类型投票权数据持久性
主节点有完整
从节点有完整
仲裁者有无

2.3 投票权、优先级与成员配置策略

在分布式共识算法中,节点的投票权与优先级机制直接影响集群的决策效率与容错能力。通过合理配置成员角色,系统可在网络分区或节点故障时维持可用性。
投票权分配模型
每个节点被赋予一定的投票权重,通常基于其可靠性与性能指标。只有获得超过半数总票权的候选者才能成为领导者。
  • 静态权重:部署时固定,适用于稳定环境
  • 动态权重:根据负载、延迟实时调整
优先级与选举倾向
优先级高的节点更易被选为 Leader,避免频繁切换。配置示例如下:
{
  "node_id": "node-1",
  "voting_weight": 3,
  "priority": 100,
  "role": "preferred-leader"
}

其中 voting_weight 决定投票影响力,priority 影响选举调度器的选择倾向。

成员变更策略
支持运行时增删节点,需采用两阶段提交防止脑裂。表格对比常见策略:
策略安全性变更延迟
单步变更低快
两阶段变更高慢

2.4 网络分区下选举行为模拟与分析

在分布式系统中,网络分区会显著影响共识算法的选举行为。通过模拟多个节点间通信中断的场景,可观察领导者选举的稳定性与收敛速度。
选举超时配置
合理的超时设置对避免脑裂至关重要。以下为典型配置示例:

electionTimeout := 150 * time.Millisecond
heartbeatInterval := 50 * time.Millisecond
上述参数确保心跳频繁发送,而选举超时随机化可减少冲突概率。
分区场景下的状态转移
  • 节点A与B形成多数派,可成功选举新领导者
  • 孤立节点C无法获得多数投票,保持候选者状态
  • 网络恢复后,旧领导者若存在,将被新任期强制替换
分区模式选举结果恢复时间(ms)
2:2 分割无领导者300
3:1 分割多数侧选出 leader200

2.5 实战:通过日志追踪一次完整选举过程

在分布式系统中,选举过程的可观测性至关重要。通过分析节点日志,可以清晰还原一次完整的 Leader 选举流程。
日志关键阶段解析
选举通常经历以下阶段:
  • 节点启动并进入 Follower 状态
  • 超时触发 Candidate 转换
  • 发起投票请求(RequestVote RPC)
  • 获得多数票后晋升为 Leader
典型日志片段分析

INFO [Node-1] Current term: 5, state: Follower, vote: none
DEBUG [Node-1] Election timeout reached, transitioning to Candidate
INFO [Node-1] Starting election, term: 6, requesting votes...
INFO [Node-1] Received vote from Node-2, total: 2/3
INFO [Node-1] Elected as Leader for term 6
该日志流显示 Node-1 在第6任期赢得多数票(2/3),成功当选。term 字段体现逻辑时钟递增,vote 统计反映共识达成过程。
状态转换时序表
时间戳节点状态任期
T+0msNode-1Follower5
T+150msNode-1Candidate6
T+300msNode-1Leader6

第三章:脑裂问题的成因与应对

3.1 脑裂场景再现:多主同时存在的风险

在分布式数据库集群中,网络分区可能导致脑裂(Split-Brain)现象,即多个节点同时认为自己是主节点并接受写操作,造成数据不一致。
典型脑裂触发场景
当主节点与多数副本失去通信时,若未正确配置法定人数(quorum)机制,备用节点可能选举出新主,形成双主共存。
数据冲突示例
-- 节点A上的写入
UPDATE accounts SET balance = 100 WHERE id = 1;

-- 同时节点B上的写入
UPDATE accounts SET balance = 200 WHERE id = 1;
上述操作因缺乏同步机制,最终状态取决于复制顺序,导致不可预测结果。
常见防护策略
  • 基于多数派的读写确认(Quorum Read/Write)
  • 使用分布式锁服务(如etcd、ZooKeeper)协调主节点角色
  • 设置合理的超时与自动降级策略

3.2 心跳机制失效与仲裁逻辑缺陷分析

在分布式系统中,心跳机制是节点间状态感知的核心手段。当网络分区或高延迟导致心跳超时,可能引发误判的节点失联,进而触发不必要的主从切换。
常见心跳失败场景
  • 网络抖动造成短暂丢包
  • GC停顿导致响应延迟
  • 时钟漂移影响超时判断
仲裁逻辑缺陷示例
if receivedHeartbeats < quorum {
    triggerLeaderElection()
}
上述代码未区分临时异常与真实故障,缺乏重试与衰减机制,易导致脑裂。理想实现应引入滑动窗口统计与权重评分,结合RTT动态调整判定阈值。
优化建议
采用多路径探测 + 指数退避 + 法定人数投票机制,提升判断准确性。

3.3 实践:利用仲裁节点避免多数派分裂

在分布式共识系统中,网络分区可能导致集群无法形成多数派,从而引发脑裂。引入仲裁节点(Quorum Witness)可有效解决该问题。
仲裁节点的作用机制
仲裁节点不存储数据,仅参与投票。当主集群与副本间通信中断时,仲裁节点帮助一方形成“逻辑多数”,防止双主出现。
  • 降低硬件成本:无需完整数据副本
  • 提升可用性:在网络不稳定环境中维持集群决策能力
配置示例(etcd场景)
- name: witness
  data-dir: /var/lib/etcd-witness
  initial-advertise-peer-urls: http://witness:2380
  listen-peer-urls: http://0.0.0.0:2380
  initial-cluster: node1=http://node1:2380,node2=http://node2:2380,witness=http://witness:2380
  initial-cluster-state: new
  # 关键配置:禁用客户端请求处理
  listen-client-urls: ""
  advertise-client-urls: ""
上述配置中,`listen-client-urls`为空,确保该节点不对外提供读写服务,仅参与Raft投票。通过此方式,3节点集群即使仅有1个数据节点在线,配合仲裁节点仍可组成逻辑多数(2票),避免服务中断。

第四章:故障转移优化与高可用保障

4.1 降低故障转移时间:调整选举超时参数

在Raft共识算法中,选举超时时间(Election Timeout)是影响故障转移速度的核心参数。适当缩短该值可加快领导者失效后的重新选举进程,从而降低系统不可用时间。
合理设置选举超时范围
通常建议将选举超时设置在150ms~300ms之间。过短可能导致频繁误判领导者失联,过长则延长故障转移延迟。
// 示例:Node节点配置选举超时
raftConfig := &raft.Config{
    ElectionTimeout: 200 * time.Millisecond,
    HeartbeatTimeout: 50 * time.Millisecond,
}
上述代码中,ElectionTimeout 设为200ms,表示若 follower 在200毫秒内未收到心跳,则触发新任期选举;HeartbeatTimeout 应小于前者,确保心跳周期更频繁。
权衡网络波动与响应速度
  • 高延迟网络中应适度增加超时值以避免不必要的选举
  • 低延迟局域网可进一步压缩至100ms级以实现亚秒级故障切换

4.2 成员角色设计:优先级与隐藏节点配置

在分布式集群中,成员角色的合理设计直接影响系统的稳定性与容错能力。通过设置节点优先级,可确保高可用性环境下关键节点优先参与选举。
优先级配置示例
{
  "node_name": "node-1",
  "priority": 10,
  "hidden": false
}
上述配置中,priority值越高,节点越容易被选为 primaries;hidden: true 表示该节点对客户端不可见,常用于后台数据同步或灾备场景。
隐藏节点的应用场景
  • 减轻主节点负载,专用于备份或分析任务
  • 提升安全性,避免敏感节点暴露于前端调用
  • 支持灰度发布,隔离测试流量
结合优先级与隐藏属性,系统可在保障服务连续性的同时,灵活应对运维与扩展需求。

4.3 网络稳定性对故障转移的影响测试

网络环境的波动直接影响集群节点间的通信质量,进而决定故障转移的准确性和时效性。在模拟弱网场景下,观察主节点失联后系统的行为至关重要。
测试场景设计
通过引入网络延迟、丢包和分区策略,构建多种异常组合:
  • 100ms~500ms 网络延迟
  • 1%~10% 数据包丢失率
  • 主从节点间网络隔离(脑裂模拟)
监控指标对比
网络条件故障检测时间(s)是否误触发切换
稳定网络3否
高延迟(300ms)8偶尔
丢包率5%12是
心跳机制配置示例
heartbeat:
  interval: 2s      # 心跳发送间隔
  timeout: 5s       # 超时判定阈值
  retries: 3        # 重试次数
该配置在高延迟网络中易导致误判,建议动态调整 timeout 值以适应网络抖动。

4.4 实战:构建容灾型跨区域副本集架构

在高可用系统设计中,跨区域副本集是实现容灾的核心机制。通过在不同地理区域部署 MongoDB 副本节点,可有效避免单点故障导致的服务中断。
部署拓扑设计
推荐采用“两地三中心”模式,在主区域部署两个数据节点,异地部署一个仲裁节点,兼顾性能与容灾能力。
配置示例

rs.initiate({
  _id: "disasterRS",
  members: [
    { _id: 0, host: "192.168.1.10:27017", priority: 2 },
    { _id: 1, host: "192.168.2.10:27017", priority: 1 },
    { _id: 2, host: "10.0.3.10:27017", arbiterOnly: true }
  ]
});
上述配置中,priority 控制选举权重,arbiterOnly 标识仲裁节点,不存储数据但参与投票,降低跨区域带宽消耗。
同步机制保障
MongoDB 的 oplog 实现异步复制,结合心跳检测与自动故障转移,确保区域级故障时 30 秒内完成主节点切换。

第五章:总结与最佳实践建议

性能监控与调优策略
在高并发系统中,持续的性能监控是保障稳定性的关键。推荐使用 Prometheus + Grafana 组合进行指标采集与可视化展示。以下为 Prometheus 配置片段示例:

scrape_configs:
  - job_name: 'go_service'
    static_configs:
      - targets: ['localhost:8080']
    metrics_path: '/metrics'
    scheme: http
定期分析 GC 停顿、goroutine 数量和内存分配速率,可及时发现潜在瓶颈。
微服务通信安全实践
服务间通信应强制启用 mTLS。Istio 提供了零代码侵入的双向认证机制。实际部署中需确保:
  • 所有命名空间启用自动注入 sidecar
  • 配置 PeerAuthentication 策略强制 mTLS
  • 定期轮换 CA 证书并测试故障切换流程
生产环境曾因证书过期导致服务大面积不可用,自动化巡检脚本已纳入发布流水线。
数据库连接池配置参考
不合理的连接池设置易引发连接泄漏或资源耗尽。以下是 PostgreSQL 在 Kubernetes 环境下的典型配置建议:
参数推荐值说明
max_open_conns20避免数据库连接数超限
max_idle_conns10平衡资源复用与内存占用
conn_max_lifetime30m防止长时间空闲连接被中间件断开
CI/CD 流水线加固措施

构建阶段 → 镜像扫描 → 单元测试 → 安全审计 → 准生产部署 → 自动化回归 → 生产蓝绿发布

引入 SAST 工具(如 SonarQube)对 Go 代码进行静态分析,拦截常见漏洞如 SQL 注入与硬编码密钥。某次提交因误写 os.Getenv("DB_PASSWORD") 被阻断,有效防止敏感信息泄露。
分布式核心技术之分布式选举 这是一个技术活儿,目前常见的选主方法有基于序号选举的算法( 比如,Bully 算法)、多数派算法(比如,Raft 算法、ZAB 算法)等。答案是,在这种情况下,无法选出主,必须重新投票选举。因此,多数派选主算法通常采用奇数节点。多数派选主算法的核心是少数服从多数,获得投票多的节点胜出。想象一下,如果现在采用偶数节点集群,当两个节点均获得一半投票时,到底应该选谁为主呢?这,也是大家通常看到 ZooKeeper、 etcd、Kubernetes 等开源软件选主均采用奇数节点的一个关键原因。 阅读详情

相关推荐

聊聊ZooKeeper(一)分析ZooKeeper的Quorums机制--防止Split-Brain问题

使用过ZooKeeper的同学应该看到过一种说法,就是ZooKeeper集群中必须超过半数节点(Majority)可用,整个集群才能对外可用。这个说法在大多数情况下是正确的。这篇文章说说背后的原因。 实际上ZooKeeper提供了几种方式来认定整个集群是否可用,Majority只是其中的一种。 http://zookeeper.apache.org/doc/r3.3.5/zookee

ITer_ZC的专栏 8044

MongoDB脑裂恢复

或者执行rs.conf 输出集群配置内容,拷贝到本地文档,从members中去掉已经宕机的节点,保留正常的节点,把内容拷贝赋值给cfg=变量,再重新执行下面命令强制重新配置。此环境为3台MongoDB搭建副本集,其中两台mongodb由于外部原因导致服务异常,目前副本集只存活一台,且为从库。将已经宕机或暂时无法恢复的mongodb节点,优先级和投票权都设置为0,然后执行下面命令强制重新更新集群配置。退出数据库然后重新连接,接着会发现这台变成了主库,接着就可以直接add添加了。序号请根据现场环境修改;

weixin_44848382的博客 799

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 343

MongoDB 高可用集群知识小锦囊 - 脑瓜子转动篇

MongoDB 学习是靠不断动脑积累的,该文讲解了一些常规的思考问题,包括 chunk怎么迁移、脑裂怎么产生又该如何解决、分片的处理过程又是如何的..... 您可以提出跟多的思路,一起沉淀下来

ethenoscar2011的博客 591

Linux环境下OpenSSH升级到 OpenSSH_9.8p1(内置保姆级教程并包含openssl升级过程)

2024年7月1日接到安全部门同事邮件通知,目前生产环境及测试环境服务器Openssh存在远程代码执行漏洞(CVE-2024-6387),漏洞等级高,且攻击者可以成功利用该漏洞获得远程root shell最高权限从而执行任意代码及命令,主要受影响版本为8.5p1

菜鸟运维升级之路 2万+

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

mongodb的副本集脑裂情况

场景:五个节点副本集 三个不可达 ucloud_mongodb_set:SECONDARY> rs.status() {         "set" : "ucloud_mongodb_set",         "date" : ISODate("2014-07-15T12:42:35Z"),         "myState" : 2,         "members"

分布式存储/云计算 3934

《C语言小游戏之贪吃蛇程序代码》

//为广大编程游戏爱好者提供一个参考的游戏源代码#include&lt;stdio.h&gt;#include&lt;conio.h&gt;#include&lt;windows.h&gt;#include&lt;time.h&gt;#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到...

qq_42052821的博客 2万+

深入浅出选举算法以及MongoDB选举

今天给大家介绍一下Mongodb的选举机制。首先先明确一个前提,MongoDB是一个“分布式数据库”,一个分布式数据库会有多个节点,节点与节点之间会有通讯。下图是MongoDB集群的架构图:节点会有各种问题,节点与节点之间也会有各种问题,MongoDB需要有一个机制来解决分布式环境下的高可用性问题。

爱琴孩的博客 1517

42、使用mmrotate中k3det进行旋转目标检测,并进行mnn部署和ncnn部署

基本思想:仍然是身份证分割,并进行ncnn和mnn的c++的部署开发

sxj731533730 5713

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击

计算机视觉:AI生成内容(AIGC)对视觉领域的冲击​ 人工智能,计算机视觉,大模型,AI,在信息技术日新月异的当下,计算机视觉作为人工智能领域的关键分支,已经深度融入了我们生活与工作的各个层面。从安防监控系统里精准的人脸识别,助力维护公共安全;到工业生产线上高效的产品质量检测,保障产品品质;再到医疗影像分析中为疾病诊断提供有力支持,计算机视觉技术凭借其对视觉信息的强大处理与理解能力,不断推动着各行业的发展与变革。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

MongoDB副本集

备注: MongoDB 4.2 版本 文章目录一.复制简介1.1 主动成员与被动成员1.2 master1.3 secondary1.4 arbiter1.5 oplog二.副本集维护2.1 创建副本集2.1.1 启动副本集成员2.1.2 初始化副本集2.2 向副本集添加服务器2.3 设置辅助服务器2.4 向副本集添加仲裁服务器2.5 设置被动服务器2.6 管理副本集FAQ1.重新初始化2.删除副本集参考 一.复制简介 我们使用的是单台服务器 ,一个 mongod 服务器进程 。如果只 是用作学习和开发,这

只是甲的博客 944

有趣的方式学习DDR5(4)—— DDR5 SDRAM 启动与初始化过程全攻略

🟢。

weixin_43199439的博客 1624

Kafka的控制器和投票者:分布式聚会中的选举与仲裁

在聚会上,控制器就像是老学长,它负责协调和管理整个聚会的各个环节。在分布式系统中,节点可能会出现故障或网络分区等问题,仲裁投票者的机制确保即使在这些情况下,也能选出一个可靠的控制器,保证系统的正常运行。通过这次的深入探讨,你应该对Kafka的控制器和仲裁投票者有了更清晰的了解。控制器是聚会上的老学长,仲裁投票者负责选举最合适的控制器,KRaft则通过Raft算法确保选举过程和数据一致性。仲裁投票者像是聚会上的投票者,它们负责选举出最合适的控制器。在上一节聚会中,我们了解了Kafka的主要角色和基本概念。

m0_74139496的博客 608

【C++实战(62)】从0到1:C++打造TCP网络通信实战指南

本文是 C++ 网络编程实战专栏第 62 篇,聚焦 TCP 客户端与服务端开发。先阐述 TCP 协议特点、核心 API 及阻塞与非阻塞 IO 区别,打牢基础;再详解 TCP 服务端初始化、客户端连接处理与数据收发,以及客户端初始化、异常处理和协议设计;最后通过简易聊天系统实战,介绍线程池应用、协议解析及稳定性测试,助力开发者掌握 TCP 网络编程实操技能。

邓邓子的博客 999

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

为什么你的MongoDB副本集总是选主失败?真相在这里!

掌握MongoDB副本集选主失败的根源与解决方案,涵盖网络配置、节点选举机制和心跳检测优化。适用于生产环境故障排查,提升系统高可用性,值得收藏。

Algorift的博客 959

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

mongo复制集脑裂问题如何处理

mongoreplication脑裂问题如何处理: 一、问题描述:一套mongoreplication有4个节点。1个仲裁节点。在停止实例(或实例毁坏)的时候,导致所有节点都变为SECONDARY节点。不管如何重启节点。或者停止到最后一个节点。此时mongo节点都是SECONDARY。 二、出现的现象: 1、如果此时所有节点都重新起来,mongo恢复正常。 2、如果有一个节...

weixin_30832405的博客 449

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

zk选举机制和分布式一致性原理

CAP定理 CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性: 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效) 可用性(Availability) : 每个操作都必须以可预期的响应结束 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成 具体地讲在分布...

阿华田的博客 2081

MongoDB集群架构

一、MongoDB 复制集特性 复制集群的架构 复制集群搭建 复制集群的选举配置 1.复制集群的架构 2.复制集群搭建基础示例 2.复制集群搭建基础示例 主节点配置 dbpath=/data/mongo/master port=27017 fork=true logpath=master.log replSet=MyCluster 从节点配置 dbpath=/data/mongo/slave port=27018 fork=true logpath=slave.l

小强同志的博客 1575

MongoDB和Elasticsearch的各使用场景对比

MongoDB vs Elasticsearch MongoDB ElasticSearch 备注 定位 (文档型)数据库 (文档型)搜索引擎 一个管理数据,一个检索数据 资源占用 一般 高 mongo使用c++, es使用Java开发 写入延迟 低 高 es的写入延迟默认1s, 可配置, 但是要牺牲一些东西 全文索引支持度 一般 非常好 es本来就是搜索引擎, 这个没啥可比性 有无Schem.

在每次的突破中遇见更好的自己 2万+

脑裂产生以及解决办法

2.2 脑裂      在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮...

varyall的专栏 4万+

HA领域的“脑裂”

HA(High Availability)高可用是也! “裂脑”,乃一个形象的术语,HA系统危机情景也!

Arthur Guo 的专栏 1万+

故障案例--mongodb副本集write concern为majority的一个坑

故障现象: 一个副本集下四个节点,一个primary,两个Secondary,一个arbiter,其中将一个Secondary关闭后,修改primary节点的密码,这时修改命令会卡住直到超时失败。 udb-aqmp5a:PRIMARY> db.changeUserPassword("root","123123") 2016-08-23T17:05:30.879+0800 E QUERY

cug_jiang126com的专栏 9602

MongoDB选举机制

复制集概述 MongoDB复制集是指MongoDB实例通过复制并应用其他实例的oplog达到数据冗余的技术。MongoDB复制集一般由一个主服务器(Primary)和若干个备服务器(Secondary)组成。其中Primary用于处理客户端的请求,通过Primary将数据写入;Secondary从Primary同步数据,保存副本。当Primary服务器崩溃时,MongoDB复制集通过选举机制将其

Uncle_Y的专栏 6441

双机脑裂(split-brain)解决办法

一、 What does "split-brain" mean? "Split brain" is a condition whereby two or more computers or groups of computers lose contact with one another but still act as if the cluster were intact. This is

八月未央 5484

防止脑裂解决方式

  paxos算法,使用奇数性质的节点来进行表决,必须选出一个说的算的老大,这个集群才能正常工作。 双星模式下,使用专线直连,从硬件上保障。 使用额外的探测节点,当双方直连断开之后,使用一个约定好的共同节点来探测是否是直连故障。 ...

qq_43193797的博客 1222
上一篇: 【高并发场景下的微信开发】:PHP如何应对每日百万级请求的挑战
下一篇: 【前端动效王者之路】:7个你必须掌握的CSS3动画黑科技
MessyInk
博客等级 码龄11年 136粉丝 1992原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值