Java
logstash 嘗試連接到映射的 ipv6 地址上的 redis 伺服器
我剛剛開始使用logstash,並且在獲取日誌發送程序程序以將事件發送到另一台主機上的 redis 伺服器時遇到問題。
output
我的 logstash 配置文件的節讀取輸出 { redis {主機=>“11.22.33.44”數據類型=>“列表”鍵=>“logstash”} }
但是,當我執行 logstash 程序時,我收到包含以下內容的錯誤消息
:exception=>#<SocketError: Network is unreachable>
一點
strace
ing 表明它在這裡失敗了:connect(13, {sa_family=AF_INET6, sin6_port=htons(6379), inet_pton(AF_INET6, "::ffff:11.22.33.44", &sin6_addr) = -1 ENETUNREACH (網路不可達)
即它正在嘗試連接到 ipv6 映射的 ipv4 地址上的 redis 主機。主機沒有本機 ipv6 地址,連接失敗。
我怎樣才能讓程序使用
AF_INET
而不是AF_INET6
,或者以某種方式配置我的主機來解決問題?如果它是相關的,我的java版本是
java版本“1.6.0_18” OpenJDK 執行時環境 (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2) OpenJDK 64 位伺服器 VM(內部版本 14.0-b16,混合模式)
這是由這個錯誤引起的:該
sysctl
設置net.ipv6.bindv6only=1
破壞了 Debian 擠壓中的 Java 網路(可能還有其他平台)。該設置似乎只對想要區分 ipv6 和 ipv4 連接的人有意義。我真的不在乎這個,所以我做了
$ sudo sysctl -w net.ipv6.bindv6only=0
啟動了logstash代理,它工作了!
logstash 的創建者後來好心告訴我,你也可以添加
-Djava.net.preferIPv4Stack=true
到命令行。