You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FIWARE Cygnus 3.8.0仅配置MongoDB+PostgreSQL时连接失败求助

FIWARE Cygnus 3.8.0: 仅配置MongoDB/PostgreSQL后端时连接重置问题排查

核心现象

  • 仅配置MongoDB + PostgreSQL后端时,调用 curl http://localhost:5080/v1/version 出现连接重置错误
  • 添加MySQL后端配置后,该接口可正常返回版本信息

排查方向及步骤

1. 检查后端数据库连接的合法性

Cygnus启动时会尝试预先连接所有配置的后端服务,若某后端连接失败导致服务初始化卡死,会直接造成HTTP接口无响应(表现为连接重置)。重点核查:

  • agent.conf 中MongoDB/PostgreSQL的 host、port、db、username/password 是否完全正确
  • 确认MongoDB/PostgreSQL服务已正常启动,且Cygnus容器能通过网络访问到(比如docker-compose中是否在同一自定义网络,容器名称与配置的host是否一致)
  • 检查目标数据库是否已创建,配置的用户是否拥有足够的连接权限(比如MongoDB是否启用认证但未配置正确账号,PostgreSQL的pg_hba.conf是否允许Cygnus所在IP段访问)

2. 分析Cygnus启动日志的错误信息

查看Cygnus启动日志,重点定位以下关键词相关的报错:

  • Could not connect to MongoDB/Could not connect to PostgreSQL
  • Initialization failed/Service not ready
  • 数据库连接超时、认证失败的堆栈信息

示例典型错误日志:

2024-05-20 12:34:56,789 WARN [org.apache.flume.node.PollingPropertiesFileConfigurationProvider] Failed to load configuration data. Exception follows.
com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=mongodb:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}]}

这类日志直接说明后端数据库连接失败,导致Cygnus服务无法完成初始化,HTTP接口自然无法响应。

3. 验证docker-compose网络配置

  • 确认MongoDB/PostgreSQL容器和Cygnus容器在同一自定义网络中(避免默认bridge网络的DNS解析问题)
  • 容器名称需与agent.conf中配置的host完全匹配(比如docker-compose中MongoDB容器名为mongodb,则agent.conf中MongoDB的host必须设为mongodb)
  • 无需将数据库端口映射到宿主机(除非外部需要访问),但容器间需能直接访问默认端口(MongoDB 27017、PostgreSQL 5432)

4. 检查agent.conf的语法正确性

对比MySQL的配置块,核查MongoDB/PostgreSQL的配置是否存在语法错误:

  • 是否遗漏必填字段(比如MongoDB的mongo_db、PostgreSQL的pg_db)
  • 括号、逗号是否匹配,字符串是否正确闭合
  • 配置项格式是否与官方文档一致

示例正确的MongoDB Sink配置:

cygnus-ngsi.sinks.mongo-sink.type = com.telefonica.iot.cygnus.sinks.NGSIMongoSink
cygnus-ngsi.sinks.mongo-sink.channel = mongo-channel
cygnus-ngsi.sinks.mongo-sink.mongo_hosts = mongodb:27017
cygnus-ngsi.sinks.mongo-sink.mongo_db = cygnus
cygnus-ngsi.sinks.mongo-sink.mongo_username = cygnus_user
cygnus-ngsi.sinks.mongo-sink.mongo_password = cygnus_pass
cygnus-ngsi.sinks.mongo-sink.attr_persistence = row

示例正确的PostgreSQL Sink配置:

cygnus-ngsi.sinks.pg-sink.type = com.telefonica.iot.cygnus.sinks.NGSIPostgreSQLSink
cygnus-ngsi.sinks.pg-sink.channel = pg-channel
cygnus-ngsi.sinks.pg-sink.pg_host = postgres:5432
cygnus-ngsi.sinks.pg-sink.pg_db = cygnus
cygnus-ngsi.sinks.pg-sink.pg_username = cygnus_user
cygnus-ngsi.sinks.pg-sink.pg_password = cygnus_pass
cygnus-ngsi.sinks.pg-sink.attr_persistence = row

5. 测试容器间网络连通性

进入Cygnus容器,直接测试与MongoDB/PostgreSQL的网络连通性:

# 测试MongoDB
docker exec -it cygnus-container-name ping mongodb
docker exec -it cygnus-container-name nc -zv mongodb 27017

# 测试PostgreSQL
docker exec -it cygnus-container-name ping postgres
docker exec -it cygnus-container-name nc -zv postgres 5432

如果ping或nc命令失败,说明网络存在问题,需调整docker-compose的网络配置。

6. 核查版本兼容性

确认使用的MongoDB/PostgreSQL版本与Cygnus 3.8.0兼容:

  • Cygnus 3.8.0支持MongoDB 4.x/5.x版本,使用6.x可能存在兼容性问题
  • PostgreSQL支持9.6+版本,过旧版本可能出现连接异常

总结

最可能的原因是MongoDB或PostgreSQL的连接配置错误(网络不可达、认证失败、数据库未创建),导致Cygnus服务初始化失败,HTTP接口无法正常启动。添加MySQL后,MySQL连接正常,服务完成初始化,因此接口可正常响应。建议优先排查数据库连接日志和容器网络连通性问题。

内容的提问来源于stack exchange,提问作者fisuda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:04:52