最近正在學習服務器應用平臺的搭建的相關知識。有幸從朋友與書上了解到Elastic套件的使用,我花了兩天的時間把最新的套件部署在個人服務器上,中間踩了數不清的坑。我把整個過程都記錄了下來與各位有須要的朋友們分享一下。html
Update
通過測試該安裝破解方案已兼容Elasticsearch6.4.2至Kibana6.5.1版本java
環境說明
操做系統:CentOS 7.5 騰訊雲公共鏡像
最低配置:1核2G(容易崩潰)
建議配置:2核4G(比較穩定)
推薦配置:越強越好(有錢真好)
軟件來源:官方yum源,官網網站:https://www.elastic.co/
本文中使用的代碼方式已在騰訊雲服務器實際測試過,安裝過程採用yum安裝,若用rpm安裝應該差別不大。
最近一次成功配置服務的時間爲:2018-10-22,若由於版本更新致使本文的配置方案有初入或者失效的請見諒。
如有配置維護等問題歡迎討論(其實我也是剛剛入門),聯繫我:mailto@wolfbolin.com
準備工做
首先你能夠給本身的主機起一個好聽的名字,方便在將來區分不一樣的主機
hostnamectl set-hostname xxx
最好把系統上已有的應用更新到最新版本
yum update -y
Elasticsearch須要Java 1.8.0_131或更高版本,方便起見能夠直接安裝OpenJDK,若是有特別須要的朋友也能夠選擇OracleJDK
yum install java-1.8.0* -y
從如今開始咱們就要開始安裝Elastic套件了,注意細節、提示與順序node
1、安裝Elasticsearch 6.4.2
該過程的官方文檔請參考以下連接
安裝過程概覽:https://www.elastic.co/products
Elasticsearch下載:https://www.elastic.co/downloads/elasticsearch
官方文檔:https://www.elastic.co/guide/en/elasticsearch/reference/6.4/index.htmlgit
根據文檔的指引有如下步驟:github
導入GPG密鑰避免在安裝過程當中提示密鑰信任問題
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
在源目錄/etc/yum.repos.d/中添加源elasticsearch.repo
可直接執行vim /etc/yum.repos.d/elasticsearch.repo,並在添加完成後保存
向elasticsearch.repo中寫入源信息:
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
1
2
3
4
5
6
7
8
在源添加完成後更新源數據並應經過yum安裝Elasticsearch
yum update -y && yum install elasticsearch -y
2、初步配置Elasticsearch 6.4.2
該過程的官方文檔請參考以下連接
配置說明:https://www.elastic.co/guide/en/elasticsearch/reference/current/settings.htmlapache
根據文檔的提示,我提取出一些關鍵信息json
默認設置已經足夠入門使用,應該儘可能少的修改配置文件
yum安裝的Elasticsearch運行目錄:/usr/share/elasticsearch/
yum安裝的Elasticsearch配置文件目錄:/etc/elasticsearch/
elasticsearch.yml 文件用於配置Elasticsearch
jvm.options 文件用於配置Elasticsearch JVM設置
log4j2.properties 文件用於配置Elasticsearch日誌記錄
你可能想修改:
須要修改主機IP爲公網IP、內網IP或任意IP:network.host: 0.0.0.0
修改端口:http.port: 9200
數據存放位置:path.data: /var/lib/elasticsearch
日誌存放位置:path.logs: /var/log/elasticsearch
修改運行時內存限制:見下文
程序自啓動:systemctl enable elasticsearch.service
啓動主程序:systemctl start elasticsearch.service
關於修改運行時內存
官方文檔重點翻譯:vim
您應該不多須要更改Java虛擬機(JVM)選項。若是須要修改,最可能的更改是設置堆大小。設置JVM選項(包括系統屬性和JVM標誌)的首選方法是經過jvm.options配置文件修改。
您最好將最小堆大小(Xms)和最大堆大小(Xmx)設置爲彼此相等。
Elasticsearch可用的堆越多,它可用於緩存的內存就越多。可是請注意,過多的堆可能會使您的機器陷入長時間的垃圾收集暫停。
設置Xmx爲不超過物理RAM的50%,以確保有足夠的物理RAM留給內核文件系統緩存。瀏覽器
官方關於JVM的文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html
此配置文件的默認位置在/etc/elasticsearch/jvm.options,視狀況修改Xms和Xms,過多或過少的佔用內存可能會致使程序崩潰或沒法啓動。
示例值:緩存
-Xms2g
-Xmx2g
1
2
嘗試啓動Elasticsearch
Elasticsearch 安裝完成並初步配置後能夠先不急着啓動,可使用命令systemctl start elasticsearch.service啓動Elasticsearch。
若想測試並驗證安裝結果,能夠啓動後訪問http://<host_ip>:<host_part>(默認地址http://域名或IP:9200)進行驗證,注意避免由於本機IP配置錯誤而致使沒法鏈接的狀況。
如能正常訪問將顯示以下格式的json數據
{
"name" : "qEgqyT5",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "wow17Li0SK-hgw-bOszN9g",
"version" : {
"number" : "6.4.2",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "04711c2",
"build_date" : "2018-09-26T13:34:09.098244Z",
"build_snapshot" : false,
"lucene_version" : "7.4.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
3、安裝kibana 6.4.2
該過程的官方文檔請參考以下連接
Kibana下載:https://www.elastic.co/downloads/kibana
官方文檔:https://www.elastic.co/guide/en/kibana/6.4/index.html
根據文檔的指引有如下步驟:
經過yum安裝Kibana:yum install kibana -y
配置文件修改:/etc/kibana/kibana.yml
# 本機IP根據我的須要填寫公網IP、內網IP或任意IP
server.host: "0.0.0.0"
#配置Kibana所鏈接的ES集羣連接
elasticsearch.url: "http://localhost:9200"
1
2
3
4
5
設置軟件開機自啓並啓動程序
systemctl enable kibana.service
systemctl start kibana.service
1
2
嘗試啓動Kibana
Kibana啓動前必須配置並啓動Elasticsearch,不然網頁上會出現錯誤提示。配置並啓動後可經過http://<host_ip>:<host_part>訪問Kibana,能夠用瀏覽器進行訪問。默認地址http://域名或IP:5601,效果如圖。
4、Beats與Logstash安裝
能夠根據我的須要安裝Beats與Logstash,經過上文中配置的yum進行安裝,組建的配置廣泛的都比較簡單,通常都是設置主機地址和證書便可。
詳細內容可參考官方文檔:https://www.elastic.co/guide/en/beats/metricbeat/current/index.html
Beats簡介:https://www.elastic.co/cn/products/beats
Logstash簡介:https://www.elastic.co/cn/products/logstash
簡單舉例
安裝metricbeat
yum install metricbeat -y
配置metricbeat
文件目錄:/etc/metricbeat/metricbeat.yml
配置elasticsearch和kibana的主機地址並開啓面板,修改內容:
output.elasticsearch:
hosts: ["xxx.xxx.xxx.xxx:9200"]
setup.kibana:
host: "xxx.xxx.xxx.xxx:5601"
setup.dashboards.enabled: true
1
2
3
4
5
6
7
開機啓動和啓動程序
設置開機啓動:chkconfig --add metricbeat
手動啓動程序:systemctl start metricbeat
5、設置x-pack
若想破解白金版服務,須要啓動安全設置,也就是要在每一個節點中安裝證書
該過程的官方文檔請參考以下連接
https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-security.html
在如下內容中我將主要陳述該版本的方法和以前版本的不一樣點,理由只簡單陳述
安裝x-pack
6.4版本不須要安裝x-pack
由於在6.4的版本中x-pack已是一個內置的組建了,沒必要像網上的其餘教程那樣本身安裝x-pack了。
先進入試用模式
我遇到的很奇怪的問題,若先配置證書再設置密碼就會致使Kibana沒法鏈接到Elasticsearch,出現如下提示。
設置密碼時:
Unexpected response code [403] from calling GET http://10.10.1.10:9200/_xpack/security/_authenticate?pretty
It doesn't look like the X-Pack security feature is available on this Elasticsearch node.
Please check if you have installed a license that allows access to X-Pack Security feature.
ERROR: X-Pack Security is not available.
1
2
3
4
5
打開Kibana時會出現
Cannot connect to the Elasticsearch cluster currently configured for Kibana.
1
如圖
爲避免此問題,請先點擊試用再配置x-pack的相關證書。
生成CA證書
路徑陷阱要當心
網絡上大部分教程所描述的certutil程序腳本,在路徑/usr/share/elasticsearch/bin/x-pack/中。可是,在6.4中已經不可用 (文件存在可是運行時會提示不可用),新的CA證書生成程序在/usr/share/elasticsearch/bin/目錄中,名爲elasticsearch-certutil
咱們能夠進入/usr/share/elasticsearch/bin/目錄執行以下命令來生成證書。
./elasticsearch-certutil ca --ca-dn "CN=WolfBolin Elatic CA" --out /etc/elasticsearch/certs/wolfbolin-elastic-ca.p12
內容和參數的含義能夠自行百度,百度上的說明仍是能看明白的。若須要使用TLS/SSL證書能夠參考官方文檔。
生成cert證書
一樣的,能夠在/usr/share/elasticsearch/bin/目錄執行以下命令來生成證書。
./elasticsearch-certutil cert -ca /etc/elasticsearch/certs/wolfbolin-elastic-ca.p12 --out /etc/elasticsearch/certs/wolfbolin-elastic-certificates.p12
該證書生成程序會以交互式的方式完成證書的生成,建議cert證書生成時不帶密碼,以下降配置複雜性(輸入密碼時直接回車就好)
合理的保存證書
在保存證書時有兩點須要注意:
cert證書中包含了CA證書的密碼,因此不該被隨意讀取,注意權限的調整
也許是因爲Java或程序自身的限制,Elasticsearch沒法讀取非配置目錄/etc/elasticsearch/下的文件,因此你應該將cert證書儲存在/etc/elasticsearch/certs/文件夾中,並給予適當的權限,個人設置是chmod 660 /etc/elasticsearch/certs/*
若訪問權限不足會在日誌中出現java.nio.file.AccessDeniedException:的報錯提示
在Elasticsearch中配置證書文件
修改配置文件/etc/elasticsearch/elasticsearch.yml,在文件結尾添加:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/wolfbolin-elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/wolfbolin-elastic-certificates.p12
1
2
3
4
注意:兩個證書是同樣的,都是生成的cert證書。證書的名字和路徑別弄錯了!!!
若證書有密碼可參考文檔https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html#tls-transport
配置完成後重啓Elasticsearch
systemctl restart elasticsearch.service
若在重啓過程當中出現錯誤與致使不能啓動的,能夠分析日誌/var/log/elasticsearch/elasticsearch.log查找緣由。
階段性成果
在配置了安全證書後,若嘗試訪問則會在網頁上提示,此時Kibana是不可訪問Elasticsearch的
Cannot connect to the Elasticsearch cluster currently configured for Kibana.
Refer to the Kibana logs for more details and refresh to try again.
1
2
設置用戶密碼
網上其餘教程上使用的程序setup-passwords在6.4中已不可用(文件存在可是運行時會提示不可用),新的密碼設置程序在/usr/share/elasticsearch/bin/目錄中,名爲setup-passwords
咱們能夠進入/usr/share/elasticsearch/bin/目錄執行以下命令來生成密碼。
./elasticsearch-setup-passwords auto(自動生成)或./elasticsearch-setup-passwords interactive(手動設置)
如果自動生成,過程提示以下,如報錯請參考第二步。
[root@sbox-wolfbolin bin]# ./elasticsearch-setup-passwords auto
Initiating the setup of passwords for reserved users elastic,kibana,logstash_system,beats_system.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user kibana
PASSWORD kibana = nEeVHfxms4Q4S6mWmzzH
Changed password for user logstash_system
PASSWORD logstash_system = zmb8xXkFk7KlLWYPHfO0
Changed password for user beats_system
PASSWORD beats_system = ejSOoRx87tx43IfokIot
Changed password for user elastic
PASSWORD elastic = RFWJ2dN0crlHk0ebUHN4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
該憑據是其餘應用程序鏈接Elasticsearch的憑據,請保存好
將密碼部署到應用
編輯Kibana配置文件/etc/kibana/kibana.yml
elasticsearch.username:"elastic"
elasticsearch.password:"RFWJ2dN0crlHk0ebUHN4"
1
2
此賬號密碼是Kibana鏈接Elasticsearch的憑據,若使用kibana帳戶則沒法連接。
將密碼部署到收集器
以metricbeat爲例,修改配置文件/etc/metricbeat/metricbeat.yml,安裝以下格式修改相關字段,密碼按照上述本身修改的密碼填寫:
output.elasticsearch:
hosts: ["myEShost:9200"]
username: "beats_system"
password: "ejSOoRx87tx43IfokIot"
setup.kibana:
host: "kibana_host:5601"
username: "kibana"
password: "nEeVHfxms4Q4S6mWmzzH"
1
2
3
4
5
6
7
8
重啓應用以刷新配置:systemctl restart metricbeat
重啓Kibana
重啓應用以刷新配置:systemctl restart kibana.service
此時刷新網頁便可看到Kibana已經須要賬號密碼登陸了,此時使用剛剛生成的kibana帳戶登陸。
6、 破解x-pack
相關說明
不一樣於手工安裝的x-pack,Elasticsearch6.4內包含的x-pack位於modules/x-pack-core中,即:/usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.4.2.jar文件。
反編譯jar文件
在這個步驟中你徹底能夠跳過反編譯的過程,直接使用我文章中給出的Java程序進行編譯和替換。但若是有須要的能夠該文件傳出來並用luyten反編譯軟件對jar包進行反編譯,luyten項目地址:https://github.com/deathmarine/Luyten
修改x-pack源碼
咱們重點關心項目中的兩個文件
org.elasticsearch.license.LicenseVerifier.java
org.elasticsearch.xpack.core.XPackBuild.java
兩個文件文件相較於以前的版本有必定的變化,可是不影響破解過程。原始文件我就不貼了,直接給出修改後的Java文件。你能夠在本地新建一個同名的Java文件並將上面給出的代碼拷貝到文件中,這樣你就擁有了兩個修改過的x-pack程序的Java源碼文件。
org.elasticsearch.license.LicenseVerifier.java
package org.elasticsearch.license;
import java.nio.*;
import org.elasticsearch.common.bytes.*;
import java.security.*;
import java.util.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.core.internal.io.*;
import java.io.*;
public class LicenseVerifier
{
public static boolean verifyLicense(final License license, final byte[] publicKeyData) {
return true;
}
public static boolean verifyLicense(final License license) {
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
org.elasticsearch.xpack.core.XPackBuild.java
package org.elasticsearch.xpack.core;
import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*;
import java.util.jar.*;
public class XPackBuild
{
public static final XPackBuild CURRENT;
private String shortHash;
private String date;
@SuppressForbidden(reason = "looks up path of xpack.jar directly")
static Path getElasticsearchCodebase() {
final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
try {
return PathUtils.get(url.toURI());
}
catch (URISyntaxException bogus) {
throw new RuntimeException(bogus);
}
}
XPackBuild(final String shortHash, final String date) {
this.shortHash = shortHash;
this.date = date;
}
public String shortHash() {
return this.shortHash;
}
public String date() {
return this.date;
}
static {
final Path path = getElasticsearchCodebase();
String shortHash = null;
String date = null;
Label_0157: {
shortHash = "Unknown";
date = "Unknown";
}
CURRENT = new XPackBuild(shortHash, date);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
編譯java程序
你須要將這兩個文件編譯爲class文件,編譯依賴的文件在命令中已經給出。
編譯LicenseVerifier.java
javac -cp "/usr/share/elasticsearch/modules/x-pack-core/*:/usr/share/elasticsearch/lib/*" LicenseVerifier.java
編譯XPackBuild.java
javac -cp "/usr/share/elasticsearch/modules/x-pack-core/*:/usr/share/elasticsearch/lib/*" XPackBuild.java
提示:若是編譯遲遲不能結束,你可能須要將Elasticsearch關閉再從新編譯便可。
編譯替換的過程須要關閉Elasticsearch。
獲取源文件
在完成編譯程序以後須要將編譯好的程序添加到x-pack-core-6.4.2.jar文件中,咱們能夠採用先解壓再替換在壓縮的方式構建新的jar文件。進入文件所在目錄,備份文件,拷貝出來
cd /usr/share/elasticsearch/modules/x-pack-core/
cp x-pack-core-6.4.2.jar x-pack-core-6.4.2.jar.bak
cp x-pack-core-6.4.2.jar /home/x-pack-core-6.4.2.jar
1
2
3
解壓jar文件
解壓jar文件:jar -xvf x-pack-core-6.4.2.jar該命令會解壓到當前目錄
unzip x-pack-core-6.4.2.jar -d ./x-pack-core-6.4.2該命令能夠指定目錄
替換class文件
將剛剛編譯好的破解的class替換到相同的位置中
cp LicenseVerifier.class ./x-pack-core-6.4.2/org/elasticsearch/license/
cp XPackBuild.class ./x-pack-core-6.4.2/org/elasticsearch/xpack/core/
從新打包jar包
壓縮jar文件:jar -cvf x-pack-core-6.4.2.crack.jar -C x-pack-core-6.4.2/ . (不可忽略那個英文句號)
替換x-pack文件
將咱們生成的被破解的jar替換到Elasticsearch的目錄中:
cp x-pack-core-6.4.2.crack.jar /usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.4.2.jar
另外須要注意須要替換集羣中全部的x-pack-core-6.4.2.jar
重啓Elasticsearch
systemctl restart elasticsearch.service
7、 升級爲鉑金版
申請許可證
在官網上申請一個許可證:https://register.elastic.co/marvel_register
新申請的許可證都是普通的版本,咱們須要修改一下文件中的信息讓軟件認爲咱們是鉑金版。並且由於咱們破解了驗證證書的jar文件,因此軟件沒法驗證咱們的證書是否是真的。
普通的證書內容以下:
{
"license": {
"uid": "c6570128-85c2-4f72-8d8f-b1425455b9ee",
"type": "basic",
"issue_date_in_millis": 1540080000000,
"expiry_date_in_millis": 1571702399999,
"max_nodes": 100,
"issued_to": "elastic",
"issuer": "elastic",
"signature": "AAAAAwAAAA07qIy5rp9i1qa5VS3vAAAB...",
"start_date_in_millis": 1540080000000
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
修改type字段爲platinum,表示鉑金版
修改expiry_date_in_millis字段爲2147482800000,表示時間盡頭
修改max_nodes字段爲1000,表示集羣數量
{
"license": {
"uid": "c6570128-85c2-4f72-8d8f-b1425455b9ee",
"type": "basic",
"issue_date_in_millis": 1540080000000,
"expiry_date_in_millis": 1571702399999,
"max_nodes": 100,
"issued_to": "elastic",
"issuer": "elastic",
"signature": "AAAAAwAAAA07qIy5rp9i1qa5VS3vAAAB...",
"start_date_in_millis": 1540080000000
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
注:「2147482800」 表示 「北京時間2038-1-19 11:00:00」
更新許可證修改爲功後就能夠在Kibana頁面中上傳新的許可證了注意:上傳許可證時必須使用elastic賬號登陸並更新許可證