linux下安装Elasticsearch
摘要
-
本文介绍如何在linux下安装Elasticsearch
-
Elasticsearch版本8.17.3
下载
-
下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch
-
选择对应的版本:这里选择当前的最新版
Elasticsearch 8.17.3
,之后选择对应的操作系统LINUX X86_64
1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.3-linux-x86_64.tar.gz |
-
下载完成后解压到
/usr/local/elasticsearch
目录下,解压命令如下:
1 | mkdir /usr/local/elasticsearch |
创建启动用户
-
elasticsearch和kibana都不能用root用户启动
-
创建用户
elastic
,并设置密码
1 | useradd elastic |
-
修改elasticsearch安装目录的用户权限
1 | chown -R elastic:elastic /usr/local/elasticsearch |
配置环境变量
-
进入elastic用户主目录,/home/elastic目录下,设置用户级别的环境变量
1 | # 切换到elastic用户 |
-
vim .bash_profile
1 | # Elasticsearch安装目录,它用于定位Elasticsearch的配置文件、插件和其他相关资源。 |
-
执行以下命令使配置生效
1 | source .bash_profile |
配置JVM参数(可选)
-
进入
/usr/local/elasticsearch/elasticsearch-8.17.3/config
目录,修改jvm.options
文件,调整jvm堆内存大小
1 | -Xms4g # 设置最小堆内存,默认4g,不能小于1g |
创建数据和日志存储目录
1 | # 切换到elastic用户 |
配置启动文件
-
进入
/usr/local/elasticsearch/elasticsearch-8.17.3/config
目录,修改elasticsearch.yml
文件
1 | # 集群名称 |
启动ElasticSearch服务
-
进入
/usr/local/elasticsearch/elasticsearch-8.17.3
目录,执行以下命令启动服务
1 | ./bin/elasticsearch |
ES启动前的引导检查
-
ES启动时,默认会进行引导检查,所谓引导检查就是在服务启动之前对一些重要的配置项进行检查,检查其配置值是否是合理的。引导检查包括对JVM大小、内存锁、虚拟内存、最大线程数、集群发现相关配置等相关的检查,如果某一项或者几项的配置不合理,ES会拒绝启动服务。
-
如果启动服务时,报以下错误,则需要解决引导检查中的问题
-
1.max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144];
- 原因:最大虚拟内存太小,调大系统的虚拟内存
- 解决办法:
1
2
3
4
5
6# root用户下运行
vim /etc/sysctl.conf
# 追加以下内容:
vm.max_map_count=262144
# 保存退出之后执行如下命令:
sysctl -p -
2.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
- 原因:文件描述符太小,调大系统的文件描述符
- 解决办法:
1
2
3
4
5
6
7# root用户下运行
vim /etc/security/limits.conf
# 末尾添加如下配置:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096 -
如果只是单节点的开发环境,则可以关闭引导检查,生成环境不建议这样做,因为关闭引导检查后,ES服务将无法保证集群的高可用性。
1 | # 进入elasticsearch安装目录 |
服务正常启动后仍然不能正常访问
-
访问服务
1 | curl http://127.0.0.1:9200 |
-
查看日志
/usr/local/elasticsearch/elasticsearch-8.17.3/logs/test-elk.log
,发现报如下警告:
1 | [WARN ][o.e.h.n.Netty4HttpServerTransport] [node-1] received plaintext http traffic on an https channel, closing connection Netty4HttpChannel{localAddress=/127.0.0.1:9200, remoteAddress=/127.0.0.1:38426} |
-
原因是ES在启动服务时默认开启了
X-Pack 安全功能
,查看配置文件/usr/local/elasticsearch/elasticsearch-8.17.3/config/elasticsearch.yml
,发现配置项xpack.security.xxx
相关配置项被自动添加了,如下:
1 | #----------------------- BEGIN SECURITY AUTO CONFIGURATION ----------------------- |
-
解决方法:
- 1.不想开启安全认证,将
xpack.security.enabled
设置为 false,这样即便下面的配置都设置为true也不会有效。 - 2.不想https访问,将
xpack.security.http.ssl.enabled
设置为 false,但这样会导致无法通过认证Token添加其它节点或Kibana。 - 3.不想节点间通信加密,将
xpack.security.transport.ssl.enabled
设置为 false
- 1.不想开启安全认证,将
-
为了办证ES的安全,我这里就开启安全认证,只通过https访问ES,配置后重启ES服务,登录用户为
elastic
[其角色为超级用户],密码可以通过如下命令重置:
1 | # 重置密码,密码自动生成 |
-
curl 访问ES服务
1 | # -k 忽略证书校验 |
-
实际上在ES第一次正常启动时其日志中就打印了自动配置的安全相关的信息提示
1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
ES浏览器插件
-
Elasticvue : chrome/edge 插件,用于在浏览器中查看ES集群信息,功能非常强大
ES自启动脚本
1 | # 创建服务文件 |
通过ApiKey访问ES
-
关于ApiKey的详细介绍,可以参考官方文档
-
创建ApiKey
1 | curl -k 'https://127.0.0.1:9200/_security/api_key?pretty' \ |
-
使用ApiKey访问ES
1 | # 这里的ApiKey,就是上面输出的encoded |
-
查看ApiKey信息,参考官方文档
1 | curl -u elastic:123456 -k 'https://127.0.0.1:9200/_security/api_key?name=elastic_api_key&pretty' |
-
更新ApiKey,参考官方文档
1 | curl -u elastic:123456 -X PUT -k 'https://127.0.0.1:9200/_security/api_key/{ApiKeyId}?pretty' \ |
-
置ApiKey无效,参考官方文档,官方没有提供删除ApiKey的接口,只有置无效的接口
1 | curl -u elastic:123456 -X DELETE -k 'https://127.0.0.1:9200/_security/api_key?pretty' \ |
-
使用ApiKey的优缺点
- 优点
1
2
3
4
5
6
7
8
9
10
11
12
13安全性:
细粒度控制: API Key 可以与特定的角色描述符关联,允许非常细化的权限控制。这有助于遵循最小权限原则,只授予必要的访问权限。
时间限制: 可以为 API Key 设置过期时间,确保密钥不会永远有效,减少长期泄露的风险。
可撤销性: 如果怀疑某个 API Key 被泄露或不再需要,可以随时撤销该密钥,提高安全性。
方便性:
易于生成和管理: 创建和管理 API Key 的过程通常很简单,可以通过 REST API 或 Kibana 界面进行。
无需用户交互: 一旦生成,API Key 可以直接用于自动化脚本或应用程序,无需用户手动登录或提供凭据。
审计和监控:
跟踪使用情况: 通过日志记录和审计功能,可以跟踪哪个 API Key 进行了哪些操作,便于安全审计和问题排查。
活动监控: 可以监控 API Key 的活动,及时发现异常行为,并采取相应的措施。
灵活性:
多种用途: API Key 可以用于各种用途,如应用程序集成、数据导入导出、监控工具等。
多环境支持: 可以为不同的环境(开发、测试、生产)生成独立的 API Key,确保各环境之间的隔离。- 缺点
1
2
3
4
5
6
7
8
9
10
11安全性风险:
密钥存储: API Key 需要安全地存储和传输,如果密钥被泄露,攻击者可以利用它进行未授权的操作。
静态凭证: 与动态的身份验证机制(如 OAuth 令牌)相比,API Key 是静态的,一旦泄露可能会导致长期的安全风险。
管理复杂性:
密钥管理: 随着时间和使用规模的增长,管理和维护大量 API Key 可能会变得复杂。需要定期更新和撤销老旧的密钥。
角色分配: 细粒度的权限控制虽然提供了安全性,但也增加了配置和管理的复杂性。
缺乏用户上下文:
匿名性: API Key 通常没有用户上下文信息,不像基于用户的认证机制(如 Basic Auth 或 OAuth),这可能不利于某些依赖用户身份的功能。
依赖客户端配置:
易错性: 如果客户端配置不当,如错误地处理或暴露 API Key,可能会导致安全漏洞。
更新挑战: 更新 API Key 后,所有使用该密钥的客户端都需要同步更新,这在大规模环境中可能是一个挑战。 -
何时使用 API Key
- 当您需要为自动化脚本、第三方服务或应用程序提供访问权限时。
- 当您希望实现细粒度的权限控制并能够轻松管理密钥的生命周期时。
- 当不需要用户上下文或复杂的用户会话管理时。
-
示例
1 | # 创建ApiKey |