Не работает создание ВМ: ошибка 500 (timed out)
rabbitmq
Описание проблемы
При попытке создания инстанса из ПУ horizon или командой API - процесс надолго затягивается, и через некоторое время возникает ошибка создания:
Failed to create instance, Nova api error timed out
error: Timed out waiting for a reply to message ID
Решение
Эта ошибка возникает вследствие рассинхронизации RabbitMQ кластера. В типовом варианте решения OVT ev3 кластер сервера очередей состоит из трех служебных ВМ: RBMQ-0001, RBMQ-0002, RBMQ-0003.
Запрос на выполнение поступает в очередь на одном узле, а при обращении к другому члену кластера - его не видно. По этой причине очередь запросов начинает нарастать, а выполнение запросов не выполняется.
Размер очереди можно посмотреть следующей командой:
Система настроена таким образом, что только узел RBMQ-0001 хранит все настройки кластера на диске, а RBMQ-0002 и RBMQ-0003 являются ведомыми и содержат настройки в оперативной памяти (RAM).
Это хорошо видно, если дать команду rabbitmqctl cluster_status
root@RBMQ-0002:/# rabbitmqctl cluster_status
Cluster status of node 'rabbit@RBMQ-0002' ...
[{nodes,[{disc,['rabbit@RBMQ-0001']},
{ram,['rabbit@RBMQ-0003','rabbit@RBMQ-0002']}]},
{running_nodes,['rabbit@RBMQ-0003','rabbit@RBMQ-0001','rabbit@RBMQ-0002']},
{cluster_name,<<"hci">>},
{partitions,[]},
{alarms,[{'rabbit@RBMQ-0003',[]},
{'rabbit@RBMQ-0001',[]},
{'rabbit@RBMQ-0002',[]}]}]
Таким образом, для того, чтобы восстановить нормальную работу кластера сервера очередей, надо сначала остановить все узлы в обратном порядке: 3,2,1
а затем запустить их, обязательно начиная с первого узла (RBMQ-0001).
После этих действий создание инстансов будет происходить в штатном режиме.
Скрипты восстановления
Стартовые скрипты восстановления кластера RabbitMQ
root@RBMQ-0001:~# cat restart_node1
systemctl stop rabbitmq-server
rm -rf /var/lib/rabbitmq/mnesia/*
rm -rf /var/lib/rabbitmq/erl_crash.dump
systemctl start rabbitmq-server
rabbitmqctl cluster_status
rabbitmqctl add_user openstack Aepie2i
# rabbitmqctl add_user openstack een3ZiK7
#rabbitmqctl change_password openstack new_password
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
root@RBMQ-0002:~# cat restart_node2
systemctl stop rabbitmq-server
rm -rf /var/lib/rabbitmq/erl_crash.dump
rm -rf /var/lib/rabbitmq/mnesia/*
systemctl start rabbitmq-server
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@RBMQ-0001
rabbitmqctl start_app
rabbitmqctl cluster_status
rabbitmqctl set_cluster_name openstack