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
我们可以通过如下的命令来安装 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 正在运行:
从上面,我们可以看出来 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:
注意:默认情况下禁用配置的仓库。 这消除了在升级系统其余部分时意外升级 elasticsearch 的可能性。 每个安装或升级命令都必须显式启用仓库,如上面的示例命令中所示。
在启动的过程中,我们可以看到如下的画面:
上面显示了 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
你也可以去官方网站直接下载安装包来进行安装:
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
在 console 中输入如下的命令:
journalctl -u kibana.service
我们把上述的 code 输入到 Kibana 的启动页面中:
好了。我们终于安装好自己的 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