Elasticsearch Master 未发现异常 - 版本 2.3.0
Elasticserch Master not discoverd exception - Version 2.3.0
这是我第一次使用elasticsearch。
以下是我的environment/configuration.
- 我有 3 个 EC2 Ubuntu 14.04 个实例。
- 我已经下载并解压了elasticsearch-2.3.0.tar.gz.
- 我已经在每个实例中更改了 elasticsearch/config 下的 elasticsearch.yml 文件。
我在每个 elasticsearch.yml 文件中进行了以下更改。
3.1。 EC2 实例编号 1(我的客户端节点)
cluster.name: MyCluster
node.name: Client
node.master: false
node.data: false
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。
3.2。 EC2 实例编号 2(我的主节点)
cluster.name: MyCluster
node.name: Master
node.master: true
node.data: true
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。
注意我做了node.data: true (according to this link)
3.3。 EC2 实例编号 3(我的数据节点)
cluster.name: MyCluster
node.name: slave_1
node.master: false
node.data: true
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。
- 在这个配置之后,我 运行 每个实例上的 elasticsearch 服务从数据节点开始,然后是主节点,最后是客户端节点。
- 如果我使用 curl http://localhost:9200 检查节点状态,我得到 json 表明节点是 运行ning.
- 但是当我使用 curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' 检查集群运行状况时,我的客户端实例出现以下错误。
我希望我的问题很清楚,我正在朝着正确的方向前进。
谢谢
Elasticsearch 2.0+ 默认将所有套接字绑定到 localhost
。这意味着,默认情况下,该机器之外的任何东西都无法与其通信。
这是明确出于安全目的和简单的开发设置。在本地,它工作得很好,但是当它变得更严重时,您需要为您的环境配置它。这也是您可以通过 localhost
与节点对话的原因。 基本上,当你想使用 network settings 跨其他机器的多个节点时,你需要这个。这适用于 ES 2.3+:
network:
bind_host: [ _local_, _global_ ]
publish_host: _global_
然后其他节点可以与 public IP 通信,但您仍然有 localhost 来简化在本地使用节点的工作(例如,您——人类——在 SSH 进入时永远不必知道 IP一个盒子)。
由于您在 EC2 中使用 Elasticsearch 2.0+,我建议 you install the cloud-aws
plugin(未来的读者注意:此插件在 ES 5.x 中被分解为 3 个独立的插件!)。
$ bin/plugin install cloud-aws
安装后,您可以更加了解 EC2 实例。有了这个强大的功能,您可以为您的 ES 配置添加更多细节:
# Guarantee that the plugin is installed
plugin.mandatory: cloud-aws
# Discovery / AWS EC2 Settings
discovery
type: ec2
ec2:
availability_zones: [ "us-east-1a", "us-east-1b" ]
groups: [ "my_security_group1", "my_security_group2" ]
# The keys here need to be replaced with your keys
cloud:
aws
access_key: AKVAIQBF2RECL7FJWGJQ
secret_key: vExyMThREXeRMm/b/LRzEB8jWwvzQeXgjqMX+6br
region: us-east-1
node.auto_attributes: true
# Bind to the network on whatever IP you want to allow connections on.
# You _should_ only want to allow connections from within the network
# so you only need to bind to the private IP
node.host: _ec2:privateIp_
# You can bind to all hosts that are possible to communicate with the
# node but advertise it to other nodes via the private IP (less
# relevant because of the type of discovery used, but not a bad idea).
#node:
# bind_host: [ _local_, _ec2:privateIp_, _ec2:publicIp_, _ec2:publicDns_ ]
# publish_host: _ec2:privateIp_
这将允许他们通过将 IP 地址绑定到预期的地址来进行交谈。 如果您希望能够通过 SSH 连接到这些机器并通过本地主机与 ES 通信(您可能这样做是为了调试),那么您将希望使用 _local_
注释掉版本该列表中的 bind_host
。
这是我第一次使用elasticsearch。 以下是我的environment/configuration.
- 我有 3 个 EC2 Ubuntu 14.04 个实例。
- 我已经下载并解压了elasticsearch-2.3.0.tar.gz.
- 我已经在每个实例中更改了 elasticsearch/config 下的 elasticsearch.yml 文件。 我在每个 elasticsearch.yml 文件中进行了以下更改。
3.1。 EC2 实例编号 1(我的客户端节点)
cluster.name: MyCluster
node.name: Client
node.master: false
node.data: false
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。
3.2。 EC2 实例编号 2(我的主节点)
cluster.name: MyCluster
node.name: Master
node.master: true
node.data: true
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。 注意我做了node.data: true (according to this link)
3.3。 EC2 实例编号 3(我的数据节点)
cluster.name: MyCluster
node.name: slave_1
node.master: false
node.data: true
path.data: /home/ubuntu/elasticsearch/data/elasticsearch/nodes/0
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["aa.aa.aa.aa" , "aa.aa.aaa.aa" , "aaa.a.aa.aa"]
在上面的括号中,我提供了我所有 3 个实例的 IP。
- 在这个配置之后,我 运行 每个实例上的 elasticsearch 服务从数据节点开始,然后是主节点,最后是客户端节点。
- 如果我使用 curl http://localhost:9200 检查节点状态,我得到 json 表明节点是 运行ning.
- 但是当我使用 curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' 检查集群运行状况时,我的客户端实例出现以下错误。
我希望我的问题很清楚,我正在朝着正确的方向前进。
谢谢
Elasticsearch 2.0+ 默认将所有套接字绑定到 localhost
。这意味着,默认情况下,该机器之外的任何东西都无法与其通信。
这是明确出于安全目的和简单的开发设置。在本地,它工作得很好,但是当它变得更严重时,您需要为您的环境配置它。这也是您可以通过 localhost
与节点对话的原因。 基本上,当你想使用 network settings 跨其他机器的多个节点时,你需要这个。这适用于 ES 2.3+:
network:
bind_host: [ _local_, _global_ ]
publish_host: _global_
然后其他节点可以与 public IP 通信,但您仍然有 localhost 来简化在本地使用节点的工作(例如,您——人类——在 SSH 进入时永远不必知道 IP一个盒子)。
由于您在 EC2 中使用 Elasticsearch 2.0+,我建议 you install the cloud-aws
plugin(未来的读者注意:此插件在 ES 5.x 中被分解为 3 个独立的插件!)。
$ bin/plugin install cloud-aws
安装后,您可以更加了解 EC2 实例。有了这个强大的功能,您可以为您的 ES 配置添加更多细节:
# Guarantee that the plugin is installed
plugin.mandatory: cloud-aws
# Discovery / AWS EC2 Settings
discovery
type: ec2
ec2:
availability_zones: [ "us-east-1a", "us-east-1b" ]
groups: [ "my_security_group1", "my_security_group2" ]
# The keys here need to be replaced with your keys
cloud:
aws
access_key: AKVAIQBF2RECL7FJWGJQ
secret_key: vExyMThREXeRMm/b/LRzEB8jWwvzQeXgjqMX+6br
region: us-east-1
node.auto_attributes: true
# Bind to the network on whatever IP you want to allow connections on.
# You _should_ only want to allow connections from within the network
# so you only need to bind to the private IP
node.host: _ec2:privateIp_
# You can bind to all hosts that are possible to communicate with the
# node but advertise it to other nodes via the private IP (less
# relevant because of the type of discovery used, but not a bad idea).
#node:
# bind_host: [ _local_, _ec2:privateIp_, _ec2:publicIp_, _ec2:publicDns_ ]
# publish_host: _ec2:privateIp_
这将允许他们通过将 IP 地址绑定到预期的地址来进行交谈。 如果您希望能够通过 SSH 连接到这些机器并通过本地主机与 ES 通信(您可能这样做是为了调试),那么您将希望使用 _local_
注释掉版本该列表中的 bind_host
。