Gli esempi che si trovano in rete riguardanti un cluster SolrCloud di solito mostrano come avviare il cluster preimpostando una collezione di default. E' un po' più faticoso trovare la spiegazione di come si fa ad aggiungere una nuova collezione a un cluster esistente. Qui di seguito spiego i passaggi fondamentali.
La configurazione di una collection non è altro che la directory "conf" di un core nel caso di Solr in versione non Cloud: nel caso di SolrCloud i file contenuti nella directory non possono risiedere su un nodo in particolare, ma devono essere copiati in ZooKeeper per essere distribuiti a tutti i nodi del cluster.
Per far questo si utilizza il comando zkcli.sh che Solr mette a disposizione in example/scripts/cloud-scripts: è una versione semplificata dell'omonimo comando di ZooKeeper.
In questo comando /node1/solr/examplecoll/conf è la directory contenente i file di configurazione del core (in versione non-Cloud), mentre "examplecollcfg" è il nome che si vuole dare alla configurazione una volta caricata in ZooKeeper. Il risultato sarà che in ZooKeeper troveremo una specie di directory (è un path a tutti gli effetti) di nome "examplecollcfg" contenente i file che sono stati copiati da /node1/solr/examplecoll/conf.
Ovviamente l'indirizzo su cui è in ascolto ZooKeeper dipende dalla vostra configurazione. Per me è localhost:2181.
Il secondo passaggio consiste nell'associare il nome della collection alla configurazione. Questo comando può (e deve) essere eseguito prima della creazione della collection.
In questo comando "examplecoll" è il nome della nuova collezione che andremo a creare.
In alternativa è possibile saltare questo passaggio se nel comando di creazione della collection si specifica anche il nome della configurazione da associare. Riporto un esempio più sotto.
Il seguente comando crea fisicamente sui nodi leader i core che rappresentano gli shard della collection.
Ai core vengono dati dei nomi standard così composti:
<collection>_shard<numeroshard>_replica<numeroreplica>
dove nel caso dei leader <numeroreplica> è 1.
Qualche dettaglio in più sui parametri:
La descrizione completa di questo e altri comandi relativi alle Collections API si trova qui:
https://cwiki.apache.org/confluence/display/solr/Collections+API
Come accennato sopra, è possibile creare una collection e associarle la configurazione in un unico passaggio con il comando di creazione della collection aggiungendo il parametro collection.configName.
Sui nodi replica i core che rappresentano gli shard della nostra collection devono essere creati a mano.
Nota: il comando di creazione di una collection (così come gli altri appartenenti alle Collections API) può essere diretto verso uno qualunque dei nodi del cluster. I comandi relativi a una singola replica devono essere diretti verso il nodo su cui si trova (o vogliamo creare) la replica.
Avendo creato una collection con due shard (numShards=2) ora procedo a creare una replica per ciascuno shard:
In questo caso io ho i server Solr attivi sullo stesso host fisico, così li distinguo tramite la porta di comunicazione: i nodi su cui stiamo creando le repliche rispondono alle porte 8900 e 7500.
Il nome dei core può essere qualunque cosa: nell'esempio ho utilizzato la nomenclatura standard di Solr. Nel comando è obbligatorio specificare il nome della collection a cui i core sono associati e l'id dello shard di cui ciascun core sarà la replica.
Alcune operazioni, come l'aggiunta o la rimozione delle repliche, si possono eseguire anche utilizzando le API della collection invece di quelle dei core. Questo articolo mostra come:
http://heliosearch.org/solrcloud-assigning-nodes-machines
Caricamento della configurazione della collection in ZooKeeper
La configurazione di una collection non è altro che la directory "conf" di un core nel caso di Solr in versione non Cloud: nel caso di SolrCloud i file contenuti nella directory non possono risiedere su un nodo in particolare, ma devono essere copiati in ZooKeeper per essere distribuiti a tutti i nodi del cluster.
Per far questo si utilizza il comando zkcli.sh che Solr mette a disposizione in example/scripts/cloud-scripts: è una versione semplificata dell'omonimo comando di ZooKeeper.
./zkcli.sh --zkhost localhost:2181 --cmd upconfig --confdir /node1/solr/examplecoll/conf --confname examplecollcfg
In questo comando /node1/solr/examplecoll/conf è la directory contenente i file di configurazione del core (in versione non-Cloud), mentre "examplecollcfg" è il nome che si vuole dare alla configurazione una volta caricata in ZooKeeper. Il risultato sarà che in ZooKeeper troveremo una specie di directory (è un path a tutti gli effetti) di nome "examplecollcfg" contenente i file che sono stati copiati da /node1/solr/examplecoll/conf.
Ovviamente l'indirizzo su cui è in ascolto ZooKeeper dipende dalla vostra configurazione. Per me è localhost:2181.
Associazione della collection alla configurazione
Il secondo passaggio consiste nell'associare il nome della collection alla configurazione. Questo comando può (e deve) essere eseguito prima della creazione della collection.
./zkcli.sh --zkhost localhost:2181 --cmd linkconfig --collection examplecoll --confname examplecollcfg
In questo comando "examplecoll" è il nome della nuova collezione che andremo a creare.
In alternativa è possibile saltare questo passaggio se nel comando di creazione della collection si specifica anche il nome della configurazione da associare. Riporto un esempio più sotto.
Creazione della collection sui nodi leader del cluster
Il seguente comando crea fisicamente sui nodi leader i core che rappresentano gli shard della collection.
curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=examplecoll&numShards=2&replicationFactor=1&maxShardsPerNode=2'
Ai core vengono dati dei nomi standard così composti:
<collection>_shard<numeroshard>_replica<numeroreplica>
dove nel caso dei leader <numeroreplica> è 1.
Qualche dettaglio in più sui parametri:
- numShards: numero di shard in cui sarà diviso l'indice della collection;
- replicationFactor: limita il numero di repliche che vengono create durante la creazione della collection. In questo modo è possibile limitare il numero di nodi del cluster (server Solr) utilizzati per la collection. Per esempio la collection può usare 10 o 20 nodi anche se ce ne sono 100 disponibili;
- maxShardsPerNode: numero massimo di shard della stessa collection che possono essere ospitati su un singolo nodo.
La descrizione completa di questo e altri comandi relativi alle Collections API si trova qui:
https://cwiki.apache.org/confluence/display/solr/Collections+API
Associazione della collection alla configurazione + Creazione della collection sui nodi leader del cluster
Come accennato sopra, è possibile creare una collection e associarle la configurazione in un unico passaggio con il comando di creazione della collection aggiungendo il parametro collection.configName.
curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=examplecoll&numShards=2&replicationFactor=1&maxShardsPerNode=2&collection.configName=examplecollcfg'
Creazione della collection sui nodi replica del cluster
Sui nodi replica i core che rappresentano gli shard della nostra collection devono essere creati a mano.
Nota: il comando di creazione di una collection (così come gli altri appartenenti alle Collections API) può essere diretto verso uno qualunque dei nodi del cluster. I comandi relativi a una singola replica devono essere diretti verso il nodo su cui si trova (o vogliamo creare) la replica.
Avendo creato una collection con due shard (numShards=2) ora procedo a creare una replica per ciascuno shard:
curl 'http://localhost:7500/solr/admin/cores?action=CREATE&name=examplecoll_shard1_replica2&collection=examplecoll&shard=shard1' curl 'http://localhost:8900/solr/admin/cores?action=CREATE&name=examplecoll_shard2_replica2&collection=examplecoll&shard=shard2'
In questo caso io ho i server Solr attivi sullo stesso host fisico, così li distinguo tramite la porta di comunicazione: i nodi su cui stiamo creando le repliche rispondono alle porte 8900 e 7500.
Il nome dei core può essere qualunque cosa: nell'esempio ho utilizzato la nomenclatura standard di Solr. Nel comando è obbligatorio specificare il nome della collection a cui i core sono associati e l'id dello shard di cui ciascun core sarà la replica.
Alcune operazioni, come l'aggiunta o la rimozione delle repliche, si possono eseguire anche utilizzando le API della collection invece di quelle dei core. Questo articolo mostra come:
http://heliosearch.org/solrcloud-assigning-nodes-machines
Commenti
Posta un commento