Erick Ramirez Asked: 2022-08-18 21:02:15 +0800 CST2022-08-18 21:02:15 +0800 CST 2022-08-18 21:02:15 +0800 CST 带有 Java 8u331 的 nodetool 返回“URISyntaxException:'索引 7 处的 IPv6 地址格式错误:rmi://[127.0.0.1]:7199'” 772 为什么运行会nodetool返回以下异常? nodetool: Failed to connect to '127.0.0.1:7199' - \ URISyntaxException: 'Malformed IPv6 address at index 7: rmi://[127.0.0.1]:7199'. Cassandra 用户在服务器上升级 Java 后通常会报告此问题。 cassandra java 1 个回答 Voted Best Answer Erick Ramirez 2022-08-18T21:02:15+08:002022-08-18T21:02:15+08:00 根本原因 包含 RMI(由 JMX 使用)的 JNDI 提供程序的 URL 解析器在 Oracle Java 8u331 中得到了改进,并且只允许在 IPv6 地址周围使用括号 ( JDK-8278972 )。 nodetool由于 RMI URL 中的主机包含在方括号中(来自NodeProbe.java类) ,因此尝试使用较新的 Java 版本运行会中断: private static final String fmtUrl = "service:jmx:rmi:///jndi/rmi://[%s]:%d/jmxrmi"; 解决方法 选项 1 - 在运行时添加“传统”解析标志nodetool,例如: $ nodetool -Dcom.sun.jndi.rmiURLParsing=legacy status 选项 2 - 使用 IPv6 子网前缀指定主机名,例如: $ nodetool -h ::FFFF:127.0.0.1 status 解决方案 此问题已在 Apache Cassandra 3.0.27、3.11.13、4.0.4 和 4.1 版本 ( CASSANDRA-17581 ) 中得到解决。 升级到最新的补丁版本以修复集群中的问题。干杯! 从DataStax 社区重新发布。
根本原因
包含 RMI(由 JMX 使用)的 JNDI 提供程序的 URL 解析器在 Oracle Java 8u331 中得到了改进,并且只允许在 IPv6 地址周围使用括号 ( JDK-8278972 )。
nodetool
由于 RMI URL 中的主机包含在方括号中(来自NodeProbe.java类) ,因此尝试使用较新的 Java 版本运行会中断:解决方法
选项 1 - 在运行时添加“传统”解析标志
nodetool
,例如:选项 2 - 使用 IPv6 子网前缀指定主机名,例如:
解决方案
此问题已在 Apache Cassandra 3.0.27、3.11.13、4.0.4 和 4.1 版本 ( CASSANDRA-17581 ) 中得到解决。
升级到最新的补丁版本以修复集群中的问题。干杯!
从DataStax 社区重新发布。