2.10. Red Hat Virtualization의 단독 리소스 및 Sanlock

Red Hat Virtualization 환경에 있는 특정 리소스는 단독으로 액세스해야 합니다.
SPM 역할이 그러한 리소스 중의 하나입니다. 하나 이상의 호스트가 SPM이 되는 경우 동시에 두 곳에서 같은 데이터가 변경될 수 있으므로 데이터 손상의 위험이 있습니다.
Red Hat Enterprise Virtualization 3.1 이전에는 SPM 독점성은 safelease라고 부르는 VDSM 기능을 사용하여 관리 및 추적되었습니다. 임대는 데이터 센터의 모든 스토리지 도메인에서 특별 구역에 써졌습니다. 같은 환경에 있는 모든 호스트는 네트워크와 독립된 방법으로 SPM 상태를 추적할 수 있습니다. VDSM의 세이프 리스(safe lease)를 통해 SPM 역할이라는 한 리소스의 독점성만 유지됩니다.
Sanlock은 같은 기능을 제공하지만 SPM 역할을 잠글 수 있는 리소스의 하나로 다룹니다. Sanlock은 추가 리소스를 잠글 수 있게 해주므로 더 신축적입니다.
리소스 잠금을 필요로 하는 애플리케이션은 이를 Sanlock에 등록합니다. 등록된 애플리케이션은 Sanlock이 대신해서 리소스를 잠그도록 요청하여 다른 애플리케이션에서 해당 리소스에 액세스할 수 없도록 할 수 있습니다. 예를 들어 VDSM이 SPM 상태를 잠그는 대신 이제는 VDSM이 Sanlock에게 이러한 작업을 하도록 요청합니다.
잠금은 lockspace의 디스크에서 추적합니다. 스토리지 도메인마다 하나의 lockspace가 있습니다. SPM 리소스의 잠금의 경우 각 호스트의 활성 여부를 lockspace에서 추적하기 위해 해당 호스트가 스토리지 연결 시 Manager에게서 받은 hostid를 갱신할 수 있는지 확인하고 정기적인 간격으로 lockspace에 timestamp를 쓸 수 있는지 확인합니다. ids 논리 볼륨은 각 호스트의 고유 식별자를 추적하며 호스트가 hostid를 갱신할 때마다 업데이트됩니다. SPM 리소스는 활성화된 호스트에서만 가질 수 있습니다.
리소스는 임대 논리 볼륨에 있는 디스크에서 추적합니다. 디스크 상의 리소스 표현이 이를 사용하는 프로세스의 고유 식별자를 사용하여 업데이트된 경우 이러한 리소스가 취득되었다고 합니다. SPM 역할의 경우 SPM 리소스는 해당 리소스를 취득한 hostid로 업데이트됩니다.
각 호스트의 Sanlock 프로세스에서는 리소스 취득 시 이러한 취득된 리소스만 확인하면 됩니다. 초기 확인 후 Sanlock은 잠금된 리소스가 있는 호스트의 timestamp가 오래될 때까지 lockspace를 감시할 수 있습니다.
Sanlock은 리소스를 사용하는 애플리케이션을 감시합니다. 예를 들어, VDSM을 사용하여 SPM 상태 및 hostid를 감시합니다. 호스트가 Manager에서 hostid를 갱신하지 못하는 경우 lockspace에 있는 모든 리소스에 대한 독점성을 잃게 됩니다. Sanlock은 리소스를 업데이트하여 그것이 더 이상 취득된 상태가 아님을 보여줍니다.
SPM 호스트가 일정 시간동안 스토리지 도메인에서 lockspace에 timestamp를 쓰지 못하는 경우 호스트의 Sanlock 인스턴스에서 VDSM 프로세스에 리소스를 해제하도록 요청하게 됩니다. VDSM 프로세스에서 응답하면 리소스가 해제되고 lockspace에 있는 SPM 리소스는 다른 호스트가 차지할 수 있게 됩니다.
SPM 호스트에 있는 VDSM에서 리소스 해제 요청에 응답하지 않는 경우 호스트의 Sanlock이 VDSM 프로세스를 중지시킵니다. 중지 명령이 성공적이지 못한 경우 Sanlock은 이를 에스컬레이션하여 sigkill을 사용해서 VDSM 중지를 시도합니다. sigkill이 성공적이지 못한 경우 Sanlock은 호스트를 재부팅하도록 워치독 데몬에 의존해야 합니다.
호스트에서 VDSM이 hostid를 갱신하고 lockspace에서 timestamp를 쓸 때마다 워치독 데몬이 pet를 수신합니다. VDSM이 이것을 하지 못하게 되면 워치독 데몬은 더 이상 pet를 받지 않습니다. 정해진 시간동안 워치독 데몬이 pet를 받지 못하게 되면 호스트를 재부팅합니다. 이러한 에스컬레이션의 마지막 단계에 도달하게 되면 SPM 리소스가 확실하게 해제되며 다른 호스트에서 차지할 수 있게 됩니다.