一尘不染

UFW防火墙后面的Elasticsearch集群

elasticsearch

我有一个在两个不同的Digital
Ocean小滴上运行的Elasticsearch集群。它们都是为专用网络而设置的,我有一个运行良好的UFW规则就可以正常运行的Mongo
DB复制集,它只接受来自Droplet的特定(专用)IP地址的相关端口上的连接。

但是,我无法使用相同的方法(只有黄色)获得绿色的Elasticsearch集群运行状况。这意味着节点无法相互连接。

在elasaticsearch.yml中(在两台机器上),我都禁用了多播,并且正在使用单播连接到Droplet的内部IP地址。当我将防火墙设置为接受端口9300上的所有连接(ufw允许9300)时,它工作正常,并且群集运行状况报告为绿色。但是,当我将规则限制为仅允许使用实际IP地址时(与Mongo
DB副本集一样),它不起作用。我已经尝试过使用公共和私有地址,以及IPv4和IPv6。

我在这里想念什么?


阅读 203

收藏
2020-06-22

共1个答案

一尘不染

默认情况下,首选IPV6。您可以通过将java.net.preferIPv4Stack系统属性设置为来更改此行为true
您还必须看到,默认情况下,ES绑定到anyLocalAddress(通常是0.0.0.0::0)。您可以通过设置network.bind_host正确的IP地址来更改此设置。

参考[1.3]»模块»网络设置


更新:

首先,建议您在SO中禁用ipv6,您可以按照以下步骤操作:

/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, 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正确配置。

希望这可以帮助

2020-06-22