我有一个在两个不同的Digital Ocean小滴上运行的Elasticsearch集群。它们都是为专用网络而设置的,我有一个运行良好的UFW规则就可以正常运行的Mongo DB复制集,它只接受来自Droplet的特定(专用)IP地址的相关端口上的连接。
但是,我无法使用相同的方法(只有黄色)获得绿色的Elasticsearch集群运行状况。这意味着节点无法相互连接。
在elasaticsearch.yml中(在两台机器上),我都禁用了多播,并且正在使用单播连接到Droplet的内部IP地址。当我将防火墙设置为接受端口9300上的所有连接(ufw允许9300)时,它工作正常,并且群集运行状况报告为绿色。但是,当我将规则限制为仅允许使用实际IP地址时(与Mongo DB副本集一样),它不起作用。我已经尝试过使用公共和私有地址,以及IPv4和IPv6。
我在这里想念什么?
默认情况下,首选IPV6。您可以通过将java.net.preferIPv4Stack系统属性设置为来更改此行为true。 您还必须看到,默认情况下,ES绑定到anyLocalAddress(通常是0.0.0.0或::0)。您可以通过设置network.bind_host正确的IP地址来更改此设置。
true
anyLocalAddress
0.0.0.0
::0
network.bind_host
参考[1.3]»模块»网络设置
更新:
首先,建议您在SO中禁用ipv6,您可以按照以下步骤操作:
在/etc/sysctl.conf:
/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1
要在正在运行的系统中禁用:
echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6
要么
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1
之后,您必须更改两个节点elasticsearch.yml的值以及network.bind_host它们各自的IP
elasticsearch.yml
# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens # on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node # communication. (the range means that if the port is busy, it will automatically # try the next port). # Set the bind address specifically (IPv4 or IPv6): # network.bind_host: 10.0.0.1 # Set the address other nodes will use to communicate with this node. If not # set, it is automatically derived. It must point to an actual IP address. # network.publish_host: 10.0.0.1
或设置
# Set both 'bind_host' and 'publish_host': # network.host: 10.0.0.1
最后,您必须验证网络适配器的配置,这两个适配器都必须使用之前使用的IP正确配置。
希望这可以帮助