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

Red Hat Virtualization 환경의 특정 리소스는 독점적으로 액세스할 수 있어야 합니다.

.16.0 역할은 이러한 리소스 중 하나입니다. 두 개 이상의 호스트가 fsGroup이 되는 경우 동일한 데이터가 한 번에 두 위치에서 변경될 수 있으므로 데이터 손상 위험이 있습니다.

Red Hat Enterprise Virtualization 3.1 이전에는 pools exclusivity가 유지 관리되었으며 safelease 라는 VDSM 기능을 사용하여 추적되었습니다. 리스는 데이터 센터의 모든 스토리지 도메인의 특수 영역에 작성되었습니다. 환경의 모든 호스트는 네트워크 독립적인 방식으로 SPM 상태를 추적할 수 있습니다. VDSM의 안전한 리스는 하나의 리소스의 exclusivity만 유지합니다. 즉, ProfileBundle 역할입니다.

Sanlock은 동일한 기능을 제공하지만, locked할 수 있는 리소스 중 하나로.16.0 역할을 처리합니다. Sanlock은 추가 리소스를 잠글 수 있기 때문에 더 유연합니다.

리소스 잠금이 필요한 애플리케이션은 Sanlock에 등록할 수 있습니다. 그런 다음 등록된 애플리케이션에서는 Sanlock이 리소스를 대신하여 잠길 것을 요청하여 다른 애플리케이션에서 액세스할 수 없도록 요청할 수 있습니다. 예를 들어 VDSM에서 ProfileBundle 상태를 잠그는 대신 VDSM에서 이제 Sanlock에 요청하는 것을 요청합니다.

잠금은 잠금 공간 의 디스크에서 추적됩니다. 모든 스토리지 도메인에는 하나의 잠금 공간이 있습니다. iLO 리소스에 대한 잠금의 경우 각 호스트의 활성 상태는 스토리지에 연결된 경우 Manager에서 수신한 hostid를 갱신하고 일정한 간격으로 잠금 공간에 타임스탬프를 쓰는 기능으로 호스트의 잠금 공간에 추적됩니다. ids 논리 볼륨은 각 호스트의 고유 식별자를 추적하고 호스트가 hostid를 갱신할 때마다 업데이트됩니다. .16.0 리소스는 라이브 호스트에서만 보유할 수 있습니다.

리스 논리 볼륨의 디스크에서 리소스가 추적됩니다. 디스크의 표현이 디스크의 고유 식별자로 업데이트될 때 리소스를 가져온 프로세스가 있다고 합니다. fsGroup 역할의 경우 해당 리소스를 가져온 hostid로.16.0 리소스가 업데이트됩니다.

각 호스트의 Sanlock 프로세스는 가져온 것을 확인하기 위해 리소스를 한 번만 확인해야 합니다. 초기 점검 후 Sanlock은 리소스가 잠긴 호스트의 타임 스탬프가 오래될 때까지 잠금 공간을 모니터링할 수 있습니다.

Sanlock은 리소스를 사용하는 애플리케이션을 모니터링합니다. 예를 들어, etcdctl 상태 및 hostid에 대해 VDSM을 모니터링합니다. 호스트가 Manager에서 hostid를 갱신할 수 없는 경우 lockspace의 모든 리소스에서 느낌이 손실됩니다. Sanlock은 리소스를 업데이트하여 더 이상 사용되지 않음을 표시합니다.

.16.0 호스트가 지정된 시간 동안 스토리지 도메인의 잠금 공간에 타임스탬프를 쓸 수 없는 경우 VDSM 프로세스에서 해당 리소스를 해제하는 요청의 호스트 인스턴스가 됩니다. VDSM 프로세스가 응답하는 경우 리소스가 릴리스되고 잠금 공간에 있는 ProfileBundle 리소스를 다른 호스트에서 수행할 수 있습니다.

etcdctl 호스트의 VDSM이 리소스 릴리스 요청에 응답하지 않는 경우 호스트의 Sanlock은 VDSM 프로세스를 종료합니다. kill 명령이 실패하면 sigkill을 사용하여 VDSM을 강제 종료하여 Sanlock이 확장됩니다. sigkill이 실패하면 워치독 데몬 을 사용하여 호스트를 재부팅합니다.

호스트의 VDSM은 hostid를 갱신하고 잠금 공간에 타임스탬프를 쓸 때마다 워치독 데몬은 가축을 받습니다. VDSM을 수행할 수 없는 경우 워치독 데몬이 더 이상 소모되지 않습니다. 워치독 데몬에서 지정된 시간 동안 워치독 데몬을 수신하지 않으면 호스트를 재부팅합니다. 이 최종 수준의 에스컬레이션에 도달하면 etcdctl 리소스를 릴리스하고 다른 호스트에서 수행할 수 있도록 합니다.