如何将 Cassandra 指向替代 Java 路径?

问题描述 投票:0回答:1

我使用的是 Debian 12 服务器,附带 JDK 17。我也在服务器上安装了 openJDK 11。 Cassandra 版本是 4.0.10。

我想将 Cassandra 指向 JDK 11,同时将系统的默认 Java 版本保留为 JDK 17,但我无法这样做。

使用 update-alternatives,如果我将 JDK11 设置为首选手动选项,Cassandra 启动得很好。

但是,当我将 JAVA_HOME 设置为 cassandra sh 文件中的 JDK 11 路径并将 java 替代项设置为 JDK 17 时,Cassandra 启动失败并显示:

致命:Cassandra 无法访问所需的类。这通常意味着它是在没有标准启动脚本帮助的情况下运行的,或者脚本已被编辑。如果这是故意的,并且您尝试使用 Java 11+,您可能需要从 jvm11-server.options 或 jvm11-client.options 添加 --add-exports 和 --add-opens jvm 选项

详细步骤:

系统初始状态:

默认 Java 是 JDK 11:

update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                         Priority   Status

  0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711      auto mode
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
  2            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711      manual mode

Press <enter> to keep the current choice[*], or type selection number:

JAVA_HOME 在 Cassandra conf 文件中被注释掉。

Cassandra 已启动并运行。

将 Cassandra 指向 JDK 11 的步骤:

  1. 节点工具排水口

  2. 我的 CASSANDRA_HOME 是 /usr/local/cassandra/apache-cassandra-4.0.10/ 。编辑以下文件以将 JAVA_HOME 设置为 /usr/lib/jvm/java-11-openjdk-amd64:

/usr/local/cassandra/apache-cassandra-4.0.10/local-cassandra.in.sh

/usr/local/cassandra/apache-cassandra-4.0.10//bin/cassandra.in.sh

/usr/local/cassandra/apache-cassandra-4.0.10//tools/bin/cassandra.in.sh

  1. 设置 Java 17 的替代方案:
update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
  Selection    Path                                         Priority   Status

  0            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711      auto mode
* 1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java   1111      manual mode
  2            /usr/lib/jvm/java-17-openjdk-amd64/bin/java   1711      manual mode
Press <enter> to keep the current choice[*], or type selection number: 0
update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode

which java
/usr/bin/java

java --version
openjdk 17.0.10 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+7-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.10+7-Debian-1deb12u1, mixed mode, sharing)
  1. 重新启动 cassandra - 失败并在日志中显示以下消息:

错误 [main] 2024-04-04 03:31:04,973 FileUtils.java:106 - 致命:Cassandra 无法访问所需的类。这通常意味着它是在没有标准启动脚本帮助的情况下运行的,或者脚本已被编辑。如果这是故意的,并且您尝试使用 Java 11+,您可能需要从 jvm11-server.options 或 jvm11-client.options 添加 --add-exports 和 --add-opens jvm 选项

  1. 恢复java替代JDK 11并重新启动cassandra成功。

不知道如何解决这个问题。我应该在哪里添加 jvm 选项(不确定这是否能解决问题)。我是否缺少任何步骤?任何帮助深表感谢!谢谢你

cassandra
1个回答
0
投票

我已经用 JEnv 做到了这一点,我强烈推荐它。它允许您为特定目录指定 Java 版本。绝对可以更轻松地使用特定版本的 Java 运行不同版本的 Cassandra。

https://www.jenv.be/

© www.soinside.com 2019 - 2024. All rights reserved.