【ES三周年】linux 基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)上用 shell 脚本安装 elasticsearch

2023-04-12 18:42:06 浏览数 (1)

在这个指南中,我们将通过一个简单的Shell脚本安装Elasticsearch。请确保在开始之前满足以下要求

  1. 使用基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)操作系统。
  2. 拥有root权限或者sudo权限。

安装Elasticsearch的步骤如下

1.首先,创建一个名为install_elasticsearch.sh的文件,并打开该文件以编辑

代码语言:javascript复制
touch install_elasticsearch.sh
chmod  x install_elasticsearch.sh
vim install_elasticsearch.sh

2.然后,将以下内容粘贴到install_elasticsearch.sh文件中

代码语言:javascript复制
#!/bin/bash

# 安装必要的软件包
sudo yum install -y wget

# 导入Elasticsearch的GPG key
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# 添加Elasticsearch的存储库
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

# 安装Elasticsearch
sudo yum install -y elasticsearch

# 启用并启动Elasticsearch服务
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service

3.保存并关闭文件

4.运行安装脚本

代码语言:javascript复制
./install_elasticsearch.sh

5.等待脚本执行完成,这可能需要几分钟的时间。完成后,Elasticsearch将作为一个服务在您的系统上运行

6.检查Elasticsearch是否正在运行

代码语言:javascript复制
curl -X GET "localhost:9200/"

如果安装成功,您将看到类似于以下内容的响应

代码语言:javascript复制
{
  "name" : "your-node-name",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "xxxxxxxxxxxx",
  "version" : {
    "number" : "7.x.x",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "xxxxxxxxxx",
    "build_date" : "2021-09-30T21:56:19.031789Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

步骤详解

#!/bin/bash

#!/bin/bash 是一个称为 shebang(或 hashbang)的特殊字符串,它通常出现在脚本文件的第一行。当您将此字符串作为文件的第一行时,它会指示操作系统使用 /bin/bash 作为解释器来执行该脚本。

当您创建一个 Bash 脚本时,请在文件的开头添加 #!/bin/bash,以确保正确解释和执行脚本。例如,您可以创建一个名为 my_script.sh 的脚本文件,并在文件开头添加如下内容:

代码语言:javascript复制
#!/bin/bash
# 这是一个简单的 Bash 脚本示例

echo "Hello, World!"

在文件中添加脚本内容后,需要为脚本文件设置可执行权限。您可以使用 chmod 命令为脚本文件设置可执行权限:

代码语言:javascript复制
chmod  x my_script.sh

现在,您可以通过运行 ./my_script.sh 来执行脚本。如果一切正常,您将在终端中看到 "Hello, World!" 消息。

sudo yum install -y wget

sudo yum install -y wget命令用于在基于RHEL的Linux发行版(如CentOS和Fedora)上安装wget软件包。

yum是这些系统上的包管理器,用于安装、更新和卸载软件包。在这个命令中,install表示要安装一个软件包,-y选项表示自动回答所有提示为“是”,wget是要安装的软件包的名称。

wget是一个非常实用的命令行工具,用于从网络上下载文件。在Elasticsearch安装过程中,我们需要wget来下载Elasticsearch的GPG密钥,以便验证软件包的完整性和来源。安装wget后,您就可以使用它来执行其他与下载相关的操作。

cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF

此命令将创建一个名为 elasticsearch.repo 的新文件并将其放置在 /etc/yum.repos.d/ 目录下。这个文件包含了 Elasticsearch 存储库的配置,使您的系统能够从 Elasticsearch 官方存储库中下载和安装软件包。

以下是命令的各部分的解释:

  • cat <<EOF: 使用 "Here Document"(这里文档)语法从标准输入读取文本内容,直到遇到 EOF 为止。
  • sudo tee /etc/yum.repos.d/elasticsearch.repo: 将 cat 命令的输出重定向到 /etc/yum.repos.d/elasticsearch.repo 文件中。使用 sudo 是因为需要 root 权限才能写入此目录。
  • [elasticsearch-7.x]: 存储库的唯一 ID。
  • name=Elasticsearch repository for 7.x packages: 存储库的名称,仅用于描述性目的。
  • baseurl=https://artifacts.elastic.co/packages/7.x/yum: 存储库的基本 URL,包含软件包和元数据。
  • gpgcheck=1: 指示 YUM 在安装软件包之前检查其 GPG 签名。
  • gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch: Elasticsearch GPG 密钥的 URL,用于验证软件包的签名。
  • enabled=1: 启用此存储库,以便 YUM 可以使用它来下载和安装软件包。
  • autorefresh=1: 启用自动刷新,以便 YUM 在执行操作时自动检查和更新存储库元数据。
  • type=rpm-md: 存储库的元数据类型,对于 Elasticsearch 存储库,它是 rpm-md

执行此命令后,Elasticsearch 存储库将添加到您的系统中,您可以使用 YUM 安装 Elasticsearch 软件包。

sudo yum install -y elasticsearch

使用 sudo yum install -y elasticsearch 命令,您可以在基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)上安装 Elasticsearch 软件包。

在此命令中:

  • sudo:以 root 权限执行命令。
  • yum:YUM 包管理器,用于在基于 RHEL 的 Linux 发行版上安装、更新和卸载软件包。
  • install:表示要安装一个软件包。
  • -y:自动回答所有提示为“是”。
  • elasticsearch:要安装的软件包的名称。

这个命令将从之前添加的 Elasticsearch 存储库中下载并安装 Elasticsearch。安装完成后,Elasticsearch 将作为一个服务存在于您的系统上。

sudo systemctl daemon-reload

sudo systemctl daemon-reload命令用于重新加载systemd的配置文件。当您修改了systemd的服务单元文件(例如,/etc/systemd/system/usr/lib/systemd/system目录中的文件)后,需要执行这个命令,以便systemd获取并应用最新的配置。

在Elasticsearch安装过程中,当您安装Elasticsearch软件包时,服务单元文件将被添加到相应的目录。执行sudo systemctl daemon-reload命令是为了确保systemd知道Elasticsearch服务的存在,并使用正确的配置来管理该服务。

sudo systemctl enable elasticsearch.service

sudo systemctl enable elasticsearch.service 命令用于在基于 systemd 的 Linux 发行版上启用 Elasticsearch 服务。这意味着,当系统启动时,Elasticsearch 服务将自动运行。

在这个命令中:

  • sudo:以 root 权限执行命令。
  • systemctl:systemd 的主命令,用于管理服务和系统状态。
  • enable:用于启用服务,使其在系统启动时自动运行。
  • elasticsearch.service:Elasticsearch 服务的名称。

在启用 Elasticsearch 服务之后,您需要手动启动它,以便在当前会话中立即开始运行。

sudo systemctl start elasticsearch.service

sudo systemctl start elasticsearch.service 命令用于在基于 systemd 的 Linux 发行版上启动 Elasticsearch 服务。执行此命令后,Elasticsearch 服务将立即开始运行。

在这个命令中:

  • sudo:以 root 权限执行命令。
  • systemctl:systemd 的主命令,用于管理服务和系统状态。
  • start:用于启动服务。
  • elasticsearch.service:Elasticsearch 服务的名称。

启动 Elasticsearch 服务后,您可以使用以下命令检查其状态:

代码语言:javascript复制
sudo systemctl status elasticsearch.service

如果服务已成功启动并正在运行,您将看到类似于以下内容的输出:

代码语言:javascript复制
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2023-04-11 12:34:56 UTC; 1min 5s ago
     Docs: https://www.elastic.co
 Main PID: 12345 (java)
    Tasks: 62
   Memory: 1.2G
   CGroup: /system.slice/elasticsearch.service
           └─12345 /usr/bin/java -Xms1g -Xmx1g ...

现在,Elasticsearch 服务正在运行,您可以继续配置、使用和管理 Elasticsearch 实例。

相关问题

不用配置 es专属账户启动吗

Elasticsearch 默认情况下以 elasticsearch 用户身份运行。在安装 Elasticsearch 时,软件包会自动创建 elasticsearch 用户和组。这种安装方式遵循了最佳安全实践,以便在系统上运行 Elasticsearch 时遵循最小权限原则。

默认情况下,Elasticsearch 的 systemd 服务单元文件(例如 /usr/lib/systemd/system/elasticsearch.service)已配置为使用 elasticsearch 用户和组。服务单元文件中的以下行指定了该用户和组:

代码语言:javascript复制
User=elasticsearch
Group=elasticsearch

因此,在安装 Elasticsearch 时,您不需要手动创建专用用户和组,也不需要对 systemd 服务单元文件进行任何更改。默认情况下,Elasticsearch 会以 elasticsearch 用户身份运行。

在启动 Elasticsearch 服务(sudo systemctl start elasticsearch.service)后,它将自动以 elasticsearch 用户身份运行。如果您需要更改运行 Elasticsearch 的用户和组,可以编辑 systemd 服务单元文件并更新 UserGroup 选项。但是,请确保所选用户和组具有适当的权限,以便正确访问 Elasticsearch 安装目录、数据目录和日志目录。

在linux上如何查询es专属账户

在 Linux 系统上,您可以使用 id 命令查询 Elasticsearch 专用用户的信息。id 命令为特定用户提供了用户 ID、组 ID 以及用户所属的任何其他组的详细信息。

为了查询 Elasticsearch 专用用户,请运行以下命令:

代码语言:javascript复制
id elasticsearch

如果 Elasticsearch 用户存在,您将看到类似以下的输出:

代码语言:javascript复制
uid=998(elasticsearch) gid=998(elasticsearch) groups=998(elasticsearch)

在这个例子中,uid=998 表示用户 ID 为 998,gid=998 表示组 ID 为 998。Elasticsearch 用户和组的名称和 ID 可能因系统而异。

请注意,在某些发行版中,Elasticsearch 用户可能具有不同的名称,例如 elastic。如果您不确定 Elasticsearch 用户的名称,请检查 Elasticsearch 的 systemd 服务单元文件(例如 /usr/lib/systemd/system/elasticsearch.service),在文件中查找 UserGroup 配置选项。

那用rpm能搭建es伪集群吗

是的,使用 RPM 包安装 Elasticsearch 时,您可以在单个服务器上搭建一个伪集群。伪集群是指在同一台服务器上运行多个 Elasticsearch 节点。这种设置可以用于开发、测试或学习目的,但对于生产环境来说,最好使用不同的物理或虚拟服务器搭建真正的集群。

要在单个服务器上搭建一个 Elasticsearch 伪集群,请遵循以下步骤:

  1. 使用 RPM 包安装 Elasticsearch(这将为您创建一个默认的 Elasticsearch 节点)。
  2. 为每个额外的节点创建一个新的配置文件,例如 /etc/elasticsearch/elasticsearch_node2.yml。您可以复制现有的 /etc/elasticsearch/elasticsearch.yml 文件,并根据需要进行修改。确保为每个节点指定唯一的 node.namehttp.portpath.data 配置选项。

例如,/etc/elasticsearch/elasticsearch_node2.yml 的内容可以如下所示:

代码语言:javascript复制
cluster.name: my-cluster
node.name: "node-2"
path.data: /var/lib/elasticsearch_node2
path.logs: /var/log/elasticsearch_node2
http.port: 9201
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1", "node-2"]
  1. 为每个额外的节点创建数据和日志目录,并更改所有权为 elasticsearch 用户和组:
代码语言:javascript复制
sudo mkdir -p /var/lib/elasticsearch_node2
sudo mkdir -p /var/log/elasticsearch_node2
sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch_node2
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch_node2
  1. 为每个额外的节点创建新的 systemd 服务单元文件。复制现有的 /usr/lib/systemd/system/elasticsearch.service 文件并进行修改。您可以将新文件命名为 /usr/lib/systemd/system/elasticsearch_node2.service。将 Environment=ES_PATH_CONF=/etc/elasticsearch 更改为指向新节点的配置文件,例如 Environment=ES_PATH_CONF=/etc/elasticsearch_node2
  2. 重新加载 systemd 配置并启动所有节点:
代码语言:javascript复制
sudo systemctl daemon-reload
sudo systemctl start elasticsearch.service
sudo systemctl start elasticsearch_node2.service
  1. 使用 curl 或其他工具检查节点的运行状况。例如,对于第一个节点,您可以运行 curl -X GET "localhost:9200/",对于第二个节点,您可以运行 curl -X GET "localhost:9201/"

这些步骤将创建一个 Elasticsearch 伪集群,其中包含两个运行在同一台服务器上的节点。请根据需要添加更多节点。请注意,虽然伪集群可以用于开发、测试和学习目的,但在生产环境中建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。

新的节点如何加入已经配置好的伪集群中

要将新的 Elasticsearch 节点添加到已经配置好的伪集群中,请遵循以下步骤:

  1. 首先,在新节点所在的服务器上使用 RPM 包安装 Elasticsearch,如之前的指南所述。
  2. 在新节点的服务器上,创建一个新的配置文件,例如 /etc/elasticsearch/elasticsearch_node3.yml。您可以复制现有的 /etc/elasticsearch/elasticsearch.yml 文件,并根据需要进行修改。确保为新节点指定唯一的 node.namehttp.portpath.data 配置选项。同时,确保 discovery.seed_hosts 配置为现有集群中的一个或多个节点的 IP 地址或主机名。

例如,/etc/elasticsearch/elasticsearch_node3.yml 的内容可以如下所示:

代码语言:javascript复制
cluster.name: my-cluster
node.name: "node-3"
path.data: /var/lib/elasticsearch_node3
path.logs: /var/log/elasticsearch_node3
http.port: 9202
discovery.seed_hosts: ["IP_ADDRESS_OR_HOSTNAME_OF_EXISTING_NODE"]

请将 IP_ADDRESS_OR_HOSTNAME_OF_EXISTING_NODE 替换为现有集群中任一节点的实际 IP 地址或主机名。

  1. 为新节点创建数据和日志目录,并更改所有权为 elasticsearch 用户和组:
代码语言:javascript复制
sudo mkdir -p /var/lib/elasticsearch_node3
sudo mkdir -p /var/log/elasticsearch_node3
sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch_node3
sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch_node3
  1. 为新节点创建新的 systemd 服务单元文件。复制现有的 /usr/lib/systemd/system/elasticsearch.service 文件并进行修改。您可以将新文件命名为 /usr/lib/systemd/system/elasticsearch_node3.service。将 Environment=ES_PATH_CONF=/etc/elasticsearch 更改为指向新节点的配置文件,例如 Environment=ES_PATH_CONF=/etc/elasticsearch_node3
  2. 重新加载 systemd 配置并启动新节点:
代码语言:javascript复制
sudo systemctl daemon-reload
sudo systemctl start elasticsearch_node3.service
  1. 使用 curl 或其他工具检查新节点的运行状况。例如,对于新节点,您可以运行 curl -X GET "localhost:9202/"

新节点应该会自动加入现有的伪集群。要验证新节点是否已成功加入集群,您可以在集群中的任何节点上运行以下命令:

代码语言:javascript复制
curl -X GET "localhost:9200/_cat/nodes?v&pretty"

这将显示集群中所有节点的列表,包括新加入的节点。

请注意,在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。伪集群主要适用于开发、测试和学习目的。

那我配置新节点加入伪集群的时候服务器用不用停机

在配置新节点加入 Elasticsearch 伪集群时,您不需要停止现有节点或整个服务器。Elasticsearch 集群支持热扩展,这意味着您可以在不停机的情况下向集群中添加或删除节点。

在添加新节点到伪集群的过程中,只需确保新节点的配置文件正确设置,包括 discovery.seed_hosts,并确保新节点能够与现有节点通信。添加新节点后,您可以使用 _cat/nodes API(如:curl -X GET "localhost:9200/_cat/nodes?v&pretty")监控新节点是否成功加入了集群。

在新节点加入集群后,Elasticsearch 将自动重新分布数据,以便在所有可用节点之间保持负载平衡。这个过程可能需要一些时间,具体取决于您的数据量和集群规模。在重新分布期间,集群可能会受到性能影响,但通常不会导致停机。

总之,在向伪集群添加新节点时,无需停止现有节点或服务器。Elasticsearch 支持在运行中动态调整集群规模。然而,请注意,在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。伪集群主要适用于开发、测试和学习目的。

如果我以前的discovery.seed_hosts 配置为一个主机地址,后续是一个新的主机地址应该如何配置

如果您需要在现有的 Elasticsearch 集群中添加一个新节点,并且 discovery.seed_hosts 配置需要包含新的主机地址,您可以将新的主机地址添加到现有节点和新节点的 discovery.seed_hosts 列表中。

例如,假设您的集群当前有一个节点,它的 discovery.seed_hosts 配置为:

代码语言:javascript复制
discovery.seed_hosts: ["host1"]

现在,您需要将新节点(host2)添加到集群中。在这种情况下,您应该更新现有节点的配置文件(/etc/elasticsearch/elasticsearch.yml)以包含新的主机地址,如下所示:

代码语言:javascript复制
discovery.seed_hosts: ["host1", "host2"]

同时,确保新节点的配置文件(例如 /etc/elasticsearch/elasticsearch_node2.yml)也包含这两个主机地址:

代码语言:javascript复制
discovery.seed_hosts: ["host1", "host2"]

完成更改后,请在现有节点上重启 Elasticsearch 服务以应用新的配置:

代码语言:javascript复制
sudo systemctl restart elasticsearch.service

接下来,按照之前的说明在新节点上安装和配置 Elasticsearch,并启动服务。新节点应该会自动加入集群。

请注意,当您添加新节点时,务必确保所有节点的 cluster.name 配置相同,以便它们能够识别并加入同一个集群。在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。

我是不是要停机更新现有节点的配置文件(/etc/elasticsearch/elasticsearch.yml),要不然如何让他加载

对于现有节点的配置文件(/etc/elasticsearch/elasticsearch.yml)的更新,您需要重启 Elasticsearch 服务来使更改生效。这将导致 Elasticsearch 服务短暂中断,但整个服务器无需停机。

在更新现有节点的配置文件后,您可以按照以下步骤重启 Elasticsearch 服务:

  1. 保存对配置文件的更改。
  2. 通过运行以下命令来重启 Elasticsearch 服务:
代码语言:javascript复制
bashCopy code
sudo systemctl restart elasticsearch.service

这将使 Elasticsearch 服务短暂中断。在重启过程中,该节点将暂时无法响应查询和索引请求。不过,如果您的集群中有其他节点在运行,它们仍然可以处理这些请求。

在重启 Elasticsearch 服务后,新的配置将立即生效。新节点应该能够加入集群,前提是它们的 discovery.seed_hosts 配置已正确设置。

总之,为了应用更新的 discovery.seed_hosts 配置,您需要重启 Elasticsearch 服务。虽然这会导致服务短暂中断,但整个服务器无需停机。请注意,在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。

伪集群中发生脑裂后我该如何处理

在Elasticsearch 伪集群中发生脑裂(网络分区或节点失去通信能力)时,可能会导致数据不一致和其他问题。为了处理脑裂情况,您需要采取以下步骤:

  1. 诊断问题:检查集群状态、日志文件以及系统资源(如网络、CPU 和内存)来确定问题的原因。确保检查 Elasticsearch 的日志文件,通常位于 /var/log/elasticsearch 目录下。
  2. 恢复网络和节点间通信:如果网络故障是脑裂的原因,请修复网络问题以恢复节点间的通信。这可能包括修复硬件、解决配置问题或确保防火墙规则允许节点之间的通信。
  3. 重启受影响的节点:在修复了网络问题之后,您可能需要重启受影响的节点以确保它们重新加入集群。使用以下命令重启 Elasticsearch 服务:
代码语言:javascript复制
sudo systemctl restart elasticsearch.service

对于其他节点,请使用相应的 systemd 服务名(例如 elasticsearch_node2.service)重启服务。

  1. 验证集群健康状态:在修复了问题并重启节点后,您需要验证集群的健康状况。运行以下命令来检查集群的健康状态:
代码语言:javascript复制
curl -X GET "localhost:9200/_cluster/health?pretty"

确保集群的 statusgreenyellow,这表示集群已恢复正常。如果仍然显示为 red,则需要进一步检查并解决问题。

  1. 设置最小主节点选举数(discovery.zen.minimum_master_nodes):为了避免未来发生脑裂,您需要在配置文件中设置 discovery.zen.minimum_master_nodes 参数。这个参数表示在选举主节点时,集群中需要达成一致的最小节点数。根据 Elasticsearch 的建议,将该值设置为 (master_eligible_nodes / 2) 1,其中 master_eligible_nodes 是具有主节点资格的节点数。
  2. 。在 Elasticsearch 7.x 及更高版本中,discovery.zen.minimum_master_nodes 配置已经被移除,无论是真实集群还是伪集群。取而代之的是,Elasticsearch 7.x 引入了新的集群协调算法,通过使用 cluster.initial_master_nodes 设置来避免脑裂。

在伪集群的情况下,您应该使用 cluster.initial_master_nodes 配置。在伪集群的第一个节点(即主节点)的 elasticsearch.yml 配置文件中添加以下设置:

代码语言:javascript复制
cluster.initial_master_nodes:
  - node-1

这里,node-1 是第一个节点的名称。对于其他节点,您可以省略此设置,因为它们将自动从主节点中发现其他节点。

在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。伪集群主要适用于开发、测试和学习目的。同时,请确保使用 Elasticsearch 的最新版本,因为它包含了很多关于集群稳定性和脑裂恢复的改进。

0 人点赞