节点设置
自行管理
每次启动 Elasticsearch 实例时,您实际上是在启动一个节点。连接在一起的节点集合称为一个集群。如果您只运行一个 Elasticsearch 节点,那么您就拥有一个单节点集群。
集群中的每个节点默认都可以处理HTTP 和传输流量。传输层专用于节点之间的通信;HTTP 层由 REST 客户端使用。
所有节点都知道集群中的所有其他节点,并且可以请求转发给适当的节点。
Elasticsearch 使用 node.name 作为特定 Elasticsearch 实例的可读标识符。此名称包含在许多 API 的响应中。节点名称默认为 Elasticsearch 启动时机器的主机名,但可以在 elasticsearch.yml 中显式配置。
node.name: prod-data-2
您可以通过在 elasticsearch.yml 中设置 node.roles 来定义节点的角色。如果您设置了 node.roles,则节点只会分配您指定的角色。如果您不设置 node.roles,则节点将分配以下角色:
masterdatadata_contentdata_hotdata_warmdata_colddata_frozeningestmlremote_cluster_clienttransform
还有以下附加角色可用:
voting_only
如果您将 node.roles 设置为空数组(node.roles: [ ]),则该节点将被视为仅协调节点。
如果您设置了 node.roles,请确保指定集群所需的每个节点角色。每个集群都需要以下节点角色:
masterdata_content和data_hot或data
某些 Elastic Stack 功能还需要特定的节点角色。
- 跨集群搜索和跨集群复制需要
remote_cluster_client角色。 - Stack Monitoring 和 ingest 管道需要
ingest角色。 - Fleet、Elastic Security 应用和 transforms 需要
transform角色。使用这些功能进行跨集群搜索还需要remote_cluster_client角色。 - 机器学习功能,例如异常检测,需要
ml角色。
随着集群的增长,特别是如果您有大型机器学习作业或持续的 transforms,请考虑将专用的 master 节点与专用的数据节点、机器学习节点和 transform 节点分开。
要了解有关可用节点角色的更多信息,请参阅节点角色。
每个数据节点和 master 候选节点都需要访问数据目录,其中将存储分片、索引和集群元数据。path.data 默认为 $ES_HOME/data,但可以在 elasticsearch.yml 配置文件中配置为绝对路径或相对于 $ES_HOME 的路径,如下所示:
path.data: /var/elasticsearch/data
与所有节点设置一样,它也可以在命令行上指定为:
./bin/elasticsearch -Epath.data=/var/elasticsearch/data
path.data 目录的内容必须在重启之间保持不变,因为您的数据就存储在这里。Elasticsearch 要求文件系统表现得好像它是由本地磁盘支持的,但这意味着它可以在正确配置的远程块设备(例如 SAN)和远程文件系统(例如 NFS)上正常工作,只要远程存储的行为与本地存储没有区别。您可以在同一个文件系统上运行多个 Elasticsearch 节点,但每个 Elasticsearch 节点必须有自己的数据路径。
在使用 .zip 或 .tar.gz 发行版时,应将 path.data 设置配置为将数据目录放在 Elasticsearch 主目录之外,这样就可以在不删除数据的情况下删除主目录!RPM 和 Debian 发行版已经为您完成了这项工作。
请勿修改数据目录中的任何内容,或运行可能干扰其内容的进程。如果 Elasticsearch 以外的任何内容修改了数据目录的内容,Elasticsearch 可能会失败,报告损坏或其他数据不一致,或者在静默丢失部分数据后可能看似正常工作。不要尝试对数据目录进行文件系统备份;没有支持的方法可以恢复此类备份。而是使用快照和恢复来安全地进行备份。不要在数据目录上运行病毒扫描程序。病毒扫描程序会阻止 Elasticsearch 正确工作,并可能修改数据目录的内容。数据目录不包含任何可执行文件,因此病毒扫描只会发现误报。
如果需要,您可以为节点添加自定义属性。这些属性可用于过滤分片可以分配到的节点,或者为了分片分配感知而将节点分组。
您也可以在启动节点时使用 -E 命令行参数设置节点属性:
./bin/elasticsearch -Enode.attr.rack_id=rack_one
node.attr.<attribute-name>- (动态) 可以分配给节点的自定义属性。例如,您可以为每个节点分配一个
rack_id属性,以确保主分片和副本分片不会分配在同一机架上。您可以指定多个属性作为逗号分隔的列表。
可以在配置 Elasticsearch 和重要 Elasticsearch 配置中找到更多节点设置,包括: