我使用三台服务器来证明Elasticsearch的集群功能。 这是我的服务器之一'关键配置:
Server1 :(公共地址:115.159.157.163)
cluster.name: czqofnju
node.name: qiang_server
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["115.159.156.116", "182.254.212.194"]
服务器的公共IP地址为115.159.157.163。但是当启动elasticsearch时,它的日志显示它绑定到私有地址
[2017-02-18T10:36:14,491][INFO ][o.e.t.TransportService ]
[qiang_server] publish_address {10.105.197.255:9300}, bound_addresses {10.105.197.255:9300}
然后,当我尝试使用其他服务器连接到此服务器时,它会显示:
[2017-02-18T11:31:05,664][WARN ][o.e.d.z.ZenDiscovery ]
[dbc_server] failed to connect to master
[{qiang_server}{GYT635GNSaqOpBdQK4ZcGg}{O1sDFagITmWFnXRBf-uweA}{10.105.197.255}{10.105.197.255:9300}], retrying...
org.elasticsearch.transport.ConnectTransportException: [qiang_server][10.105.197.255:9300] connect_timeout[30s]
此服务器的密钥配置如下:
Server2 :(公共地址:182.254.212.194)
cluster.name: czqofnju
node.name: dbc_server
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["115.159.157.163"]
如果我尝试向Server1发送HTTP请求,它可以响应。
现在我的问题是:为什么server2可以访问server1并获取它的私有地址:10.105.197.255及其节点名称:qiang_server,但仍然无法连接到server1?
据我所知,10.105.197.255是私有地址,但server2找到了server1,为什么他们仍然无法加入?
以下是我的一些尝试,都失败了: 显然10.105.197.255是私有地址, 我已尝试过像network.host这样的其他配置
网站:仍为同一地址
115.159.157.163:这是我服务器的公共地址,而异常暗示无法绑定到请求地址
全球:结果异常"找不到正在运行的全球范围(公共)地址"
System: CentOS 7.2 4
JVM: OpenJDK 1.8.0_121
Elasticsearch: 5.2.1
任何建议都会有所帮助,谢谢!
答案 0 :(得分:0)
请确认您使用的是该公共IP地址的NAT。如果是这样,则不支持您的设置。
验证:
ip a
如果您在列出的接口上没有看到您的公共IP地址,那么您正在使用NAT。这就是为什么你的network.host: 115.159.157.163
无法绑定。
如果您使用像AWS
这样的云提供商,则应根据云提供商设置VPC
或其他任何内容,并使elasticsearch
绑定到其他节点可访问的私有IP地址,以形成簇。然后将弹性IP(公共IP)绑定到主机以进行外部HTTP访问。