Hey, Nice to meet You. 

必有过人之节.人情有所不能忍者,匹夫见辱,拔剑而起,挺身而斗,此不足为勇也,天下有大勇者,猝然临之而不惊,无故加之而不怒.此其所挟持者甚大,而其志甚远也.          ☆☆☆所谓豪杰之士,

Linux安装ElasticSearch、Kibana和Elasticsearch-head

1、ES对应JDK版本

我们在安装ElasticSearch的时候一定要注意ElasticSearch当前版本所支持的JDK版本,免得白安装了。

ElasticSearch与JDK对应的版本查看网址:https://www.elastic.co/cn/support/matrix#matrix_jvm

image

image

从上面ES对应的JDK版本可以发现,Elasticsearch 8之后不再支持Oracle/OpenJDK**/AdoptOpenJDK1.8.0 了,Elasticsearch 8最低的JDK版本都要JDK17才行,所以这里也不可能安装Elasticsearch 8的版本,为了方便还是使用支持JDK8的Elasticsearch 版本。

2、安装JDK

1、下载安装包

JDK8下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

由于JDK下载现在要登录账户了,这里提供一下:账号:liwei@xiaostudy.com 密码:OracleTest1234 或者这个链接:http://bugmenot.com/view/oracle.com

2、解压压缩包

将压缩包上传到/usr/local下

tar -zxvf jdk-8u333-linux-x64.tar.gz -C /usr/local/

3、设置环境变量,编辑/etc/profile文件

vi /etc/profile

在profile文件最下面添加如下内容(这里根据你自己的路径和名称添加,不一定和我一样):

JAVA_HOME=/usr/local/jdk1.8.0_333
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

4、使环境变量生效

source /etc/profile

5、检查

java -version

3、安装ElasticSearch

TIPS:ElasticSearch的版本迭代是真的快,感觉半个月一个版本,但不管怎样安装的步骤基本都是相似。再次提醒:ES对应JDK版本一样要符合要求

1、下载ElasticSearch的安装包:

最新版本:https://www.elastic.co/cn/downloads/elasticsearch

过去版本:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.3-linux-x86_64.tar.gz

解压文件,将elasticsearch安装在/usr/local目录下

tar -zxvf elasticsearch-7.17.3-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/

目录结构:

  • bin:主要存放的是elasticsearch相关的脚本文件
  • config:存放的是elasticsearch的配置文件
  • jdk:elasticsearch自带的jdk
  • logs:elasticsearch存放日志
  • modules:elasticsearch的功能模块
  • plugins:elasticsearch的插件,我们安装的插件存放在此目录

2、测试是否可以启动elasticsearch

cd /usr/local/elasticsearch-7.17.3/bin/
#启动
./elasticsearch

如果你目前使用的是root账户,那么启动会报下面的错误。

image

这是因为es不允许使用root启动,所以需要创建一个非root用户,以非root用户来启动es。创建elasticsearch 用户,或者使用其他非root用户,注意文件权限。如果你是非root用户则可以跳过这一步。

#创建elasticsearch用户组
groupadd elasticsearch

#创建新用户elasticsearch ,设置用户组为elasticsearch ,密码123456
useradd elasticsearch -g elasticsearch -p 123456

#授权,更改/elasticsearch-7.17.3文件夹所属用户及用户组为elasticsearch:elasticsearch
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-7.17.3/

#切换用户elasticsearch 
su elasticsearch 

再次启动es:如果已经启动起来我们另外开启一个窗口测试是否启动成功。

curl 'http://localhost:9200/?pretty'

image

可以发现es启动成功了,但是此时浏览器还是服务不到的,需要通过配置文件来开放远程访问。


ES的参数配置(重点)

在这里我们需要对elasticsearch进行相关的配置,编辑config目录下的elasticsearch.yml文件:

#进入目录
cd /usr/local/elasticsearch-7.17.3/config/
#编辑elasticsearch.yml文件
vi elasticsearch.yml

重点关注以下7个配置项:

# 集群名称
cluster.name: my-application-es1
# 节点名称
node.name:node-1
# 数据目录
path.data:/usr/local/elasticsearch-7.17.3/data
# log目录
path.logs:/usr/local/elasticsearch-7.17.3/logs
# 修改 network.host 为 0.0.0.0,表示对外开放,如对特定ip开放则改为指定ip
network.host: 0.0.0.0
# 配置端口,默认为9200,可更改端口不为9200
http.port: 9200
# 初始主节点
cluster.initial_master_nodes: ["node-1"]

# 下面的两个配置在安装elasticsearch-head的时候会用到
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"

调整JVM内存大小,es默认分配4G内存,当然你也可以不调整

vi elasticsearch-7.17.3/config/jvm.options

加入下面的配置(根据自己机器情况修改):

-Xms512m
-Xmx512m

3、关闭与启动es

启动es命令:

cd /usr/local/elasticsearch-7.17.3/bin/
#启动命令
./elasticsearch

#后台启动命令
./elasticsearch -d

#设置开机自启动
systemctl enable elasticsearch.service

关闭es进程:

ps -ef | grep elastic
kill -9 11597

解决内存权限太小错误

如果在启动时又报错了,并且是下面这个错误:

[2022-05-08T14:58:01,836][ERROR][o.e.b.Bootstrap          ] [node-1] node validation exception
[1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2022-05-08T14:58:01,840][INFO ][o.e.n.Node               ] [node-1] stopping ...
[2022-05-08T14:58:01,870][INFO ][o.e.n.Node               ] [node-1] stopped
[2022-05-08T14:58:01,870][INFO ][o.e.n.Node               ] [node-1] closing ...
[2022-05-08T14:58:01,920][INFO ][o.e.n.Node               ] [node-1] closed

这是因为elasticsearch用户拥有的内存权限太小,至少需要262144。解决方案,切换到root用户下,在/etc/sysctl.conf文件最后添加一行

vi /etc/sysctl.conf

添加的内容:

vm.max_map_count=262144

执行命令生效:

/sbin/sysctl -p 

上面的操作完成后执行步骤3重启ES。


4、开放端口

参考地址:Linux(CentOS7)开放指定端口与开关防火墙 - 唐浩荣 - 博客园 (cnblogs.com)

9200 对外服务的http 端口

9300 节点间通信的tcp端口


5、成功启动后的效果

image

4、安装Kibana

Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图,线状图,饼图等。而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习Elasticsearch的语法。

特别注意:Kibana的版本安装的es须保持一致。

下载Kibana的安装包:

最新版本:https://www.elastic.co/cn/downloads/elasticsearch

过去版本:https://www.elastic.co/cn/downloads/past-releases#kibana

步骤1:下载

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.3-linux-x86_64.tar.gz

步骤2:解压

tar -zxvf kibana-7.17.3-linux-x86_64.tar.gz -C /usr/local

步骤3:修改配置文件

cd /usr/local/
vi kibana-7.17.3/config/kibana.yml

配置参数如下:

#配置端口号
server.port: 5601
#配置网络访问地址
server.host: "0.0.0.0"
server.publicBaseUrl: "http://116.205.230.143:5601"
#配置es链接地址(es集群,可以用逗号分隔)
elasticsearch.hosts: ["http://116.205.230.143:9200"]
#配置中文语言界面
i18n.locale: "zh-CN"

步骤4:分配普通用户权限

注意:必须使用普通用户启动服务,Kibana如果用root用户启动也会报错跟ElasticSearch一样,需要换成非root用户启动。这里把权限加上即可

chown -R elasticsearch:elasticsearch /usr/local/kibana-7.17.3-linux-x86_64/

步骤5:启动kibana

#切换用户
su elasticsearch
#进入bin目录
cd /usr/local/kibana-7.17.3-linux-x86_64/bin/

#直接启动
./kibana
#后台启动
nohup ./kibana &
nohup ./kibana > kibana.log 2>&1 &

#允许root用户去启动,没试过这个命令不知道行不行
./kibana --allow-root

注意:防火墙开启5601端口

步骤6:kibana关闭

在使用ps命令ps -ef|grep kibana 和 ps -ef|grep 5601 查看进程的时候都找不到。所以我们可以尝试 使用下面的命令找到kibana进程:

fuser -n tcp 5601
kill -9 端口
# 或者下面的命令
ps -ef | grep node
netstat -anltp | grep 5601
netstat -tunlp | grep 5601

启动后的效果:

image
image
image

警告1:

#! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html to enable security.

意思是未启用 Elasticsearch 内置的安全功能,即没有开启身份验证的功能。 如果没有身份验证,任何人都可以访问您的集群。下面会详细介绍开启 Elasticsearch 自带的身份验证功能,如果你不想看到报错警告则在ES的elasticsearch.yml加入这个参数:xpack.security.enabled: false

警告2:

#! this request accesses system indices: [.apm-agent-configuration, .apm-custom-link, .kibana_7.17.3_001, .kibana_task_manager_7.17.3_001, .tasks], but in a future major version, direct access to system indices will be prevented by default

说我们访问了系统索引,所以我们尽量别访问系统的索引,从上面响应的时间来看,响应的36699ms,太久了。在后面ES的主要版本中,会默认禁止直接访问系统索引。只要我们不访问系统索引应该就不会出现这个警告。


image

5、安装Elasticsearch-head

ES官方没有给我们提供可视化化管理工具,仅仅是提供了后台的服务,所以有人开发出了Elasticsearch-head可视化工具。Elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等操作。

Elasticsearch-head插件的安装在 Linux 和 Windows 没什么区别,前提是:必须安装好node.js环境。测试命令:node -v

node.js的安装:NodeJS的安装与配置 - 唐浩荣 - 博客园 (cnblogs.com)

ElasticSearch-head插件下载网址:https://github.com/mobz/elasticsearch-head

1、下载ElasticSearch-head插件至本地

git clone https://github.com/mobz/elasticsearch-head.git

2、下载完成后进入es-head文件夹下,输入打开cmd窗口

image

3、然后执行命令:npm install (此处是为安装进行安装pathomjs)如果安装速度慢,设置成淘宝的镜像重新安装 npm config set registry https://registry.npm.taobao.org

4、由于es-head是前后端分离的项目,所以此时已经跨域了,我们还需要修改 Elasticsearch 配置文件 config/elasticsearch.yml,在配置文件最后增加两个配置项,这样 elasticsearch-head 插件才可以访问 Elasticsearch 。

# 注意,设置参数的时候:后面要有空格!
http.cors.enabled: true
http.cors.allow-origin: "*"

修改完配置后,重启 Elasticsearch 服务

5、完成之后执行命令 npm run start 或 grunt server 即可启动head插件

image

6、访问 Head 插件界面,可以在浏览器的地址栏输入:http://localhost:9100/

image


通过Docker方式安装:

#拉取镜像
docker pull mobz/elasticsearch-head:5
#创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
#启动容器
docker start elasticsearch-head

在Linux上安装,自己百度一下就好了。

6、启用Elasticsearch X-Pack安全功能

由于我的ES是部署在云服务器上的,所以9200 端口直接暴露在了公网下,在没有任何防护的情况下所有人都可以访问到,甚至可能被恶意攻击并且删库,所以需要开启权限功能,由此决定使用 xpack安全组件来保护 ElasticSearch。

友情提醒:如果是自己学习使用就不推荐开启这个功能到,一顿操作下来没啥用,反正我开启后又关闭了,注意:必须手动显示的关闭,需要在ES的config/elasticsearch.yml加入这个参数:xpack.security.enabled: false

6.1、X-Pack介绍

X-Pack 已经作为 Elastic 公司单独的产品线,提供安全性,警报,监视,报告,机器学习和许多其他功能,有着非常强大的功能。从6.3版本和 7.1 开始, X-Pack 默认包含在 Elasticsearch、Kibana 和 Logstash 中,所以无需再次安装,并且基础级安全永久免费,比如 用户登录权限校验等基础功能,当然也有付费的功能,但是我们用免费的就足够了。

xpack内置的用户:

用户 角色
elastic 超级管理员
apm_system APM服务器在Elasticsearch中存储监视信息时使用
kibana 用于负责Kibana连接Elasticsearch
logstash_system Logstash将监控信息存储在Elasticsearch中时使用
beats_system Beats在Elasticsearch中存储监视信息时使用
remote_monitoring_user Metricbeat用户在Elasticsearch中收集和存储监视信息时使用

xpack默认内置了这些用户,在设置xpack的时候,需要为这些用户设置一个默认值。

6.2、ElasticSearch 启用 xpack

开启xpack功能

开启xpack功能需要用到:xpack.security.enabled 配置参数,其作用是控制安全配置是否开启,在默认情况下此参数被设置为false。要想开启安全策略需要在所有ES集群节点中设置此参数:

xpack.security.enabled = true

但是 xpack.security.enabled 仅仅开启安全设置,在启动服务的时候会抛出错误。

bootstrap check failure [1] of [1]: Transport SSL must be enabled if security is enabled on a [basic] license. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security by setting [xpack.security.enabled] to [false]

这是因为传输网络层用于集群中节点之间的内部通信。启用安全功能后,必须使用TLS来确保节点之间的通信已加密。为节点间通讯配置安全策略需要两个步骤:

  1. 生成节点间安全策略使用的证书
  2. 修改各个节点的安全配置

创建证书颁发机构以及为节点生成证书

在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。这样,将节点添加到群集后,它们只需要使用由同一CA签名的证书,即可自动允许该节点加入群集。另外证书中可以包含与节点的IP地址和DNS名称相对应的主题备用名称,以便可以执行主机名验证。

下面为Elasticsearch集群创建发证机构,使用下面的步骤为集群创建一个CA授权证书,

./elasticsearch-certutil ca

这里为了方便一路回车,全部用默认的即可。

image

  • 位置{1}:此位置设置文档输出地址和名称。默认路径为es安装的命令下,我这里就是/usr/local/elasticsearch-7.17.3,默认名称为elastic-stack-ca.p12。这个文件是PKCS#12密钥存储库,它包含您的CA的公共证书和用于为每个节点签署证书的私有密钥。
  • 位置{2}:此位置设置证书的密码。计划将来向集群添加更多的节点,请记住其密码。

查看授权是否已生成:

image


下面为Elasticsearch集群中的节点生成证书

使用下面的名称生成集群使用的生成节点证书。elastic-stack-ca.p12为上一步生成CA证书。

./elasticsearch-certutil cert --ca elastic-stack-ca.p12

整个创建过程是这样的,类似之前的内容,在输入命令后控制台会输出此命令的信息描述,然后你需要先执行{①}的操作然后执行{②}的操作,最后执行{③}的操作

image

  • 位置{1}: 此位置需要输入elastic-stack-ca.p12 CA授权证书的密码。
  • 位置{2}: 此位置为需要输出证书位置。
  • 位置{3}: 此位置为证书的密码。使用空密码可以直接回车结束。

默认情况下,elasticsearch-certutil生成的证书中没有主机名信息。这意味着可以为集群中的任意节点使用此证书,但是必须关闭主机名验证。


修改每个节点的elasticsearch.yml配置

将elastic-stack-ca.p12文件(只需要此文件)复制到每个节点上的Elasticsearch配置目录中的一个目录中。比如我是放到了每个节点的config/目录下。

cp /usr/local/elasticsearch-7.17.3/elastic-certificates.p12 /usr/local/elasticsearch-7.17.3/config/

然后修改每个节点的elasticsearch.yml配置。添加下面的参数:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
#http.cors.allow-headers: Authorization  #这个配置改为下面的
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type

image

注:xpack.security.transport.ssl.verification_mode:如果在elasticsearch-certutil cert命令中使用—dns或—ip选项,并且希望启用严格的主机名检查,此参数需要设置为full。而之前的例子证书中并没有输入ip以及dns等信息,所以我们没有使用严格的主机检查。

注:http.cors.allow-headers:配置该参数的目的是让而es-head能够连接到es服务,因为现在es开启了xpack功能,配置完成后我们在使用es-head的时候在地址栏输入的格式为:http://xxx:9100/?auth_user=elastic&auth_password=JCK3BPr2g25G ,这样就可以顺利连接上es服务了。


配置内置用户的密码

上面的操作完成后如果我们重启ES后,此时需要我们提供登录名和密码了,如果elastic用户没有密码,则使用默认的引导密码。引导密码是一个临时密码,它允许您运行设置所有内置用户密码的工具。我们需要为所有的内置用户设置密码。设置密码命令如下:

./elasticsearch-setup-passwords interactive

执行此命令的前提是ES服务已经启动了

image

上面过程中我们需要设置多个默认用户的信息,每个内置用户负责不同的内容,每个用户的作用在前面已经介绍过了。

为elastic用户设置密码后,引导密码将不再有效。并且再次执行 elasticsearch-setup-passwords 命令会抛出异常

image

当我们再次登录的时候就需要输入密码了。

image

输入上面设置的密码就可以进入了。

image

6.3、Kibana 配置 xpack

截止到目前Elasticsearch的部分已经修改完毕,下面修改kibana配置以便于让其和Elasticsearch完成连接。

修改kibana的配置文件config/kibana.yml:

cd /usr/local/kibana-7.17.3-linux-x86_64/
vi config/kibana.yml

在配置文件中添加下面内容:

elasticsearch.username: "kibana"
elasticsearch.password: "之前设置的密码"

重启Kibana

注:kibana 使用ps -ef|grep kibana是查不到进程的,因为其实运行在node里面。但是我们也不能关闭所有node里面的软件,所以我们需要查询kibana监听端口5601的进程。使用下面命令关闭kibana

fuser -n tcp 5601
kill -9 端口
# 或者下面的命令
ps -ef | grep node
netstat -anltp | grep 5601
netstat -tunlp | grep 5601

然后重启Kibana

#切换用户
su elasticsearch
#进入bin目录
cd /usr/local/kibana-7.17.3-linux-x86_64/bin/

#直接启动
./kibana
#后台启动
nohup ./kibana &
nohup ./kibana > kibana.log 2>&1 &

此时访问kibana(http://localhost:5601)会提示需要输入账号密码。注意此时需要输入的是elastic的用户密码。

image


参考资料:

posted @ 2022-06-12 21:42  唐浩荣  阅读(2745)  评论(1编辑  收藏  举报