ElasticSearch安装
一、ES对应JDK版本
我们在安装ElasticSearch的时候一定要注意ElasticSearch当前版本所支持的JDK版本,免得白安装了。
ElasticSearch与JDK对应的版本查看网址:https://www.elastic.co/cn/support/matrix#matrix_jvm
从上面ES对应的JDK版本可以发现,Elasticsearch 8之后不再支持Oracle/OpenJDK**/AdoptOpenJDK1.8.0 了,Elasticsearch 8最低的JDK版本都要JDK17才行,所以这里也不可能安装Elasticsearch 8的版本,为了方便还是使用支持JDK8的Elasticsearch 版本。
二、安装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
三、安装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账户,那么启动会报下面的错误。
这是因为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'
可以发现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、成功启动后的效果
四、安装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
启动后的效果:
警告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的主要版本中,会默认禁止直接访问系统索引。只要我们不访问系统索引应该就不会出现这个警告。
五、安装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插件至本地
2、下载完成后进入es-head文件夹下,输入打开cmd窗口
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插件
6、访问 Head 插件界面,可以在浏览器的地址栏输入:http://localhost:9100/
通过Docker方式安装:
#拉取镜像
docker pull mobz/elasticsearch-head:5
#创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
#启动容器
docker start elasticsearch-head
在Linux上安装,自己百度一下就好了。
六、启用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来确保节点之间的通信已加密。为节点间通讯配置安全策略需要两个步骤:
- 生成节点间安全策略使用的证书
- 修改各个节点的安全配置
创建证书颁发机构以及为节点生成证书
在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。这样,将节点添加到群集后,它们只需要使用由同一CA签名的证书,即可自动允许该节点加入群集。另外证书中可以包含与节点的IP地址和DNS名称相对应的主题备用名称,以便可以执行主机名验证。
下面为Elasticsearch集群创建发证机构,使用下面的步骤为集群创建一个CA授权证书,
./elasticsearch-certutil ca
这里为了方便一路回车,全部用默认的即可。
- 位置{1}:此位置设置文档输出地址和名称。默认路径为es安装的命令下,我这里就是/usr/local/elasticsearch-7.17.3,默认名称为elastic-stack-ca.p12。这个文件是PKCS#12密钥存储库,它包含您的CA的公共证书和用于为每个节点签署证书的私有密钥。
- 位置{2}:此位置设置证书的密码。计划将来向集群添加更多的节点,请记住其密码。
查看授权是否已生成:
下面为Elasticsearch集群中的节点生成证书
使用下面的名称生成集群使用的生成节点证书。elastic-stack-ca.p12为上一步生成CA证书。
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
整个创建过程是这样的,类似之前的内容,在输入命令后控制台会输出此命令的信息描述,然后你需要先执行{①}的操作然后执行{②}的操作,最后执行{③}的操作
- 位置{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
注: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服务已经启动了
上面过程中我们需要设置多个默认用户的信息,每个内置用户负责不同的内容,每个用户的作用在前面已经介绍过了。
为elastic用户设置密码后,引导密码将不再有效。并且再次执行 elasticsearch-setup-passwords 命令会抛出异常
当我们再次登录的时候就需要输入密码了。
输入上面设置的密码就可以进入了。
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的用户密码。