
Я создал Openstack на основе MAAS с помощью juju. Я создал экземпляры, проекты и т. д. Я сделал резервные копии базы данных и файлов конфигурации openstack. Я пробую тестовое восстановление путем уничтожения и удаления сервисакраеугольный камень, просто чтобы посмотреть, можно ли ее восстановить. Я также удаляю базу данных keystone. (она резервируется) Поэтому с помощью juju я уничтожаю старый keystone, который был сломан, и развертываю новый keystone. Это фактически заставляет меня снова работать, за исключением того факта, что все проекты (арендаторы) исчезли, а экземпляры не принадлежат ни одному проекту. Поэтому я восстанавливаю базу данных keystone, но без токенов, но когда я это делаю, я получаю ошибку в Horizon, сообщающую мне, что keystone не авторизует клиента.
Какой лучший способ восстановить сломанный узел ключа...? Кажется, когда вы переделываете ключ с помощью Juju, вы получаете новые токены. Может ли Juju каким-то образом внедрить старые в новый ключ?
решение1
Проблема, с которой вы столкнулись, заключается в том, что Keystone Charm хранит некоторую информацию за пределами базы данных Keystone; в частности, имена пользователей и пароли для служб хранятся локально на диске, чтобы при появлении дополнительных служб, связанных с Keystone, служба Keystone могла выдать соответствующий ей правильный пароль для запрошенного пользователя.
Вы также столкнетесь с проблемами, если не указали конфигурацию пароля администратора и токена администратора при развертывании Keystone; сервисные модули Keystone будут случайным образом генерировать их, если они не настроены явно, поэтому они изменятся, когда вы удалите и затем добавите новый сервисный модуль Keystone.
В итоге вы получаете набор хешированных паролей в базе данных (созданных первым сервисным модулем), которые не совпадают с сгенерированными паролями на диске во втором сервисном модуле Keystone.
В идеале мы бы исправили это с помощью какой-то универсальной функции хранения объектов в juju (например, object-put/object-get), но эта функция не поддерживается.
Все пароли и токены на диске хранятся в /var/lib/keystone; вы можете извлечь их как часть резервной копии самого сервисного модуля Keystone; однако при добавлении нового сервисного модуля возникнут проблемы, поскольку сервисные связи сработают до того, как вы сможете восстановить эти файлы.
Как один из сторонников OpenStack Charm, я еще немного подумаю над этим и посмотрю, сможем ли мы придумать что-то более элегантное.