Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

디스크 장애(오류)는 디스크 스토리지 계층의 물리적 연결 단자의 단선 , 이 외에도 미디어 파손, 배드 섹터, SCSI 오류 등 얘기치 않은 장애로 인해 디스크 I/O 에 오류가 발생하는 상황을 말합니다것 입니다. 이러한 장애 들은 일시적으로 발생했다가 정상화 되기도 하고 영구적 장애로 이어지기도 합니다. bsr 에선 이러한 장애를 일시적 장애와 영구적 장애로 장애 유형으로 구분하고 유형에 따라 오류를 다르게 처리합니다.

일시적 장애는 스토리지 계층에서의 계층에서 어떤 이유로 인해 오류가 잠시 발생 했다가 다시 정상화되는 상황입니다. 이럴 경우에는 디스크 교체가 필요한 정도의 심각한 상황이 아니기 때문에 아니므로 되도록이면 서비스 운영을 지속하면서 기 발생된 에러에 대해서만 별도로 해소하고 복제는 계속 운영되도록 하는게 효율적입니다. 즉 일시적 오류 상황에서는 I/O 에러가 발생한 블록 영역을 out-of-sync 로 기록하고 오류를 상위 계층으로 전달합니다. 상위 파일시스템은 해당 블록으로 I/O 를 재시도 하고 재시도된 I/O 가 성공하면 자연스럽게 OOS 가 해소되도록 합니다. 이렇게 발생했던 오류가 재시도를 통해 금방 해소되면 일시적 오류로 처리할 수 있지만 재 시도를 계속 해도 I/O 오류가 해소되지 않을 경우엔 이것을 영구적인 오류가 간주하고 디스크 상태를 분리(detach)하여 복제가 중단되도록 합니다.

영구적인 디스크 오류는 디스크 교체 등 디스크 장애에 대한 별도 조치가 필요한 상황으로 전체 재구성의 절차를 통해 복구해야 합니다.

...

  • passthrough on-io-error의 기본값으로 하위계층의 I/O 오류를 상위 계층에 보고합니다. I/O 오류는 Primary 노드일 경우 마운트 된 파일시스템으로 보내고, Secondary 노드에서는 Primary 노드로 쓰기 결과를 전달하거나 (복제 연결이 없을 경우)무시 됩니다. 이때 디스크 상태는 현 상태를 유지하며 해당 에러블럭에 대해 OOS로 기록합니다. I/O 오류는 상위에 의해 재시도 되어 정상 처리되거나 다시 오류가 발생될 수 있습니다. 재시도가 되어도 오류가 지속되면 다음의 detach 정책에 의해 처리됩니다.

  • detach lower-level 하위계층의 I/O 에러가 발생하면, 노드는 백업 디바이스를 장치를 복제볼륨으로부터 분리(detach)시키고 diskless 상태로 전환합니다.

  • call-local-io-error. 로컬 I/O 에러 핸들러로 정의된 명령을 호출합니다. 이 옵션은 local-io-error <cmd> 가 리소스의 <handlers> 섹션에 정의되어 있어야 사용 가능합니다. local-io-error 호출 명령 또는 스크립트를 사용하면  I/O 에러 처리를 전적으로 사용자의 결정에 맡깁니다.

에러처리 정책은 리소스가 운영중이더라도 adjust 명령을 통해 실시간 적용할 수 있습니다.

Info

복제 서비스 운영 경험에 따르면 디스크 장애는 생각보다 자주 발생합니다. 이러한 결과는 하위 디스크 계층에 의존적이며 디스크 계층 즉, 표준 SCSI 계층의 에러는 에러가 임의의 시점에 언제든지 발생할 수 있다는 점에 비추어 보면 디스크 계층의 안정성과는 별도로 점에서 봤을 때 디스크의 안정성과는 별개로 다루어야 하고, 복제 측면에서도 유연하게 대처할 수 있어야 함을 의미합니다. 그동안 디스크 장애 정책으로 제공해 왔던 detach 정책은 서비스 운영관점에선 복제가 특정시점에 일방적으로 중단되는 정책이었습니다. 이러한 방식은 사후 복구도 어렵고 서비스 운영 지속 측면에서도 불리합니다. 우리는 이러한 문제를 해결하기 위해 passthrough 정책을 고안하였으며 bsr의 기본정책으로 설정하게 되었습니다. 패스스루 정책은 I/O 에러가 발생할 경우 해당 블럭에 대해서 OOS 를 기록하고 실패된 I/O 결과를 파일시스템으로 전달합니다. 이 때 파일시스템이 에러가 발생한 블럭에 대해 쓰기 재시도하여 성공하고 이를 통해 OOS를 해소한다면 이는 일시적인 디스크 계층의 에러를 파일시스템 스스로 극복하도록 유도하게 됩니다. 비록 파일시스템의 동작 특성에 따라 완전히 OOS가 해소되지 못한다고 하더라도 일부 남겨진 OOS 는 연결 재시도 등을 통해 재동기화 하여 해결할 수도 있습니다. 즉 패스스루 정책은 에러 블럭을 FS가 스스로 해결하거나 동기화를 통해 해소하도록 유도하고, 기본적으로 디스크 I/O에 문제가 있더라도 서비스 운영을 지속하도록 보장합니다.

...