Liuqichun's Blog

简明 Elasticsearch 8x 安装教程

Elasticsearch 8.x 默认开启了安全功能,在远程服务器配置多实例时很容易安装失败。官方的教程只适合本地单实例启动,对于那些想探索 Elasticsearch 高级特性的人需要折腾好一阵,不知折戟沉沙了多少人。

本文主要介绍多实例 Elasticsearch 集群搭建,最后安装 Kibana 实现查询管理。

注意本教程的软件版本,后期的版本可能不适用。

下载软件

下载,这里我们下载到 /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. 修改节点 1(node1)的配置,然后把 node1 安装包 copy 5 份。Elasticsearch 有两个需要配置的文件:elasticsearch.yml、jvm.options
  2. 修改 node2 - node6 的配置文件,主要修改 elasticsearch.yml
  3. 先启动 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:

测试 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

这一步常见的失败原因

  1. 使用之前的命令启动无效(node<ID>/bin/elasticsearch --enrollment-token TOKEN),--enrollment-token 只在第一次启动时添加!
  2. enrollment-token 无效,再生成一个即可
  3. 配置原因,忘了删除 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,你可以开始探索新特性了,祝你使用愉快。

<< Previous Post

|

Next Post >>

#Elasticsearch