1、检查Linux操作系统的发行版本
[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环境
[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环境可以使用yum命令安装:
1、首先检索包含Java的列表。
[root@camel-line ~]# yum list java*
2、安装
[root@camel-line ~]# yum install java-1.8.0-openjdk* -y
3、下载安装ELasticsearch
不同的操作系统使用不同的系统命令来下载和启动Elasticsearch。下面只列出最常用的服务器操作系统发行版对应的命令(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、设置服务随机自启动
[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、检验操作系统使用的初始化系统是sysvinit还是systemd(由较新的发型版使用)。可以使用以下命令判断:
[root@camel-line ~]# ps -p 1
PID TTY TIME CMD
1 ? 00:00:02 systemd
[root@camel-line ~]#
4、在开始之前让我们配置必要的配置项
4.1、配置日志和数据的文件夹位置
如果这些重要的文件夹保留在其默认位置,在升级es到新版本时,存在数据丢失的高风险,在生产使用中,最好更改数据和日志文件夹的位置。
[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]#
创建完目录后,我们在elasticsearch.yml配置文件中配置日志和数据的路径:
path:
logs:/data/elasticsearch/log
data:/data/elasticsearch/data
4.2配置集群名称
节点只能在与集群中其他节点拥有共同的集群名称才被允许加入集群。默认情况下,cluster.name:elasticsearch,我们应该修改为适当的集群名称。确保在不要在不同的环境中重用相同的集群名称,否则会导致节点加入错误的集群。
我们在elasticsearch.yml配置文件中配置集群名称:
cluster.name: yto_elk
4.3配置节点名称
默认情况下,es将使用随机生成的UUID的前七个字符作为节点id(即节点名称)。节点名称是持久的,在节点重新启动时不会更改,因此默认节点名称也不会更改。我们应该配置一个更有意义的名称,便于管理集群。
我们在elasticsearch.yml配置文件中配置节点名称:
node.name: node_3
4.4设置堆大小
默认情况下,Elasticsearch设置JVM使用最大和最小为1GB的堆。生产环境时,配置堆大小确保Elasticsearch有足够的可用堆是非常重要的。ELasticsearch将通过设置最小堆大小和最大堆大小分配jvm.options中指定的整个堆。最大堆大小和最小堆大小的值取决于服务器上可用的RAM的量。好的经验法则是:
- 将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等。
- Elasticsearch可用的堆越多,它可用于缓存的内存就越多。但是请注意,过多的堆可能会使服务陷入长时间的垃圾收集暂停。
- 设置Xmx为不超过物理RAM的50%,以确保有足够的物理RAM用于内核文件系统缓存。
- 不要设置Xmx为JVM用于压缩对象指针的截止值之上。确切的截止值不同但是接近32GB。
- 更好的是,尽量保持低于零基础压缩oops的阈值,确切的截止值有所不同,但是大多数系统上26GB是安全的,但在某些系统上可高达30GB。
我们在jvm.options配置文件中设置堆大小:
-Xms2g
-Xmx2g
4.5设置JVM堆转储路径
默认情况下,Elasticsearch配置JVM将内存异常转储到默认的数据目录。如果这个路径不适合接受堆转储,应该修改在jvm.options文件中的-XX:HeapDumpPath=...配置项。
我们在jvm.options配置文件中设置JVM堆转储路径:
-XX:HeapDumpPath=/data/elasticsearch/data
4.6设置GC日志路径
默认情况下,ELasticsearch启用GC日志。这些配置在jvm.options文件中且默认使用与ELasticsearch默认日志的相同位置。默认配置每64 MB轮换一次日志,最多可占用2 GB的磁盘空间。
我们在jvm.options配置文件中设置GC日志文件路径:
8:-Xloggc:/data/elasticsearch/log/gc.log
4.7设置JVM致命错误日志位置
默认情况下,ELasticsearch将JVM配置为将致命错误日志写入到默认的日志记录目录。这些是JVM在遇到致命错误时生成的日志。如果该路径不适合接收这种日志,则应该在jvm.options文件中修改-XX:ErrorFile=...到备用路径。
我们在jvm.options配置文件中设置致命错误日志路径:
-XX:ErrorFile=/data/elasticsearch/log/hs_err_pid%p.log
5、重要的系统设置
理想情况下,ELasticsearch应该在服务器上单独运行,并使用它可用的所有资源。为此,需要配置操作系统以允许运行ELasticsearch的用户访问比默认情况下允许的资源更多的资源。
在投入生产之前,必须考虑以下设置:
- 禁用交换区间
- 增加文件描述符
- 确保足够的虚拟内存
- 确保足够的线程
- JVM DNS缓存设置
- 不使用noexec挂载的临时目录
使用rpm或deb软件包安装的elasticsearch服务已经大部分默认设置好了,无需再进一步设置。
这里主要讲一下禁用交换区间的配置:
1、 配置elasticsearch.yml文件:
bootstrap.memory_lock: true
2、在系统配置文件(deb:/etc/default/elasticsearch, rpm:/etc/sysconfig/elasticsearch)中配置:
MAX_LOCKED_MEMORY=unlimited
3、使用systemd的系统,在系统配置中设置LimitMEMLOCK=infinity
。对于使用systemd系统,需要通过systemd指定系统限制。systemd服务文件(/usr/lib/systemd/system/elasticsearch.service)包含默认应用的限制。要覆盖它们,请添加一个名为/etc/systemd/elasticsearch.service.d/override.conf文件,或者可以运行sudo systemctl edit elasticsearch命令,此命令在默认编辑器中自动打开上述文件。
[root@camel-line elasticsearch]# systemctl edit elasticsearch
设置文件中的任何更改,例如:
[Service]
LimitMEMLOCK=infinity
完成修改后,保存退出,运行以下命令重载单元:
[root@camel-line elasticsearch]# systemctl daemon-reload
6、使Elasticsearch用户具有管理员操作权限
首先,在通过包管理工具(dpg, rpm)安装ELK组件的时候,会在安装的时候,默认给你创建出对应的用户和用户组(elasticsearch,logstash,kibana)。这个用户名的初始密码是未知的,你不能通过它直接登陆或通过ssh远程登陆,也只能在root权限下进行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、创建用户目录
然后,用户登陆上来,至少得有自己的工作目录:
[root@camel-line /]# mkdir /elasticsearch
[root@camel-line /]# usermod -d /home/elasticsearch -m -u 997 elasticsearch
注意:997是用户pid,在/etc/passwd文件中可以找到。
6.3、增加用户权限
最后,我们需要给用户增加点权限。
通过vi打开/etc/passwd文件,找到你想修改的用户,比如elasticsearch:
[root@camel-line /]# vim /etc/passwd
修改配置文件:
elasticsearch:x:997:995:elasticsearch user:/home/elasticsearch:/bin/bash
退出保存,重新打开窗口生效。
6.4、若是无法启动es,执行下面这一步
[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通过以下命令检查内存是否锁定:
[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通过以下命令检查虚拟内存
[root@camel-line ~]# sysctl vm.max_map_count
vm.max_map_count = 262144
[root@camel-line ~]#
8、破解xpack、升级许可证
es是开源的,但是在一些高级功能上是收费的。新版的es安装后默认安装了X-pack高级插件,但是,默认安装后的es带有的是基础许可证,很多功能是不可使用的。在条件许可下,推荐使用正版,但本次我们是学习为主,下面介绍一下破解方案,以及升级许可证。
8.1X-pack破解
1、获取x-pack-core-6.6.0.jar压缩包(安装的版本不同,对应的后面的版本号不同),位于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丢进去,我们就能看到jar包的源代码了。
我们需要把2个文件提取出来进行修改(另存为两个新文件):
- org.elasticsearch.license.LicenseVerifier
- org.elasticsearch.xpack.core.XPackBuild
3、修改LicenseVerifier
LicenseVerifier 中有两个静态方法,这就是验证授权文件是否有效的方法,我们把它修改为全部返回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 中最后一个静态代码块中 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文件放到服务器上编译(随便哪个目录下):
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
需要注意的是,编译这两个文件的时候需要指定依赖包的位置, 如果你的位置和我的有区别,请注意修改。
6、将编译好的class文件重新压回x-pack-core-6.6.0.jar
在window系统上解压x-pack-core-6.6.0.jar 会得到一个 x-pack-core-6.6.0的目录,按照其位置将编译好的2个 class文件放到我们目录里面,替换老的。然后把这个x-pack-core-6.6.0目录传到服务器上。
将修改过的 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、 先从官网申请basic授权文件
https://license.elastic.co/registration
2、 授权文件修改
{
"uid": "6fb96d6b-938c-45ff-9ce7-6b53b39cd7dd",
"type": "platinum", # 修改授权为白金版本
"issue_date_in_millis": 1530489600000,
"expiry_date_in_millis": 2855980923000, #修改到期时间为2060-07-02
"max_nodes": 100, # 修改最大节点数
"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、设置内置用户
X-Pack安全性提供内置用户凭据,以帮助您启动和运行。这些用户具有一组固定的权限,在设置密码之前无法进行身份验证。该elastic
用户可以用来设置所有内置的用户密码:
- elastic:内置的超级用户
- kibana:用户kibana用于连接Elasticsearch并与之通信
- logstash_system:logstash用户在ELasticsearch中存储监视信息时使用
- beats_system:Beats在Elasticsearch中存储监控信息时使用的用户。
- apm_system:APM服务器在Elasticsearch中存储监视信息时使用的用户。
- remote_monitoring_user:Metricbeat用户在Elasticsearch中收集和存储监控信息时使用。它具有remote_monitoring_agent和 remote_monitoring_collector内置的角色。
这些内置用户存储在.security由X-Pack安全性管理的特殊索引中。这意味着,如果更改了密码或禁用了用户,则该更改将自动反映在群集中的每个节点上。这也意味着如果.security索引被删除或从快照恢复,那么应用的任何更改都将丢失。
安装ELasticsearch时,如果elastic用户还没有密码,则使用默认的引导密码。引导密码是一个临时密码,使我们可以运行设置所有内置用户密码的工具。
9.1设置内置用户密码
必须为所有内置用户设置密码。
elasticsearch-setup-passwords工具是第一次设置内置用户密码的最简单方法。它使用elastic用户的引导密码来运行用户管理API请求。例如,在窗口模式运行以下命令,这提示你为elastic,kibana,logstash_system,beats_system,apm_system,和 remote_monitoring_user用户输入新密码:
bin / elasticsearch-setup-passwords interactive
注意:为elastic用户设置密码后,引导密码不再有效。不能再次运行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
}
}