Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

운영

리소스를 생성하고 삭제하기 까지의 일반적인 관리작업에 대해 설명합니다.

리소스 생성

리소스 생성은 앞 절에서 설명한 리소스 구성파일을 준비하는 작업입니다. 구성파일을 작성했다면 리소스를 생성한 것으로 간주합니다. bsr 에서는 이 과정을 사용자가 수작업으로 수행해야 하며 이를 위한 별도의 CLI 나 API 는 제공 되지 않습니다.

한번 구성파일이 작성되어 리소스가 생성되면 구성파일이 삭제 되기 전 까지는 해당 리소스가 노드에 계속 유지되므로 구성파일에 대한 적절한 관리가 필요합니다.

메타 초기화

리소스가 생성되면 최초 기동을 위해 메타디스크를 초기화 해야 합니다. 메타 디스크의 초기화는 다음의 명령으로 수행합니다.

...

메타초기화가 완료되면 리소스를 기동할 준비가 된 상태 입니다.

리소스 기동

bsradm up 명령을 통해 리소스를 기동할 수 있습니다. up 은 내부적으로 다음의 과정을 순차적으로 수행하여 리소스를 기동합니다.

...

Info

bsr 의 상태는 bsradm status 명령으로 조회할 수 있습니다. 이와 관련한 자세한 내용은 조회의 내용을 참고하세요.

리소스 할당

리소스를 위한 메모리를 할당하고 초기화 합니다.

볼륨 적재

리소스에 구성된 볼륨을 복제볼륨으로 적재(attach)하고 메타디스크의 정보를 조회하여 로드하고 구성파일에 설정된 옵션들을 적용합니다. 볼륨의 적재는 별도의 attach 명령으로도 개별 수행할 수 있습니다.

복제 연결

적재된 볼륨을 피어노드의 리소스 볼륨과 연결합니다. 연결이 수립되면 복제 상태는 Established 가 되고 복제를 시작하기 위한 대기상태가 됩니다. 만일 피어 노드가 연결을 아직 준비하고 있지 않았다면 로컬의 리소스는 연결 시도 중(Connecting) 상태를 유지합니다. 복제 연결은 개별 connect 명령으로도 수행할 수 있습니다.

리소스 up 의 과정이 위 절차에 따라 순차적으로 모두 수행되었을 때 리소스 기동에 대한 성공으로 간주 합니다. 리소스 기동의 과정 중 일부 절차가 실패할 경우 리소스 기동이 중단될 수 있습니다. 이럴 경우 리소스의 상태를 확인하고 bsr 로그와 에러 메시지 등을 통해 문제를 파악할 수 있습니다.

승격

리소스는 Primary 또는 Secondary 역할을 가질 수 있습니다. Primary 역할의 리소스는 볼륨 장치에 제한 없이 접근하여 데이터를 읽고 쓸 수 있지만 Secondary 역할의 리소스는 사용자 계층으로부터의 볼륨장치로의 접근이 완전히 차단되고 Primary 로 부터 수신한 데이터만 장치에 반영하는 역할을 수행합니다.

...

Info

리눅스 환경의 경우에는 승격을 하기 전에 볼륨에 대한 마운트 과정이 요구됩니다. 윈도우즈 환경에선 쉘 수준에서 볼륨에 대한 자동 마운트가 수행되기 때문에 별도의 마운트 작업이 필요치 않습니다.

강등

Primary 역할에서 Secondary 역할로 전환하는 것을 강등이라고 합니다.

...

마운트 해제와 리소스 강등은 bsr의 명령 동작 중 가장 부하가 큰 작업으로 Secondary 로 역할을 전환하는 것과 함께 복제 계류 중인 데이터들을 타깃 측으로 모두 반영하는 작업을 수반합니다. 이는 복제 소스와 타깃 간의 데이터 정합성을 일치시키기 위한 기본 동작 구조로, 강등이 완료된 시점의 Primary 와 Secondary 간의 데이터 정합성을 보장하는 동작입니다. 따라서 마운트 해제, 강등을 수행하는 절차에선 복제 계류중인 데이터를 타깃에 모두 반영하는데 따르는 일정 정도의 대기시간을 염두에 두어야 합니다.

리소스 중지

bsradm down 명령을 통해 리소스를 중지할 수 있습니다. down 은 리소스 앞서 설명한 up 과정의 역순에 따라 중지가 수행하고 만약 리소스가 승격된 상태 였다면 강등을 먼저 수행합니다. 즉 리소스 강등, 복제 단절, 볼륨 분리(detach), 리소스 해제의 순으로 down 합니다.

Code Block
bsradm down <resource>

리소스 강등

리소스가 승격된 상태였다면 먼저 강등을 수행합니다.

복제 단절

복제 연결을 단절하여 복제를 중단합니다. 연결 단절은 disconnect 개별 명령으로도 수행할 수 있습니다.

만약 동기화나 복제가 진행 중일 때 복제 단절을 시도할 경우 단절은 일정 시간 동안 유예될 수 있습니다. 이것은 복제를 단절하는 명령이 로컬과 피어노드에게 모두 전달되는 명령이기 때문에 이미 복제를 위해 버퍼링된 데이터 양이 많을 경우 순차적처리 구조에 따라 명령전달이 지연될 수 있기 때문입니다. 이러한 지연을 무시하고 싶을 경우에는 --force 옵션을 통해 로컬에서 강제로 연결을 단절할 수도 있습니다. 강제로 단절하게 되면 연결을 빠르게 끊을 수는 있으나 복제나 동기화를 위한 계류중인 데이터들이 모두 버려지게 되므로 해당 데이터들에 대한 OOS(Out-Of-Sync) 가 발생할 수 있다는 점은 고려해야 합니다.

볼륨 분리

복제 볼륨으로 적재했던 볼륨을 분리하고 메타디스크에 관련 정보를 기록합니다. 분리(detach)는 개별 명령으로 수행할 수 있으나 Primary 리소스의 볼륨에 대한 분리는 허용되지 않습니다.

Info

bsr 에선 운영 중인 리소스의 볼륨 분리는 장애로 직결되기 때문에 위험한 동작으로 간주했으며 Primary 리소스의 볼륨 detach 를 코드 수준에서 차단하였습니다. 물론 Secodnary 리소스의 볼륨 분리는 허용합니다.

리소스 해제

리소스를 위해 할당 했던 자원들을 해제합니다.

리소스 재구성

bsr 의 리소스 속성들은 기본적으로 운영 중(런타임) 설정 변경을 지원합니다. 이것을 동적 설정 (변경)이라고 합니다. 그러나 이러한 속성들 중 일부 필수 속성들은 동적 설정을 지원하지 않으며 구성파일의 설정을 변경한 후 리소스를 재기동하여 적용하는 정적 방식으로 재구성해야 합니다. 즉 정적 설정의 경우 리소스 재기동이 필요합니다.

동적 설정

구성파일을 변경하고 bsradm adjust 명령을 통해 실시간 변경합니다. 복제 프로토콜 변경 등 일부 특수 설정을 제외한 대부분의 속성은 이 방식으로 변경할 수 있습니다.

Info

복제 프로토콜 변경

운영 중 복제 프로토콜을 변경하기 위해서 프로토콜, 송신버퍼, 혼잡제어 설정을 같이 변경해야 합니다.

  • 먼저 drbdsetup del-peer <resource> <node-id> 명령으로 peer 연결을 삭제합니다.

  • 양 노드 리소스 파일의 sndbuf-size 의 크기, 프로토콜, 혼잡제어 설정을 조정합니다.

  • drbdadm adjust <resource> 로 적용합니다.

정적 설정

복제 구성을 위한 필수적인 설정(노드 ID, IP 주소, 포트, 볼륨 등)의 변경이 필요할 경우 리소스 down 을 선행한 후 설정을 변경해야 합니다. 구성파일을 변경한 후 다시 up 하여 리소스가 재시작되는 시점에 변경된 설정이 반영됩니다.

전체 재구성

  • 구성을 완전히 변경해야 하거나 디스크 장애등을 위한 복구가 필요한 경우 리소스 전체를 재 구성해야 합니다. 이 경우에는 먼저 운영 중인 리소스를 down 한 후 구성을 변경하고 메타 재 초기화를 수행하여 리소스를 재 기동해야 합니다.

...

  • 메타 디스크를 초기화하면 볼륨에 대한 초기 동기화의 절차를 다시 수행해야 합니다.

리소스 삭제

구성파일을 삭제 함으로써 리소스가 삭제됩니다. 보통 운영 중일 경우에는 다음의 절차를 통해 리소스를 삭제 합니다.

  • 운영 중인 리소스를 down 합니다.

  • bsrcon /m 을 통해 볼륨에 걸려있는 락을 해제 합니다.

  • 리소스 구성파일을 삭제 합니다.

조회

버전

bsradm /V 명령을 통해 bsr의 버전 정보를 확인합니다.

Code Block
[root@bsr-01 nglee]# bsradm -V
BSRADM_BUILDTAG=GIT-hash:3dca67e82d331e95121288a57898fcda13357e94 build by nglee@NGLEE-1,2020-01-29 13:50:48
BSRADM_API_VERSION=2
BSR_KERNEL_VERSION_CODE=0x000000
BSR_KERNEL_VERSION=0.0.0
BSRADM_VERSION_CODE=0x010600
BSRADM_VERSION=1.6.0-PREALPHA3

상태정보

기본적인 상태 정보를 출력합니다.

Code Block
>bsradm status r0
r0 role:Secondary
  disk:UpToDate
  nina role:Secondary
    disk:UpToDate
  nino role:Secondary
    disk:UpToDate
  nono connection:Connecting

...

  • Diskless. 로컬 블록 디바이스가 BSR 드라이버에 할당되지 않은 상태입니다. 리소스가 백업 디바이스에 적재된 적이 없거나, drbdadm detach <resource> 명령으로 수동 분리되었거나, lower-level I/O 오류 후에 자동으로 분리된 경우 이 상태가 됩니다.

  • Attaching. 메타 데이터를 읽는 동안의 일시적인 상태입니다.

  • Failed. 로컬 블록 디바이스의 I/O 실패 보고에 따른 일시적인 상태입니다. 다음 상태는 Diskless 입니다.

  • Negotiating. 이미 연결된 디바이스에서 Attach 가 실행되었을 때 일시적으로 이 상태가 됩니다.

  • Inconsistent. 데이터가 불일치한 상태입니다. 새로운 리소스를 구성했을 경우 양 노드의 디스크는 이 상태가 됩니다. 또는 동기화 중인 타겟 노드의 디스크 상태입니다.

  • Outdated. 리소스의 데이터가 일치하지만, 최신 데이터는 아닌 상태입니다.

  • DUnknown. 네트워크 연결을 사용할 수 없는 경우, 원격 디스크의 상태를 표시하기 위해 사용됩니다.

  • Consistent. 노드가 연결되는 과정에서 데이터는 일치한 상태로 간주된 일시적 상태입니다. 연결이 완료되면, UpToDate 인지 Outdated 인지 결정됩니다.

  • UpToDate. 데이터 정합성이 일치하고 최신의 상태입니다. 복제 중의 일반적인 상태입니다. 

이벤트

다음과 같은 명령으로 실시간 이벤트 발생 상태를 확인할 수 있습니다. events2 명령은 '--statistics', '--timestamp' 옵션과 함께 사용할 수 있습니다.

Info

C:\Program Files\drbd\bin>drbdsetup events2 --now r0
exists resource name:r0 role:Secondary suspended:no
exists connection name:r0 peer-node-id:1 conn-name:remote-host connection:Connected role:Secondary
exists device name:r0 volume:0 minor:7 disk:UpToDate
exists device name:r0 volume:1 minor:8 disk:UpToDate
exists peer-device name:r0 peer-node-id:1 conn-name:remote-host volume:0
replication:Established peer-disk:UpToDate resync-suspended:no
exists peer-device name:r0 peer-node-id:1 conn-name:remote-host volume:1
replication:Established peer-disk:UpToDate resync-suspended:no
exists -

동기화 속도 조정

혼잡 정책 설정

정합성 검증

스플릿 브레인

기타