Table of Contents |
---|
BSRbsr(Block Sync & Replication)은 DRBD은 호스트 상의 블럭 장치들을 네트워크를 통해 소프트웨어적으로 실시간 복제하는 솔루션 입니다.
bsr은 drbd(http://www.drbd.org)를 fork 한 WDRBD(https://github.com/mantechnology/wdrbd) 를 기반으로 하며, Windows 와 Linux 작성 하였으며, 윈도우즈와 리눅스 플랫폼을 모두 지원하도록 크로스 플랫폼 공통 엔진으로 구현한 구축한 오픈소스 프로젝트 입니다. BSR은 WDRBD의 기본적인 개념과 기능들을 모두 계승하였으며, 원본 DRBD의 문제점들을 보완하고 보완하였고 기능적으로 보다 강화하여 보다 안정적이고 유연한 복제 환경을 구축할 수 있는 솔루션을 제공합니다.
BSR은 bsr은 WDRBD 1.5.x 버전을 기준으로 작업하여 윈도우즈와 리눅스를 공통으로 지원하는 크로스플랫폼 지원 엔진 체계를 갖추었으며 1.6.x 을 초기버전으로 배포합니다. BSR은 GPL v2 라이선스를 준수하여 배포합니다.
bsr에 대한 기술지원은 bsr은 맨텍(Mantech) 을 을 통해 기술지원을 제공 받을 수 있으며, 오픈소스 커뮤니티(https://github.com/mantechnology/bsr)를 통해 자유롭게 개발에 참여하실 수 있습니다. bsr 과 관련한 문의사항은 dev3@mantech.co.kr 로 연락해 주세요.
기본
BSR은 호스트 상의 블록장치들(하드디스크, 파티션, 논리 볼륨 등)을 네트워크를 통해 소프트웨어적으로 실시간 복제하는 솔루션입니다.
BSR은 로 연락해 주세요.
기본
bsr은 다음과 같은 방식으로 복제 합니다.
응용 프로그램이 블록장치에 데이터를 쓰는 동시에 실시간 복제합니다.
실시간 복제를 수행 하더라도 다른 응용 서비스나 시스템 요소에 영향을 주지 않습니다.
동기 또는 비동기적으로 복제합니다
동기 방식은 복제 데이터를 로컬디스크와 타겟 호스트의 디스크에 쓰기 완료했을 때 복제를 완료한 것으로 처리합니다.
비동기 방식은 복제 데이터를 로컬디스크에 쓰고 타겟 호스트로 데이터 전송을 했을 때 복제를 완료한 것으로 처리합니다.
커널 드라이버
BSR의 bsr의 핵심 엔진은 커널 드라이버로 개발되었습니다.
커널 드라이버는 디스크 볼륨 계층에 위치하여 파일시스템으로 부터 발생하는 쓰기 I/O에 대해 블럭(block) 단위로 통제하고 파일시스템의 하부 계층에서 복제를 수행함에 따라 파일시스템과 응용프로그램에 관계없이 투명한 복제 환경을 제공하여 고가용성을 구현하기에 적합합니다. 그러나 BSR은 bsr은 파일 시스템의 하위 계층에 위치하기 때문에 파일과 관련한 일반적인 연산에 대해선 통제할 수 없습니다. 예를 들어, BSR은 bsr은 파일시스템의 손상을 감지할 수 없으며, 파일의 순수한 데이터와 파일 시스템의 메타 데이터를 구분할 수 없습니다.
BSR 은 bsr은 기본적으로 Active-Passive 클러스터링을 제공하고, Active-Active 클러스터링은 제공하지 않습니다.
관리 도구
BSR은 bsr은 리소스를 구성하고 관리하기 위한 용도의 관리 도구를 제공합니다. 다음에서 설명하는 bsradm, bsrsetup, bsrmeta, bsrcon 으로 구성됩니다. (Windows 에선 관리 명령어를 사용하기 위해 관리자 권한으로 실행한 명령줄이 필요합니다.)
...
bsr의 세부 기능들에 대해 추상화한 상위 수준 명령어를 제공하는 유틸리티입니다. bsradm 에서 제공하는 명령만으로 BSR의 대부분 동작을 제어할 수 있습니다.
bsradm은 구성파일 etc\bsr.conf로부터 모든 구성 파라미터를 얻으며, bsrsetup 및 bsrmeta에 적절한 옵션을 주어 명령을 수행시킵니다.
bsradm은 –d 옵션을 통해 dry-run모드로 실행시킬 수 있습니다. 이는 bsradm이 bsrsetup 및 bsrmeta 명령을 실제 호출하지 않고, 어떤 옵션 조합으로 실행되는지 미리 확인할 수 있는 방법을 제공합니다.
bsradm 명령 옵션에 대한 자세한 사항은 Appendix B. 시스템 매뉴얼의 bsradm을 참고하십시요.
bsrsetup
BSR bsr 커널엔진에 필요한 값들을 설정할 수 있습니다. bsrsetup에 대한 모든 파라미터는 텍스트 인자로 전달해야 합니다.
bsradm과 bsrsetup의 분리를 통해 유연한 명령 체계를 제공합니다.
bsradm에서 받아들인 파라미터는 보다 복잡한 파라미터로 치환하여 bsrsetup을 호출합니다.
bsradm은 리소스 구성파일의 문법적 오류 등을 확인하여 사용자 실수를 방지하지만, bsrsetup은 이러한 문법적 오류를 확인하지 않습니다.
대부분의 경우에선 bsrsetup을 직접 사용할 필요가 없습니다.
bsrsetup 명령 옵션에 대한 자세한 사항은 Appendix B. 시스템 매뉴얼의 bsrsetup 을 참고하십시요.
...
리소스의 역할은 bsr유틸리티 명령을 통해 변경할 수 있습니다. 리소스 역할을 Secondary에서 Primary로 변경할 때는 승격(Promotion)이라고 하고 반대는 강등(Demotion)입니다.
주요 기능
복제 클러스터
BSR은 bsr은 복제를 위한 노드들의 집합을 복제 클러스터로 정의하며 기본적으로 복제 클러스터 멤버 중 하나의 노드에서만 프라이머리 리소스 역할을 할 수 있는 단일 프라이머리 모드를 지원합니다. 이중 또는 다중 프라이머리 모드는 지원하지 않습니다. 단일 프라이머리 모드 즉, Active-Passive 모델은 페일오버를 위한 고 가용 클러스터에서 데이터 저장매체를 다루는 표준적인 접근 방식입니다.
복제 방식
BSR은 bsr은 3가지 복제 방식을 지원합니다.
Protocol A. 비동기 방식
...
물론, 양쪽 노드(또는 노드의 스토리지 서브시스템) 모두가 동시에 되돌릴 수 없는 손상을 입는다면 데이터의 손실은 불가피합니다.
일반적으로 BSR은 Protocol bsr은 Protocol C 방식을 많이 사용합니다.
복제 방식은 운영정책을 결정하는 요소인 데이터 정합성 여부와 로컬 I/O 지연(Latency) 성능, 처리량(Throughput) 등에 의해 결정되어야 합니다.
...
복제 모드를 구성하는 예제는 리소스 작성 부분을 참고하세요.
복제 전송 프로토콜
BSR의 bsr의 복제 전송 네트워크는 TCP/IP 전송 프로토콜을 지원합니다.
TCP(IPv4/v6)
BSR의 bsr의 기본 전송 프로토콜이며 IPv4/v6를 지원하는 모든 시스템에서 사용할 수 있는 표준 프로토콜 입니다.
효율적인 동기화
BSR에서 bsr에서 복제(replication)와 (재)동기화(resynchronization)는 다르며 동작방식도 다르고 구분하는 개념입니다. 복제는 Primary 역할의 리소스의 모든 디스크 쓰기 동작을 Secondary 노드로 실시간 반영하는 동작이고, 동기화는 실기간 쓰기 I/O를 배제한 전체 블록 디바이스 관점에서 데이터를 일치시키는 처리과정 입니다. 이처럼 복제와 동기화는 개별적인 동작이지만 개별적으로 동작하지만 동시에 처리될 수도 있습니다.
Primary와 Secondary간의 복제 연결이 유지된다면 복제가 지속적으로 수행됩니다. 그러나 Primary 또는 Secondary 노드에서 장애가 나거나, 복제 네트워크가 단절되는 등의 이유로 복제 연결이 중단되었다면 Primary와 Secondary 간의 동기화가 필요한 상황에 놓입니다.
BSR은 bsr은 동기화 할 때 원본 I/O가 디스크에 쓰여진 순서대로 블럭을 동기화하지 않습니다. 동기화는 메타데이터의 정보를 기반으로 0번 섹터 부터 마지막 섹터까지 동기화 되지 않은 영역에 대해서만 순차적 동기화하여 순차적으로 동기화하고 다음과 같이 효율적입니다효율적으로 처리합니다.
동기화는 디스크의 블럭 레이아웃에 따라 블럭 단위로 동기화하므로 디스크 탐색을 거의 수행하지 않습니다.
여러 번 연속적으로 쓰기 작업이 발생한 블럭은 한 번만 동기화하므로 보다 빠르게 동기화 합니다동기화하여 효율적입니다.
동기화하는 동안 대기(Standby)노드의 전체 데이터 셋 중 일부는 과거의 변경 전 내용이 되고 내용이고 일부는 최신으로 업데이트됩니다. 이러한 데이터의 상태를 Inconsistent 상태라고 하고 모든 블럭이 최신 데이터로 동기화 완료된 상태를 UpToDate 상태라고 합니다. Inconsistent 상태의 노드는 일반적으로 볼륨이 사용가능하지 않은 상태이므로 이 상태는 가능한 짧게 유지하는 것이 바람직합니다.
물론 백그라운드에서 동기화가 진행되는 동안 진행되더라도 Active 노드의 응용 서비스는 중단되지 않고 계속해서 수행할 수 있습니다중단되거나 하지 않고 계속 운영 가능 합니다.
가변 대역 동기화(Variable-rate synchronization)
...
체크섬 동기화에 관한 구성은 체크섬 기반 동기화 구성(Configuring checksum-based synchronization)을 참고하세요.
혼잡 모드
BSR은 bsr은 비동기 복제 시 복제 네트워크의 혼잡도를 감지하여 능동적으로 대처할 수 있는 혼잡모드 기능을 제공합니다. 혼잡모드는 Blocking, Disconnect, Ahead 의 3 가지 동작모드를 제공합니다.
...
리소스의 무결성을 검증하는 작업은 온라인 중에 검사하기 때문에 온라인 검사와 복제가 동시에 수행될 경우 약간의 복제성능 저하가 있을 수 있습니다. 하지만 서비스를 중단할 필요가 없고 검사를 하거나 검사 이후 동기화 과정 중에 시스템의 다운 타임이 발생하지 않는 장점이 있습니다. 그리고 BSR 은 bsr은 FastSync 를 기본 로직으로 수행하기 때문에 파일시스템이 사용하고 있는 디스크 영역에 대해서만 온라인 검사를 수행하여 보다 더 효율적입니다.
온라인 무결성 검사에 따른 작업은 OS 수준에서 예약된 작업으로 등록하여 운영 I/O 부하가 적은 시간 대에 주기적으로 수행하는 것이 일반적인 사용법입니다. 온라인 무결성 검사를 구성하는 법에 대한 자세한 내용은 온라인 디바이스 검증의 사용(Using on-line device verification)을 참고하세요.
복제 트래픽 무결성 검사
BSR은 bsr은 암호화 메시지 요약 알고리즘을 사용하여 양 노드 간의 복제 트래픽에 대한 무결성을 실시간 검증할 수 있습니다.
...
스플릿 브레인이라 하면 위의 단락에서 언급한대로 복제 스플릿 브레인을 의미합니다.
클러스터 환경에서의 스플릿 브레인은 클러스터 파티션(cluster partition)이란 용어로 사용합니다. 클러스터 파티션은 특정 노드에서 모든 클러스터 연결이 끊어졌음을 의미합니다.
BSR에서 bsr에서 스플릿 브레인을 감지하면(이메일 또는 다른 방법을 통해) 자동적으로 운영자에게 알릴 수 있습니다. 이 기능을 구성하기 위한 자세한 방법은 스플릿 브레인 동작 설정(split-brain notification)을 참고하세요.
...
스플릿 브레인이 발생하면 관리자에게는 스플릿 브레인 수동 복구(Manual split brain recovery)가 권장되지만, 경우에 따라서는 그 과정을 자동화하는 것이 좋을 수도 있습니다.
BSR은 bsr은 스플릿 브레인을 자동 복구할 수 있는 몇 가지 알고리즘을 제공하고 있습니다.
Younger Primary 노드의 수정분 폐기 - 네트워크 연결이 다시 복구 되고 스플릿 브레인이 감지되면, BSR은 bsr은 최근 Primary 역할로 전환한 노드의 수정분을 폐기합니다.
Older Primary 노드의 수정분 폐기 - 네트워크 연결이 다시 복구 되고 스플릿 브레인이 감지되면, BSR은 bsr은 먼저 Primary 역할을 가졌던 노드의 수정분을 폐기합니다.
수정 내용이 적은 Primary 데이터 폐기 - BSR은 bsr은 양쪽 노드에서 수정 내용이 더 적은 쪽 노드를 확인하여 그 노드의 내용을 폐기합니다.
데이터 변경 사항이 없는 호스트로 복구 - 스플릿 브레인 동안 데이터의 수정 이력이 없는 노드가 있다면 BSR은 bsr은 해당 노드로 복구시키고 스플릿 브레인 해결을 선언합니다. 하지만 이것은 아주 드문 경우입니다. 양쪽 노드에서 리소스 볼륨을 파일시스템에 마운트(심지어 읽기전용)만 하더라도 볼륨 내용은 수정사항이 발생하기 쉬우며, 그 후에는 이 방식으로 자동 복구될 경우는 없을 것 입니다.
자동 스플릿 브레인 복구를 사용할 지 여부는 대체로 응용프로그램에 따라 달라집니다. 예를 들어 BSR에서 bsr에서 데이터베이스를 호스팅하는 경우를 생각해보면 사용자 인터페이스와 연관된 데이터 베이스를 사용하는 웹 응용프로그램에서는 폐기 해야 할 변경사항이 거의 없어서 자동 복구가 괜찮은 수단이 될 수 있지만 반대로 금융 데이터처럼 그 어떠한 데이터라도 함부로 폐기하기 힘든 성격을 가지고 있는 환경에서는 사람이 직접 수동 복구를 해야 할 것입니다.
자동 스플릿 브레인 복구를 활성화하기 전에 응용프로그램의 요구사항을 신중하게 고려해야 합니다.
BSR의 bsr의 자동 스플릿 브레인 정책 구성에 대한 자세한 내용은 자동 스플릿 브레인 복구 정책을 참고하세요.
...
디스크 에러 처리 정책
디스크 장비에서 장애가 발생할 경우 BSR은 bsr은 디스크 장애 정책의 사전 설정을 통해 해당 I/O 에러를 상위 계층(대부분 파일시스템)으로 단순히 전달해서 처리하거나 복제 디스크를 detach 하여 복제를 중단하도록 합니다. 전자는 패스스루 정책, 후자는 분리 정책입니다.
...
에러 정책을 detach 방식으로 구성하였다면 하위 계층에서 에러 발생 시 BSR이 시 bsr이 자동으로 디스크를 분리(detach)하는 방식으로 처리합니다. 디스크가 detach 되면 diskless 상태가 되고 디스크로의 I/O 가 차단되며, 이에 따라 디스크 장애가 인지되고 장애 후속조치가 취해져야 합니다. BSR에서 bsr에서 diskless 상태는 디스크에 I/O 가 유입되지 못하도록 차단된 상태로 정의합니다. I/O 에러 처리 정책 설정 에서 설정 파일을 구성하는 방법에 대해 설명하고 있습니다.
Outdated 데이터 정책
BSR은 bsr은 Inconsistent 데이터와 Outdated 데이터를 구분합니다. Inconsistent 데이터란 어떤 방식으로든 접근이 불가능하거나 사용할 수 없는 데이터를 말합니다. 가장 흔한 예로 동기화 진행 중인 타겟 쪽 데이터가 Inconsistent 상태 입니다. 타겟 쪽 데이터는 동기화가 진행중일 때 일부는 최신이지만 일부는 지난 시점의 데이터 이므로 이를 하나의 시점인 데이터로 간주하는 것이 불가능합니다. 그런 경우에서는 디바이스가 파일시스템이 있는 경우 그 파일시스템은 마운트(mount) 될 수 없거나 파일시스템 자동 체크 조차도 수행되지 못하는 상태 일 수 있습니다.
하지만 Outdated 데이터는 Secondary 노드에서 정합성은 보장되지만 Primary 노드와 최신의 데이터로 동기화되지 않은 데이터 입니다. 이런 경우는 임시적이든 영구적이든 복제 링크가 중단할 경우 발생합니다. 연결이 끊어진 Oudated 데이터가 별 문제없는 상태라고 기대할 수 있겠지만 이것은 결국 지난 시점의 데이터 입니다. 이런 데이터에서 서비스가 되는 것을 막기 위해 BSR은 bsr은 Outdated 데이터를 가진 노드가 역할을 승격(promoting a resource) 하는 것을 기본적으로 허용하지 않습니다. 그러나 필요하다면(긴급한 상황에서) Outdated 데이터를 강제로 승격할 수는 있습니다. BSR은 bsr은 네트워크 단절이 발생하자마자 외부 응용프로그램이 즉시 Secondary노드를 Outdated 상태가 되도록 만들 수 있는 인터페이스를 갖추고 있습니다. 그런 상태가 될 경우 BSR은 bsr은 Primary 역할로 노드가 전환되는 것을 거부하며, 응용프로그램이 outdated 데이터를 사용하는 것을 막습니다. Outdated 상태가 된 리소스에서 해당 복제링크가 다시 연결된다면 Outdated 상태 플래그는 자동으로 지워지며 백그라운드로 동기화(background synchronization) 가 진행됩니다.
...