【ELasticsearch】集群故障模拟方案(一):节点宕机、节点离线

集群故障模拟方案》系列,共包含以下文章:

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

集群故障模拟方案(一):节点宕机、节点离线

  • 1.节点宕机模拟
    • [1.1 方案描述](#1.1 方案描述)
    • [1.2 操作步骤](#1.2 操作步骤)
  • 2.节点离线模拟(网络隔离)
    • [2.1 方案描述](#2.1 方案描述)
    • [2.2 操作步骤](#2.2 操作步骤)
    • [2.3 命令说明](#2.3 命令说明)
      • [2.3.1 组合效果](#2.3.1 组合效果)
      • [2.3.2 典型场景](#2.3.2 典型场景)
      • [2.3.3 注意事项](#2.3.3 注意事项)

1.节点宕机模拟

1.1 方案描述

模拟 Elasticsearch 节点突然崩溃或进程被终止的情况。

1.2 操作步骤

  • 识别目标节点

    bash 复制代码
    curl -XGET 'http://localhost:9200/_cat/nodes?v'
  • 终止节点进程

    • 直接 kill 进程:

      bash 复制代码
      # 查找Elasticsearch进程ID
      ps -ef | grep elasticsearch
      
      # 终止进程
      kill -9 <pid>
    • 或者停止服务:

      bash 复制代码
      systemctl stop elasticsearch
  • 观察集群反应

    bash 复制代码
    curl -XGET 'http://localhost:9200/_cluster/health?pretty'
    watch -n 1 curl -s 'http://localhost:9200/_cat/nodes?v'
  • 恢复节点

    bash 复制代码
    systemctl start elasticsearch

2.节点离线模拟(网络隔离)

2.1 方案描述

模拟节点因网络问题无法与其他节点通信的情况。

2.2 操作步骤

  • 识别目标节点IP

    bash 复制代码
    curl -XGET 'http://localhost:9200/_cat/nodes?v'
  • 使用 iptables 阻断网络

    bash 复制代码
    # 阻断目标节点与其他节点的通信(假设集群端口为9300)
    iptables -A INPUT -p tcp --dport 9300 -j DROP
    iptables -A OUTPUT -p tcp --dport 9300 -j DROP
    
    # 查看规则
    iptables -L
  • 观察集群状态

    bash 复制代码
    watch -n 1 curl -s 'http://localhost:9200/_cluster/health?pretty'
  • 恢复网络

    bash 复制代码
    iptables -D INPUT -p tcp --dport 9300 -j DROP
    iptables -D OUTPUT -p tcp --dport 9300 -j DROP

2.3 命令说明

iptables -A INPUT -p tcp --dport 9300 -j DROP:阻止其他节点通过 9300 端口向本节点发送数据(如集群状态同步、分片复制等),模拟网络中断。

  • -A INPUT:表示向 INPUT 链(处理进入本机的数据包)追加(Add)一条新规则。
  • -p tcp:指定规则应用于 TCP 协议(Elasticsearch 节点间通信默认使用 TCP)。
  • --dport 9300:匹配目标端口(dport = destination port)为 9300 的数据包(Elasticsearch 的节点间通信默认端口)。
  • -j DROP:对匹配的数据包执行 DROP 动作(直接丢弃,不响应任何错误信息)。

iptables -A OUTPUT -p tcp --dport 9300 -j DROP:阻止本节点通过 9300 端口向其他节点发送数据(如心跳检测、分片请求等)。

  • -A OUTPUT:向 OUTPUT 链(处理从本机发出的数据包)追加一条规则。
  • -p tcp --dport 9300 -j DROP:同上,匹配目标端口为 9300 的 TCP 数据包并丢弃。

2.3.1 组合效果

这两条命令一起使用时,会完全阻断本节点与其他 Elasticsearch 节点在 9300 端口上的 双向通信

  • INPUT 规则:其他节点无法联系本节点。
  • OUTPUT 规则:本节点无法联系其他节点。

2.3.2 典型场景

  • 模拟节点因网络故障被集群 "踢出"(触发重新选主或分片重新分配)。
  • 测试 Elasticsearch 的 容错机制(如副本分片提升为主分片)。

2.3.3 注意事项

  • 恢复通信:需要删除规则才能恢复。

    bash 复制代码
    iptables -D INPUT -p tcp --dport 9300 -j DROP
    iptables -D OUTPUT -p tcp --dport 9300 -j DROP
  • 持久化问题iptables 规则默认重启后失效。如需持久化,需保存规则(如 iptables-save)。

  • 端口差异

    • Elasticsearch 节点间通信 默认用 9300(需阻断此端口模拟节点离线)。
    • 客户端请求 默认用 9200(如果同时阻断此端口,客户端也无法访问该节点)。
相关推荐
后端小张17 分钟前
【AI 学习】从0到1深入理解Agent AI智能体:理论与实践融合指南
人工智能·学习·搜索引擎·ai·agent·agi·ai agent
梦里不知身是客1138 分钟前
shuffle过程
大数据
星释1 小时前
Rust 练习册 80:Grains与位运算
大数据·算法·rust
练习时长一年2 小时前
git常用命令总结
大数据·git·elasticsearch
TDengine (老段)3 小时前
TDengine IDMP 重塑智慧水务运营(内附 Step by Step 步骤)
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
萤丰信息7 小时前
智慧园区能源革命:从“耗电黑洞”到零碳样本的蜕变
java·大数据·人工智能·科技·安全·能源·智慧园区
零基础的修炼12 小时前
[项目]基于正倒排索引的Boost搜索引擎---编写搜索引擎模块 Searcher
搜索引擎
中科岩创13 小时前
河北某铁矿绿色矿山建设二期自动化监测项目
大数据
java水泥工16 小时前
基于Echarts+HTML5可视化数据大屏展示-物流大数据展示
大数据·前端·echarts·html5·可视化大屏
paperxie_xiexuo16 小时前
学术与职场演示文稿的结构化生成机制探析:基于 PaperXie AI PPT 功能的流程解构与适用性研究
大数据·数据库·人工智能·powerpoint