Elasticsearch:使用 RPM 安装包来安装 Elastic Stack 8.x

2022年6月12日   |   by mebius

在我之前的文章 “Elasticsearch: 使用 Debian 安装包来安装 Elasticsearch 8.x”,我详述了如何使用 RPM 安装包来安装 Elasticsearch 8.x。后来有些开发者来问如何使用 RPM 安装包来安装 Elasticsearch。在今天的文章中,我来详述如何使用 RPM 安装包来安装 Elastic Stack 8.x。

使用 RPM 安装包来安装 Elastic Stack 8.x

使用 RPM 安装包来安装 Elastic Stack 8.x_哔哩哔哩_bilibili

可以从我们的网站或我们的 RPM 存储库下载 Elasticsearch 的 RPM。 它可用于在任何基于 RPM 的系统上安装 Elasticsearch,例如 OpenSuSE、SLES、Centos、Red Hat 和 Oracle Enterprise。

注意:使用旧版本 RPM 的发行版不支持 RPM 安装,例如 SLES 11 和 CentOS 5。请参阅在 Linux 或 MacOS 上从存档安装 Elasticsearch。

软件包包含免费和订阅功能。 开始 30 天试用以试用所有功能。

可以在下载 Elasticsearch 页面上找到 Elasticsearch 的最新稳定版本。 其他版本可以在过去的版本页面上找到。

注意:Elasticsearch 包含来自 JDK 维护者 (GPLv2+CE) 的 OpenJDK 捆绑版本。 要使用你自己的 Java 版本,请参阅 JVM 版本要求

准备系统

如果你没有自己的基于 RPM 的系统,我们可以使用 vagrant 来创建。在下面,我们来使用 centos 来进行展示。我们可以参考之前的文章 “Elastic:在 CentOS 上一步一步安装 Elastic Stack” 来创建 centos。我们首先在自己的一个目录下创建一个如下的文件 Vagrantfile:

Vagrantfile

# vi: set ft=ruby :
 
ENV['VAGRANT_NO_PARALLEL'] = 'yes'
NETWORK = 'forwarded_port'
 
Vagrant.configure(2) do |config|
 
  config.vm.provision "shell", path: "bootstrap.sh"
 
  config.vm.define "server" do |server|
    server.vm.box = "centos/7"
    server.vm.network NETWORK, guest: 9200, host: 9200
    server.vm.network NETWORK, guest: 5601, host: 5601

    server.vm.hostname = "server.example.com"
    server.vm.network "private_network", ip: "172.42.42.10"
    server.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
      vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
      vb.name = "server"
      vb.memory = 4096
      vb.cpus = 1
    end
  end
 
end

在上面,我们定义了两个 centos 的安装:server 及 client。我们将在 server 里安 Elasticsearch,Kibana。为了方便 server 的端口地址在主机中进行访问,我们把端口 9200 及 5601 都做了相应的映射。我们在 client 中安装 Filebeat 等。在上面,我们也同时指定了它们的 IP 地址。在上面,我们也同时指定了一个脚本 bootstrap.sh。它是用来帮我们安装一下必要的包及进行相应的配置:

#!/bin/bash
 
# Update the system
echo "[TASK 1] Updating the system"
yum update -y >/dev/null 2>&1
 
# Install desired packages
echo "[TASK 2] Installing desired packages"
yum install -y -q vim redhat-lsb-core net-tools bind-utils >/dev/null 2>&1
 
# Set up global aliases and exports
echo "[TASK 3] Creating global aliases and functions"
cat >>/etc/bashrc > /etc/vimrc
 
# Enable password authentication
echo "[TASK 4] Enabling password authentication in sshd config"
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl reload sshd
 
# Disable SELinux
echo "[TASK 5] Disable SELinux"
setenforce 0
sed -i --follow-symlinks 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
 
# Set Root password
echo "[TASK 6] Set root password"
echo "admin" | passwd --stdin root >/dev/null 2>&1
 
# Disable and stop firewalld
echo "[TASK 5] Disable and stop firewalld"
systemctl disable firewalld >/dev/null 2>&1
systemctl stop firewalld
 
# Update hosts file
echo "[TASK 6] Update /etc/hosts file"
cat >>/etc/hosts

这样我们的目录里的文件就像如下的样子:

$ pwd
/Users/liuxg/vms/centos
$ ls
Vagrantfile  bootstrap.sh

我们在当前的目录中打入如下的命令:

vagrant up

%title插图%num

我们可以通过如下的命令来安装 Guest additions。这是因为 additions are required for forwarded ports, shared folders, host only。

vagrant plugin install vagrant-vbguest

我们需要等一会完成这个安装。我们可以使用如下的命令来检查 images:

vagrant box list
$ vagrant box list
centos/7           (vitgcodertualbox, 2004.01)

上面显示 centos/7 已经成功下下载。

我们在自己的电脑的 /etc/hosts 中,添加如下的句子:

172.42.42.10    server.example.com server

这里的 IP 地址对应于我们的 virtualbox IP 地址。我们打开 Virtualbox,我们会发现有一个 box 正在运行:

%title插图%num

从上面,我们可以看出来 server 已经运行起来了。我们可以在 host 机器上 ping 这个机器:

$ ping server
PING server (172.42.42.10): 56 data bytes
64 bytes from 172.42.42.10: icmp_seq=0 ttl=64 time=0.359 ms
64 bytes from 172.42.42.10: icmp_seq=1 ttl=64 time=0.346 ms
64 bytes from 172.42.42.10: icmp_seq=2 ttl=64 time=0.329 ms

我们可以使用如下的命令来进入 server box:

vagrant ssh server
$ vagrant ssh server
Last login: Tue Apr 12 06:17:01 2022 from 10.0.2.2
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

等我们进入到系统,使用如下的命令来更新系统到最新的状态:

sudo yum update

如果你不能 ping 到这个机器,那么你需要安装如下的网络包:

yum install net-tools

安装 Elastic Stack

导入 Elasticsearch GPG key

Elastic 使用带有指纹的 Elasticsearch 签名密钥(PGP 密钥 D88E42B4,可从 https://pgp.mit.edu 获得)对所有的包进行签名:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公共签名密钥:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

从 RPM 仓库进行安装

在 /etc/yum.repos.d/ 目录中为基于 RedHat 的发行版创建一个名为 elasticsearch.repo 的文件,或在 /etc/zypp/repos.d/ 目录中为基于 OpenSuSE 的发行版创建一个文件,其中包含:

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

如果你还希望能安装其它的 Elastic Stack 软件包的话,建议创建/etc/yum.repos.d/elastic.repo 文件:

[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

这样你就可以按照任何你需要的 Elastic Stack 软件了。

我们打入如下的命令:

cat >>/etc/yum.repos.d/elasticsearch.repo

你的仓库已准备好使用。 你现在可以使用以下命令来安装 Elasticsearch:

%title插图%num

注意:默认情况下禁用配置的仓库。 这消除了在升级系统其余部分时意外升级 elasticsearch 的可能性。 每个安装或升级命令都必须显式启用仓库,如上面的示例命令中所示。

在启动的过程中,我们可以看到如下的画面:

%title插图%num

上面显示了 elastic超级用户的密码已经如何生产相应的 enrollment token。

我们可以使用如下的命令来查看所有安装文件的路径,特别需要注意的是 Elasticsearch 的配置文件 elasticsearch.yml 的配置文件路径。

rpm -qc elasticsearch
[vagrant@server ~]$ rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch-plugins.example.yml
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/jvm.options
/etc/elasticsearch/log4j2.properties
/etc/elasticsearch/role_mapping.yml
/etc/elasticsearch/roles.yml
/etc/elasticsearch/users
/etc/elasticsearch/users_roles
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service

下载并手动安装 RPM 安装包

Elasticsearch v8.1.2 的 RPM 可以从网站下载并安装如下:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.2-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.1.2-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-8.1.2-x86_64.rpm.sha512 
sudo rpm --install elasticsearch-8.1.2-x86_64.rpm

比较下载的 RPM 的 SHA 和发布的 checksum,应该输出 elasticsearch-{version}-x86_64.rpm: OK。

注意:在基于 systemd 的发行版上,安装脚本将尝试设置内核参数(例如 vm.max_map_count); 你可以通过屏蔽 systemd-sysctl.service 单元来跳过此步骤。

启动带有安全的 Elasticsearch

安装 Elasticsearch 时,默认启用并配置安全功能。 安装 Elasticsearch 时,会自动进行以下安全配置:

  • 启用身份验证和授权,并为 elastic 内置超级用户生成密码。
  • 为传输层和 HTTP 层生成 TLS 的证书和密钥,并使用这些密钥和证书启用和配置 TLS。

密码、证书和密钥将输出到你的终端。 例如:

  Installing : elasticsearch-8.1.2-1.x86_64                                 1/1 
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : f2AjRYaMR_7Y5Am0E5Oz

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token '
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with 
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with 
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with 
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service
  Verifying  : elasticsearch-8.1.2-1.x86_64      

使用 systemd 来运行 Elasticsearch

要将 Elasticsearch 配置为在系统启动时自动启动,请运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

Elasticsearch 可以按如下方式启动和停止:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令不提供关于 Elasticsearch 是否成功启动的反馈。 相反,此信息将写入位于 /var/log/elasticsearch/ 的日志文件中。

[vagrant@server ~]$ sudo /bin/systemctl daemon-reload
[vagrant@server ~]$ sudo /bin/systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[vagrant@server ~]$ sudo systemctl start elasticsearch.service
[vagrant@server ~]$ systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-04-12 07:00:48 UTC; 14s ago
     Docs: https://www.elastic.co
 Main PID: 26868 (java)
   CGroup: /system.slice/elasticsearch.service
           ├─26868 /usr/share/elasticsearch/jdk/bin/java -Xshare:auto -Des.ne...
           └─27111 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-..

上面表明 elasticsearch 服务已经被成功地运行起来了。

如果你对 Elasticsearch keystore 进行了密码保护,则需要使用本地文件和 systemd 环境变量向 systemd 提供密钥库密码。 这个本地文件应该在它存在时受到保护,一旦 Elasticsearch 启动并运行,就可以安全地删除它。

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

默认情况下,Elasticsearch 服务不会在 systemd 日志中记录信息。 要启用 journalctl 日志记录,必须从 elasticsearch.service 文件的 ExecStart 命令行中删除 –quiet 选项。

启用 systemd 日志记录后,可以使用 journalctl 命令获得日志记录信息:

尾随日志:

sudo journalctl -f

要列出 elasticsearch 服务的日记条目:

sudo journalctl --unit elasticsearch
[vagrant@server ~]$ sudo journalctl -u elasticsearch
-- Logs begin at Tue 2022-04-12 06:21:28 UTC, end at Tue 2022-04-12 07:14:21 UTC
Apr 12 07:00:27 server.example.com systemd[1]: Starting Elasticsearch...
Apr 12 07:00:48 server.example.com systemd[1]: Started Elasticsearch.

要列出从给定时间开始的 elasticsearch 服务的日志条目:

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

查看 man journalctl 或 https://www.freedesktop.org/software/systemd/man/journalctl.html 以获取更多命令行选项。

重新配置节点以加入现有集群编辑

安装 Elasticsearch 时,安装过程默认配置单节点集群。 如果你希望某个节点改为加入现有集群,请在第一次启动新节点之前在现有节点上生成一个注册令牌。

1)在现有集群中的任何节点上,生成节点注册令牌:

/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
[vagrant@server ~]$ sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
eyJ2ZXIiOiI4LjEuMiIsImFkciI6WyIxMC4wLjIuMTU6OTIwMCJdLCJmZ3IiOiIwMDUyYmM5MTNiMDY1ZDNjNzI0OWY5NTcwMTJiN2EzMDg3Y2Y1ZGY3NmRjNWQ5MzIwYzljODI0ZmY2M2FkNzQyIiwia2V5IjoiUHoyWkhJQUJpeUxnR2wtcExnSlg6MzBWQXdINllSa09HYUFqeHRSV3g1dyJ9

2)复制上面生成的 enrollment token

3)在你的新 Elasticsearch 节点上,将 enrollment token 作为参数传递给 elasticsearch-reconfigure-node 工具

/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token 

Elasticsearch 现在配置为加入现有集群。

4)使用 systemd 启动新节点。

检查 Elasticsearch 是否在运行

你可以通过向 localhost 上的端口 9200 发送 HTTPS 请求来测试你的 Elasticsearch 节点是否正在运行:

curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:f2AjRYaMR_7Y5Am0E5Oz https://localhost:9200
[vagrant@server ~]$ sudo curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:f2AjRYaMR_7Y5Am0E5Oz https://localhost:9200 
{
  "name" : "server.example.com",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "UgNgWI_RQxaSeaqDFixALg",
  "version" : {
    "number" : "8.1.2",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "31df9689e80bad366ac20176aa7f2371ea5eb4c1",
    "build_date" : "2022-03-29T21:18:59.991429448Z",
    "build_snapshot" : false,
    "lucene_version" : "9.0.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

我们需要把上面的密码换成自己的集群的密码。

安全证书及 keys

安装 Elasticsearch 时,会在 Elasticsearch 配置目录中生成以下证书和密钥,用于将 Kibana 实例连接到受保护的 Elasticsearch 集群并加密节点间通信。 这些文件在此处列出以供参考。

http_ca.crt 用于签署此 Elasticsearch 集群的 HTtgcodeTP 层证书的 CA 证书。
http.p12 包含此节点的 HTTP 层的密钥和证书的 keystore。
transport.p12 包含集群中所有节点的传输层的密钥和证书的 keystore。

http.p12 和 transport.p12 是受密码保护的 PKCS#12 密钥库。 Elasticsearch 将这些密钥库的密码存储为安全设置。 要检索密码以便检查或更改密钥库内容,请使用 bin/elasticsearch-keystore 工具。

使用以下命令检索 http.p12 的密码:

/usr/share/elasticsearch/bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

使用以下命令检索 transport.p12 的密码:

/usr/share/elasticsearch/bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

安装 Kibana 并启动

安装 Kibana 的方法也非常简单。在 /etc/yum.repos.d/ 目录中为基于 RedHat 的发行版创建一个名为 kibana.repo 的文件,或在 /etc/zypp/repos.d/ 目录中为基于 OpenSuSE 的发行版创建一个文件,其中包含:

[kibana-8.x]
name=Kibana repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

你的存储库已准备好使用。 你现在可以使用以下命令安装 Kibana:

yum install -y kibana

%title插图%num

你也可以去官方网站直接下载安装包来进行安装:

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.1.2-x86_64.rpm
shasum -a 512 kibana-8.1.2-x86_64.rpm 
sudo rpm --install kibana-8.1.2-x86_64.rpm

我们可以使用如下的命令来查看安装文件的路径:

[vagrant@server yum.repos.d]$ rpm -qc kibana
/etc/kibana/kibana.yml

在默认的情况下 Kibana 绑定于 localhost。为了能让 Kibana 在外网进行访问,我们可以修改 kibana.yml 配置文件:

/etc/kibana/kibana.yml

server.host: "0.0.0.0"

启动 Kibana

我们首先使用 Elasticsearch 来获取 Kibana 的 enrollment token:

/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjEuMiIsImFkciI6WyIxMC4wLjIuMTU6OTIwMCJdLCJmZ3IiOiIwMDUyYmM5MTNiMDY1ZDNjNzI0OWY5NTcwMTJiN2EzMDg3Y2Y1ZGY3NmRjNWQ5MzIwYzljODI0ZmY2M2FkNzQyIiwia2V5IjoiNnUzVUhJQUJLSE1nUjdaVjVtZlg6eFQydkJMU2FUbUdhT0dESGtsZ093USJ9

然后,要将 Kibana 配置为在系统启动时自动启动,请运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service

Kibana 可以按如下方式启动和停止:

sudo systemctl start kibana.service
sudo systemctl stop kibana.service
[root@server yum.repos.d]# vi /etc/kibana/kibana.yml 
[root@server yum.repos.d]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjEuMiIsImFkciI6WyIxMC4wLjIuMTU6OTIwMCJdLCJmZ3IiOiIwMDUyYmM5MTNiMDY1ZDNjNzI0OWY5NTcwMTJiN2EzMDg3Y2Y1ZGY3NmRjNWQ5MzIwYzljODI0ZmY2M2FkNzQyIiwia2V5IjoiNnUzVUhJQUJLSE1nUjdaVjVtZlg6eFQydkJMU2FUbUdhT0dESGtsZ093USJ9
[root@server yum.repos.d]# sudo /bin/systemctl daemon-reload
[root@server yum.repos.d]# sudo /bin/systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.servicetgcode to /usr/lib/systemd/system/kibana.service.
[root@server yum.repos.d]# systemctl start kibana.service
[root@server yum.repos.d]# systemctl status kibana
● kibana.service - Kibana
   Loaded: loaded (/usr/lib/systemd/system/kibana.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-04-12 08:14:37 UTC; 12s ago
     Docs: https://www.elastic.co
 Main PID: 2945 (node)
   CGroup: /system.slice/kibana.service
           └─2945 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bi...

Apr 12 08:14:37 server.example.com systemd[1]: Started Kibana.
Apr 12 08:14:46 server.example.com kibana[2945]: [2022-04-12T08:14:46.174+00....
Apr 12 08:14:46 server.example.com kibana[2945]: [2022-04-12T08:14:46.255+00...1
Apr 12 08:14:46 server.example.com kibana[2945]: [2022-04-12T08:14:46.285+00...]
Apr 12 08:14:46 server.example.com kibana[2945]: [2022-04-12T08:14:46.286+00…on…
Apr 12 08:14:46 server.example.com kibana[2945]: [2022-04-12T08:14:46.307+00....
Apr 12 08:14:46 server.example.com kibana[2945]: i Kibana has not been confi....
Apr 12 08:14:46 server.example.com kibana[2945]: Go to http://0.0.0.0:5601/?....
Hint: Some lines were ellipsized, use -l to show in full.

上面表明我们的 Kibana 已经成功运行。我们接下来在主机的浏览器中输入 centos 的地址: http://172.42.42.10:5601

%title插图%num

在 console 中输入如下的命令:

journalctl -u kibana.service 

%title插图%num

我们把上述的 code 输入到 Kibana 的启动页面中:

%title插图%num

%title插图%num

%title插图%num

%title插图%num

好了。我们终于安装好自己的 Elasticsearch 及 Kibana 了 :)

如何避免 Elasticsearch 被系统自动升级

如果你想锁定 Elasticsearch 的版本以防止无意或计划外的版本升级,你可以使用 yum-versionlock 来执行此操作。

  • 安装yum-versionlock:
yum -y install yum-versionlock
  • 将 elasticsearc h添加到 versionlock:
yum versionlock add elasticsearch
  • 计划升级时从 versionlock 中删除 elasticsearch
yum versionlock remove elasticsearch

参考:

【1】Install Kibana with RPM | Kibana Guide [8.1] | Elastic

【2】Install Elasticsearch with RPM | Elasticsearch Guide [8.1] | Elastic

文章来源于互联网:Elasticsearch:使用 RPM 安装包来安装 Elastic Stack 8.x