跳转到内容

Linux环境安装Elasticsearch8.16.6

安装Elastcisearch单节点

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.16/targz.html

1、安装步骤

  1. 下载elasticsearch tar包
Terminal window
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.16.6-linux-x86_64.tar.gz
  1. 解压下载的tar包
Terminal window
tar -xzf elasticsearch-8.16.6-linux-x86_64.tar.gz
  1. 启动elasticsearch
Terminal window
cd elasticsearch-8.16.6/
./bin/elasticsearch

注意:如果是root启动的上述命令的话,会报错,报错信息如下:

img

在解决下面的问题时,需要以root账号,进行如下设置,否则可能elasticsearch报错

Terminal window
# 在 /etc/sysctl.conf 末尾添加
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
# 立即生效
sysctl -p

解决上述的办法,创建另外一个专门用户来启动elasticsearch,下面是具体的操作步骤:

Terminal window
# 创建名为 es 的用户组
groupadd es
# 创建名为 es 的用户,并加入 es 组
useradd es -g es

授权目录权限,我的目录是在/opt/es/elasticsearch-8.16.6,把目录的权限交给创建的es用户

Terminal window
# 将目录所有者改为 es 用户
chown -R es:es /opt/es/elasticsearch-8.16.6

切换为es用户,启动elasticsearch

Terminal window
# 切换到 es 用户
su - es
# 进入安装目录
cd /opt/es/elasticsearch-8.16.6
# 后台启动 ES
./bin/elasticsearch -d

启动成功后,ES 会在控制台打印出默认的 elastic 用户密码和 enrollment token(仅限第一次启动)

进行后续操作时,建议先停止elasticsearch。

2、手动配置Elasticsearch节点安全通信

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.16/security-basic-setup.html

进入elasticsearch存放位置

依次执行如下步骤:

Terminal window
./bin/elasticsearch-certutil ca

img

Terminal window
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

img

将我们生成的2份证书,移动config/certs文件中

Terminal window
mv elastic-certificates.p12 ./config/certs
mv elastic-stack-ca.p12 ./config/certs

原来的配置如下:

alt text

将上述截图中的名称替换成elastic-certificates.p12 即可。

依次使用如下命令,将上述生成证书的密码,写入到config/elasticsearch.keystore文件中进行加密存储

Terminal window
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

需要注意:如果以root用户创建的elastic-stack-ca.p12elastic-certificates.p12,需要修改文件的属组和用户,否则上述流程都执行完毕后,可能会因为读取不到文件权限问题导致报错。

上述的配置,都是用于elasticsearch多个节点通信的,虽然目前用的是单节点,也是需要进行配置。

如果此时安装Kibana并启动后,还是不能通过Kibana连接elasticsearch,所以现在我们先进行其他配置,最后才安装Kibana,并使用Kibana连接elasticsearch。

官网地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.16/security-basic-setup-https.html#encrypt-kibana-browser

3、配置HTTP层TLS加密步骤

进入到elasticsearch所在目录,执行如下命令

Terminal window
./bin/elasticsearch-certutil http

该命令会生成一个 .zip 文件,包含用于 Elasticsearch 和 Kibana 的证书和密钥。每个文件夹内都有一个 README.txt 说明如何使用这些文件。

执行操作流程

img

img

填入步骤2生成的证书所在的路径

img

img

img

img

上述的流程含义如下:

交互式配置指南:

  • 是否生成 CSR:输入 n(否)。
  • 是否使用现有 CA:输入 y(是)。
  • CA 路径:输入你之前为集群生成的 elastic-stack-ca.p12 文件的绝对路径。
  • CA 密码:输入该 CA 的密码。
  • 有效期:输入证书过期时间(例如 90D 代表 90 天,或以年 y、月 M 为单位)。
  • 是否为每个节点生成独立证书:输入 y(是)。每个证书将拥有独立的私钥,并针对特定的主机名或 IP 地址签发。

输入节点详情(针对每个节点重复):

  • 节点名称:输入集群中第一个节点的名称(需与生成节点证书时使用的名称一致)。
  • 主机名 (Hostnames):输入用于连接该节点的所有主机名。这些名称将作为 DNS 名称添加到证书的 SAN (使用者备用名称) 字段中。请列出所有通过 HTTPS 连接集群时可能用到的主机名及其变体。
  • IP 地址:输入客户端连接该节点时可能使用的 IP 地址。

解压压缩包

Terminal window
unzip elasticsearch-ssl-http.zip

将解压后有2个文件夹,一个kibana,另一个elasticsearch文件夹。

先需要将elasticsearch中的http.p12文件移动到es所在目录的config/certs文件中,覆盖原有文件。

后续步骤会用到kibana文件夹,现在暂时不用管它。

如果在生成http.p12,不管是否输入密码,都还需要进行如下的额外操作,输入如下命令,输入密码,如果之前没有输入密码,直接回车的话,执行如下命令时也是回车就行。否则后续在启动elasticsearch时会出现异常。

Terminal window
./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

4、安装Kibana

curl -O https://artifacts.elastic.co/downloads/kibana/kibana-<SPECIFIC.VERSION.NUMBER>-linux-x86_64.tar.gz

将上述中的<SPECIFIC.VERSION.NUMBER>替换成对应es的版本即可,例如我安装的是8.16.6,那下载命令如下:

Terminal window
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8.16.6-linux-x86_64.tar.gz

解压下载的tar包即可,Kibana的启动和Elasticsearch启动一样的,不能用root用户启动,因为我们在安装ElaseticSearch的时候,以及创建了额外的es用户了,现在我们只需要将存放Kibana位置赋权给es用户就行。命令如下:

Terminal window
sudo chown -R es:es /opt/es/kibana-8.16.6

启动时也需要切换到其他用,进入到Kibana目录中,执行如下命令就可启动

Terminal window
./bin/kibana

5、为Kibana配置ES后端的安全连接

此步骤是接着第3步后续来的,将kibana中的elasticsearch-ca.pem文件复制到kibana所在目录的config文件夹下。

配置kibana config中的kibana.yml相关即可。

找到配置文件中的项,进行配置:elasticsearch.ssl.certificateAuthorities = [ "elasticsearch-ca.pem" ]

elasticsearch.hosts: https://<your_elasticsearch_host>:9200

6、配置浏览器到Kibana安全连接

  1. 为什么你需要这个步骤? 目前你访问 Kibana 可能遇到了以下情况: 情况 A:你没配置 Kibana 的 SSL,只能通过 http 访问,数据明文传输。 情况 B:你用了 ES 自动生成的证书,浏览器报 NET::ERR_CERT_COMMON_NAME_INVALID,因为证书里的名字不是 kaistudy.plus。

  2. 使用之前生成的elastic-stack-ca.p12文件生成kibana-server.p12,后续kibana的证书信息从其中解析

Terminal window
./bin/elasticsearch-certutil cert --ca config/certs/elastic-stack-ca.p12 \
--name kibana-server --dns xxx.com,localhost \
--ip 127.0.0.1 --out config/certs/kibana-server.p12
  1. 从生成的 elastic-stack-ca.p12 提取 Kibana 所需的文件.crt.key文件
Terminal window
openssl pkcs12 -in config/certs/kibana-server.p12 -nocerts -nodes -out /opt/es/kibana-8.16.6/config/certs/kibana-server.key
openssl pkcs12 -in config/certs/kibana-server.p12 -clcerts -nokeys -out /opt/es/kibana-8.16.6/config/certs/kibana-server.crt
  1. kibana.yml中进行如下配置
Terminal window
server.ssl.enabled: true
server.ssl.certificate: $KBN_PATH_CONF/kibana-server.crt
server.ssl.key: $KBN_PATH_CONF/kibana-server.key

需要使用elasticsearch配置生成kibana_system的新密码

Terminal window
./bin/elasticsearch-reset-password -u kibana_system --url https://127.0.0.1:9200

将生成的密码配置在kibana.yml中

Terminal window
elasticsearch.username: "kibana_system"
elasticsearch.password: "你刚才获取到的新密码"

还需在kibana.yml中额外配置kibana秘钥信息,使用kibana中bin目录下的工具,命令如下:

Terminal window
./bin/kibana-encryption-keys generate

它会输出三行配置(包含随机生成的长字符串),请把它们复制并粘贴到 kibana.yml 的末尾:

  • xpack.encryptedSavedObjects.encryptionKey: ”…”
  • xpack.reporting.encryptionKey: ”…”
  • xpack.security.encryptionKey: ”…”