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