Gestione di Master / Slave sul livello applicazione

1

Quindi sto lavorando su un sistema legacy, che aveva un server di database. Per segnalare e dividere il carico di lavoro è stato spostato in una configurazione Master / Slave. Questo processo è fatto e sembra funzionare bene con un ritardo minimo o nullo tra un inserimento o un aggiornamento sul master e viene copiato nello slave. Il problema che ho è il livello dell'applicazione con PHP, sto usando Centos 6.8, ed è completamente aggiornato con una versione 5.3.3 di php, questo non mi consente di accedere alle funzioni mysqlnd_ms.

Non riesco a convincere Centos ad aggiornare la versione php precedente alla 5.3.3, e ho cercato ovunque un livello applicativo che possa essere incorporato per la lettura / scrittura di lookup. La mia preoccupazione principale è quando ci sono dati da inserire, voglio assicurarmi che se estraggo da quella stessa tabella, sappia usare il master per quello poiché non è probabile, che in pochi millisecondi lo schiavo sia già stato catturato up.

Qual è la procedura standard per questo? Dobbiamo aver bisogno di per trovare un modo per aggiornare il php, o c'è un modo per farlo nel livello dell'applicazione senza fare qualche difficile aggiornamento della versione di php.

    
posta Cory Evans 29.01.2017 - 05:29
fonte

1 risposta

1

La mia soluzione a questa domanda è stata di fare questo:

Ho già una classe di database con cui eseguire tutte le query, quindi ho aggiunto un controllo alla parte superiore della funzione $ db- > query () per verificare se si trattava di una chiamata selezionata, se non lo fosse, viene inviato automaticamente al master. Se si trattava di una chiamata select, controlla la versione cache di SECONDS_BEHIND_MASTER che viene controllata ogni volta che il database è connesso. Ho quindi memorizzato i nomi di ogni tabella che viene sempre aggiornata / inserita e quando è stata eseguita l'ultima volta. Quindi, quando si esegue un'istruzione SELECT, controlla le tabelle nell'istruzione select, rispetto all'ultima volta in cui è stato eseguito un aggiornamento da quell'utente a quella tabella. Se è stato aggiornato l'ultima volta prima di seconds_behind_master, utilizza lo slave. Se seconds_behind_master è uguale o superiore a 5 secondi, usa sempre il master.

Non è perfetto ma sta inviando circa l'80% delle chiamate selezionate ora al server slave, e questo è abbastanza buono per i miei scopi in questo momento.

    
risposta data 31.01.2017 - 02:28
fonte

Leggi altre domande sui tag