📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

为什么这个错误发生 #

action_transport_exception 表示在执行传输层动作(action)时发生失败。这是一个传输层异常,通常发生在节点间通信时尝试调用远程节点的某个操作时。

这个错误可能由以下原因引起:

  1. 网络连接问题:节点间的网络连接中断或不稳定
  2. 远程节点故障:目标节点崩溃、宕机或无响应
  3. 超时:操作执行时间超过配置的超时限制
  4. 远程节点资源不足:目标节点 CPU、内存或磁盘资源耗尽
  5. 节点版本不兼容:不同版本的节点间通信失败
  6. 防火墙或网络配置:端口被阻止或网络配置错误
  7. 远程操作执行失败:目标节点在执行请求的操作时出错
  8. 传输层故障:传输服务本身出现问题

如何修复这个错误 #

1. 检查网络连接 #

# 测试与远程节点的网络连接
ping <remote_node_host>

# 测试传输端口 (默认 9300)
telnet <remote_node_host> 9300

# 或使用 nc
nc -zv <remote_node_host> 9300

2. 检查集群节点状态 #

# 查看所有节点状态
GET /_cat/nodes?v&h=name,status,heap.percent,cpu,load_1m,load_5m,load_15m

# 查看节点详细信息
GET /_nodes/stats?human

# 检查集群健康状态
GET /_cluster/health?v

3. 查看详细错误信息 #

# 错误响应通常包含更多信息
# 查看错误中的 address 和 action 字段
{
  "error": {
    "type": "action_transport_exception",
    "reason": "[node_name][address][action_name] failed",
    "caused_by": {
      "type": "...",
      "reason": "..."
    }
  }
}

4. 检查远程节点日志 #

# 在远程节点上查看日志
grep -i "error\|exception" /path/to/easysearch/logs/easysearch.log | tail -100

# 查看特定时间段的错误
grep "2024-01-01" /path/to/easysearch/logs/easysearch.log | grep -i "error"

5. 重试操作 #

# 临时性网络问题可以通过重试解决
# 客户端可以实现自动重试机制

6. 重启问题节点 #

# 如果特定节点持续有问题,尝试重启
sudo systemctl restart easysearch

# 或使用 init 系统
sudo service easysearch restart

7. 检查防火墙和网络配置 #

# 检查防火墙规则
sudo iptables -L -n | grep 9300
sudo firewall-cmd --list-ports

# 确保 9300 端口(传输端口)开放
sudo firewall-cmd --add-port=9300/tcp --permanent
sudo firewall-cmd --reload

8. 检查节点版本 #

# 确保所有节点版本兼容
GET /_cat/nodes?v&h=name,version

# 版本应该相同或兼容

9. 增加超时时间 #

# 在 easysearch.yml 中增加超时配置
transport.tcp.connect_timeout: 30s
transport.tcp.compress: true

10. 检查资源使用 #

# 查看 JVM 堆内存使用
GET /_nodes/stats/jvm?human&filter_path=**.heap

# 查看磁盘使用
GET /_cat/allocation?v

# 检查文件描述符
GET /_nodes/stats/process?filter_path=**.fd

预防措施 #

  • 确保网络稳定可靠
  • 配置合适的超时时间
  • 监控节点健康状态
  • 保持节点版本一致
  • 实现客户端重试机制
  • 定期检查网络连接质量
  • 配置足够的系统资源
  • 监控集群状态和日志