Risoluzione dei problemi relativi a una replica di lettura MariaDB
Le tecnologie di replica per MariaDB sono asincrone. Per questo motivo, devi occasionalmente aspettarti incrementi del parametro BinLogDiskUsage per l'istanza database di origine e del parametro ReplicaLag per la replica di lettura. Ad esempio, può verificarsi un elevato volume di scrittura in parallelo nell'istanza database di origine. Al contrario, le operazioni di scrittura nella replica di lettura vengono serializzate usando un singolo thread di I/O, causando un ritardo tra l'istanza di origine e la replica di lettura. Per ulteriori informazioni sulle repliche di sola lettura, consulta la panoramica della replica
Puoi ridurre il ritardo tra gli aggiornamenti di un'istanza database di origine e i successivi aggiornamenti della replica di lettura in diversi modi, ad esempio:
-
Dimensionando una replica di lettura in modo che dimensioni di storage e classe dell'istanza database siano equivalenti all'istanza database di origine.
-
Assicurandoti che le impostazioni dei parametri nei gruppi di parametri database usati dall'istanza database di origine e dalla replica di lettura siano compatibili. Per ulteriori informazioni e un esempio, consulta la discussione sul parametro
max_allowed_packetpiù avanti in questa sezione.
Amazon RDS monitora lo stato delle repliche di lettura e aggiorna il campo Replication State dell'istanza della replica di lettura con il valore Error se la replica viene arrestata per qualsiasi motivo. Un possibile esempio è quando query DML in esecuzione nella replica di lettura sono in conflitto con gli aggiornamenti eseguiti nell'istanza database di origine.
Puoi esaminare i dettagli dell'errore associato generato dal motore MariaDB visualizzando il campo Replication Error. Vengono generati anche eventi che indicano lo stato della replica di lettura, inclusi RDS-EVENT-0045, RDS-EVENT-0046 e RDS-EVENT-0047. Per ulteriori informazioni sugli eventi e sulla sottoscrizione a essi, consulta Utilizzo della notifica degli eventi di Amazon RDS. Se viene restituito un messaggio di errore MariaDB, verifica l'errore nella documentazione dei messaggi di errore MariaDB
Un problema comune che può provocare errori di replica si verifica quando il valore del parametro max_allowed_packet per una replica di lettura è minore del parametro max_allowed_packet per l'istanza database di origine. Il parametro max_allowed_packet è un parametro personalizzato che puoi impostare in un gruppo dei parametri database usato per specificare la dimensione massima del codice DML che può essere eseguito nel database. In alcuni casi, il valore del parametro max_allowed_packet nel gruppo dei parametri database associato a un'istanza database di origine è minore del valore del parametro max_allowed_packet nel gruppo dei parametri database associato alla replica di lettura dell'origine. In questi casi, il processo di replica può generare un errore (indicante che il pacchetto è maggiore dei byte specificati da "max_allowed_packet") e arrestare la replica. Puoi correggere questo errore impostando l'origine e la replica di lettura in modo che utilizzino i gruppi di parametri database con gli stessi valori del parametro max_allowed_packet.
Altre situazioni comuni che possono causare errori di replica includono le seguenti:
Scrittura in tabelle su una replica di lettura. Se crei indici su una replica di lettura, il parametro
read_onlydeve essere impostato su 0 affinché gli indici vengano creati. Se scrivi in tabelle nella replica di lettura, l'operazione può interrompere la replica.-
Utilizzo di un motore di storage non transazionale come MyISAM. Le repliche di lettura richiedono un motore di storage transazionale. La replica è supportata solo per il motore di storage InnoDB su MariaDB.
-
Utilizzo di query non deterministiche non sicure come
SYSDATE(). Per ulteriori informazioni, consulta la pagina relativa alla determinazione delle istruzioni sicure e non sicure nel log binario.
Se decidi che un errore possa essere ignorato, completa la procedura descritta in Ignorare l’errore di replica corrente per RDS per MySQL. In caso contrario, puoi eliminare la replica di lettura e creare un'istanza usando lo stesso identificatore istanze DB in modo che l'endpoint sia identico a quello della replica di lettura precedente. Quando un problema relativo alla replica viene risolto, il campo Replication State (Stato di replica) cambia in replicating (replica in corso).
Per le istanze database MariaDB, in alcuni casi le repliche di lettura non possono essere passate alle istanze secondarie se alcuni eventi di registro binari (binlog) non vengono scaricati durante l'evento di errore. In questi casi, elimina e ricrea manualmente le repliche di lettura. Puoi ridurre le possibilità che si verifichi una situazione di questo tipo impostando i seguenti valori dei parametri: sync_binlog=1 e innodb_flush_log_at_trx_commit=1. Tali impostazioni potrebbero ridurre le prestazioni, per cui ti consigliamo di testare il loro impatto prima di implementare le modifiche nell'ambiente di produzione.