Elasticsearch 1.x能否在IP范围内发现群集?

时间:2017-12-11 14:41:11

标签: amazon-web-services elasticsearch amazon-ec2

我在AWS上使用EC2服务器设置了两个Elasticsearch集群,位于负载均衡器后面。我想配置AWS以在负载达到负载均衡器上的某个阈值时启动新实例。目前,我使用config/elasticsearch.yml中的以下配置让Elasticsearch实例相互通信:

discover.zen.ping.unicast.hosts: ["172.x.x.x","172.x.x.x"]

由于新实例将启动子网中不确定的私有IP,我想知道是否可以将配置指向IP范围,以便在启动时发现新的群集。这样做有安全隐患吗?

如果没有,是否有另一种方法可以达到同样的效果?我知道Elasticsearch本身就是为了处理负载平衡和扩展,但这是一个更大的解决方案的一部分,并在我的合作伙伴的项目安全规范中指定。

问题

在AWS EC2上托管Elasticsearch时:

  1. 您可以设置Elasticsearch发现以使用IP范围吗?
  2. 使用AWS时,这样做会对安全性产生影响吗?
  3. 如果没有,处理这种情况的适当方法是什么?

1 个答案:

答案 0 :(得分:0)

我自己发现了这个。对于其他发生这种情况的人来说,这就是我所做的。

我安装了Elasticsearch,Apache和Java的基本实例,并制作了一个简单的Elasticsearch启动脚本,以便它可以在系统启动时启动。

我将ES实例上的节点名称设置为node.name: ${HOSTNAME},以便每个节点都可以在群集中识别,并且具有唯一的名称,以防我需要手动登录服务器进行检查。< / p>

最重要的是,您必须使用Elasticsearch的cloud-aws插件来处理您正在使用的相关版本的Elasticsearch。可以找到here

使用elasticsearch.yml您可以使用特定于云的aws配置您的安装,您可以使ES不依赖于IP地址来加入群集,而是可以基于实例发现群集标记,子网或其他任何独特但可在AWS中确定新实例的内容。

我发现this文章非常有帮助。这篇文章的主要内容如下:

AWS IAM角色 需要设置IAM角色并将其分配给新实例,以允许它们与AWS通信并检查新实例以查找特定值。该角色应具有这些权限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeTags",
                "ec2:DescribeRegions",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        }
    ]

Elasticsearch config 安装cloud-aws后,您将能够在elasticsearch.yml文件中使用新配​​置。首先,删除discover.zen.ping.unicast.hosts:,因为不再需要它。实现这一目标的最基本设置是:

cloud:
    aws:
        access_key: <YOUR AWS KEY>
        secret_key: <YOUR AWS SECRET>
discovery:
    type: ec2

但下面是一个更加优化的配置。它将查找标记为esdiscovery:enabled的实例:

discovery.zen.hosts_provider: ec2
discovery.ec2.tag.esdiscovery: enabled
cloud:
    aws:
        access_key: <YOUR AWS KEY>
        secret_key: <YOUR AWS SECRET>
    region: <YOUR AWS REGION>
discovery:
    type: ec2

如果您使用的是EU West,则需要使用以下配置替换该区域:

cloud:
    aws:
        ec2:
            endpoint: ec2.eu-west-2.amazonaws.com