1、檢查Linux操作系統(tǒng)的發(fā)行版本
[root@camel-line ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.6.1810 (Core)
Release: 7.6.1810
Codename: Core
2膀钠、檢查Java jdk環(huán)境
[root@camel-line ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
如果沒有安裝Java環(huán)境可以使用yum命令安裝:
1、首先檢索包含Java的列表噪馏。
[root@camel-line ~]# yum list java*
2、安裝
[root@camel-line ~]# yum install java-1.8.0-openjdk* -y
3、下載安裝ELasticsearch
不同的操作系統(tǒng)使用不同的系統(tǒng)命令來下載和啟動Elasticsearch没酣。下面只列出最常用的服務(wù)器操作系統(tǒng)發(fā)行版對應(yīng)的命令(deb為Debian/Ubuntu, rpm為Redhat/Centos/Fedora):
1轻专、下載
[root@camel-line ~]# curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 108M 100 108M 0 0 49703 0 0:38:14 0:38:14 --:--:-- 37253
2忆矛、安裝
[root@camel-line ~]# sudo rpm -i elasticsearch-6.6.0.rpm
warning: elasticsearch-6.6.0.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Creating elasticsearch group... OK
Creating elasticsearch user... OK
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
Created elasticsearch keystore in /etc/elasticsearch
[root@camel-line ~]#
3、設(shè)置服務(wù)隨機自啟動
[root@camel-line ~]# sudo systemctl daemon-reload
[root@camel-line ~]# sudo systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@camel-line ~]#
4请垛、檢驗操作系統(tǒng)使用的初始化系統(tǒng)是sysvinit還是systemd(由較新的發(fā)型版使用)催训。可以使用以下命令判斷:
[root@camel-line ~]# ps -p 1
PID TTY TIME CMD
1 ? 00:00:02 systemd
[root@camel-line ~]#
4宗收、在開始之前讓我們配置必要的配置項
4.1漫拭、配置日志和數(shù)據(jù)的文件夾位置
如果這些重要的文件夾保留在其默認位置,在升級es到新版本時混稽,存在數(shù)據(jù)丟失的高風(fēng)險采驻,在生產(chǎn)使用中审胚,最好更改數(shù)據(jù)和日志文件夾的位置。
[root@camel-line /]# cd data
[root@camel-line data]# ll
total 16
drwx------ 2 root root 16384 Feb 27 16:23 lost+found
[root@camel-line data]# mkdir elasticsearch
[root@camel-line data]# cd elasticsearch/
[root@camel-line elasticsearch]# ll
total 0
[root@camel-line elasticsearch]# mkdir data
[root@camel-line elasticsearch]# mkdir log
[root@camel-line elasticsearch]# ll
total 8
drwxr-xr-x 2 root root 4096 Feb 28 15:55 data
drwxr-xr-x 2 root root 4096 Feb 28 15:56 log
[root@camel-line elasticsearch]# pwd
/data/elasticsearch
[root@camel-line elasticsearch]# ll
total 8
drwxr-xr-x 2 root root 4096 Feb 28 15:55 data
drwxr-xr-x 2 root root 4096 Feb 28 15:56 log
[root@camel-line elasticsearch]#
創(chuàng)建完目錄后礼旅,我們在elasticsearch.yml配置文件中配置日志和數(shù)據(jù)的路徑:
path:
logs:/data/elasticsearch/log
data:/data/elasticsearch/data
4.2配置集群名稱
節(jié)點只能在與集群中其他節(jié)點擁有共同的集群名稱才被允許加入集群膳叨。默認情況下,cluster.name:elasticsearch痘系,我們應(yīng)該修改為適當(dāng)?shù)募好Q菲嘴。確保在不要在不同的環(huán)境中重用相同的集群名稱,否則會導(dǎo)致節(jié)點加入錯誤的集群汰翠。
我們在elasticsearch.yml配置文件中配置集群名稱:
cluster.name: yto_elk
4.3配置節(jié)點名稱
默認情況下龄坪,es將使用隨機生成的UUID的前七個字符作為節(jié)點id(即節(jié)點名稱)。節(jié)點名稱是持久的奴璃,在節(jié)點重新啟動時不會更改悉默,因此默認節(jié)點名稱也不會更改。我們應(yīng)該配置一個更有意義的名稱苟穆,便于管理集群抄课。
我們在elasticsearch.yml配置文件中配置節(jié)點名稱:
node.name: node_3
4.4設(shè)置堆大小
默認情況下,Elasticsearch設(shè)置JVM使用最大和最小為1GB的堆雳旅。生產(chǎn)環(huán)境時跟磨,配置堆大小確保Elasticsearch有足夠的可用堆是非常重要的。ELasticsearch將通過設(shè)置最小堆大小和最大堆大小分配jvm.options中指定的整個堆攒盈。最大堆大小和最小堆大小的值取決于服務(wù)器上可用的RAM的量抵拘。好的經(jīng)驗法則是:
- 將最小堆大小(Xms)和最大堆大行突怼(Xmx)設(shè)置為彼此相等僵蛛。
- Elasticsearch可用的堆越多,它可用于緩存的內(nèi)存就越多迎变。但是請注意充尉,過多的堆可能會使服務(wù)陷入長時間的垃圾收集暫停。
- 設(shè)置Xmx為不超過物理RAM的50%衣形,以確保有足夠的物理RAM用于內(nèi)核文件系統(tǒng)緩存驼侠。
- 不要設(shè)置Xmx為JVM用于壓縮對象指針的截止值之上。確切的截止值不同但是接近32GB谆吴。
- 更好的是倒源,盡量保持低于零基礎(chǔ)壓縮oops的閾值,確切的截止值有所不同句狼,但是大多數(shù)系統(tǒng)上26GB是安全的笋熬,但在某些系統(tǒng)上可高達30GB。
我們在jvm.options配置文件中設(shè)置堆大心骞健:
-Xms2g
-Xmx2g
4.5設(shè)置JVM堆轉(zhuǎn)儲路徑
默認情況下胳螟,Elasticsearch配置JVM將內(nèi)存異常轉(zhuǎn)儲到默認的數(shù)據(jù)目錄苫拍。如果這個路徑不適合接受堆轉(zhuǎn)儲,應(yīng)該修改在jvm.options文件中的-XX:HeapDumpPath=...配置項旺隙。
我們在jvm.options配置文件中設(shè)置JVM堆轉(zhuǎn)儲路徑:
-XX:HeapDumpPath=/data/elasticsearch/data
4.6設(shè)置GC日志路徑
默認情況下绒极,ELasticsearch啟用GC日志。這些配置在jvm.options文件中且默認使用與ELasticsearch默認日志的相同位置蔬捷。默認配置每64 MB輪換一次日志垄提,最多可占用2 GB的磁盤空間。
我們在jvm.options配置文件中設(shè)置GC日志文件路徑:
8:-Xloggc:/data/elasticsearch/log/gc.log
4.7設(shè)置JVM致命錯誤日志位置
默認情況下周拐,ELasticsearch將JVM配置為將致命錯誤日志寫入到默認的日志記錄目錄铡俐。這些是JVM在遇到致命錯誤時生成的日志。如果該路徑不適合接收這種日志妥粟,則應(yīng)該在jvm.options文件中修改-XX:ErrorFile=...到備用路徑审丘。
我們在jvm.options配置文件中設(shè)置致命錯誤日志路徑:
-XX:ErrorFile=/data/elasticsearch/log/hs_err_pid%p.log
5、重要的系統(tǒng)設(shè)置
理想情況下勾给,ELasticsearch應(yīng)該在服務(wù)器上單獨運行滩报,并使用它可用的所有資源。為此播急,需要配置操作系統(tǒng)以允許運行ELasticsearch的用戶訪問比默認情況下允許的資源更多的資源脓钾。
在投入生產(chǎn)之前,必須考慮以下設(shè)置:
- 禁用交換區(qū)間
- 增加文件描述符
- 確保足夠的虛擬內(nèi)存
- 確保足夠的線程
- JVM DNS緩存設(shè)置
- 不使用noexec掛載的臨時目錄
使用rpm或deb軟件包安裝的elasticsearch服務(wù)已經(jīng)大部分默認設(shè)置好了桩警,無需再進一步設(shè)置可训。
這里主要講一下禁用交換區(qū)間的配置:
1、 配置elasticsearch.yml文件:
bootstrap.memory_lock: true
2捶枢、在系統(tǒng)配置文件(deb:/etc/default/elasticsearch, rpm:/etc/sysconfig/elasticsearch)中配置:
MAX_LOCKED_MEMORY=unlimited
3握截、使用systemd的系統(tǒng),在系統(tǒng)配置中設(shè)置LimitMEMLOCK=infinity
烂叔。對于使用systemd系統(tǒng)谨胞,需要通過systemd指定系統(tǒng)限制。systemd服務(wù)文件(/usr/lib/systemd/system/elasticsearch.service)包含默認應(yīng)用的限制长已。要覆蓋它們畜眨,請?zhí)砑右粋€名為/etc/systemd/elasticsearch.service.d/override.conf文件昼牛,或者可以運行sudo systemctl edit elasticsearch命令术瓮,此命令在默認編輯器中自動打開上述文件。
[root@camel-line elasticsearch]# systemctl edit elasticsearch
設(shè)置文件中的任何更改贰健,例如:
[Service]
LimitMEMLOCK=infinity
完成修改后胞四,保存退出,運行以下命令重載單元:
[root@camel-line elasticsearch]# systemctl daemon-reload
6伶椿、使Elasticsearch用戶具有管理員操作權(quán)限
首先辜伟,在通過包管理工具(dpg, rpm)安裝ELK組件的時候氓侧,會在安裝的時候,默認給你創(chuàng)建出對應(yīng)的用戶和用戶組(elasticsearch导狡,logstash约巷,kibana)。這個用戶名的初始密碼是未知的旱捧,你不能通過它直接登陸或通過ssh遠程登陸独郎,也只能在root權(quán)限下進行su。
6.1枚赡、使用戶可以登錄
首先氓癌,我們需要使用戶可以直接或遠程登陸。第一步就需要修改用戶密碼贫橙。通過passwd命令:
[root@camel-line /]# passwd elasticsearch
Changing password for user elasticsearch.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
6.2贪婉、創(chuàng)建用戶目錄
然后,用戶登陸上來卢肃,至少得有自己的工作目錄:
[root@camel-line /]# mkdir /elasticsearch
[root@camel-line /]# usermod -d /home/elasticsearch -m -u 997 elasticsearch
注意:997是用戶pid疲迂,在/etc/passwd文件中可以找到。
6.3莫湘、增加用戶權(quán)限
最后鬼譬,我們需要給用戶增加點權(quán)限。
通過vi打開/etc/passwd文件逊脯,找到你想修改的用戶优质,比如elasticsearch:
[root@camel-line /]# vim /etc/passwd
修改配置文件:
elasticsearch:x:997:995:elasticsearch user:/home/elasticsearch:/bin/bash
退出保存,重新打開窗口生效军洼。
6.4巩螃、若是無法啟動es细层,執(zhí)行下面這一步
[root@camel-line ~]# chown -R elasticsearch:elasticsearch /usr/share/elasticsearch
[root@camel-line ~]# chown -R elasticsearch:elasticsearch /etc/elasticsearch
[root@camel-line ~]# chown -R elasticsearch:elasticsearch /data/elasticsearch
[root@camel-line ~]# chown -R elasticsearch:elasticsearch /etc/sysconfig/elasticsearch
7秧均、啟動es
到這里我們可以在root俭令、elasticsearch用戶下通過命名啟動es:
systemctl start elasticsearch.service
通過以下命令檢查是否啟動成功:
systemctl status elasticsearch.service
如果報錯請查看指定的es日志目錄下(/data/elasticsearch/log)的日志文件查看具體原因盼铁。
7.1通過以下命令檢查內(nèi)存是否鎖定:
[root@camel-line ~]# curl -X GET "localhost:9200/_nodes?filter_path=**.mlockall"
正常返回值:
{"nodes":{"2kOL_j8qRCm8PO907A29iA":{"process":{"mlockall":true}}}}
7.2通過以下命令檢查文件描述符:
[root@camel-line ~]# curl -X GET "localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors"
正常返回格式:
{"nodes":{"2kOL_j8qRCm8PO907A29iA":{"process":{"max_file_descriptors":65536}}}}
7.3通過以下命令檢查虛擬內(nèi)存
[root@camel-line ~]# sysctl vm.max_map_count
vm.max_map_count = 262144
[root@camel-line ~]#
8柿冲、破解xpack酬滤、升級許可證
es是開源的隧膏,但是在一些高級功能上是收費的贿堰。新版的es安裝后默認安裝了X-pack高級插件跑杭,但是铆帽,默認安裝后的es帶有的是基礎(chǔ)許可證,很多功能是不可使用的德谅。在條件許可下爹橱,推薦使用正版,但本次我們是學(xué)習(xí)為主窄做,下面介紹一下破解方案愧驱,以及升級許可證慰技。
8.1X-pack破解
1、獲取x-pack-core-6.6.0.jar壓縮包(安裝的版本不同组砚,對應(yīng)的后面的版本號不同)吻商,位于elasticsearch主安裝目錄下的/modules/x-pack-core/目錄下。
2糟红、使用luyten反編譯x-pack-core-6.6.0.jar:
- 下載luyten
- 下載頁面: https://github.com/deathmarine/Luyten/releases
我們在window上把軟件下載下來手报,打開軟件,把x-pack-core-6.6.0.jar丟進去改化,我們就能看到j(luò)ar包的源代碼了掩蛤。
我們需要把2個文件提取出來進行修改(另存為兩個新文件):
- org.elasticsearch.license.LicenseVerifier
- org.elasticsearch.xpack.core.XPackBuild
3、修改LicenseVerifier
LicenseVerifier 中有兩個靜態(tài)方法陈肛,這就是驗證授權(quán)文件是否有效的方法揍鸟,我們把它修改為全部返回true。
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;
}
}
4句旱、修改XPackBuild
XPackBuild 中最后一個靜態(tài)代碼塊中 try的部分全部刪除阳藻,這部分會驗證jar包是否被修改。
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_0109: {
shortHash = "Unknown";
date = "Unknown";
}
CURRENT = new XPackBuild(shortHash, date);
}
}
5谈撒、編譯修改后的Java文件腥泥, 把修改好的兩個Java文件放到服務(wù)器上編譯(隨便哪個目錄下):
javac -cp "/usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.6.0.jar:/usr/share/elasticsearch/lib/*" LicenseVerifier.java
javac -cp "/usr/share/elasticsearch/modules/x-pack-core/x-pack-core-6.6.0.jar:/usr/share/elasticsearch/lib/*" XPackBuild.java
需要注意的是,編譯這兩個文件的時候需要指定依賴包的位置啃匿, 如果你的位置和我的有區(qū)別蛔外,請注意修改。
6溯乒、將編譯好的class文件重新壓回x-pack-core-6.6.0.jar
在window系統(tǒng)上解壓x-pack-core-6.6.0.jar 會得到一個 x-pack-core-6.6.0的目錄夹厌,按照其位置將編譯好的2個 class文件放到我們目錄里面,替換老的裆悄。然后把這個x-pack-core-6.6.0目錄傳到服務(wù)器上矛纹。
將修改過的 x-pack-core-6.6.0目錄重新壓成jar包。
jar -cvf x-pack-core-6.6.0.jar -C x-pack-core-6.6.0 .
7光稼、將重新壓縮成的jar包替換掉老的重啟es或南。
8.2升級許可證
1、 先從官網(wǎng)申請basic授權(quán)文件
https://license.elastic.co/registration
2艾君、 授權(quán)文件修改
{
"uid": "6fb96d6b-938c-45ff-9ce7-6b53b39cd7dd",
"type": "platinum", # 修改授權(quán)為白金版本
"issue_date_in_millis": 1530489600000,
"expiry_date_in_millis": 2855980923000, #修改到期時間為2060-07-02
"max_nodes": 100, # 修改最大節(jié)點數(shù)
"issued_to": "xxxx",
"issuer": "Web Form",
"signature":"AAAAAwAAAA3PP60wKNtAvRmuCGdSAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01V",
"start_date_in_millis": 1530489600000
}
3采够、通過API接口上傳
curl -XPUT 'http://es-ip:port/_xpack/license' -H "Content-Type: application/json" -d @<path>/license.json
9、設(shè)置內(nèi)置用戶
X-Pack安全性提供內(nèi)置用戶憑據(jù)腻贰,以幫助您啟動和運行吁恍。這些用戶具有一組固定的權(quán)限扒秸,在設(shè)置密碼之前無法進行身份驗證播演。該elastic
用戶可以用來設(shè)置所有內(nèi)置的用戶密碼:
- elastic:內(nèi)置的超級用戶
- kibana:用戶kibana用于連接Elasticsearch并與之通信
- logstash_system:logstash用戶在ELasticsearch中存儲監(jiān)視信息時使用
- beats_system:Beats在Elasticsearch中存儲監(jiān)控信息時使用的用戶冀瓦。
- apm_system:APM服務(wù)器在Elasticsearch中存儲監(jiān)視信息時使用的用戶。
- remote_monitoring_user:Metricbeat用戶在Elasticsearch中收集和存儲監(jiān)控信息時使用写烤。它具有remote_monitoring_agent和 remote_monitoring_collector內(nèi)置的角色翼闽。
這些內(nèi)置用戶存儲在.security由X-Pack安全性管理的特殊索引中。這意味著洲炊,如果更改了密碼或禁用了用戶感局,則該更改將自動反映在群集中的每個節(jié)點上。這也意味著如果.security索引被刪除或從快照恢復(fù)暂衡,那么應(yīng)用的任何更改都將丟失询微。
安裝ELasticsearch時,如果elastic用戶還沒有密碼狂巢,則使用默認的引導(dǎo)密碼撑毛。引導(dǎo)密碼是一個臨時密碼,使我們可以運行設(shè)置所有內(nèi)置用戶密碼的工具唧领。
9.1設(shè)置內(nèi)置用戶密碼
必須為所有內(nèi)置用戶設(shè)置密碼藻雌。
elasticsearch-setup-passwords工具是第一次設(shè)置內(nèi)置用戶密碼的最簡單方法。它使用elastic用戶的引導(dǎo)密碼來運行用戶管理API請求斩个。例如胯杭,在窗口模式運行以下命令,這提示你為elastic受啥,kibana做个,logstash_system,beats_system滚局,apm_system叁温,和 remote_monitoring_user用戶輸入新密碼:
bin / elasticsearch-setup-passwords interactive
注意:為elastic用戶設(shè)置密碼后,引導(dǎo)密碼不再有效核畴。不能再次運行elasticsearch-setup-passwords命令膝但。
通過以下命令驗證用戶和升級后的許可證:
[elasticsearch@camel-line elasticsearch]$ curl -u elastic:yto_elk_2019 'localhost:9200/_xpack/license'
{
"license" : {
"status" : "active",
"uid" : "8d2b7885-396d-4c9c-b6b6-3c296521bacb",
"type" : "platinum",
"issue_date" : "2019-02-27T00:00:00.000Z",
"issue_date_in_millis" : 1551225600000,
"expiry_date" : "2060-07-02T08:02:03.000Z",
"expiry_date_in_millis" : 2855980923000,
"max_nodes" : 100,
"issued_to" : "y to (yto)",
"issuer" : "Web Form",
"start_date_in_millis" : 1551225600000
}
}