2014-09-30 13 views
5

Possiedo un cluster Elasticsearch in esecuzione su due diversi droplet Digital Ocean. Sono entrambi impostati per reti private, e ho un set di repliche Mongo DB che funziona bene con le regole UFW impostate per accettare solo connessioni sulle porte rilevanti dagli specifici indirizzi IP (privati) delle goccioline.Cluster di Elasticsearch dietro firewall UFW

Tuttavia, non sono in grado di ottenere una salute del cluster Elasticsearch verde utilizzando lo stesso metodo, solo il giallo. Ciò significa che i nodi non sono in grado di connettersi l'un l'altro.

In elasaticsearch.yml (su entrambe le macchine) ho disabilitato il multicast e sto usando unicast per connettersi agli indirizzi IP interni della gocciolina. Quando imposto il firewall per accettare tutte le connessioni sulla porta 9300 (ufw allow 9300) funziona perfettamente e lo stato del cluster è segnalato come verde. Tuttavia, quando limito la regola per consentire solo gli indirizzi IP effettivi, proprio come con il set di repliche Mongo DB, non funziona. Ho provato con gli indirizzi pubblici e privati ​​e con IPv4 e IPv6.

Cosa mi manca qui?

risposta

2

IPv6 è preferito per default. È possibile modificare questo comportamento impostando la proprietà di sistema java.net.preferIPv4Stack su true.
Inoltre, per impostazione predefinita ES deve essere associato a anyLocalAddress (in genere 0.0.0.0 o ::0). È possibile modificare questo impostando network.bind_host con l'indirizzo IP corretto.

Reference [1.3] » Modules » Network Settings


Aggiornamento:

In primo luogo, vi consiglio di disabilitare l'ipv6 nel vostro SO, è possibile farlo seguendo questi passaggi:

In /etc/sysctl.conf:

net.ipv6.conf.all.disable_ipv6 = 1 
net.ipv6.conf.default.disable_ipv6 = 1 

Per disattivare il sistema in esecuzione:

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6 
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6 

o

sysctl -w net.ipv6.conf.all.disable_ipv6=1 
sysctl -w net.ipv6.conf.default.disable_ipv6=1 

Dopo di che, è necessario modificare nel elasticsearch.yml il valore di network.bind_host in entrambi i nodi con i loro rispettivi 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 

Or set

# Set both 'bind_host' and 'publish_host': 
# 
network.host: 10.0.0.1 

Infine è necessario convalidare la configurazione degli adattatori di rete, entrambi devono essere configurati correttamente con l'IP utilizzato in precedenza.

Spero che questo aiuti

+0

Grazie! usando netstat vedo che elasticsearch comunica su IPv6 Non capisco veramente quale sarebbe l'indirizzo IP corretto per ES a cui legarsi. A partire da ora ho impostato network.host = [localhost, 10.0.0.1 (esempio)] sul primo nodo e [localhost, 10.0.0.2 (esempio)] sul secondo host. È corretto? Da netstat vedo anche che ES utilizza un'intera gamma di porte oltre a 9300, ma questo non spiega perché i cluster possono comunicare quando apro la porta 9300 per qualsiasi traffico ma non quando specificano gli indirizzi IP del nodo. – Axelfran

+0

Ho capito che ora funziona, ho seguito le tue istruzioni e in realtà ho dovuto consentire sia l'IP interno che quello esterno nel firewire tutto per farlo passare. Molte grazie! – Axelfran

0

se si esegue il checkout del documento sottostante, il trasporto ES utilizza le porte 9300-9400 per impostazione predefinita. Vorrei provare ad aprire quell'intervallo e poi vedere se è possibile bloccarlo ulteriormente.

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-transport.html

+1

Sfortunatamente non ha funzionato.Credo che il problema abbia qualcosa a che fare con unicast, in quanto funziona consentendo solo la porta 9300 (ES si collega automaticamente alla prima comunque, solo gli othes se non funziona) da tutti gli IP. Ma credo di aver superato il problema codificando l'IPS permesso in elasticsearch.yml in questo modo: discovery.zen.ping.unicast.hosts: ["node1: 9200]," node2: 9200 "] – Axelfran

+0

Buone informazioni – jhilden

Problemi correlati