首页 > 解决方案 > Mongo::Error::NoServerAvailable: No Primary server is available in cluster -- 使用logstash到docker中的mongodb数据时出错

问题描述

这是我的 logstash.conf 配置


input{
    stdin{
    }
    jdbc{
        jdbc_connection_string => "jdbc:mysql://ip:3306/database"
        jdbc_user => "root"
        jdbc_password => ""
        jdbc_driver_library => "/app/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar"
        jdbc_driver_class => "com.mysql.jdbc.Driver"
        record_last_run => "true"
        use_column_value => "false"
        tracking_column => "id"
        last_run_metadata_path => "/app/info/station_parameter.txt"
        clean_run => "false"

        jdbc_paging_enabled => "true"
        jdbc_page_size => 100
        statement => "select * from database where id>=1"
        schedule => "* * * * *"
    }
}
output{
    mongodb{
        uri => "mongodb://192.168.1.103:27017"
        database => "mydata"
        collection => "mycollection"
    }
}

错误是

向 MongoDB 发送事件失败,3 秒后重试 {:event=>#, :exception=>#]> with timeout=30, LT=0.015>}

标签: mongodblogstash

解决方案


不确定您是否觉得这很有用,但我们在两种不同的情况下遇到了相同的问题并解决了它,我想与您分享,

  • 由于 docker 文件中的网络相关问题,客户端无法解析主服务器地址,这是导致此错误的原因,mongodb 服务器已启动并正在运行,但客户端无法解析地址,因此引发了错误。

  • mongodb 重新启动(或由于某种原因连接丢失),当 mongodb 重新上线时,mongoid 客户端(ruby)无法再次重新连接,解决方案是重新启动客户端,再次建立连接。经过调查,我会说很可能是驱动程序和mongodb服务器的版本不兼容。

一般来说,我们无法找到永久的解决方案,这似乎是 mongodb 驱动程序的问题,但可以肯定的是,请检查 mongodb 驱动程序和服务器的兼容性。


推荐阅读