La configurazione di ZooKeeper è progettata in modo tale da poter installare lo stesso identico file di configurazione su tutti i server del cluster senza modifiche. Questo rende le operazioni un po 'più semplici. Il componente che specifica la configurazione per il nodo locale è il file myid.
La configurazione che hai definito è non una che può essere condivisa su tutti i server. Tutti i server nell'elenco dei server devono essere vincolanti per un indirizzo IP privato accessibile ad altri nodi nella rete. Stai vedendo il tuo server avviare in modalità standalone perché sei impegnato a localhost. Quindi, il problema è che gli altri server nel cluster non possono vedere localhost.
La configurazione dovrebbe apparire più simile a:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
server.1=<private ip of ec2 instance 1>:2888:3888
server.2=<private ip of ec2 instance 2>:2888:3888
server.3=<private ip of ec2 instance 3>:2888:3888
Le due porte elencate in ogni definizione di server sono rispettivamente i quorum e elettorali porte utilizzate dai nodi Zookeeper per comunicare tra loro internamente. Di solito non è necessario modificare queste porte e si dovrebbe cercare di mantenerle uguali tra i server per coerenza.
Inoltre, come ho detto dovresti essere in grado di condividere lo stesso identico file di configurazione in tutte le istanze. L'unica cosa che dovrebbe cambiare è il file myid.
Probabilmente sarà necessario creare un gruppo di sicurezza e aprire la porta client per essere disponibili per i client e le porte di quorum/elezione per essere accessibili da altri server ZooKeeper.
Infine, si potrebbe voler esaminare un'interfaccia utente per aiutare a gestire il cluster.Netflix makes a decent UI che ti fornirà una vista del tuo cluster e aiuterà anche a ripulire vecchi log e memorizzare snapshot su S3 (ZooKeeper prende istantanee ma non cancella i vecchi log delle transazioni, quindi il tuo disco si riempirà se non vengono rimossi correttamente) . Ma una volta configurato correttamente, dovresti essere in grado di vedere anche i server ZooKeeper che si connettono tra loro nei registri.
EDIT
@czerasz nota che a partire dalla versione 3.4.0 è possibile utilizzare le direttive autopurge.snapRetainCount
e autopurge.purgeInterval
per mantenere i vostri scatti puliti.
@chomp osserva che alcuni utenti hanno dovuto utilizzare 0.0.0.0
per l'IP del server locale per far funzionare la configurazione di ZooKeeper su EC2. In altre parole, sostituire <private ip of ec2 instance 1>
con 0.0.0.0
nel file di configurazione su instance 1
. Ciò è contrario al modo in cui i file di configurazione di ZooKeeper sono progettati, ma potrebbero essere necessari su EC2.
A partire dalla versione '3.4.0' è possibile utilizzare le direttive' autopurge.snapRetainCount' e 'autopurge.purgeInterval' per mantenere pulite le istantanee. – czerasz
Invece di inserire l'IP privato della macchina, nel file zoo.cfg dell'istanza 1 (ad esempio), dovrebbe essere "0.0.0.0". – chomp
@chomp stai dicendo che se questo fosse il file di configurazione per 'server.1' potresti inserire' 0.0.0.0' per quella specifica voce nel file? I file di configurazione di ZooKeeper sono progettati in modo che possano essere duplicati su macchine senza essere modificati, motivo per cui il file 'myid' è separato. Non possiamo inserire '0.0.0.0' come l'IP di tutti i server poiché non è possibile fare riferimento a un server remoto in questo modo. Pertanto, il file di configurazione dovrebbe avere IP reali. – kuujo