在使用Logstash安裝插件的時候,發生了一個錯誤,如下:
ERROR: Something went wrong when installing logstash-input-jdbc, message: java.security.KeyException
經查可能是與系統自帶的OpenJDK有關,解決方案是將系統自帶的OpenJDK更新為Oracle的JDK。
[cloud@localhost ~]$ java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)
下載 Oracle JDK
首先從 Oracle網站下載所需的JDK。
我下載的是 1.8 版本的 rpm 安裝包,因為 Elasticsearch 套裝需要Java 1.8。
安裝Oracle JDK
使用如下命令進行安裝
[root@localhost cloud]# rpm -ivh jdk-8u144-linux-x64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8.0_144-2000:1.8.0_144-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
使用update-alternative配置java
首先執行 update-alternative —list java
看一下系統中有幾個java版本。
[root@localhost cloud]# update-alternatives --display java
java - status is auto.
link currently points to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java - priority 170051
slave ControlPanel: (null)
slave javaws: (null)
slave jcontrol: (null)
slave jjs: (null)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java - family java-1.8.0-openjdk.x86_64 priority 1800141
slave ControlPanel: (null)
slave javaws: (null)
slave jcontrol: (null)
slave jjs: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/jjs
/usr/java/jdk1.8.0_144/jre/bin/java - priority 180144
slave ControlPanel: /usr/java/jdk1.8.0_144/jre/bin/ControlPanel
slave javaws: /usr/java/jdk1.8.0_144/jre/bin/javaws
slave jcontrol: /usr/java/jdk1.8.0_144/jre/bin/jcontrol
slave jjs: /usr/java/jdk1.8.0_144/jre/bin/jjs
Current `best' version is /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java.
輸出的內容省略了一部分,可以看到,系統中存在OpenJDK 和 Oracle的JDK,下面選擇Oracle JDK為默認
[root@localhost cloud]# update-alternatives --config java
There are 3 programs which provide 'java'.
Selection Command
-----------------------------------------------
1 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.51-2.4.5.5.el7.x86_64/jre/bin/java
*+ 2 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64/jre/bin/java)
3 /usr/java/jdk1.8.0_144/jre/bin/java
Enter to keep the current selection[+], or type selection number: 3
[root@localhost cloud]# java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
update-alternatives 提供了交互界面,我們選擇3之后會車,配置就會生效,可以看到已經改過來了。
update-alternatives 介紹
如果我們用ls -l /usr/bin/java
查看,可以發現命令其實都是軟鏈接,現在java會定期升級,版本也特別多,所以很多命令都是軟鏈接,update-alternatives就是管理這些軟鏈接,這樣版本切換的時候,可以將所有的鏈接同時進行更新。
本文操作系統為 CentOS release 6.5(final),本文是用 rpm 方式安裝的jdk,如果下載的源碼,可能需要配置 profile 并用 update-alternative —install 命令安裝,本文沒有嘗試。
參考資料:
1、linux下如何使用自己安裝的SunJDK替換默認的OpenJDK
2、如何更改Linux中默認的openjdk為自己安裝的JDK
3、Linux安裝Oracle JDK替換OpenJDK詳解
文章列表