Elasticseach 6.1 EC2群集发现不起作用

sih*_*hil 3 amazon-ec2 discovery amazon-web-services elasticsearch elasticsearch-6

我目前正在将群集升级到6.1,无法在启动时让节点相互发现。三个单独的节点启动,但随后陷入循环:

[2018-01-08T11:33:01,421][WARN ][o.e.d.z.ZenDiscovery     ] [ip-10-xxx-xxx-xxx] not enough master nodes discovered during pinging (found [[Candidate{node={ip-10-xxx-xxx-xxx}{gMlxxxxxRW-74axxxQ8V-3x}{6gBBYZxxxxxxxon=-1}]], but needed [2]), pinging again
Run Code Online (Sandbox Code Playgroud)

我的配置的相关部分是:

# Use the AWS private IP as self identifier
http.host: _ec2:privateIp_
network.host: _ec2:privateIp_
http.bind_host: 0.0.0.0
network.bind_host: 0.0.0.0

discovery.zen.hosts_provider: ec2
# These are expanded in my CloudFormation template
discovery.ec2.tag.Stack: @@STACK
discovery.ec2.tag.App: @@APP
discovery.ec2.tag.Stage: @@STAGE
Run Code Online (Sandbox Code Playgroud)

(使用logger.org.elasticsearch.discovery.ec2: "TRACE")打开调试以进行发现为我提供了一些证据,证明发现过程失败了:

[2018-01-08T11:32:58,419][TRACE][o.e.d.e.AwsEc2UnicastHostsProvider] [ip-10-xxx-xxx-xxx] building dynamic unicast discovery nodes...
[2018-01-08T11:32:58,420][DEBUG][o.e.d.e.AwsEc2UnicastHostsProvider] [ip-10-xxx-xxx-xxx] using dynamic discovery nodes []
Run Code Online (Sandbox Code Playgroud)

sih*_*hil 5

经过进一步调试后,我发现文档不正确。

端点设置的文档说:“要连接的ec2服务端点。ec2客户端会根据实例位置自动确定该端点,但可以明确指定。”

不幸的是,事实并非如此,https://github.com/elastic/elasticsearch/issues/27464上存在一个未解决的问题。

进一步进行故障排除时,我logger.com.amazonaws.request: "DEBUG"在我的elasticsearch配置中使用了AWS日志记录。这在日志文件中提供了一个条目,表明尽管实例在eu-west-1中,它仍在与us-east-1联系:

[2018-01-08T12:26:40,029][DEBUG][c.a.request              ] Sending Request: POST https://ec2.us-east-1.amazonaws.com / Parameters: ({"Action":["DescribeInstances"],"Version":["2016-11-15"] ...<snip>
Run Code Online (Sandbox Code Playgroud)

看起来他们知道并且有可能对其进行修复,以使插件的行为与文档相匹配(请参阅https://github.com/elastic/elasticsearch/issues/27924),但与此同时,此修复程序是明确设置端点使用类似:

discovery.ec2.endpoint: ec2.eu-west-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)