Passa ai contenuti principali

SolrCloud: aggiunta di uno shard a una collection esistente

Se uno shard sta diventando eccessivamente ingombrante non si può semplicemente aggiungere uno shard a una collection, ma si deve dividere in due lo shard esistente. Lo shard di partenza rimane inalterato e vengono creati due nuovi shard che contengono ciascuno parte dei documenti dello shard originario.
I due nuovi shard così creati inizieranno a ricevere le richieste al posto dello shard di partenza che, però, dovrà essere disattivato a mano. I due nuovi shard risiederanno sugli stessi nodi dello shard di partenza. Se necessario dovranno essere spostati a mano su altri nodi.

Suddividere uno shard in due


Per dividere in due uno shard il comando da eseguire è:

curl 'http://localhost:8983/solr/admin/collections?action=SPLITSHARD&collection=examplecoll&shard=shard1&async=true'

In questo comando "shard1" è l'id dello shard da dividere e "examplecoll" è il nome della collection a cui appartiene lo shard.
Attenzione al parametro async: è meglio che questa operazione sia eseguita in modalità asincrona perché potrebbe durare a lungo in funzione del numero di documenti presenti nello shard. Per controllare a che punto è l'operazione si usa il comando:

curl 'http://localhost:8983/solr/admin/collections?action=REQUESTSTATUS
      &requestid=request-id'

dove "request-id" è l'id della richiesta asincrona così come restituito quando è stato avviato il comando di split.

A questo punto lo shard è stato suddiviso in due parti. Resta solo da disattivare il vecchio shard su ciascuna delle sue repliche (qui ne ho messe due per esempio):

curl 'http://localhost:7574/solr/admin/cores?action=UNLOAD
      &core=examplecoll_shard1_replica1'

curl 'http://localhost:7500/solr/admin/cores?action=UNLOAD
      &core=examplecoll_shard1_replica2'

Il comando UNLOAD non rimuove i dati su disco: essi devono essere rimossi a mano.

Spostamento di uno shard su un nuovo nodo


Spesso lo split di uno shard viene eseguito per spostare parte dei documenti (e del carico di lavoro) su nuovi nodi del cluster. Non esiste ancora un automatismo, quindi i passaggi devono essere eseguiti a mano.

Per spostare una replica di uno shard su un nuovo nodo le attività da eseguire sono due:

1) creazione di una nuova replica dello shard sul nodo verso cui deve essere migrato:

curl 'http://localhost:9900/solr/admin/cores?action=CREATE
      &name=examplecoll_shard1_0_replica1&collection=examplecoll&shard=shard1_0'

In questo comando lo shard da spostare ha id "shard1_0" perché è uno dei due pezzi di un precedente split dello shard1. Il nome del core che sarà la nuova replica dello shard1_0 è esageratamente complicato perché rispecchia la nomenclatura standard di Solr, ma può essere qualunque cosa.

A questo punto si aspetta un attimo e si controlla con una query che tutti i documenti dello shard siano arrivati a destinazione sulla nuova replica. Poi si procede con il passaggio successivo:

2) disattivazione della vecchia replica sul nodo di partenza:

curl 'http://localhost:7574/solr/admin/cores?action=UNLOAD
      &core=examplecoll_shard1_0_replica1'

Si noti che il nodo su cui è stata creata la replica risponde alla porta 9900 ed è diverso dal nodo da cui la replica è stata migrata e disattivata (che risponde alla porta 7574).

Queste due operazioni devono essere eseguite per ogni replica dello shard che si intende migrare.

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