简明 Elasticsearch 8x 安装教程

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

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

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

  • Elasticsearch & Kibana:8.15.3
  • OS:CentOS 7

下载软件

下载,这里我们下载到 /data 目录。

cd /data

# 下载 Elasticsearch
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.3-linux-x86_64.tar.gz


# 下载 Kibana
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.15.3-linux-x86_64.tar.gz

解压

tar -xvf elasticsearch-8.15.3-linux-x86_64.tar.gz
tar -xvf kibana-8.15.3-linux-x86_64.tar.gz

此时使用 ls 命令查看当前目录可以看到两个文件夹:elasticsearch-8.15.3kibana-8.15.3

配置 Elasticsearch

步骤一,修改 OS 配置

修改套接字数量限制(非必须)

vim /etc/profile

# 在 prifile 文件中增加
ulimit -n 65535

# 更新 profile 配置
source /etc/profile

修改 mmap 映射文件数限制

vim /etc/sysctl.conf

# 修改或增加配置
vm.max_map_count=262144

# 更新配置
sysctl -p

添加 es 用户。Elasticsearch 默认阻止 root 用户启动(Kibana 同意阻止),因此我们添加一个 es 用户用来启动两个服务。

useradd -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.ymljvm.options
  2. 修改 node2 - node6 的配置文件,主要修改 elasticsearch.yml
  3. 先启动 node1,然后依次启动 node2 - node6

使用 ls 命令查看当前目录可以看到两个文件夹:elasticsearch-8.15.3kibana-8.15.3

配置 node1
cd /data

# 重命名 elasticsearch-8.15.3 -> node1
mv elasticsearch-8.15.3 node1

修改 elasticsearch.yml 配置,只需要修改 cluster.name、node.name、network.host、http.port、cluster.initial_master_nodes。

# 集群名称
cluster.name: es8-cluster
# 节点名称
node.name: node-1
# 地址,注意不能是 localhost,为 localhost 时限制远程访问
network.host: 0.0.0.0
http.port: 9201
# NOTE:改配置仅需 node-1 配置
cluster.initial_master_nodes: ["node-1"]

修改 jvm.options 文件,设置 JVM 堆大小,此处设置 1G。

-Xms1g
-Xmx1g
配置 node2 - node6

将 node1 copy 5 分

cp -r node1 node2
cp -r node1 node3
cp -r node1 node4
cp -r node1 node5
cp -r node1 node6

修改 node2 - node6 的 elasticsearch.yml 配置,此处只需要修改 node.name、http.port 属性,并且注释掉配置 cluster.initial_master_nodes。

以 node2 为例子,其他的参考 node2 配置即可。

node.name: node-2
http.port: 9202
# NOTE:这里需要注释掉
# cluster.initial_master_nodes: ["node-1"]

修改 node1 - node2 的目录权限

chown -R es.es node1
chown -R es.es node2
chown -R es.es node3
chown -R es.es node4
chown -R es.es node5
chown -R es.es node6
启动 node1
# 重要,切换用户 es
su es
cd /data
./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 节点启动成功了

{
  "name": "node-1",
  "cluster_name": "es8-cluster",
  "cluster_uuid": "Y8YB6bw6Q2ulHAglaGxVsA",
  "version": {
    "number": "8.15.3",
    "build_flavor": "default",
    "build_type": "tar",
    "build_hash": "f97532e680b555c3a05e73a74c28afb666923018",
    "build_date": "2024-10-09T22:08:00.328917561Z",
    "build_snapshot": false,
    "lucene_version": "9.11.1",
    "minimum_wire_compatibility_version": "7.17.0",
    "minimum_index_compatibility_version": "7.0.0"
  },
  "tagline": "You Know, for Search"
}
启动 node2 - node6

前置

# 重要,切换用户 es
su es
cd /data

启动命令

node<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 配置
cd /data
# 修改目录
mv kibana-8.15.3 kibana
chown -R es.es kibana

vim kibana/config/kibana.yml

# 只需要修改一处
server.host: "0.0.0.0"
启动 kibana

为 Kibana 申请注册 token

node1/bin/elasticsearch-create-enrollment-token -s kibana --url https://SERVER_IP:9201

# 输出
eyJ2ZXIiOiI4LjE0LjAiLCJhZHIiOlsiMTcyLjI4LjIwMi4xODo5MjAxIl0sImZnciI6IjExOTA3N2NiNzg5ZTI5YTMzYjc0ZDU2ZjlhNTBmYzk3YTYyYzFhNmE4MTA1NGY3NjBjY2I2Mjc2NjFiMjIzNTYiLCJrZXkiOiJTWUdVNkpJQkJ6YzdJOUxNN2t0ZDppQWNKVmY1d1JqNk5fTHRoSUtjTkZRIn0=

启动 Kibana

./kibana/bin/kibana serve
访问 Kibana

在浏览器地址栏输入 http://SERVER_IP:5601,接下来进入 Kibana 的认证界面,这里需要输入 token 和 Kibana 控制台输出的登录码(六位数字),最后输入 Elasticsearch 集群的用户名和密码登录,默认用户名为 elastic。如果忘记了集群密码可以使用 elasticsearch-reset-password -u elastic 命令重新设置密码。

总结

至此我们已经安装完了 Elasticsearch 集群和 Kibana,你可以开始探索新特性了,祝你使用愉快。