Как мне правильно сделать снимок тома EBS с запущенным экземпляром RabbitMQ?
-
21-09-2019 - |
Вопрос
Я использую RabbitMQ в экземпляре EC2, и у меня есть таблицы Mnesia на томе EBS, поэтому, когда я делаю снимок и пытаюсь запустить другой экземпляр с теми же данными, оказывается, что таблица используется другим экземпляром RabbitMQ.
Единственный способ обойти это - отключить RabbitMQ для сброса / моментального снимка, а затем запустить его обратно, как только это будет сделано?
Есть ли способ очистить файлы, чтобы они не казались заблокированными или были принудительно разблокированы?
Это не обычная проблема, с которой я столкнусь, просто любопытно, есть ли лучшее решение.
Чтобы уточнить, ошибка, которую я вижу, заключается в: timeout_waiting_for_tables
.
Решение
Сначала вам нужно позаботиться о файловой системе.Не уверен, используете ли вы LVM, ext3, xfs или что-то еще, но если вы используете LVM, возможно, вы захотите проверить справочная страница dmsetup;в частности dmsetup приостановить / возобновить
В итоге вы получите что-то вроде:
dmsetup suspend <dev>
ec2-create-snapshot <vol>
dmsetup resume <dev>
Как только вы включили / приостановили синхронизацию файловой системы, вам нужно беспокоиться о rabbitmq.Разработчик Rabbitmq Маттиас Радесток заявляет в поток электронной почты:
Но в отношении постоянных сообщений я не так уверен.Как осуществляется управление rabbit_persister.ЖУРНАЛОМ?Могу ли я просто сделать резервную копию этого когда угодно, или я могу взять только один из rabbit_persister.LOG.previous?
Я бы создал резервные копии обоих файлов. Она должна быть можно восстановить rabbit_persister.Журнал из резервной копии даже при том, что была сделана резервная копия в в середине добавление - я не чтобы хоть проверен. .Предыдущий журнал необходим на случай, если резервное копирование выполняется во время свертывания журнала.
Где я мог бы посмотреть, чтобы узнать, как часто это происходит?
Логика принятия решения о том, когда делать бросок журнал довольно сложный.
Могу ли я запустить ручной бросок?
rabbit__persister:force_snapshot() в оболочка Erlang делает свое дело.
Оформить заказ на принудительный снимок цель в Файл Rabbitmq Makefile.