我在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时:
答案 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