Come faccio correttamente un'istantanea di un volume EBS con un'istanza RabbitMQ in esecuzione?
-
21-09-2019 - |
Domanda
Sto usando RabbitMQ su un'istanza EC2 e ho le tabelle mnesia su un volume EBS, così quando ho SnapShot e provo a lanciare un'altra istanza con gli stessi dati, sembra che la tabella è in uso da un altro RabbitMQ esempio.
è l'unico modo per aggirare il problema di chiudere RabbitMQ verso il basso per il colore / snapshot e quindi avviare il backup una volta fatto?
C'è un modo per ripulire i file in modo che non appaiono bloccati o sbloccati sono la forza?
Non è un problema comune sarò affrontando, proprio curioso di sapere se c'è una soluzione migliore.
Per chiarire, l'errore che vedo è:. timeout_waiting_for_tables
Soluzione
Per prima cosa il filesystem di essere interessato. Non sono sicuro se si sta utilizzando LVM, ext3, XFS o cosa, ma se siete su LVM, si potrebbe desiderare di checkout la pagina man dmsetup ; specificamente dmsetup suspend / resume
Vi ritroverete con qualcosa di simile:
dmsetup suspend <dev>
ec2-create-snapshot <vol>
dmsetup resume <dev>
Una volta che hai il filesystem sync'ing / sospensione, c'è RabbitMQ di cui preoccuparsi. RabbitMQ sviluppatore Matthias Radestock afferma in una thread di posta elettronica :
Ma per i messaggi persistenti Io non sono così sicuro. Come è il rabbit_persister.LOG gestito? Posso solo fare una copia di backup ogni volta, o posso solo prendere uno dei rabbit_persister.LOG.previous?
Mi piacerebbe il backup entrambi i file. Dovrebbe essere possibile ripristinare la rabbit_persister.LOG da un backup anche quando che il backup è stata presa in al centro di un accodamento - non ho testato che però. Il registro .previous è necessario nel caso backup prende posto mentre il registro viene rotolato.
Dove dovrei cercare di scoprire come spesso è rotolato?
La logica per decidere quando a rotolare il registro è piuttosto complessa.
Posso innescare un rotolo manuale?
rabbit__persister: force_snapshot () in il guscio Erlang fa il trucco.
Checkout forza-snapshot di destinazione nel RabbitMQ Makefile .