Passa ai contenuti principali

SolrCloud: creazione di una nuova collection nel cluster

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.

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.
Nell'esempio ho impostato replicationFactor a 1: in questo modo non vengono associate delle repliche agli shard, ma questi ultimi vengono creati solo sui nodi leader. Ho fatto così per mostrare come si possono aggiungere a mano delle repliche agli shard. Lo preferisco anche perché mi permette di tenere maggiormente sotto controllo i nodi sui cui creare le repliche e la nomenclatura da dare ai core sulle repliche.

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

Post popolari in questo blog

Nuovo sito "Creare programmando" con una sezione per la didattica

Ho organizzato i miei tutorial, fatti con Scratch o altri linguaggi, in un nuovo sito che si chiama "Creare programmando" e che dovrebbe rendere più agevole lo scarico degli stessi. Questo sito contiene anche una sezione dedicata alla didattica tramite il computer in cui voglio raccogliere idee e tutorial che possono trovare applicazione nelle scuole oltre che nei CoderDojo, magari semplicemente perché forniscono degli spunti agli insegnanti sugli argomenti che si possono sviluppare (nel vero senso della parola) tramite il computer. Ho inaugurato la sezione didattica con un nuovo tutorial in Scratch dedicato alle regioni italiane. Cliccate qui per andarlo a vedere.

Un tutorial software per allenarsi all'uso dei sensori hardware

Durante l'ultima sessione di CoderDojo MXP abbiamo proposto ai ragazzi un tutorial che ha lo scopo di impratichirli nei ragionamenti che si rendono necessari quanto ci si trova a dover impostare la traiettoria di una macchinina utilizzando solo un sensore in grado di rilevare il colore della traccia visibile sul pavimento (in scala di grigi). Non avendo (ancora) a disposizione macchinine e sensori "reali" abbiamo iniziato a simulare la situazione disegnando una pista con Scratch utilizzando quattro diversi colori. Il compito dei ragazzi era di riuscire a fare in modo che lo sprite dell'automobilina seguisse la pista senza uscire di strada: le correzioni alla traiettoria avvenivano utilizzando il blocco "sta toccando il colore..." come se ci fosse un sensore in grado di vedere il colore della traccia sotto all'automobile. E se ne sono viste di tutti i colori perché il compito non era facile. Alla fine, per stimolare un po' di competizione tr

Sed: caratteri speciali che si possono usare nel lato destro delle sostituzioni

Il titolo è lungo, ma serve semplicemente per dire che nelle sostituzioni tramite la sed , ovvero quelle realizzate con il comando s/// , è possibile utilizzare alcune sequenze di escape oltre ai soliti backreference dei gruppi "catturati" con le parentesi nell'espressione regolare di sinistra. Nella parte destra dell'espressione (cioè quella dopo la seconda barra /) si possono usare: - \L per trasformare in minuscolo tutto  quello che segue (la L sta per "lowercase"); - \l (è una elle minuscola) per trasformare in minuscolo solo il carattere seguente; - \U per trasformare in maiuscolo tutto  quello che segue (la U sta per "uppercase"); - \u per traformare in maiuscolo solo il carattere seguente; - \E per marcare la fine della trasformazione dei caratteri. Gli "operatori" \L e \U agiscono fino alla fine dell'espressione (delimitata dalla barra / finale) oppure fino alla \E successiva. Quindi, per esempio, per trasformare sol