
juju를 사용하여 MAAS 기반의 OpenStack을 만들었습니다. 인스턴스, 프로젝트 등을 만들었습니다. 데이터베이스 및 openstack 구성 파일을 백업했습니다. 서비스를 삭제하고 제거하여 테스트 복구를 시도하고 있습니다.요지, 복구 가능한지 확인하기 위해. 또한 keystone 데이터베이스도 삭제합니다. (백업되어 있습니다.) 그래서 juju를 사용하여 깨진 오래된 쐐기돌을 파괴하고 새 쐐기돌을 배치합니다. 모든 프로젝트(테넌트)가 사라지고 인스턴스가 어떤 프로젝트에도 속하지 않는다는 사실을 제외하면 실제로 다시 실행하게 됩니다. 그래서 토큰 없이 Keystone 데이터베이스를 복원했는데 그렇게 하면 Horizon에서 Keystone이 클라이언트를 승인하지 않는다는 오류가 발생합니다.
깨진 키스톤 노드를 복원하는 가장 좋은 방법은 무엇입니까...? juju로 쐐기돌을 다시 실행하면 새로운 토큰을 얻을 수 있는 것 같습니다. Juju는 어떻게든 오래된 것을 새로운 쐐기돌에 주입할 수 있나요?
답변1
문제는 keystone 참이 keystone 데이터베이스 외부에 일부 정보를 저장한다는 것입니다. 특히 서비스에 대한 사용자 이름과 비밀번호는 디스크에 로컬로 저장되므로 Keystone과 관련된 추가 서비스 단위가 있을 때 Keystone 서비스는 요청된 사용자의 올바른 비밀번호를 관련 서비스에 전달할 수 있습니다.
Keystone을 배포할 때 관리자 비밀번호 및 관리자 토큰 구성을 제공하지 않은 경우에도 문제가 발생합니다. Keystone 서비스 단위는 명시적으로 구성되지 않은 경우 이를 무작위로 생성하므로 제거한 후 새 Keystone 서비스 단위를 추가하면 변경됩니다.
결과적으로 두 번째 Keystone 서비스 단위의 디스크에 생성된 비밀번호와 일치하지 않는 데이터베이스(첫 번째 서비스 단위에서 생성됨)에 해시된 비밀번호 세트가 생성됩니다.
이상적으로는 juju의 일종의 일반 객체 저장 기능(객체 넣기/객체 가져오기 등)으로 이 문제를 해결하겠지만 이는 지원되는 기능이 아닙니다.
비밀번호와 토큰의 모든 디스크 저장은 /var/lib/keystone에서 이루어집니다. Keystone 서비스 장치 자체의 백업의 일부로 이를 선택할 수 있습니다. 그러나 새 서비스 단위를 추가하면 이러한 파일을 복원하기 전에 서비스 관계가 시작되므로 경합이 발생합니다.
OpenStack 매력 관리자 중 한 사람으로서 저는 이에 대해 좀 더 생각해 보고 좀 더 우아한 것을 생각해 낼 수 있는지 살펴보겠습니다.