Gruppi di posizionamento

L'archiviazione di milioni di oggetti in un cluster e la loro gestione individuale richiede un notevole utilizzo di risorse. Quindi Ceph utilizza i gruppi di posizionamento (PGs) per rendere più efficace la gestione di un gran numero di oggetti.

Un PG è un sottoinsieme di un lotto che serve a contenere una raccolta di oggetti. Ceph scinde una piscina in una serie di PGs. Quindi, l'algoritmo CRUSH prende in considerazione la mappa del cluster e lo stato del cluster e distribuisce i PG in modo uniforme e pseudo - casuale agli OSD nel cluster.

Ecco come funziona:

Quando un amministratore di sistema crea un lotto, CRUSH crea un numero definito dall'utente di PGs per il lotto. Generalmente, il numero di PGs dovrebbe essere un sottoinsieme di dati ragionevolmente dettagliato. Ad esempio, 100 PG per OSD per pool significa che ogni PG contiene circa l'1% dei dati del pool.

Il numero di PG ha un effetto sulle prestazioni quando Ceph deve spostare un PG da un OSD ad un altro OSD. Se il pool ha un numero troppo basso di PGs, Ceph sposterà una grande percentuale di dati contemporaneamente e il carico di rete avrà un impatto negativo sulle prestazioni del cluster. Se il pool ha troppi PGs, Ceph utilizzerà troppa CPU e RAM quando si spostano piccole percentuali di dati e quindi influirà negativamente sulle prestazioni del cluster. Per i dettagli sul calcolo del numero di PG per ottenere prestazioni ottimali, consultare Conteggio PG

Ceph si assicura contro la perdita di dati memorizzando repliche di un oggetto o memorizzando porzioni di codice di cancellazione di un oggetto. Poiché Ceph memorizza gli oggetti o le porzioni di codice di cancellazione di un oggetto all'interno dei PG, Ceph replica ogni PG in una serie di OSD denominati Acting Set per ogni copia di un oggetto o per ogni porzione di codice di cancellazione di un oggetto. Un amministratore di sistema può determinare il numero di PGs in un pool e il numero di repliche o di porzioni di codice di cancellazione. Tuttavia, l'algoritmo CRUSH calcola quali OSD sono nel set di recitazione per un particolare PG.

L'algoritmo CRUSH e i PG rendono Ceph dinamico. Le modifiche nella mappa del cluster o nello stato del cluster possono causare lo spostamento automatico di PG da un OSD ad un altro.

Ecco alcuni esempi:

  • Espansione del cluster: quando si aggiunge un nuovo host e i relativi OSD al cluster, la mappa del cluster cambia. Dal momento che CRUSH distribuisce in modo uniforme e pseudo - casuale i PG agli OSD in tutto il cluster, l'aggiunta di un nuovo host e dei relativi OSD significa che CRUSH riassegnerà alcuni dei gruppi di posizionamento del pool a questi nuovi OSD. Ciò significa che gli amministratori di sistema non devono ribilanciare manualmente il cluster. Inoltre, significa che i nuovi OSD contengono approssimativamente la stessa quantità di dati degli altri OSD. Ciò significa anche che i nuovi OSD non contengono OSD appena scritti, impedendo aree sensibili nel cluster.

  • Un OSD non riesce: quando un OSD ha esito negativo, lo stato del cluster cambia. Ceph perde temporaneamente una delle repliche o una parte del codice di cancellazione e deve fare un'altra copia. Se l'OSD primario nella serie attiva ha esito negativo, l'OSD successivo nella serie attiva diventa primario e CRUSH calcola un nuovo OSD per memorizzare la porzione di codice di copia o cancellazione aggiuntiva.

Gestendo milioni di oggetti all'interno del contesto di centinaia o migliaia di PGs, il cluster di archiviazione Ceph può crescere, ridurre e recuperare in modo efficiente.

Per i client Ceph, l'algoritmo CRUSH tramite librados rende il processo di lettura e scrittura degli oggetti molto semplice. Un client Ceph scrive semplicemente un oggetto in un lotto o legge un oggetto da un lotto. L'OSD primario nel set di azione può scrivere repliche dell'oggetto o cancellare porzioni di codice dell'oggetto nei OSD secondari nel set di azione per conto del client Ceph.

Se la mappa del cluster o lo stato del cluster cambia, cambia anche il calcolo CRUSH per cui gli OSD memorizzano il PG. Ad esempio, un client Ceph può scrivere l'oggetto foo nel lotto bar. CRUSH assegnerà l'oggetto a PG 1.ae lo memorizzerà in OSD 5, che esegue repliche rispettivamente su OSD 10 e OSD 15 . Se OSD 5 ha esito negativo, lo stato del cluster cambia. Quando il client Ceph legge l'oggetto foo dal pool bar, il client tramite librados lo richiama automaticamente da OSD 10 come nuovo OSD primario in modo dinamico.

Il client Ceph tramite librados si connette direttamente all'OSD primario all'interno di una serie di azioni durante la scrittura e la lettura di oggetti. Poiché le operazioni di I/O non utilizzano un broker centralizzato, l'oversubscription di rete in genere NON è un problema con Ceph.

Il seguente diagramma illustra il modo in cui CRUSH assegna gli oggetti ai PG e i PG agli OSD. L'algoritmo CRUSH assegna i PG agli OSD in modo che ogni OSD nel set di recitazione si trovi in un dominio di errore separato, il che di solito significa che gli OSD saranno sempre su host server separati e a volte in rack separati.

Figura 1. Gruppi di posizionamento
Gruppi di posizionamento