MariaDB
 sql >> Database >  >> RDS >> MariaDB

Failover avanzato utilizzando hook post/pre Script

L'importanza del failover

Il failover è una delle pratiche di database più importanti per la governance del database. È utile non solo quando si gestiscono database di grandi dimensioni in produzione, ma anche se si desidera essere sicuri che il proprio sistema sia sempre disponibile ogni volta che si accede, soprattutto a livello di applicazione.

Prima che possa aver luogo un failover, le istanze del database devono soddisfare determinati requisiti. Questi requisiti sono, infatti, molto importanti per un'elevata disponibilità. Uno dei requisiti che le istanze del database devono soddisfare è la ridondanza. La ridondanza consente il proseguimento del failover, in cui la ridondanza è configurata per avere un candidato al failover che può essere un nodo di replica (secondario) o da un pool di repliche che agiscono come nodi di standby o hot-standby. Il candidato viene selezionato manualmente o automaticamente in base al nodo più avanzato o aggiornato. Di solito, si desidera una replica hot-standby in quanto può salvare il database dall'estrazione di indici dal disco poiché un hot-standby popola spesso gli indici nel pool di buffer del database.

Failover è il termine usato per descrivere che si è verificato un processo di ripristino. Prima del processo di ripristino, ciò si verifica quando un nodo del database primario (o master) si guasta dopo un arresto anomalo, dopo disastri naturali, dopo un guasto hardware o potrebbe aver subito un partizionamento di rete; questi sono i casi più comuni in cui potrebbe verificarsi un failover. Il processo di recupero di solito procede automaticamente e quindi cerca il secondario (replica) più desiderato e aggiornato come indicato in precedenza.

Failover avanzato

Sebbene il processo di ripristino durante un failover sia automatico, in alcune occasioni non è necessario automatizzare il processo e deve subentrare un processo manuale. La complessità è spesso la considerazione principale associata alle tecnologie che compongono l'intero stack del database:il failover automatico può essere combinato anche con il failover manuale.

Nella maggior parte delle considerazioni quotidiane sulla gestione dei database, la maggior parte delle preoccupazioni relative al failover automatico non sono davvero banali. Spesso risulta utile implementare e configurare un failover automatico in caso di problemi. Anche se sembra promettente in quanto copre le complessità, arrivano i meccanismi di failover avanzati e ciò coinvolge gli eventi "pre" e gli eventi "post" che sono legati come hook in un software o una tecnologia di failover.

Questi eventi pre e post presentano controlli o determinate azioni da eseguire prima che possa finalmente procedere con il failover e, dopo che un failover è stato eseguito, alcune pulizie per assicurarsi che il failover sia finalmente un successo uno. Fortunatamente, sono disponibili strumenti che consentono non solo il failover automatico, ma anche la capacità di applicare hook pre e post script.

In questo blog, utilizzeremo il failover automatico ClusterControl (CC) e spiegheremo come utilizzare gli hook pre e post script e a quale cluster si applicano.

Failover replica ClusterControl

Il meccanismo di failover ClusterControl è applicabile in modo efficiente sulla replica asincrona applicabile alle varianti MySQL (MySQL/Percona Server/MariaDB). È applicabile anche ai cluster PostgreSQL/TimescaleDB:ClusterControl supporta la replica in streaming. I cluster MongoDB e Galera hanno il proprio meccanismo per il failover automatico integrato nella propria tecnologia di database. Ulteriori informazioni su come ClusterControl esegue il ripristino automatico del database e il failover.

Il failover di ClusterControl non funziona a meno che il ripristino del nodo e del cluster (ripristino automatico siano abilitati). Ciò significa che questi pulsanti dovrebbero essere verdi.

La documentazione afferma che queste opzioni di configurazione possono essere utilizzate anche per abilitare / disabilitare quanto segue:

enable_cluster_autorecovery=

  • Se non definito, CMON viene impostato automaticamente su 0 (falso) e NON eseguirà il ripristino automatico se rileva un errore del cluster. Il valore supportato è 1 (il ripristino del cluster è abilitato) o 0 (il ripristino del cluster è disabilitato).

enable_node_autorecovery=

  • Se non è definito, il valore predefinito di CMON è 0 (falso) e NON eseguirà il ripristino automatico se rileva un errore del nodo. Il valore supportato è 1 (il ripristino del nodo è abilitato) o 0 (il ripristino del nodo è disabilitato).

Queste opzioni, se impostate in /etc/cmon.d/cmon_.cnf, richiedono un riavvio di cmon. Pertanto, devi riavviare usando il seguente comando:

$ systemctl restart cmon

Per questo blog, ci stiamo concentrando principalmente su come utilizzare gli hook pre/post script, che è essenzialmente un grande vantaggio per il failover avanzato della replica.

Supporto per la replica di failover del cluster pre/post script

Come accennato in precedenza, le varianti di MySQL che utilizzano la replica asincrona (inclusa semi-sincrona) e la replica in streaming per PostgreSQL/TimescaleDB supportano questo meccanismo. ClusterControl ha le seguenti opzioni di configurazione che possono essere utilizzate per hook pre e post script. Fondamentalmente, queste opzioni di configurazione possono essere impostate tramite i loro file di configurazione o possono essere impostate tramite l'interfaccia utente web (ne parleremo più avanti).

La nostra documentazione afferma che queste sono le seguenti opzioni di configurazione che possono alterare il meccanismo di failover utilizzando gli hook pre/post script:

replication_pre_failover_script=

  • Percorso dello script di failover sul nodo ClusterControl. Questo script viene eseguito prima che si verifichi il failover, ma dopo che un candidato è stato eletto ed è possibile continuare il processo di failover. Se lo script restituisce un valore diverso da zero, forzerà l'interruzione del failover. Se lo script è definito ma non trovato, il failover verrà interrotto.

  • Sono forniti 4 argomenti allo script:

    • arg1="Tutti i server nella replica"

    • arg2="Il maestro fallito"

    • arg3="candidato selezionato"

    • arg4="Schiavi del vecchio maestro"

  • Gli argomenti verranno passati in questo modo:pre_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Lo script deve essere accessibile sul controller ed eseguibile.

  • Esempio:replication_pre_failover_script=/usr/local/bin/pre_failover_script.sh

replication_post_failover_script=

  • Percorso dello script di failover sul nodo ClusterControl. Questo script viene eseguito dopo che si è verificato il failover. Se lo script restituisce un valore diverso da zero, verrà scritto un avviso nel registro lavori. Lo script deve essere accessibile ed eseguibile sul controller.

  • Sono forniti 4 argomenti allo script:

    • arg1="Tutti i server nella replica"

    • arg2="Il maestro fallito"

    • arg3="candidato selezionato"

    • arg4="Schiavi del vecchio maestro"

  • Gli argomenti verranno passati in questo modo:post_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Lo script deve essere accessibile sul controller ed eseguibile.

  • Esempio:replication_post_failover_script=/usr/local/bin/post_failover_script.sh

replication_post_unsuccessful_failover_script=

  • Percorso dello script sul nodo ClusterControl. Questo script viene eseguito dopo che il tentativo di failover non è riuscito. Se lo script restituisce un valore diverso da zero, verrà scritto un avviso nel registro lavori. Lo script deve essere accessibile sul controller ed eseguibile.

  • Sono forniti 4 argomenti allo script:

    • arg1="Tutti i server nella replica"

    • arg2="Il maestro fallito"

    • arg3="candidato selezionato"

    • arg4="Schiavi del vecchio maestro"

  • Gli argomenti verranno passati in questo modo:post_fail_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Lo script deve essere accessibile sul controller ed eseguibile.

  • Esempio:replication_post_unsuccessful_failover_script=post_fail_failover_script.sh

Tecnicamente, una volta impostate le seguenti opzioni di configurazione nel file di configurazione /etc/cmon.d/cmon_.cnf, è necessario riavviare cmon, ovvero eseguire il comando seguente:

$ systemctl restart cmon

In alternativa, puoi anche impostare le opzioni di configurazione andando su