touch install_elasticsearch.sh
chmod +x install_elasticsearch.sh
vim install_elasticsearch.sh
#!/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
./install_elasticsearch.sh
curl -X GET "localhost:9200/"
{
"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 是一个称为 shebang(或 hashbang)的特殊字符串,它通常出现在脚本文件的第一行。当您将此字符串作为文件的第一行时,它会指示操作系统使用 /bin/bash 作为解释器来执行该脚本。
当您创建一个 Bash 脚本时,请在文件的开头添加 #!/bin/bash,以确保正确解释和执行脚本。例如,您可以创建一个名为 my_script.sh 的脚本文件,并在文件开头添加如下内容:
#!/bin/bash
# 这是一个简单的 Bash 脚本示例
echo "Hello, World!"
在文件中添加脚本内容后,需要为脚本文件设置可执行权限。您可以使用 chmod 命令为脚本文件设置可执行权限:
chmod +x my_script.sh
现在,您可以通过运行 ./my_script.sh 来执行脚本。如果一切正常,您将在终端中看到 "Hello, World!" 消息。
sudo yum install -y wget命令用于在基于RHEL的Linux发行版(如CentOS和Fedora)上安装wget软件包。
yum是这些系统上的包管理器,用于安装、更新和卸载软件包。在这个命令中,install表示要安装一个软件包,-y选项表示自动回答所有提示为“是”,wget是要安装的软件包的名称。
wget是一个非常实用的命令行工具,用于从网络上下载文件。在Elasticsearch安装过程中,我们需要wget来下载Elasticsearch的GPG密钥,以便验证软件包的完整性和来源。安装wget后,您就可以使用它来执行其他与下载相关的操作。
此命令将创建一个名为 elasticsearch.repo 的新文件并将其放置在 /etc/yum.repos.d/ 目录下。这个文件包含了 Elasticsearch 存储库的配置,使您的系统能够从 Elasticsearch 官方存储库中下载和安装软件包。
以下是命令的各部分的解释:
执行此命令后,Elasticsearch 存储库将添加到您的系统中,您可以使用 YUM 安装 Elasticsearch 软件包。
使用 sudo yum install -y elasticsearch 命令,您可以在基于 RHEL 的 Linux 发行版(例如 CentOS 和 Fedora)上安装 Elasticsearch 软件包。
在此命令中:
这个命令将从之前添加的 Elasticsearch 存储库中下载并安装 Elasticsearch。安装完成后,Elasticsearch 将作为一个服务存在于您的系统上。
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 命令用于在基于 systemd 的 Linux 发行版上启用 Elasticsearch 服务。这意味着,当系统启动时,Elasticsearch 服务将自动运行。
在这个命令中:
在启用 Elasticsearch 服务之后,您需要手动启动它,以便在当前会话中立即开始运行。
sudo systemctl start elasticsearch.service 命令用于在基于 systemd 的 Linux 发行版上启动 Elasticsearch 服务。执行此命令后,Elasticsearch 服务将立即开始运行。
在这个命令中:
启动 Elasticsearch 服务后,您可以使用以下命令检查其状态:
sudo systemctl status elasticsearch.service
如果服务已成功启动并正在运行,您将看到类似于以下内容的输出:
● 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 实例。
Elasticsearch 默认情况下以 elasticsearch 用户身份运行。在安装 Elasticsearch 时,软件包会自动创建 elasticsearch 用户和组。这种安装方式遵循了最佳安全实践,以便在系统上运行 Elasticsearch 时遵循最小权限原则。
默认情况下,Elasticsearch 的 systemd 服务单元文件(例如 /usr/lib/systemd/system/elasticsearch.service)已配置为使用 elasticsearch 用户和组。服务单元文件中的以下行指定了该用户和组:
User=elasticsearch
Group=elasticsearch
因此,在安装 Elasticsearch 时,您不需要手动创建专用用户和组,也不需要对 systemd 服务单元文件进行任何更改。默认情况下,Elasticsearch 会以 elasticsearch 用户身份运行。
在启动 Elasticsearch 服务(sudo systemctl start elasticsearch.service)后,它将自动以 elasticsearch 用户身份运行。如果您需要更改运行 Elasticsearch 的用户和组,可以编辑 systemd 服务单元文件并更新 User 和 Group 选项。但是,请确保所选用户和组具有适当的权限,以便正确访问 Elasticsearch 安装目录、数据目录和日志目录。
在 Linux 系统上,您可以使用 id 命令查询 Elasticsearch 专用用户的信息。id 命令为特定用户提供了用户 ID、组 ID 以及用户所属的任何其他组的详细信息。
为了查询 Elasticsearch 专用用户,请运行以下命令:
id elasticsearch
如果 Elasticsearch 用户存在,您将看到类似以下的输出:
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),在文件中查找 User 和 Group 配置选项。
是的,使用 RPM 包安装 Elasticsearch 时,您可以在单个服务器上搭建一个伪集群。伪集群是指在同一台服务器上运行多个 Elasticsearch 节点。这种设置可以用于开发、测试或学习目的,但对于生产环境来说,最好使用不同的物理或虚拟服务器搭建真正的集群。
要在单个服务器上搭建一个 Elasticsearch 伪集群,请遵循以下步骤:
例如,/etc/elasticsearch/elasticsearch_node2.yml 的内容可以如下所示:
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"]
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
sudo systemctl daemon-reload
sudo systemctl start elasticsearch.service
sudo systemctl start elasticsearch_node2.service
这些步骤将创建一个 Elasticsearch 伪集群,其中包含两个运行在同一台服务器上的节点。请根据需要添加更多节点。请注意,虽然伪集群可以用于开发、测试和学习目的,但在生产环境中建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。
要将新的 Elasticsearch 节点添加到已经配置好的伪集群中,请遵循以下步骤:
例如,/etc/elasticsearch/elasticsearch_node3.yml 的内容可以如下所示:
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 地址或主机名。
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
sudo systemctl daemon-reload
sudo systemctl start elasticsearch_node3.service
新节点应该会自动加入现有的伪集群。要验证新节点是否已成功加入集群,您可以在集群中的任何节点上运行以下命令:
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 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。伪集群主要适用于开发、测试和学习目的。
如果您需要在现有的 Elasticsearch 集群中添加一个新节点,并且 discovery.seed_hosts 配置需要包含新的主机地址,您可以将新的主机地址添加到现有节点和新节点的 discovery.seed_hosts 列表中。
例如,假设您的集群当前有一个节点,它的 discovery.seed_hosts 配置为:
discovery.seed_hosts: ["host1"]
现在,您需要将新节点(host2)添加到集群中。在这种情况下,您应该更新现有节点的配置文件(/etc/elasticsearch/elasticsearch.yml)以包含新的主机地址,如下所示:
discovery.seed_hosts: ["host1", "host2"]
同时,确保新节点的配置文件(例如 /etc/elasticsearch/elasticsearch_node2.yml)也包含这两个主机地址:
discovery.seed_hosts: ["host1", "host2"]
完成更改后,请在现有节点上重启 Elasticsearch 服务以应用新的配置:
sudo systemctl restart elasticsearch.service
接下来,按照之前的说明在新节点上安装和配置 Elasticsearch,并启动服务。新节点应该会自动加入集群。
请注意,当您添加新节点时,务必确保所有节点的 cluster.name 配置相同,以便它们能够识别并加入同一个集群。在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。
对于现有节点的配置文件(/etc/elasticsearch/elasticsearch.yml)的更新,您需要重启 Elasticsearch 服务来使更改生效。这将导致 Elasticsearch 服务短暂中断,但整个服务器无需停机。
在更新现有节点的配置文件后,您可以按照以下步骤重启 Elasticsearch 服务:
bashCopy code
sudo systemctl restart elasticsearch.service
这将使 Elasticsearch 服务短暂中断。在重启过程中,该节点将暂时无法响应查询和索引请求。不过,如果您的集群中有其他节点在运行,它们仍然可以处理这些请求。
在重启 Elasticsearch 服务后,新的配置将立即生效。新节点应该能够加入集群,前提是它们的 discovery.seed_hosts 配置已正确设置。
总之,为了应用更新的 discovery.seed_hosts 配置,您需要重启 Elasticsearch 服务。虽然这会导致服务短暂中断,但整个服务器无需停机。请注意,在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。
在Elasticsearch 伪集群中发生脑裂(网络分区或节点失去通信能力)时,可能会导致数据不一致和其他问题。为了处理脑裂情况,您需要采取以下步骤:
sudo systemctl restart elasticsearch.service
对于其他节点,请使用相应的 systemd 服务名(例如 elasticsearch_node2.service)重启服务。
curl -X GET "localhost:9200/_cluster/health?pretty"
确保集群的 status 是 green 或 yellow,这表示集群已恢复正常。如果仍然显示为 red,则需要进一步检查并解决问题。
在伪集群的情况下,您应该使用 cluster.initial_master_nodes 配置。在伪集群的第一个节点(即主节点)的 elasticsearch.yml 配置文件中添加以下设置:
cluster.initial_master_nodes:
- node-1
这里,node-1 是第一个节点的名称。对于其他节点,您可以省略此设置,因为它们将自动从主节点中发现其他节点。
在生产环境中,建议将 Elasticsearch 节点部署到不同的物理或虚拟服务器上以获得更好的性能和容错能力。伪集群主要适用于开发、测试和学习目的。同时,请确保使用 Elasticsearch 的最新版本,因为它包含了很多关于集群稳定性和脑裂恢复的改进。