简明 Elasticsearch 8x 安装教程
Elasticsearch 8.x 默认开启了安全功能,在远程服务器配置多实例时很容易安装失败。官方的教程只适合本地单实例启动,对于那些想探索 Elasticsearch 高级特性的人需要折腾好一阵,不知折戟沉沙了多少人。
本文主要介绍多实例 Elasticsearch 集群搭建,最后安装 Kibana 实现查询管理。
注意本教程的软件版本,后期的版本可能不适用。
- Elasticsearch & Kibana:8.15.3
- OS:CentOS 7
下载软件
下载,这里我们下载到 /data 目录。
1cd /data
2
3# 下载 Elasticsearch
4curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.3-linux-x86_64.tar.gz
5
6
7# 下载 Kibana
8curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.15.3-linux-x86_64.tar.gz
解压
1tar -xvf elasticsearch-8.15.3-linux-x86_64.tar.gz
2tar -xvf kibana-8.15.3-linux-x86_64.tar.gz
此时使用 ls 命令查看当前目录,可以看到两个文件夹:elasticsearch-8.15.3、kibana-8.15.3
配置 Elasticsearch
步骤一,修改 OS 配置
修改套接字数量限制(非必须)
1vim /etc/profile
2
3# 在 prifile 文件中增加
4ulimit -n 65535
5
6# 更新 profile 配置
7source /etc/profile
修改 mmap 映射文件数限制
1vim /etc/sysctl.conf
2
3# 修改或增加配置
4vm.max_map_count=262144
5
6# 更新配置
7sysctl -p
添加 es 用户。Elasticsearch 默认阻止 root 用户启动(Kibana 同样阻止),因此我们添加一个 es 用户用来启动两个服务。
1useradd -m es -s /usr/bin/bash
步骤二,修改 Elasticsearch 配置
我们的目标是配置一个单机 6 节点的 Elasticsearch 集群。
集群规划
| 节点(node) | 端口 | 软件包路径 | jvm heap size |
|---|---|---|---|
| node-1 | 9201 | /data/node1 | 1G |
| node-2 | 9202 | /data/node2 | 1G |
| node-3 | 9203 | /data/node3 | 1G |
| node-4 | 9204 | /data/node4 | 1G |
| node-5 | 9205 | /data/node5 | 1G |
| node-6 | 9206 | /data/node6 | 1G |
以上集群至少需要 6G 内存才能启动。如果你的服务器内存小,可以减少节点数:4G 内存推荐两个节点,8G 内存推荐 4 个节点。
我们整体的配置步骤是:
- 修改节点 1(node1)的配置,然后把
node1安装包 copy 5 份。Elasticsearch 有两个需要配置的文件:elasticsearch.yml、jvm.options - 修改 node2 - node6 的配置文件,主要修改
elasticsearch.yml - 先启动 node1,然后依次启动 node2 - node6
使用 ls 命令查看当前目录,可以看到两个文件夹:elasticsearch-8.15.3、kibana-8.15.3
配置 node1
1cd /data
2
3# 重命名 elasticsearch-8.15.3 -> node1
4mv elasticsearch-8.15.3 node1
修改 elasticsearch.yml 配置,只需要修改 cluster.name、node.name、network.host、http.port、cluster.initial_master_nodes。
1# 集群名称
2cluster.name: es8-cluster
3# 节点名称
4node.name: node-1
5# 地址,注意不能是 localhost,为 localhost 时限制远程访问
6network.host: 0.0.0.0
7http.port: 9201
8# NOTE:改配置仅需 node-1 配置
9cluster.initial_master_nodes: ["node-1"]
修改 jvm.options 文件,设置 JVM 堆大小,此处设置 1G。
-Xms1g
-Xmx1g
配置 node2 - node6
将 node1 copy 5 份
1cp -r node1 node2
2cp -r node1 node3
3cp -r node1 node4
4cp -r node1 node5
5cp -r node1 node6
修改 node2 - node6 的 elasticsearch.yml 配置,此处只需要修改 node.name、http.port 属性,并且注释掉配置 cluster.initial_master_nodes。
以 node2 为例,其他的参考 node2 配置即可。
1node.name: node-2
2http.port: 9202
3# NOTE:这里需要注释掉
4# cluster.initial_master_nodes: ["node-1"]
修改 node1 - node6 的目录权限
1chown -R es.es node1
2chown -R es.es node2
3chown -R es.es node3
4chown -R es.es node4
5chown -R es.es node5
6chown -R es.es node6
启动 node1
1# 重要,切换用户 es
2su es
3cd /data
4./node1/bin/elasticsearch
此时 node1 启动了,并且在控制台输出了许多安全信息,将下面这些信息记录在文档里,便于后面使用(重要)。
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.
ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
GgaqSjYZlRl4IgIqiV7C
ℹ️ HTTP CA certificate SHA-256 fingerprint:
119077cb789e29a33b74d56f9a50fc97a62c1a6a81054f760ccb627661b22356
ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTWUdVNkpJQkJ6YzdJOUxNN2t0ZDppQWNKVmY1d1JqNk5fTHRoSUtjTkZRIn0=
ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTNEdVNkpJQkJ6YzdJOUxNN2t0eTpzbU4wQl8yeFRTMlVNeUhzZGZod3ZnIn0=
Io you're running in Docker, copy the enrollment token and run:
`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.15.3`
集群登录密码和注册 token:
-
其中
GgaqSjYZlRl4IgIqiV7C为密码,登录 Elasticsearch 集群时使用。 -
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTWUdVNkpJQkJ6YzdJOUxNN2t0ZDppQWNKVmY1d1JqNk5fTHRoSUtjTkZRIn0=为注册 token(enrollment token),其他节点加入集群、Kibana 关联集群使用。
测试 node1,由于启动了安全功能,因此登录使用 HTTPS 协议。在本地浏览器地址栏输入 https://SERVER_IP:9201,输入后需要验证,默认账号为 elastic,密码为 GgaqSjYZlRl4IgIqiV7C。
登录之后显示如下,就说明 node1 节点启动成功了。
1{
2 "name": "node-1",
3 "cluster_name": "es8-cluster",
4 "cluster_uuid": "Y8YB6bw6Q2ulHAglaGxVsA",
5 "version": {
6 "number": "8.15.3",
7 "build_flavor": "default",
8 "build_type": "tar",
9 "build_hash": "f97532e680b555c3a05e73a74c28afb666923018",
10 "build_date": "2024-10-09T22:08:00.328917561Z",
11 "build_snapshot": false,
12 "lucene_version": "9.11.1",
13 "minimum_wire_compatibility_version": "7.17.0",
14 "minimum_index_compatibility_version": "7.0.0"
15 },
16 "tagline": "You Know, for Search"
17}
启动 node2 - node6
前置
1# 重要,切换用户 es
2su es
3cd /data
启动命令
1node<ID>/bin/elasticsearch --enrollment-token eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTWUdVNkpJQkJ6YzdJOUxNN2t0ZDppQWNKVmY1d1JqNk5fTHRoSUtjTkZRIn0=
如果 token 失效可以再生成一个,命令
node1/bin/elasticsearch-create-enrollment-token -s node
node2 - node6 启动完毕后,在浏览器输入 https://SERVER_IP:9201/_cat/nodes,各个节点显示如下表示启动成功(节点组成集群)。
172.28.202.18 48 98 2 0.68 1.06 0.86 cdfhilmrstw - node-3
172.28.202.18 66 98 2 0.68 1.06 0.86 cdfhilmrstw - node-6
172.28.202.18 57 98 2 0.68 1.06 0.86 cdfhilmrstw - node-5
172.28.202.18 18 98 2 0.68 1.06 0.86 cdfhilmrstw - node-4
172.28.202.18 27 98 2 0.68 1.06 0.86 cdfhilmrstw * node-1
172.28.202.18 67 98 2 0.68 1.06 0.86 cdfhilmrstw - node-2
这一步常见的失败原因
- 使用之前的命令启动无效(
node<ID>/bin/elasticsearch --enrollment-token TOKEN),--enrollment-token只在第一次启动时添加! - enrollment-token 无效,再生成一个即可
- 配置原因,忘了删除
cluster.initial_master_nodes: ["node-1"]配置,此配置只在第一个节点配置
配置 Kibana
(不使用 Kibana 可跳过)
修改 Kibana 配置
1cd /data
2# 修改目录
3mv kibana-8.15.3 kibana
4chown -R es.es kibana
5
6vim kibana/config/kibana.yml
7
8# 只需要修改一处
9server.host: "0.0.0.0"
启动 kibana
为 Kibana 申请注册 token
1node1/bin/elasticsearch-create-enrollment-token -s kibana --url https://SERVER_IP:9201
2
3# 输出
4eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTWUdVNkpJQkJ6YzdJOUxNN2t0ZDppQWNKVmY1d1JqNk5fTHRoSUtjTkZRIn0=
启动 Kibana
1./kibana/bin/kibana serve
访问 Kibana
在浏览器地址栏输入 http://SERVER_IP:5601,接下来进入 Kibana 的认证界面。这里需要输入 token 和 Kibana 控制台输出的登录码(六位数字),最后输入 Elasticsearch 集群的用户名和密码登录,默认用户名为 elastic。如果忘记了集群密码,可以使用 elasticsearch-reset-password -u elastic 命令重新设置密码。
总结
至此我们已经安装完了 Elasticsearch 集群和 Kibana,你可以开始探索新特性了,祝你使用愉快。