使用 EC2 发现插件
编辑使用 EC2 发现插件编辑
discovery-ec2
插件允许 Elasticsearch 通过查询 AWS API 获取运行这些节点的 EC2 实例的地址,从而在运行于 AWS EC2 上的集群中找到符合主节点条件的节点。
通常,将发现过程限制在集群中符合主节点条件的节点范围内是一个好主意。此插件允许您通过某些条件识别这些节点,包括它们的标签、它们所属的安全组以及它们在可用区内的位置。即使发现不符合主节点条件的节点,发现过程也能正常工作,但如果能避免这种情况,主节点选举的效率会更高。
可以使用 实例角色 对与 AWS API 的交互进行身份验证,或者可以提供自定义凭据。
配置 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_key
和discovery.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 服务端点的协议,可以是
http
或https
。默认为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 服务端点时使用的方案。有效值为http
或https
。默认为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_ip
、public_ip
、private_dns
、public_dns
或tag: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
标签设置为master
且environment
标签设置为dev
或staging
的节点。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 主机值 | 描述 |
---|---|
|
机器的私有 IP 地址 (ipv4)。 |
|
机器的私有主机名。 |
|
机器的公有 IP 地址 (ipv4)。 |
|
机器的公有主机名。 |
|
等效于 |
|
等效于 |
|
等效于 |
使用任何发现类型时,这些值都是可以接受的。它们不要求您设置 discovery.seed_providers: ec2
。但是,它们确实需要安装 discovery-ec2
插件。