2013-07-31 18 views
5

Sto usando spymemcached & HashAlgorithm.KETAMA_HASH per connettersi a un pool di memcached di 5 nodi.Come gestire i nodi di memorizzazione memcached quando si utilizza spymemcached e HashAlgorithm.KETAMA_HASH

mia comprensione è quando usiamo un algoritmo di hashing coerente, come, quando un nodo è giù, non abbiamo bisogno di preoccuparsi in quanto verrà ridistribuito la chiave (con min. Impatto)

Che cosa succede se quando il nodo down-ed entrerà nel pool. Cosa devo fare?

Devo verificare che i dati non aggiornati debbano essere rimossi? O il mio programma dovrebbe avere un trattamento speciale per questo caso?

risposta

4

Dato che questo documento è preciso: http://info.couchbase.com/rs/northscale/images/Couchbase_WP_Dealing_with_Memcached_Challenges.pdf

In caso di interruzione della rete, e uno o più client decidere che un particolare server di memcached non è più disponibile, saranno rimaneggiamento automaticamente alcuni dati in il resto dei nodi anche se quello originale è ancora disponibile. Se il nodo alla fine ritorna in servizio (ad esempio dopo che l'interruzione di rete è stata risolta), i dati su quel nodo non saranno aggiornati e i client senza le informazioni aggiornate di rimappatura del key-server leggeranno i dati non aggiornati.

Supponendo che questo è ancora attuale: http://lists.danga.com/pipermail/memcached/2007-April/003852.html Sarebbe aggiornamento sicuro/a filo il nodo prima di aggiungerlo indietro. Forzare il nodo down-down per cancellare qualsiasi voce stantia.

+0

La mia comprensione è che devo svuotare tutti i dati obsoleti in tutti i nodi. Perché? Perché alcuni client potrebbero vedere il nodo down-ed è attivo, ma alcuni client potrebbero ancora supporre che il nodo sia inattivo. Pertanto, dato che i client potrebbero hash la chiave in un nodo diverso, potrebbe verificarsi un'incoerenza dei dati. Ma questo problema è difficile a meno che non abbiamo un modo per bloccare tutti i nodi memcached ed eseguire il flush - per evitare condizioni di competizione. – Howard

+0

In base alla mia opinione, penso che sia ancora sicuro svuotare il nodo down-ed. È pulito, se c'è una richiesta al nodo, risulterà un errore, aggiungendo nuove e nuove informazioni. Se il client pensa che sia inattivo, eseguirà un hash su un altro nodo, risultando anche in una mancanza. Se ciò accade, entrambi i nodi hanno la chiave "pippo" per esempio. Quando il nodo down-down torna online a quel client, è necessario svuotarlo nuovamente. Ecco di più su questo: http://www.caiapps.com/duplicate-key-problem-in-memcache-php/ –

+1

sì, ma quello che hai detto è valido solo quando hai un client singolo ma più server. non c'è modo di coordinare client diversi per utilizzare lo stesso set di server memcached in un dato momento (si supponga di utilizzare un hashing coerente). – Howard

Problemi correlati