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.
Per dividere in due uno shard il comando da eseguire è:
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:
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):
Il comando UNLOAD non rimuove i dati su disco: essi devono essere rimossi a mano.
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:
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:
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.
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
Posta un commento