使用 EC2 发现插件

编辑

discovery-ec2 插件允许 Elasticsearch 通过查询 AWS API 获取运行这些节点的 EC2 实例的地址,从而找到在 AWS EC2 上运行的集群中符合主节点条件的节点。

通常,最好将发现过程限制在集群中符合主节点条件的节点。此插件允许您通过某些标准识别这些节点,包括它们的标签、它们的安全组的成员身份以及它们在可用区内的位置。即使发现过程找到不符合主节点条件的节点,它也能正常工作,但如果可以避免这种情况,主节点选举将更有效率。

与 AWS API 的交互可以使用 实例角色进行身份验证,或者可以提供自定义凭据。

启用 EC2 发现

编辑

要启用 EC2 发现,请将 Elasticsearch 配置为使用 ec2 种子主机提供程序

discovery.seed_providers: ec2

配置 EC2 发现

编辑

EC2 发现支持许多设置。一些设置是敏感的,必须存储在 Elasticsearch 密钥库中。例如,要使用特定的访问密钥和密钥进行身份验证,请通过运行以下命令将这些密钥添加到密钥库中

bin/elasticsearch-keystore add discovery.ec2.access_key
bin/elasticsearch-keystore add discovery.ec2.secret_key

EC2 发现插件的可用设置如下。

discovery.ec2.access_key ( 安全可重新加载)
EC2 访问密钥。如果设置,则还必须设置 discovery.ec2.secret_key。如果未设置,则 discovery-ec2 将改为使用实例角色。此设置是敏感的,必须存储在 Elasticsearch 密钥库中。
discovery.ec2.secret_key ( 安全可重新加载)
EC2 密钥。如果设置,则还必须设置 discovery.ec2.access_key。此设置是敏感的,必须存储在 Elasticsearch 密钥库中。
discovery.ec2.session_token ( 安全可重新加载)
EC2 会话令牌。如果设置,则还必须设置 discovery.ec2.access_keydiscovery.ec2.secret_key。此设置是敏感的,必须存储在 Elasticsearch 密钥库中。
discovery.ec2.endpoint
要连接的 EC2 服务端点。请参阅 https://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region 以查找区域的适当端点。此设置默认为 ec2.us-east-1.amazonaws.com,适用于在 us-east-1 区域中运行的集群。
discovery.ec2.protocol
用于连接到 EC2 服务端点的协议,可以是 httphttps。默认为 https
discovery.ec2.proxy.host
用于连接到 EC2 的 HTTP 代理的地址或主机名。如果未设置,则不使用代理。
discovery.ec2.proxy.port
当在 discovery.ec2.proxy.host 中给出 HTTP 代理的地址时,此设置确定用于连接到代理的端口。默认为 80
discovery.ec2.proxy.scheme
通过 discovery.ec2.proxy.host 中指定的代理连接到 EC2 服务端点时使用的方案。有效值为 httphttps。默认为 http
discovery.ec2.proxy.username ( 安全可重新加载)
当在 discovery.ec2.proxy.host 中给出 HTTP 代理的地址时,此设置确定用于连接到代理的用户名。如果未设置,则不使用用户名。此设置是敏感的,必须存储在 Elasticsearch 密钥库中。
discovery.ec2.proxy.password ( 安全可重新加载)
当在 discovery.ec2.proxy.host 中给出 HTTP 代理的地址时,此设置确定用于连接到代理的密码。如果未设置,则不使用密码。此设置是敏感的,必须存储在 Elasticsearch 密钥库中。
discovery.ec2.read_timeout
与 EC2 连接的套接字超时,包括单位。例如,60s 的值指定 60 秒的超时。默认为 50 秒。
discovery.ec2.groups
用于发现的安全组的名称或 ID 的列表。discovery.ec2.any_group 设置确定此设置的行为。默认为空列表,这意味着 EC2 发现会忽略安全组的成员身份。
discovery.ec2.any_group
默认为 true,这意味着属于 discovery.ec2.groups 中指定的任何安全组的实例将用于发现。如果设置为 false,则仅当实例属于 discovery.ec2.groups 中指定的所有安全组时,才会被用于发现。
discovery.ec2.host_type

每个 EC2 实例都有许多可能适合用于发现的不同地址。此设置允许您选择发现过程使用哪个地址。它可以设置为 private_ippublic_ipprivate_dnspublic_dnstag:TAGNAME 中的一个,其中 TAGNAME 指的是标签的名称。此设置默认为 private_ip

如果您将 discovery.ec2.host_type 设置为 tag:TAGNAME 形式的值,则附加到每个实例的标签 TAGNAME 的值将用作该实例的发现地址。发现过程将忽略未设置此标签的实例。

例如,如果您使用名为 elasticsearch-host-name 的标签标记一些 EC2 实例,并将 host_type: tag:elasticsearch-host-name 设置为,则 discovery-ec2 插件将从 elasticsearch-host-name 标签的值中读取每个实例的主机名。阅读有关 EC2 标签的更多信息

discovery.ec2.availability_zones
用于发现的可用区名称列表。可用区的名称是 区域代码后跟一个字母,例如 us-east-1a。仅使用放置在给定可用区之一中的实例进行发现。
discovery.ec2.tag.TAGNAME

用于发现的名为 TAGNAME 的标签值的列表。如果设置,则仅使用标记有给定值之一的实例进行发现。例如,以下设置将仅使用 role 标签设置为 masterenvironment 标签设置为 devstaging 的节点。

discovery.ec2.tag.role: master
discovery.ec2.tag.environment: dev,staging

用于发现的标签名称只能包含 ASCII 字母、数字、连字符和下划线。特别是,您不能使用名称中包含冒号的标签。

discovery.ec2.node_cache_time
设置缓存发现的实例集合的时间长度。Elasticsearch 至少等待这么长时间,才会向 EC2 API 发出发现信息的请求。如果请求过于频繁,AWS 可能会拒绝发现请求,这将导致发现失败。默认为 10s

此插件的所有 安全 设置都是 可重新加载的,允许您在无需重启每个节点的情况下更新此插件的安全设置。

推荐的 EC2 权限

编辑

discovery-ec2 插件通过对 AWS EC2 API 进行 DescribeInstances 调用来工作。您必须配置您的 AWS 账户以允许此操作,这通常使用 IAM 策略来完成。您可以通过 IAM 管理控制台创建自定义策略。它应该如下所示。

{
  "Statement": [
    {
      "Action": [
        "ec2:DescribeInstances"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ],
  "Version": "2012-10-17"
}

自动节点属性

编辑

discovery-ec2 插件可以自动将 aws_availability_zone 节点属性设置为每个节点的可用区。此节点属性允许您通过使用 分配感知功能,确保每个分片在多个可用区中冗余分配副本。

为了启用 aws_availability_zone 属性的自动定义,请将 cloud.node.auto_attributes 设置为 true。例如

cloud.node.auto_attributes: true
cluster.routing.allocation.awareness.attributes: aws_availability_zone

当使用任何发现类型时,可以像这样自动设置 aws_availability_zone 属性。不需要设置 discovery.seed_providers: ec2。但是,此功能需要安装 discovery-ec2 插件。

绑定到正确的地址

编辑

在 EC2 上部署集群时,正确定义 network.host 非常重要。默认情况下,每个 Elasticsearch 节点仅绑定到 localhost,这将阻止它被在任何其他实例上运行的节点发现。

您可以使用核心网络主机设置将每个节点绑定到所需的地址,或者您可以将 network.host 设置为 discovery-ec2 插件提供的以下 EC2 特定设置之一。

EC2 主机值 描述

_ec2:privateIpv4_

机器的私有 IP 地址 (ipv4)。

_ec2:privateDns_

机器的私有主机名。

_ec2:publicIpv4_

机器的公共 IP 地址 (ipv4)。

_ec2:publicDns_

机器的公共主机名。

_ec2:privateIp_

等效于 _ec2:privateIpv4_

_ec2:publicIp_

等效于 _ec2:publicIpv4_

_ec2_

等效于 _ec2:privateIpv4_

当使用任何发现类型时,这些值都是可以接受的。它们不需要您设置 discovery.seed_providers: ec2。但是,它们确实需要安装 discovery-ec2 插件。