Versions Compared

Key

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

개요

bsr은 로컬 노드의 데이터를 클러스터의 모든 다른 노드로 복제하는 블록 장치를 구현합니다. 여기서 실제 데이터 및 이와 관련한 메타 데이터는 각 클러스터 노드의 "일반"블록 장치 볼륨에 (일반적으로 외부메타일 경우)개별적으로 저장됩니다. 복제 블록 장치는 기본적으로 /dev/drbd<minor>형식으로 명명하거나 또는 장치의 심볼릭 링크(레터)로 직접 지정해야 합니다. 리소스 당 하나 이상의 장치들이 그룹화 되고 각각의 장치들을 병렬적으로 복제합니다. 리소스 내부의 장치를 volume으로 규정하며 두 개 이상의 클러스터 노드간에 리소스를 복제 할 수 있습니다. 클러스터 노드 간 연결은 지점 간 링크이며 TCP 프로토콜을 사용합니다. bsr은 구성파일을 이해하고 처리하는 기본 구성요소 bsradm 과 저수준의 구성요소 bsrsetup, bsrmeta, bsrcon으로 구성됩니다. 기본적인 bsr 구성은 /etc/drbd.conf 및 여기에 포함 된 추가 파일들(일반적으로 global_common.conf 및 /etc 경로의 안에 있는 모든 * .res 파일)로 구성됩니다. 보통 각 리소스를 etc/bsr.d/. 경로에서 별도의 * .res 파일들로 정의하는 것이 유용합니다. 구성 파일은 각 클러스터 노드가 전체 클러스터 구성의 동일한 사본을 포함하도록 설계되었습니다. 그러나 때로는 노드 별로 각기 다른 구성파일의 내용을 가져야 할 수도 있어서 절대적인 것은 아닙니다.

Code Block
resource r0 {
        net {
               protocol C;
        }
       disk {
              resync-rate 10M;
              c-plan-ahead 0;
       }
       on alice {
              volume 0 {
                       	device e minor 2;
						disk e;
						meta-disk f;
              }
             address 10.1.1.31:7789;
             node-id 0;
      }
      on bob {
            volume 0 {
                     disk e;
                     meta-disk f;
            }
           address 10.1.1.32:7789;
           node-id 1;
      }
}

이 예에서는 e 레터의 볼륨을 단일 복제 장치가 포함 된 리소스 r0로 정의합니다. 이 리소스는 각각 IPv4 주소 10.1.1.31 및 10.1.1.32와 노드 식별자 0 및 1을 가진 호스트 alice 및 bob 간의 복제를 수행합니다. 실제 데이터는 e 볼륨이지만 및 메타 데이터는 f 볼륨에 저장됩니다. 호스트 간 연결에는 프로토콜 C가 사용됩니다.

파일 포맷

구성 파일은 섹션 유형에 따라 다른 섹션 및 매개 변수를 포함하는 섹션으로 구성됩니다. 각 섹션은 하나 이상의 키워드, 때로는 섹션 이름, 여는 중괄호 ( "{"), 섹션의 내용 및 닫는 중괄호 ( "}")로 구성됩니다. 섹션 내의 매개 변수는 키워드와 하나 이상의 키워드 또는 값 및 세미콜론 ( ";")으로 구성됩니다. 일부 매개 변수 값에는 일반 숫자를 지정할 때 적용되는 기본 스케일이 있습니다 (예 : Kilo). 이러한 기본 스케일은 접미사 (예 : M의 경우 Mega)를 사용하여 재정의 할 수 있습니다. 공통 접미사는 K = 2 ^ 10 = 1024, M = 1024 K 및 G = 1024 M이 지원됩니다. 주석은 해시 기호 ( "#")로 시작하여 해당 줄 끝까지 기술할 수 있습니다. 또한, 모든 섹션에 키워드 skip을 접두어로 붙여서 섹션과 하위 섹션을 무시할 수 있습니다. 추가 파일은 include 파일 패턴 명령문에 포함될 수 있습니다. include 문은 섹션 외부에서만 허용됩니다.

아래에 기술한 섹션이 정의됩니다. 들여 쓰기된 섹션이 하위 섹션임을 표시합니다.

Code Block
common
   [disk]
   [handlers]
   [net]
   [options]
   [startup]
global
resource
   connection
      path
      net
        volume
           peer-device-options
      [peer-device-options]
   connection-mesh
      net
   [disk]
   floating
   handlers
   [net]
   on
      volume
         disk
         [disk]
   options
   stacked-on-top-of
   startup
 

괄호 안의 섹션은 구성의 다른 부분에 영향을 줍니다. common 섹션의 내용은 모든 리소스에 적용됩니다. resource 또는 resource 섹션의 disk 섹션은 해당 자원의 모든 볼륨에 적용되며 resource 섹션의 network 섹션은 해당 자원의 모든 connection에 적용됩니다. 이를 통해 각 자원, 연결 또는 볼륨에 대해 동일한 옵션을 반복하지 않아도됩니다. 리소스, 연결, 볼륨 또는 볼륨 섹션에서 보다 구체적인 옵션을 재정의 할 수 있습니다. peer-device 옵션은 resync-rate, c-plan-ahead, c-delay-target, c-fill-target, c-max-rate 및 c-min-rate 로 정의되며 이전 버전과의 호환성을 위해 모든 disk 섹션에서도 지정할 수 있습니다. 그것들은 모든 관련 연결로 상속됩니다. connection 섹션에 부여 된 경우 해당 connection의 모든 볼륨에 상속됩니다. "peer-device-options"섹션은 "disk"키워드로 시작됩니다.

섹션

common

이 섹션에는 각 disk, handler, network, options 및 startup 섹션이 포함될 수 있습니다. 모든 리소스들은 이 섹션의 매개 변수를 기본값으로 상속합니다.

connection [name]

두 호스트 간의 연결을 정의합니다. 이 섹션에는 두 개의 호스트 매개 변수 또는 여러 경로 섹션이 포함되어야합니다. 선택적으로 사용할 수 있는 "Name"은 시스템 로그 및 기타 다른 메시지들의 연결을 나타내는 데 사용됩니다. 이름을 지정하지 않으면 피어의 호스트 이름이 대신 사용됩니다.

path

두 호스트 간의 path를 정의합니다. 이 섹션에는 두 개의 호스트 매개 변수가 포함되어야합니다.

connection-mesh

여러 호스트들 간의 mesh 연결을 정의합니다. 이 섹션에는 호스트 이름을 인수로 갖는 "hosts"매개 변수가 포함되어야합니다. 이 섹션은 동일한 네트워크 옵션을 공유하는 많은 연결을 손쉽게 정의하는 방법입니다.

disk

볼륨의 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

floating [address-family] addr:port

on 섹션과 마찬가지로 호스트 이름 대신 네트워크 주소가 floating 섹션과 일치하는지 확인합니다. 이 섹션의 node-id 매개 변수가 필요합니다. 주소 매개 변수가 제공되지 않으면 기본적으로 피어에 대한 연결이 생성되지 않습니다. device, diskmeta-disk 매개 변수는 반드시 이 섹션에서 정의하거나 상위로부터 상속해야 합니다.

global

일부 전역 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다. 구성에서 하나의 global 섹션만 허용됩니다.

handlers

특정 이벤트가 발생할 때 호출 될 핸들러를 정의합니다. 커널은 핸들러의 첫 번째 명령 줄 인수에서 리소스 이름을 전달하고 이벤트 문맥에 따라 다음 환경 변수를 설정합니다.

  • 특정 device와 관련된 이벤트의 경우: 장치의 부 번호는 BSR_MINOR, 장치의 볼륨 번호는 BSR_VOLUME 에 있습니다.

  • 특정 peer의 특정 device와 관련된 이벤트의 경우: BSR_MY_ADDRESS, BSR_MY_AF, BSR_PEER_ADDRESS 및 BSR_PEER_AF에 connection 엔드 포인트가 있습니다; BSR_MINOR에 있는 장치의 로컬 부 번호 및 BSR_VOLUME에 장치의 볼륨 번호가 있습니다.

  • 특정 connection과 관련된 이벤트의 경우: BSR_MY_ADDRESS, BSR_MY_AF, BSR_PEER_ADDRESS 및, BSR_PEER_AF에 connection 엔드 포인트; 그리고 해당 connection에 대해 정의된 각 device의 장치 부 번호가 DRBD_MINOR_volume-number에 있습니다.

  • 장치를 식별하는 이벤트의 경우 하위 장치가 연결되어 있으면 하위 장치의 장치 이름이 BSR_BACKING_DEV (또는 BSR_BACKING_DEV_volume-number)로 전달됩니다.

이 섹션의 모든 매개 변수는 선택 사항입니다. 각 이벤트에 대해 단일 핸들러만 정의 할 수 있습니다. 핸들러가 정의되어 있지 않으면 아무 일도 일어나지 않습니다.

net

연결 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

on host-name [...]

특정 호스트 또는 호스트 세트에서 리소스의 특성을 정의하십시오. 예를 들어, IP 주소 failover 설정에서 둘 이상의 호스트 이름을 지정하는 경우에 의미가 있습니다. host-name 인수는 OS에 설정된 호스트 이름 (uname -n)과 일치해야합니다. 일반적으로 하나 이상의 볼륨 섹션을 포함하거나 상속합니다. 이 섹션에서 node-id 및 address 매개 변수를 정의해야합니다. device, disk 및 meta-disk 매개 변수는이 섹션에서 반드시 정의하거나 상속해야합니다. 일반적인 구성 파일에서는 각 리소스에 대한 둘 이상의 on 섹션이 있습니다. floating 섹션의 내용을 참고하세요

options

리소스에 대한 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

resource name

리소스를 정의합니다. 일반적으로 두 개 이상의 섹션과 하나 이상의 connection 섹션이 있습니다.

stacked-on-top-of resource

3-4 개의 노드로 스택 된 리소스를 구성하기 위해 on 섹션 대신 사용됩니다. bsr에선 스태킹이 더 이상 사용되지 않으며, 1:N 복제 구성으로 사용하는 것이 좋습니다.

startup

이 섹션의 매개 변수는 리소스 시작 시 리소스의 동작을 결정합니다.

volume volume-number

리소스 내에서 볼륨을 정의합니다. 리소스의 volume 섹션들에 있는 볼륨 번호는 호스트에서 어떤 장치가 복제 장치를 구성하는지 정의합니다.

connection 섹션

host name [address [address-family] address] [port port-number]

연결에 대한 엔드포인트를 정의합니다. 각 host 구문은 리소스의 on 섹션을 나타냅니다. 포트 번호가 정의되면 이 엔드 포인트는 on 섹션에 정의 된 포트 대신 지정된 포트를 사용합니다. 각 connection 섹션에는 정확히 두 개의 host 매개 변수가 포함되어야합니다. 두 개의 host 매개 변수 대신 connection에 다중 path 섹션이 포함될 수 있습니다.

path 섹션

host name [address [address-family] address] [port port-number]

연결에 대한 엔드포인트를 정의합니다. 각 host 구문은 리소스의 on 섹션을 나타냅니다. 포트 번호가 정의되면 이 엔드 포인트는 on섹션에 정의 된 포트 대신 지정된 포트를 사용합니다. 각 path 섹션에는 정확히 두 개의 host 매개 변수가 포함되어야합니다.

connection-mesh 섹션

hosts name

메쉬의 모든 노드를 정의합니다. 각 이름은 자원의 on 섹션을 나타냅니다. on 섹션에 정의 된 포트가 사용됩니다.

disk 섹션

al-extents extents

bsr은 최근 디스크 쓰기 작업을 근거로 쓰여진(active) 영역과 쓰여진 영역에 최근 다시 쓰여진(hot) 영역에 대해 관리합니다. 쓰기 I/O가 발생하면 active 영역은 디스크에 즉시 쓰면 되지만 inactive 디스크 영역은 먼저 activated 해야 하기 때문에 여기서 메타 데이터 쓰기가 필요합니다. 이 active 디스크 영역을 activity log 라고 합니다.

activity log에 메타 데이터 쓰기를 저장하지만 실패한 노드를 복구할 경우 전체 activity log에 대해 다시 동기화 해야 합니다. 따라서 activity log의 크기는 primary 크래쉬 후 재 동기화에 얼마나 오래 걸릴지, 얼마나 빨리 복제 디스크의 일관성을 맞출지의 주요 요인이 됩니다. activity log는 여러 개의 4MiB 단위 세그먼트로 구성됩니다. al-extents 매개 변수는 동시에 활성화 할 수있는 세그먼트 수를 결정합니다. al-extents의 기본값은 6001이며 최소 7과 최대 65536입니다. 장치 메타 데이터를 생성한 방법에 따라 유효한 최대 값이 더 작을 수도 있습니다 (bsrmeta 참조).

유효 최대 값은 919 * (사용 가능한 온 디스크 activity log 링 버퍼 영역 / 4kB -1)이며, 기본 32KB 링 버퍼에서 최대 6433 (25GiB 이상의 데이터 포함)이 됩니다. 백엔드 스토리지 및 복제 링크가 약 5 분 이내에 재 동기화 될 수있는 양 이내에서 activity log의 크기를 유지하는 게 좋습니다.

al-updates {yes | no}

이 매개 변수를 no 로 설정하면 activity log를 완전히 끌 수 있습니다 (al-extents 매개 변수 참조). 메타 데이터 쓰기가 더 적게 필요하기 때문에 쓰기 속도가 빨라지지만, 실패한 기본 노드의 복구시 전체 장치를 재 동기화해야합니다. al-updats 의 기본값은 yes 입니다.

disk-barrier,

disk-flushes,

disk-drain

bsr에는 쓰기 요청의 순서를 처리하는 세 가지 방법이 있습니다.

  • disk-flush 디스크에 쓰기 I/O 를 수행한 후 flush 를 강제하여 모든 데이터를 디스크에 기록하도록 조치합니다. 플랫폼에 따라 또는 드라이브 공급 업체에 따라 flush의 구현이 다를 수 있습니다. 예전 방식으로는 'force unit access'라고 명명되는 디스크 캐쉬를 우회하는 기술로 사용되기도 했으나 최근에은 기본적으로 디스크이 캐쉬를 비우는 작업을 통해 디스크 쓰기를 보장하는 방식으로 구현되고 있습니다. 이 옵션은 기본적으로 활성화되어 있습니다.

  • disk-barrier 이 옵션을 사용하여 요청이 올바른 순서로 디스크에 기록되도록합니다. barrier는 barrier 이전에 제출 된 모든 요청이 이후에 제출 된 요청보다 앞서서 모두 디스크에 요청하도록 보장 합니다. 이는 SCSI 장치의 'tagged command queuing'과 SATA 장치의 'native command queuing'을 사용하여 구현됩니다. 일부 장치 및 장치 스택 만이 이 방법을 지원합니다. device mapper (LVM)는 일부 구성에서만 barrier를 지원합니다. disk-barrier을 지원하지 않는 시스템에서 이 옵션을 사용하면 데이터가 손실되거나 손상 될 수 있습니다. 이 옵션은 예전 리눅스 커널에서는 지원했지만 linux-2.6.36 (또는 2.6.32 RHEL6) 이후의 커널은 더 이상 disk-barrier가 지원되는지 감지할 수 없습니다. 이 옵션은 기본적으로 해제되어 있으며 명시적으로 활성화해야합니다.

  • disk-drain 쓰기 요청을 제출하기 전에 요청 큐가 "드레인"될 때까지(즉, 요청이 완료 될 때까지) 기다립니다. 이 방법을 사용하려면 요청이 완료될 떄 까지 요청들이 디스크에서 안정적이어야 합니다. 예전에는 이 옵션을 기본 활성화 하였지만 지금은 비활성화 되어 있습니다.

disk-timeout

데이터를 저장하는 하위 장치에 정의된 디스크 시간 내에 I/O 요청을 완료하지 못하면 bsr은 이를 실패로 처리합니다. 이 경우 하위 장치가 detach되고 장치의 디스크 상태가 diskless 상태가 됩니다. bsr이 하나 이상의 피어에 연결되어 있다면 실패한 요청이 그 중 하나에 전달됩니다. 이 옵션은 위험하며 커널 패닉으로 이어질 수 있습니다. 요청을 Abort 하고 강제로 디스크를 제거하는 것은 더 이상 요청을 완료하지도 않고 오류도 반환하지 않는 완전히 block되고 중지된 로컬 백업 장치를 위한 조치입니다. 이 상황에서는 일반적으로 하드 리셋 및 페일 오버가 유일한 방법입니다. disk-timeout의 기본값은 0이며, 이는 무한 시간 초과를 나타냅니다. 시간 초과는 0.1 초 단위로 지정됩니다.

md-flushes

메타 데이터 장치에서 디스크 플러시 및 디스크 장벽을 활성화합니다. 이 옵션은 기본적으로 활성화되어 있습니다. disk-flush 매개 변수를 참조하십시오.

on-io-error handler

하위 레벨 장치에서 bsr이 I/O 오류에 대응하는 방식을 구성합니다. 다음과 같은 정책이 정의됩니다.

  • passthrough 하위 장치에서 오류가 반환될 경우 해당 블럭 계층을 OOS로 기록하고 상위 계층으로 오류를 전달합니다. 해당 오류 블럭은 보통 상위 계층에 의해 재시도 I/O가 발생 되고 재시도 시점에 성공할 경우 OOS 는 자연스럽게 해소되거나 그렇지 않을 경우 OOS 가 기록되어 남겨집니다. bsr 의 기본값 입니다.

  • call-local-io-error local-io-error 핸들러를 호출합니다 ( handlers 섹션을 참고하세요).

  • detach 하위레벨 장치를 분리하고 diskless 상태로 전환합니다. diskless 상태에서는 I/O가 수행될 수 없으며 즉시 failover가 필요합니다.

resync-after res-name/volume

지정된 다른 장치가 동기화된 이후에만 장치를 재 동기화하도록 정의합니다. 기본적으로 장치간에는 동기화 순서가 정의되어 있지 않으며 모든 장치가 병렬로 재 동기화 됩니다. 하위 장치 구성, 사용 가능한 네트워크 및 디스크 대역폭에 따라 전체 재 동기화 프로세스가 느려질 수 있기 때문에 이 옵션을 사용하여 장치 간의 종속성 체인 또는 트리를 형성 할 수 있습니다.

peer-device-options 섹션

peer-device-options 섹션 이지만 disk 키워드로 이 섹션을 기술합니다.

c-fill-target fill_target,

c-max-rate max_rate,

c-plan-ahead plan_time

재 동기화 속도를 동적으로 제어합니다. 이 메카니즘은 c-plan-ahead 매개 변수를 양수 값으로 설정하여 사용할 수 있습니다. 최대 대역폭은 c-max-rate 매개 변수에 의해 제한됩니다. c-plan-ahead 매개 변수는 bsr이 재 동기화 속도의 변화에 ​​얼마나 빨리 적응 하는지를 정의합니다. 네트워크 왕복 시간(RTT)의 5 배 이상으로 설정해야합니다. c-fill-target이 정의되면 데이터 경로를 따라 정의 된 양의 데이터로 버퍼를 채우려고 하고 c-delay-target이 정의 된 경우 정의된 지연을 갖게 합니다. "정상" 데이터 경로에 대한 c-fill-target의 공통 값 범위는 4K ~ 100K입니다. drx를 사용하는 경우 c-fill-target 대신 c-delay-target을 사용하는 것이 좋습니다. c-delay-target 매개 변수는 c-fill-target 매개 변수가 정의되지 않거나 0으로 설정된 경우에 사용됩니다. c-delay-target 매개 변수는 네트워크 왕복 시간의 5 배 이상으로 설정해야합니다. c-max-rate 옵션은 bsr 호스트와 drx 를 호스팅하는 시스템간에 사용 가능한 대역폭 또는 사용 가능한 디스크 대역폭으로 설정해야합니다. 이 매개 변수들의 기본값은 다음과 같습니다. c-plan-ahead = 20 (0.1 초 단위), c-fill-target = 0 (섹터 단위), c-delay-target = 1 (0.1 초 단위) ) 및 c-max-rate = 102400 (KiB/s 단위).

c-min-rate min_rate

Primary 이고 동기화 소스 인 노드는 애플리케이션 I/O 요청과 동기화 요청을 스케줄링해야 합니다. c-min-rate 매개 변수는 재 동기화 I/O에 사용할 수있는 대역폭의 양을 제한합니다. 나머지 대역폭은 응용 프로그램 I/O의 복제에 사용됩니다. c-min-rate 값이 0이면 재 동기화 I/O 대역폭에 제한이 없음을 의미합니다. 이로 인해 응용 프로그램 I/O 속도가 크게 느려질 수 있습니다. 가장 낮은 재 동기화 속도를 위해서는 1 (1 KiB/s) 값을 사용하십시오. c-min-rate의 기본값은 KiB/s 단위로 250 입니다.

resync-rate rate

재 동기화에 bsr이 사용할 수있는 대역폭을 정의합니다. bsr은 재 동기화 중에도 일반적인 응용 프로그램 I/O를 허용합니다. 재 동기화가 너무 많은 대역폭을 차지하면 응용 프로그램 I/O가 매우 느려질 수 있으며 이 매개 변수를 사용하면 이를 피할 수 있습니다. 이 옵션은 동적 재 동기화 컨트롤러가 비활성화 된 경우에만 작동합니다.

global 섹션

dialog-refresh time

bsr 초기화 스크립트를 사용하여 장치를 구성하고 시작할 수 있습니다. 여기에는 다른 클러스터 노드 대기와 관련 될 수 있습니다. 기다리는 동안 init 스크립트는 남은 대기 시간을 보여줍니다. 대화 상자 새로 고침은 해당 카운트 다운 업데이트 사이의 시간 (초)을 정의하고 기본값은 1입니다. 값이 0이면 카운트 다운이 꺼집니다.

disable-ip-verification

일반적으로 bsr은 구성의 IP 주소가 호스트 이름과 일치하는지 확인합니다. disable-ip-verification 매개 변수를 사용하여 이러한 검사를 비활성화할 수 있습니다.

usage-count {yes | no | ask}

사용 통계를 취합하는 기능이지만 bsr 에서는 사용되지 않습니다.

handlers 섹션

after-resync-target cmd

재 동기화가 완료 될 때 노드 상태가 "Inconsistent"에서 "Consistent"로 변경되면 SyncTarget에서 호출됩니다. 예를 들어, 이 핸들러는 before-resync-target 핸들러에서 작성된 스냅 샷을 제거하는 데 사용할 수 있습니다.

before-resync-target cmd

재 동기화가 시작되기 전에 SyncTarget에서 호출됩니다. 이 핸들러는 재 동기화 기간 동안 하위 레벨 디바이스의 스냅 샷을 작성하는 데 사용할 수 있습니다. 재 동기화 중에 재 동기화 소스를 사용할 수없는 경우 스냅 샷으로 되돌리면 Consistent한 상태로 복원 할 수 있습니다.

before-resync-source cmd

재동기화를 시작하기 전 동기화 소스에서 호출됩니다.

out-of-sync cmd

정합성 검사를 수행 후 OOS 블록이 발견되면 모든 노드에서 호출됩니다. 이 핸들러는 주로 모니터링 목적으로 사용됩니다. 경고 SMS를 보내는 스크립트를 호출하는 것이 그 예입니다.

fence-peer cmd

노드가 특정 피어의 리소스를 차단해야 할 때 호출됩니다. 핸들러는 bsr이 피어와 통신하는 데 사용하는 동일한 통신 경로를 사용해서는 안됩니다.

unfence-peer cmd

노드가 다른 노드에서 펜싱 제약 조건을 제거해야 할 때 호출됩니다.

initial-split-brain cmd

스플릿 브레인 상태임을 감지하면 호출됩니다. 이 핸들러는 스플릿 브레인 자동 해결 시나리오에서도 호출됩니다.

local-io-error cmd

하위 장치에서 I/O 에러가 발생할 경우 호출됩니다.

pri-lost cmd

로컬 노드는 현재 Primary 노드이지만 bsr이 동기화 대상이되어야 한다고 생각합니다. 이 경우 노드는 Primary 역할을 포기해야 합니다.

pri-lost-after-sb cmd

로컬 노드는 현재 Primary 노드이지만 스플릿 후 자동 복구 절차를 통해 잃었을 때 호출됩니다. 이 경우 노드는 버려야합니다.

split-brain cmd

bsr이 자동으로 해결할 수없는 스플릿 브레인 상황을 감지했습니다. 수동 복구가 필요합니다. 이 핸들러는 관리자의 주의를 환기시키는 데 사용될 수 있습니다.

net 섹션

after-sb-0pri policy

스플릿 브레인 시나리오가 감지되고 두 노드 중 어느 것도 Primary 역할을 수행하지 않는 경우 대응 방법을 정의합니다. (두 노드가 연결될 때 스플릿 브레인 시나리오를 감지합니다. 스플릿 브레인 결정은 항상 두 노드 사이에 있습니다.) 정의 된 정책은 다음과 같습니다.

...

disconnect 단순히 연결을 끊습니다.

...

discard-younger-primary,

...

discard-older-primary 먼저 Primary 가 됬던 노드(discard-younger-primary) 또는 마지막으로 Primary 가 됬던 노드(discard-older-primary)를 폐기합니다. 만일 두 노드가 독립적으로 Primary 가 됬었다면 discard-least-changes 정책을 사용합니다.

...

discard-least-changes 많은 데이터를 쓴 노드를 기준으로 동기화 합니다.

...

discard-node-nodename 명명된 노드를 항상 폐기합니다.

after-sb-1pri policy

Primary 노드 1 개와 Secondary 노드 1 개로 스플릿 브레인이 감지되는 경우 대처 방법을 정의합니다. (두 노드가 연결될 때 스플릿 브레인 시나리오를 감지하므로 스플릿 브레인 결정은 항상 두 노드 중 하나입니다.) 정의 된 정책은 다음과 같습니다.

  • disconnect 단순히 연결을 끊습니다.

  • consensus 희생노드가 선택될 수 있다면 자동으로 해결합니다. 그렇지 않으면, disconnect처럼 동작합니다.

  • discard-secondary Secondary 의 노드를 폐기합니다.

after-sb-2pri policy

스플릿 브레인 시나리오가 감지되고 두 노드가 모두 Primary 역할을 하는 경우 대응 방법을 정의합니다. (두 노드가 연결될 때 스플릿 브레인 시나리오를 감지하므로 스플릿 브레인 결정은 항상 두 노드 중 하나 입니다.) 정의 된 정책은 다음과 같습니다.

  • disconnect 단순히 연결을 끊습니다.

2 primary 스플릿 브레인의 경우 disconnect 를 통한 수동 복구만 사용할 수 있습니다.

allow-two-primaries

bsr 에선 이중 primary 모드를 지원하지 않습니다.

connect-int time

drbdsetup connect로 두 노드 간 연결이 구성되는 즉시 연결 설정을 시도합니다. 이것이 실패하면 bsr은 connect-int초 동안 기다렸다가 반복합니다. connect-int의 기본값은 3초입니다.

csums-alg hash-algorithm

일반적으로 두 노드가 다시 동기화되면 동기화 대상은 동기화 소스로부터 out-of-sync 데이터를 요청하고 동기화 소스는 데이터를 전송합니다.

많은 사용 패턴에서 볼 때 상당수의 블록이 실제로 동일합니다. csums-alg 알고리즘이 지정되면 동기화되지 않은 데이터를 요청할 때 동기화 대상도 현재 보유한 데이터의 해시를 전송합니다. 동기화 소스는이 해시를 자기의 데이터와 비교합니다. 해시가 다르면 동기화 대상에 새 데이터를 보내고 해시가 같으면 데이터가 동일하다는 것을 알려줍니다. 이렇게 하면 필요한 네트워크 대역폭이 줄어들지만 CPU 사용률이 높아지고 SyncTarget의 읽기 I/O가 증가합니다 . csums-alg는 커널이 지원하는 보안 해시 알고리즘 중 하나로 설정 될 수 있습니다. /proc/crypto에 나열된 shash 알고리즘을 참조하십시오. 기본적으로 csums-alg는 설정되어 있지 않습니다.

data-integrity-alg alg

bsr은 일반적으로 TCP/IP 프로토콜에 내장 된 데이터 무결성 검사에 의존하지만, 데이터 무결성 알고리즘이 구성된 경우 이 알고리즘을 사용하여 네트워크를 통해 수신 된 데이터가 발신자가 보낸 것과 일치하는지 확인합니다. 데이터 무결성 오류가 감지되면 bsr은 네트워크 연결을 닫고 다시 연결하여 재 동기화를 트리거합니다. data-integrity-alg는 커널이 지원하는 보안 해시 알고리즘 중 하나로 설정 될 수 있습니다. /proc/crypto에 나열된 shash 알고리즘을 참조하십시오. 기본적으로이 메커니즘은 해제되어 있습니다. 관련된 CPU 오버 헤드로 인해 운영 환경에서는 이 옵션을 사용하지 않는 것이 좋습니다. 아래의 데이터 무결성에 대한 참고 사항도 참조하십시오.

fencing fencing_policy

펜싱은 두 노드가 연결이 끊어져서 모두 Primary 가 되는 상황을 방지하기위한 예방 조치입니다. 이것은 스플릿 브레인 상황 이라고도 합니다. bsr은 다음과 같은 펜싱 정책을 지원합니다.

  • dont-care 펜싱 조치가 수행되지 않습니다. 이것이 기본 정책입니다.

  • resource-only 노드가 연결이 끊긴 Primary 노드가 되면 피어를 차단하려고 합니다. 이것은 "fence-peer" 핸들러를 호출하여 수행됩니다. 핸들러는 대체 통신 경로를 통해 피어에 도달하여 'drbdadm outdate minor'를 호출해야 합니다.

  • resource-and-stonith 노드가 연결이 끊긴 Primary 노드가 되면 모든 IO 작업을 중지하고 fence-peer 핸들러를 호출합니다. fence-peer 핸들러는 대체 통신 경로를 통해 피어에 도달하여 'drbdadm outdate minor'를 호출해야 합니다. 그렇게 할 수없는 경우에는 상대방을 (전원 제어)차단해야 합니다. 상황이 해결 되자마자 IO가 재개됩니다. 펜스 피어 핸들러가 실패한 경우 잠재적으로 스플릿 브레인이 발생했다고 판단하고 수동으로 복구해야 합니다.

ko-count number

송신 버퍼링 시 병목이 발생할 경우 TX 노드 측의 송신 재시도 회수를 정의합니다.

max-buffers number

Limits the memory usage per DRBD minor device on the receiving side, or for internal buffers during resync or online-verify. Unit is PAGE_SIZE, which is 4 KiB on most systems. The minimum possible setting is hard coded to 32 (=128 KiB). These buffers are used to hold data blocks while they are written to/read from disk. To avoid possible distributed deadlocks on congestion, this setting is used as a throttle threshold rather than a hard limit. Once more than max-buffers pages are in use, further allocation from this pool is throttled. You want to increase max-buffers if you cannot saturate the IO backend on the receiving side.

max-epoch-size number

Define the maximum number of write requests DRBD may issue before issuing a write barrier. The default value is 2048, with a minimum of 1 and a maximum of 20000. Setting this parameter to a value below 10 is likely to decrease performance.

on-congestion policy,

congestion-fill threshold,

congestion-extents threshold

By default, DRBD blocks when the TCP send queue is full. This prevents applications from generating further write requests until more buffer space becomes available again. When DRBD is used together with DRBD-proxy, it can be better to use the pull-ahead on-congestion policy, which can switch DRBD into ahead/behind mode before the send queue is full. DRBD then records the differences between itself and the peer in its bitmap, but it no longer replicates them to the peer. When enough buffer space becomes available again, the node resynchronizes with the peer and switches back to normal replication. This has the advantage of not blocking application I/O even when the queues fill up, and the disadvantage that peer nodes can fall behind much further. Also, while resynchronizing, peer nodes will become inconsistent. The available congestion policies are block (the default) and pull-ahead. The congestion-fill parameter defines how much data is allowed to be "in flight" in this connection. The default value is 0, which disables this mechanism of congestion control, with a maximum of 10 GiBytes. The congestion-extents parameter defines how many bitmap extents may be active before switching into ahead/behind mode, with the same default and limits as the al-extents parameter. The congestion-extents parameter is effective only when set to a value smaller than al-extents. Ahead/behind mode is available since DRBD 8.3.10.

ping-int interval

When the TCP/IP connection to a peer is idle for more than ping-int seconds, DRBD will send a keep-alive packet to make sure that a failed peer or network connection is detected reasonably soon. The default value is 10 seconds, with a minimum of 1 and a maximum of 120 seconds. The unit is seconds.

ping-timeout timeout

Define the timeout for replies to keep-alive packets. If the peer does not reply within ping-timeout, DRBD will close and try to reestablish the connection. The default value is 0.5 seconds, with a minimum of 0.1 seconds and a maximum of 3 seconds. The unit is tenths of a second.

socket-check-timeout timeout

In setups involving a DRBD-proxy and connections that experience a lot of buffer-bloat it might be necessary to set ping-timeout to an unusual high value. By default DRBD uses the same value to wait if a newly established TCP-connection is stable. Since the DRBD-proxy is usually located in the same data center such a long wait time may hinder DRBD's connect process. In such setups socket-check-timeout should be set to at least to the round trip time between DRBD and DRBD-proxy. I.e. in most cases to 1. The default unit is tenths of a second, the default value is 0 (which causes DRBD to use the value of ping-timeout instead). Introduced in 8.4.5.

protocol name

Use the specified protocol on this connection. The supported protocols are:

  • A Writes to the DRBD device complete as soon as they have reached the local disk and the TCP/IP send buffer.

  • B Writes to the DRBD device complete as soon as they have reached the local disk, and all peers have acknowledged the receipt of the write requests.

  • C Writes to the DRBD device complete as soon as they have reached the local and all remote disks. 

rcvbuf-size size

Configure the size of the TCP/IP receive buffer. A value of 0 (the default) causes the buffer size to adjust dynamically. This parameter usually does not need to be set, but it can be set to a value up to 10 MiB. The default unit is bytes.

rr-conflict policy

This option helps to solve the cases when the outcome of the resync decision is incompatible with the current role assignment in the cluster. The defined policies are:

  • disconnect No automatic resynchronization, simply disconnect.

  • violently Resync to the primary node is allowed, violating the assumption that data on a block device are stable for one of the nodes. Do not use this option, it is dangerous.

  • call-pri-lost Call the pri-lost handler on one of the machines. The handler is expected to reboot the machine, which puts it into secondary role.

shared-secret secret

Configure the shared secret used for peer authentication. The secret is a string of up to 64 characters. Peer authentication also requires the cram-hmac-alg parameter to be set.

sndbuf-size size

Configure the size of the TCP/IP send buffer. Since DRBD 8.0.13 / 8.2.7, a value of 0 (the default) causes the buffer size to adjust dynamically. Values below 32 KiB are harmful to the throughput on this connection. Large buffer sizes can be useful especially when protocol A is used over high-latency networks; the maximum value supported is 10 MiB.

tcp-cork

By default, DRBD uses the TCP_CORK socket option to prevent the kernel from sending partial messages; this results in fewer and bigger packets on the network. Some network stacks can perform worse with this optimization. On these, the tcp-cork parameter can be used to turn this optimization off.

timeout time

Define the timeout for replies over the network: if a peer node does not send an expected reply within the specified timeout, it is considered dead and the TCP/IP connection is closed. The timeout value must be lower than connect-int and lower than ping-int. The default is 6 seconds; the value is specified in tenths of a second.

use-rle

Each replicated device on a cluster node has a separate bitmap for each of its peer devices. The bitmaps are used for tracking the differences between the local and peer device: depending on the cluster state, a disk range can be marked as different from the peer in the device's bitmap, in the peer device's bitmap, or in both bitmaps. When two cluster nodes connect, they exchange each other's bitmaps, and they each compute the union of the local and peer bitmap to determine the overall differences. Bitmaps of very large devices are also relatively large, but they usually compress very well using run-length encoding. This can save time and bandwidth for the bitmap transfers. The use-rle parameter determines if run-length encoding should be used. It is on by default since DRBD 8.4.0.

verify-alg hash-algorithm

Online verification (drbdadm verify) computes and compares checksums of disk blocks (i.e., hash values) in order to detect if they differ. The verify-alg parameter determines which algorithm to use for these checksums. It must be set to one of the secure hash algorithms supported by the kernel before online verify can be used; see the shash algorithms listed in /proc/crypto. We recommend to schedule online verifications regularly during low-load periods, for example once a month. Also see the notes on data integrity below.

on 섹션

address [address-family] address: port

Defines the address family, address, and port of a connection endpoint. The address families ipv4ipv6ssocks (Dolphin Interconnect Solutions' "super sockets"), sdp (Infiniband Sockets Direct Protocol), and sci are supported ( sci is an alias for ssocks). If no address family is specified, ipv4 is assumed. For all address families except ipv6, the address is specified in IPV4 address notation (for example, 1.2.3.4). For ipv6, the address is enclosed in brackets and uses IPv6 address notation (for example, [fd01:2345:6789:abcd::1]). The port is always specified as a decimal number from 1 to 65535. On each host, the port numbers must be unique for each address; ports cannot be shared.

node-id value

Defines the unique node identifier for a node in the cluster. Node identifiers are used to identify individual nodes in the network protocol, and to assign bitmap slots to nodes in the metadata. Node identifiers can only be reasssigned in a cluster when the cluster is down. It is essential that the node identifiers in the configuration and in the device metadata are changed consistently on all hosts. To change the metadata, dump the current state with drbdmeta dump-md, adjust the bitmap slot assignment, and update the metadata with drbdmeta restore-md. The node-id parameter exists since DRBD 9. Its value ranges from 0 to 16; there is no default.

options 섹션(resource options)

auto-promote bool-value

A resource must be promoted to primary role before any of its devices can be mounted or opened for writing. Before DRBD 9, this could only be done explicitly ("drbdadm primary"). Since DRBD 9, the auto-promote parameter allows to automatically promote a resource to primary role when one of its devices is mounted or opened for writing. As soon as all devices are unmounted or closed with no more remaining users, the role of the resource changes back to secondary. Automatic promotion only succeeds if the cluster state allows it (that is, if an explicit drbdadm primary command would succeed). Otherwise, mounting or opening the device fails as it already did before DRBD 9: the mount(2) system call fails with errno set to EROFS (Read-only file system); the open(2) system call fails with errno set to EMEDIUMTYPE (wrong medium type). Irrespective of the auto-promote parameter, if a device is promoted explicitly ( drbdadm primary), it also needs to be demoted explicitly (drbdadm secondary). The auto-promote parameter is available since DRBD 9.0.0, and defaults to yes.

cpu-mask cpu-mask

Set the cpu affinity mask for DRBD kernel threads. The cpu mask is specified as a hexadecimal number. The default value is 0, which lets the scheduler decide which kernel threads run on which CPUs. CPU numbers in cpu-mask which do not exist in the system are ignored.

on-no-data-accessible policy

Determine how to deal with I/O requests when the requested data is not available locally or remotely (for example, when all disks have failed). The defined policies are:

  • io-error System calls fail with errno set to EIO.

  • suspend-io The resource suspends I/O. I/O can be resumed by (re)attaching the lower-level device, by connecting to a peer which has access to the data, or by forcing DRBD to resume I/O with drbdadm resume-io res. When no data is available, forcing I/O to resume will result in the same behavior as the io-error policy. 

This setting is available since DRBD 8.3.9; the default policy is io-error.

peer-ack-window value

On each node and for each device, DRBD maintains a bitmap of the differences between the local and remote data for each peer device. For example, in a three-node setup (nodes A, B, C) each with a single device, every node maintains one bitmap for each of its peers. When nodes receive write requests, they know how to update the bitmaps for the writing node, but not how to update the bitmaps between themselves. In this example, when a write request propagates from node A to B and C, nodes B and C know that they have the same data as node A, but not whether or not they both have the same data. As a remedy, the writing node occasionally sends peer-ack packets to its peers which tell them which state they are in relative to each other. The peer-ack-window parameter specifies how much data a primary node may send before sending a peer-ack packet. A low value causes increased network traffic; a high value causes less network traffic but higher memory consumption on secondary nodes and higher resync times between the secondary nodes after primary node failures. (Note: peer-ack packets may be sent due to other reasons as well, e.g. membership changes or expiry of the peer-ack-delay timer.) The default value for peer-ack-window is 2 MiB, the default unit is sectors. This option is available since 9.0.0.

peer-ack-delay expiry-time

If after the last finished write request no new write request gets issued for expiry-time, then a peer-ack packet is sent. If a new write request is issued before the timer expires, the timer gets reset to expiry-time. (Note: peer-ack packets may be sent due to other reasons as well, e.g. membership changes or the peer-ack-window option.) This parameter may influence resync behavior on remote nodes. Peer nodes need to wait until they receive an peer-ack for releasing a lock on an AL-extent. Resync operations between peers may need to wait for for these locks. The default value for peer-ack-delay is 100 milliseconds, the default unit is milliseconds. This option is available since 9.0.0.

startup 섹션

The parameters in this section define the behavior of DRBD at system startup time, in the DRBD init script. They have no effect once the system is up and running.

degr-wfc-timeout timeout 

Define how long to wait until all peers are connected in case the cluster consisted of a single node only when the system went down. This parameter is usually set to a value smaller than wfc-timeout. The assumption here is that peers which were unreachable before a reboot are less likely to be reachable after the reboot, so waiting is less likely to help. The timeout is specified in seconds. The default value is 0, which stands for an infinite timeout. Also see the wfc-timeout parameter.

outdated-wfc-timeout timeout

Define how long to wait until all peers are connected if all peers were outdated when the system went down. This parameter is usually set to a value smaller than wfc-timeout. The assumption here is that an outdated peer cannot have become primary in the meantime, so we don't need to wait for it as long as for a node which was alive before. The timeout is specified in seconds. The default value is 0, which stands for an infinite timeout. Also see the wfc-timeout parameter.

stacked-timeouts

On stacked devices, the wfc-timeout and degr-wfc-timeout parameters in the configuration are usually ignored, and both timeouts are set to twice the connect-int timeout. The stacked-timeouts parameter tells DRBD to use the wfc-timeout and degr-wfc-timeout parameters as defined in the configuration, even on stacked devices. Only use this parameter if the peer of the stacked resource is usually not available, or will not become primary. Incorrect use of this parameter can lead to unexpected split-brain scenarios.

wait-after-sb

This parameter causes DRBD to continue waiting in the init script even when a split-brain situation has been detected, and the nodes therefore refuse to connect to each other.

wfc-timeout timeout

Define how long the init script waits until all peers are connected. This can be useful in combination with a cluster manager which cannot manage DRBD resources: when the cluster manager starts, the DRBD resources will already be up and running. With a more capable cluster manager such as Pacemaker, it makes more sense to let the cluster manager control DRBD resources. The timeout is specified in seconds. The default value is 0, which stands for an infinite timeout. Also see the degr-wfc-timeout parameter.

volume 섹션

device /dev/drbdminor-number

Define the device name and minor number of a replicated block device. This is the device that applications are supposed to access; in most cases, the device is not used directly, but as a file system. This parameter is required and the standard device naming convention is assumed. In addition to this device, udev will create /dev/drbd/by-res/resource /volume and /dev/drbd/by-disk/lower-level-device symlinks to the device.

disk {[disk] | none}

Define the lower-level block device that DRBD will use for storing the actual data. While the replicated drbd device is configured, the lower-level device must not be used directly. Even read-only access with tools like dumpe2fs(8) and similar is not allowed. The keyword none specifies that no lower-level block device is configured; this also overrides inheritance of the lower-level device.

meta-disk internal,

meta-disk device,

meta-disk device [index]

Define where the metadata of a replicated block device resides: it can be internal, meaning that the lower-level device contains both the data and the metadata, or on a separate device. When the index form of this parameter is used, multiple replicated devices can share the same metadata device, each using a separate index. Each index occupies 128 MiB of data, which corresponds to a replicated device size of at most 4 TiB with two cluster nodes. We recommend not to share metadata devices anymore, and to instead use the lvm volume manager for creating metadata devices as needed. When the index form of this parameter is not used, the size of the lower-level device determines the size of the metadata. The size needed is 36 KiB + (size of lower-level device) / 32K * (number of nodes - 1). If the metadata device is bigger than that, the extra space is not used. This parameter is required if a disk other than none is specified, and ignored if disk is set to none. A meta-disk parameter without a disk parameter is not allowed.

데이터 무결성 관련

...

Table of Contents

개요

bsr은 로컬 노드의 데이터를 클러스터의 모든 다른 노드로 복제하는 블록 장치를 구현합니다. 여기서 실제 데이터 및 이와 관련한 메타 데이터는 각 클러스터 노드의 "일반"블록 장치 볼륨에 (일반적으로 외부메타일 경우)개별적으로 저장됩니다. 복제 블록 장치는 기본적으로 /dev/bsr<minor>형식으로 명명하거나 또는 장치의 심볼릭 링크(레터)로 직접 지정해야 합니다. 리소스 당 하나 이상의 장치들이 그룹화 되고 각각의 장치들을 병렬적으로 복제합니다. 리소스 내부의 장치를 volume으로 지정하며 두 개 이상의 클러스터 노드간에 리소스를 복제 할 수 있습니다. 클러스터 노드 간 연결은 지점 간 링크이며 TCP 프로토콜을 사용합니다. bsr은 구성파일을 이해하고 처리하는 기본 구성요소 bsradm 과 저수준의 구성요소 bsrsetup, bsrmeta, bsrcon으로 구성됩니다. 기본적인 bsr 구성은 /etc/bsr.conf 및 여기에 포함 된 추가 파일들(일반적으로 global_common.conf 및 /etc 경로의 안에 있는 모든 * .res 파일)로 구성됩니다. 보통 각 리소스를 etc/bsr.d/. 경로에서 별도의 * .res 파일들로 정의하는 것이 유용합니다. 구성 파일은 각 클러스터 노드가 전체 클러스터 구성의 동일한 사본을 포함하도록 설계되었습니다. 그러나 때로는 노드 별로 각기 다른 구성파일의 내용을 가져야 할 수도 있어서 절대적인 것은 아닙니다.

Code Block
resource r0 {
        net {
               protocol C;
        }
       disk {
              resync-rate 10M;
              c-plan-ahead 0;
              resync-ratio "1:1";
       }
       on alice {
              volume 0 {
                       	device e minor 2;
						disk e;
						meta-disk f;
              }
             address 10.1.1.31:7789;
             node-id 0;
      }
      on bob {
            volume 0 {
                     disk e;
                     meta-disk f;
            }
           address 10.1.1.32:7789;
           node-id 1;
      }
}

이 예에서는 e 레터의 볼륨을 단일 복제 장치가 포함 된 리소스 r0로 정의합니다. 이 리소스는 각각 IPv4 주소 10.1.1.31 및 10.1.1.32와 노드 식별자 0 및 1을 가진 호스트 alice 및 bob 간의 복제를 수행합니다. 실제 데이터는 e 볼륨이지만 및 메타 데이터는 f 볼륨에 저장됩니다. 호스트 간 연결에는 프로토콜 C가 사용됩니다.

형식

구성 파일은 섹션으로 구성되며, 섹션 유형에 따라 다른 섹션과 매개변수가 포함됩니다. 각 섹션은 하나 이상의 키워드, 섹션 이름, 여는 중괄호(“{”), 섹션의 내용, 닫는 중괄호(“}”)로 구성됩니다. 섹션 내의 매개변수는 키워드와 그 뒤에 하나 이상의 키워드 또는 값, 세미콜론(“;”)으로 구성됩니다. 일부 매개 변수 값에는 일반 숫자를 지정할 때 적용되는 기본 스케일이 있습니다 (예 : Kilo). 이러한 기본 스케일은 접미사 (예 : M의 경우 Mega)를 사용하여 재정의 할 수 있습니다. 공통 접미사는 K = 2 ^ 10 = 1024, M = 1024 K 및 G = 1024 M이 지원됩니다.

주석은 해시 기호(“#”)로 시작하여 줄 끝까지 인식됩니다. 또한 섹션 앞에 키워드 skip 을 붙이면 해당 섹션과 모든 하위 섹션이 무시됩니다. include “파일 패턴 “문에 추가 파일을 포함할 수 있습니다(파일 패턴에서 지원되는 표현식은 glob(7)을 참조하세요). include 문은 섹션 외부에서만 허용됩니다.

다음과 같이 섹션이 정의됩니다. 들여 쓰기 된 섹션이 하위 섹션 입니다.

Code Block
global
common
   [disk]
   [handlers]
   [net]
   [options]
   [startup]

resource
  options
  on
    options
    volume
      disk
      [disk]
      floating        
  connection
    path
    net
      volume
           peer-device-options
      [peer-device-options]
  connection-mesh
      net
  [disk]
  handlers
  [net]
  stacked-on-top-of
  startup 

위에서 대괄호 안의 섹션은 구성의 다른 부분에 영향을 줍니다. common 섹션의 내용은 모든 리소스에 적용됩니다. 리소스 또는 on 내의 디스크 섹션은 해당 리소스의 모든 볼륨에 적용되며, 리소스 섹션 내부의 net 섹션은 해당 리소스의 모든 연결에 적용됩니다. 이렇게 하면 각 resource, connection 또는 volume 에 대해 동일한 옵션이 반복되는 것을 방지할 수 있습니다. 보다 구체적인 옵션은 resource, connection, on 또는 volume 섹션에서 재정의할 수 있습니다. peer-device 옵션은 resync-ratio, resync-rate, c-plan-ahead, c-delay-target, c-fill-target, c-max-rate 및 c-min-rate 로 정의되며 이전 버전과의 호환성을 위해 모든 disk 섹션에서도 지정할 수 있습니다. 그것들은 모든 관련 연결로 상속됩니다. connection 섹션에 부여 된 경우 해당 connection의 모든 볼륨에 상속됩니다. "peer-device-options"섹션은 "disk"키워드로 시작됩니다.

섹션

global

전역 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다. 구성에서 하나의 global 섹션만 허용됩니다.

dialog-refresh time

bsr 초기화 스크립트를 사용하여 장치를 구성하고 시작할 수 있습니다. 여기에는 다른 클러스터 노드 대기와 관련 될 수 있습니다. 기다리는 동안 init 스크립트는 남은 대기 시간을 보여줍니다. 대화 상자 새로 고침은 해당 카운트 다운 업데이트 사이의 시간 (초)을 정의하고 기본값은 1입니다. 값이 0이면 카운트 다운이 꺼집니다.

disable-ip-verification

일반적으로 bsr은 구성의 IP 주소가 호스트 이름과 일치하는지 확인합니다. disable-ip-verification 매개 변수를 사용하여 이러한 검사를 비활성화할 수 있습니다.

usage-count {yes | no | ask}

사용 통계를 취합하는 기능이지만 bsr 에서는 사용되지 않습니다.

hostname hostname-alias

호스트 이름의 별칭을 지정할 수 있습니다. 지정한 hostname-alias 를 on 섹션의 hostname 으로 사용하면 됩니다.

common

이 섹션에는 각 disk, handler, network, options 및 startup 섹션이 포함될 수 있습니다. 모든 리소스들은 이 섹션의 매개 변수를 기본값으로 상속합니다.

startup

이 섹션의 매개 변수는 시스템 시작시 bsr init 스크립트에서 bsr의 동작을 정의합니다. 시스템이 시작되어 bsr 이 실행되고 난 후엔 더이상 아무런 영향을 미치지 않습니다.

다만 이 섹션의 속성들은 하위 호환을 위해 존재하며 bsr에선 대부분 폐기되었습니다.

degr-wfc-timeout timeout 

클러스터가 단일 노드로 구성된 경우 시스템이 다운 될 때 모든 피어가 연결될 때까지 대기하는 시간을 정의합니다. 이 매개 변수는 일반적으로 wfc-timeout보다 작은 값으로 설정됩니다. 여기서는 리부팅 전에 도달 할 수없는 피어가 리부팅 후에 도달 할 가능성이 적으므로 대기하는 것이 도움이되지 않는다고 가정합니다. 시간 초과는 초 단위로 지정됩니다. 기본값은 0이며 무한 시간 초과를 나타냅니다. bsr에선 지원하지 않습니다.

outdated-wfc-timeout timeout

시스템이 다운 될 때 모든 피어가 outdated 이면 모든 피어가 연결될 때까지 대기하는 시간을 정의합니다. 이 매개 변수는 일반적으로 wfc-timeout보다 작은 값으로 설정됩니다. 여기서 outdated 피어는 그 동안 Primary 노드가 될 수 없으므로 이전에 존재 했던 노드 만큼 기다릴 필요가 없습니다. 시간 초과는 초 단위로 지정됩니다. 기본값은 0이며 무한 시간 초과를 나타냅니다. bsr에선 지원하지 않습니다.

stacked-timeouts

지원하지 않습니다.

wait-after-sb

이 매개 변수는 스플릿 브레인 상황이 감지 된 경우에도 bsr이 init 스크립트에서 계속 대기하도록 하여 노드가 서로 연결을 거부하게 합니다.

wfc-timeout timeout

모든 피어가 연결될 때까지 init 스크립트가 대기하는 시간을 정의 합니다. 이는 리소스를 관리 할 수 없는 클러스터 관리자와 결합하여 유용할 수 있습니다. 클러스터 관리자가 시작되면 리소스가 이미 실행 중입니다. 시간 초과는 초 단위로 지정됩니다. 기본 값은 0이며 무한 시간 초과를 나타냅니다. bsr에선 지원하지 않습니다.

resource

resource [name]

리소스를 정의합니다. 일반적으로 두 개 이상의 섹션과 하나 이상의 connection 섹션이 있습니다.

options

리소스에 대한 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

auto-promote bool-value

지원하지 않습니다.

cpu-mask cpu-mask

지원하지 않습니다.

on-no-data-accessible policy

요청 된 데이터를 로컬에서 접근할 수 없는 경우(예 : 모든 디스크에 장애가 발생한 경우) I/O 요청을 처리하는 방법을 결정합니다. bsr 에선 지원하지 않습니다.

peer-ack-window value

각 노드와 각 장치에서 bsr은 각 피어 장치에 대한 로컬 데이터와 원격 데이터의 차이점에 대한 비트맵을 유지합니다. 예를 들어, 단일 장치가 있는 3노드 설정(노드 A, B, C)에서 모든 노드는 각 피어에 대해 하나의 비트맵을 유지합니다. 노드가 쓰기 요청을 받으면 쓰기 노드에 대한 비트맵을 업데이트하는 방법을 알고 있지만 다른 노드들 간의 비트맵을 업데이트하는 방법은 알지 못합니다. 예를 들어 쓰기 요청이 노드 A에서 B와 C로 전파 될 때 노드 B와 C는 노드 A와 동일한 데이터를 가지고 있지만 둘 다 동일한 데이터를 가지고 있는지 여부는 알지 못합니다. 이에 대한 해결책으로, 쓰기 노드는 때때로 peer-ack 패킷을 피어로 보내 서로에게 어떤 상태인지 알려줍니다. peer-ack-window 매개 변수는 peer-ack 패킷을 보내기 전에 Primary 노드가 전송할 수 있는 데이터의 양을 지정합니다. 값이 낮으면 네트워크 트래픽이 증가합니다. 값이 크면 네트워크 트래픽은 줄어들지 만 Secondary 노드의 메모리 소비는 증가하고 Primary 노드 장애 후 Secondary 노드 간의 재 동기화 시간이 길어집니다. 참고로 peer-ack 패킷은 다른 이유로 인해 전송 될 수도 있습니다(예 : 멤버쉽 변경 또는 “peer-ack-delay 타이머"의 만료). peer-ack-window의 기본 값은 2MiB이며, 기본 단위는 섹터입니다.

peer-ack-delay expiry-time

마지막으로 완료된 쓰기 요청 후에 만기 시간 동안 새로운 쓰기 요청이 발행되지 않으면 peer-ack 패킷이 전송됩니다. 타이머가 만료되기 전에 새로운 쓰기 요청이 발행되면 타이머는 만료 시간으로 재 설정됩니다. (참고 : 멤버십 변경 또는 "peer-ack-window"옵션과 같은 다른 이유로 peer-ack 패킷이 전송 될 수도 있습니다) 이 매개 변수는 원격 노드의 재 동기화 동작에 영향을 줄 수 있습니다. 피어 노드는 AL 익스텐트에서 잠금을 해제하기 위해 peer-ack 을 받을 때까지 기다려야 합니다. 피어 간의 재 동기화 작업이 이러한 잠금을 기다려야 할 수도 있습니다. peer-ack-delay의 기본 값은 100 밀리 초이며 기본 단위는 밀리 초입니다.

max-req-write-count

리소스에 허용될 수 있는 처리 중(inflight)인 쓰기 I/O 요청 최대 회수 입니다. 기본 값은 100000 입니다.

on-req-write-congestion

max-req-write-count 를 넘어서는 쓰기 req 가 발생할 경우 혼잡으로 간주하고 이에 대응하기 위한 정책을 지정합니다. disconnect, block 정책이 있으며 기본 disconnect 입니다.

accelbuf-size size

비동기 복제에서 로컬 쓰기 성능 향상을 위한 버퍼 크기 입니다. 기본 값은 10MB 입니다. accelbuf 하나의 버퍼를 할당하고 발생된 쓰기 버퍼 공간으로 부터 데이터를 복사하여 송신버퍼 측으로 복사하기 전에 빠르게 I/O 를 완료할 수 있습니다. (bsr 1.7 이후 지원)

max-accelbuf-blk-size size

accelbuf 버퍼의 대상 I/O 블럭 크기입니다. 기본 값은 4KB이며 4KB 이하의 쓰기 I/O에 대해서만 accelbuf를 적용합니다. (bsr 1.7 이 지원)

persist-role

리소스 역할 유지 속성입니다. yes 일 경우 리소스가 재시작되는 모든 시점에 명령줄에 의해 명시적으로 지정된 역할을 계속 유지 합니다. (기본값은 no, bsr 1.7.3 이상 지원)

on

on host-name [...]

특정 호스트 또는 호스트 집합에 있는 리소스의 속성을 정의합니다. 예를 들어 IP 주소 장애 조치와 같은 설정에서는 호스트 이름을 두 개 이상 지정하는 것이 유용할 수 있습니다. host-name 인수는 시스템의 호스트 이름(Linux 예, uname -n)과 일치해야 합니다. 일반적으로 하나 이상의 volume 섹션을 포함하거나 상속합니다. node-idaddress 매개 변수는 이 섹션에서 정의해야 합니다. device, diskmeta-disk 매개 변수는 이 섹션에 정의되거나 이 섹션에서 상속되어야 합니다. 일반 구성 파일에는 각 리소스에 대한 On 섹션이 2개 이상 포함됩니다. ip 주소 기반의 구성이 필요한 경우 floating 섹션으로 대체하여 작성합니다.

address [address-family] address: port

connection 엔드 포인트의 주소 패밀리, 주소 및 포트를 정의합니다. 주소 제품군 ipv4, ipv6 가 지원됩니다. 주소 패밀리를 지정하지 않으면 "ipv4"로 인식 됩니다. ipv6을 제외한 모든 주소 계열의 경우 주소는 IPV4 주소 표기법 (예 : 1.2.3.4)으로 지정됩니다. ipv6의 경우 주소는 괄호로 묶고 IPv6 주소 표기법을 사용합니다 (예 : [fd01 : 2345 : 6789 : abcd :: 1]). 포트는 항상 1에서 65535 사이의 10진수로 지정합니다. 각 호스트에서 포트 번호는 각 주소마다 고유해야 하고 포트를 공유 할 수 없습니다.

node-id value

클러스터에서 노드의 고유 노드 식별자를 정의합니다. 노드 식별자는 네트워크 프로토콜에서 개별 노드를 식별하고 메타 데이터의 노드에 비트맵 슬롯을 할당하는 데 사용됩니다. 클러스터가 작동 중지 된 경우에만 클러스터에서 노드 식별자를 재 지정할 수 있습니다. 구성 및 장치 메타 데이터의 노드 식별자는 모든 호스트에서 일관되게 변경 되어야 합니다. 메타 데이터를 변경하려면, bsrmeta dump-md로 현재 상태를 덤프하고 비트맵 슬롯 할당을 조정 한 다음, bsrmeta restore-md로 메타 데이터를 업데이트 하십시오. node-id 파라미터는 필수적으로 설정해야 합니다. 값의 범위는 0에서 16입니다. 기본 값은 없습니다.

options

svc-auto-up

bsr 서비스가 시작될 때 리소스를 자동으로 기동합니다. 기본 값은 yes 입니다.

svc-auto-down

bsr 서비스가 종료될 때 리소스를 자동으로 중지합니다. 기본 값은 yes 입니다.

target-only

yes 이면 타깃 전용 노드로 지정됩니다. 타깃 전용 노드는 항상 타깃의 역할만 수행하며 소스역할의 수행은 거부됩니다. (bsr 1.7.3 이상)

volume

volume volume-number

리소스 내에서 볼륨을 정의합니다. 리소스의 volume 섹션들에 있는 볼륨 번호는 호스트에서 어떤 장치가 복제 장치를 구성하는지 정의합니다.

device /dev/bsr minor-number

복제 블록 장치의 장치 이름과 부 번호를 정의합니다. 이것은 응용 프로그램이 액세스 해야 하는 장치입니다(리눅스에서). 대부분의 경우 장치를 직접 사용하지 않고 파일 시스템을 통해 제어합니다. 이 매개 변수는 필수이며 표준 장치 이름 지정 규칙을 사용해야 합니다.

disk {[disk] | none}

bsr이 실제 데이터를 저장하는 데 사용할 하위 레벨 블록 장치를 정의합니다. 복제 bsr장치가 구성되어있는 동안 하위 장치를 직접 사용해서는 안됩니다. dumpe2fs(8) 및 이와 유사한 도구를 사용한 읽기 전용 액세스도 허용되지 않습니다. 키워드 none은 하위 블록 장치가 구성되지 않았음을 나타냅니다. 이것은 또한 하위 수준 장치의 상속을 무시합니다.

meta-disk internal,

meta-disk device,

meta-disk device [index]

복제 블록 장치의 메타 데이터가 있는 위치를 정의합니다. 메타 데이터는 하위 수준 장치에 데이터와 메타 데이터가 모두 포함되거나 별도의 장치에 있을 수 있습니다. 이 매개 변수의 index 형식을 사용하면 여러 개의 복제 된 장치가 각각 별도의 인덱스를 사용하여 동일한 메타 데이터 장치를 공유 할 수 있습니다. 각 인덱스는 128MiB의 데이터를 차지하며, 이는 2개의 클러스터 노드가있는 최대 4TiB의 복제 된 장치 크기에 해당합니다. 그러나 볼륨확장 등 flexible 한 메타를 요구하는 기능을 사용해야 할 경우 제약이 될 수 있기 때문에 메타 데이터 장치를 공유하지 말고 lvm 볼륨 관리자를 사용하여 필요에 따라 메타 데이터 장치를 작성하는 것이 좋습니다. 이 매개 변수의 색인 형식을 사용하지 않으면 하위 장치의 크기에 따라 메타 데이터의 크기가 결정됩니다. 필요한 크기는 36 KiB + (하위 장치 크기) / 32K * (노드 수-1)입니다. 메타 데이터 장치가 이보다 큰 경우 추가 공간은 사용되지 않습니다. 이 매개 변수는 "none"이외의 "disk"가 지정된 경우에 필요하며 "disk"가 "none"으로 설정된 경우 무시됩니다.

floating

floating [address-family] addr:port

on 섹션과 마찬가지로 호스트 이름 대신 네트워크 주소가 floating 섹션과 일치하는지 확인합니다. node-id 매개 변수가 필요하고 주소 매개 변수가 제공되지 않으면 기본적으로 피어에 대한 연결이 생성되지 않습니다. device, diskmeta-disk 매개 변수를 반드시 이 섹션에서 정의하거나 상위로부터 상속해야 합니다.

connection

connection [name]

두 호스트 간의 연결을 정의합니다. 이 섹션에는 두 개의 호스트 매개 변수 또는 여러 경로 섹션이 포함되어야합니다. 선택적으로 사용할 수 있는 "name"은 시스템 로그 및 기타 다른 메시지들의 연결을 나타내는 데 사용됩니다. 이름을 지정하지 않으면 피어의 호스트 이름이 대신 사용됩니다.

host name [address [address-family] address] [port port-number]

연결에 대한 엔드포인트를 정의합니다. 각 host 구문은 리소스의 on 섹션을 나타냅니다. 포트 번호가 정의되면 이 엔드 포인트는 on 섹션에 정의 된 포트 대신 지정된 포트를 사용합니다. 각 connection 섹션에는 정확히 두 개의 host 매개 변수가 포함되어야합니다. 두 개의 host 매개 변수 대신 connection에 다중 path 섹션이 포함될 수 있습니다.

path

두 호스트 간의 path를 정의합니다. 이 섹션에는 두 개의 호스트 매개 변수가 포함되어야합니다.

host name [address [address-family] address] [port port-number]

연결에 대한 엔드포인트를 정의합니다. 각 host 구문은 리소스의 on 섹션을 나타냅니다. 포트 번호가 정의되면 이 엔드 포인트는 on섹션에 정의 된 포트 대신 지정된 포트를 사용합니다. 각 path 섹션에는 정확히 두 개의 host 매개 변수가 포함되어야합니다.

connection-mesh

여러 호스트들 간의 mesh 연결을 정의합니다. 이 섹션에는 호스트 이름을 인수로 갖는 "hosts"매개 변수가 포함되어야합니다. 이 섹션은 동일한 네트워크 옵션을 공유하는 많은 연결을 손쉽게 정의하는 방법입니다.

hosts name

메쉬의 모든 노드를 정의합니다. 각 이름은 자원의 on 섹션을 나타냅니다. on 섹션에 정의 된 포트가 사용됩니다.

disk

볼륨의 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

al-extents extents

bsr은 최근 디스크 쓰기 작업을 근거로 쓰여진(active) 영역과 쓰여진 영역에 최근 다시 쓰여진(hot) 영역에 대해 관리합니다. 쓰기 I/O가 발생하면 active 영역은 디스크에 즉시 쓰면 되지만 inactive 디스크 영역은 먼저 activated 해야 하기 때문에 여기서 메타 데이터 쓰기가 필요합니다. 이 active 디스크 영역을 activity log 라고 합니다.

activity log에 메타 데이터 쓰기를 저장하지만 실패한 노드를 복구할 경우 전체 activity log에 대해 다시 동기화 해야 합니다. 따라서 activity log의 크기는 primary 크래쉬 후 재 동기화에 얼마나 오래 걸릴지, 얼마나 빨리 복제 디스크의 일관성을 맞출지의 주요 요인이 됩니다. activity log는 여러 개의 4MiB 단위 세그먼트로 구성됩니다. al-extents 매개 변수는 동시에 활성화 할 수있는 세그먼트 수를 결정합니다. al-extents의 기본값은 6001이며 최소 7과 최대 65536입니다. 장치 메타 데이터를 생성한 방법에 따라 유효한 최대 값이 더 작을 수도 있습니다 (bsrmeta 참조).

유효 최대 값은 919 * (사용 가능한 온 디스크 activity log 링 버퍼 영역 / 4kB -1)이며, 기본 32KB 링 버퍼에서 최대 6433 (25GiB 이상의 데이터 포함)이 됩니다. 백엔드 스토리지 및 복제 링크가 약 5 분 이내에 재 동기화 될 수있는 양 이내에서 activity log의 크기를 유지하는 게 좋습니다.

al-extents 의 크기를 변경하려면 리소스 중지(down)가 필요합니다.

al-updates {yes | no}

이 매개 변수를 no 로 설정하면 activity log를 완전히 끌 수 있습니다 (al-extents 매개 변수 참조). 메타 데이터 쓰기가 더 적게 필요하기 때문에 쓰기 속도가 빨라지지만, 실패한 기본 노드의 복구시 전체 장치를 재 동기화해야합니다. al-updats 의 기본값은 yes 입니다.

disk-barrier,

disk-flushes,

disk-drain

bsr에는 쓰기 요청의 순서를 처리하는 세 가지 방법이 있습니다.

  • disk-flush 디스크에 쓰기 I/O 를 수행한 후 flush 를 강제하여 모든 데이터를 디스크에 기록하도록 조치합니다. 플랫폼 또는 드라이버 공급 업체에 따라 flush 구현이 다를 수 있습니다. 예전 방식으로는 FUA(Force Unit Access)로 명명되는 디스크 캐쉬를 우회하는 기술을 사용하기도 했으나 최근에는 기본적으로 디스크 캐쉬를 비우는 작업을 통해 디스크 쓰기를 보장하는 방식으로 구현되고 있습니다. 이 옵션은 활성화되어 있었으나 flush 동작이 가끔 오랜 지연을 일으키는 경우가 많아서 최근 비활성 되었습니다. 만약 battery backed cache 가 없는 디스크 장비를 사용하고 있다면 disk-flush 를 활성화해서 사용하세요.

  • disk-barrier 이 옵션을 사용하여 쓰기 요청이 올바른 순서로 디스크에 기록 되도록 합니다. barrier는 barrier 이전에 제출 된 모든 요청이 이후에 제출 된 요청보다 앞서서 모두 디스크에 요청하도록 보장 합니다. 이는 SCSI 장치의 'tagged command queuing'과 SATA 장치의 'native command queuing'을 사용하여 구현됩니다. 일부 장치 및 장치 스택 만이 이 방법을 지원합니다. device mapper (LVM)는 일부 구성에서만 barrier를 지원합니다. disk-barrier을 지원하지 않는 시스템에서 이 옵션을 사용하면 데이터가 유실되거나 손상 될 수 있습니다. 이 옵션은 예전 리눅스 커널에서는 지원했지만 linux-2.6.36 (또는 2.6.32 RHEL6) 이후의 커널은 더 이상 disk-barrier가 지원되는지 감지할 수 없습니다. 이 옵션은 기본적으로 해제되어 있으며 명시적으로 활성화해야 합니다.

  • disk-drain 쓰기 요청을 제출하기 전에 요청 큐가 "드레인"될 때까지 즉, 요청이 완료 될 때까지 기다립니다. 이 방법을 사용하려면 요청이 완료될 때 까지 요청들이 디스크에서 안정적임이 보장되어야 합니다. 예전에는 이 옵션을 기본 활성화 하였지만 지금은 비활성화 되어 있습니다.

disk-timeout

데이터를 저장하는 하위 장치에 정의된 디스크 시간 내에 I/O 요청을 완료하지 못하면 bsr은 이를 실패로 처리합니다. 이 경우 하위 장치가 detach되고 장치의 디스크 상태가 diskless 상태가 됩니다. bsr이 하나 이상의 피어에 연결되어 있다면 실패한 요청이 그 중 하나에 전달됩니다. 이 옵션의 사용은 크리티컬하며 커널 패닉으로 이어질 수도 있습니다. 요청을 Abort 하고 강제로 디스크를 제거하는 것은 더 이상 요청을 완료하지도 않고 오류도 반환하지 않게 완전히 block되어 중지된 로컬 백업 장치를 처리하기 위한 조치입니다. 이 상황에서는 일반적으로 하드 리셋 및 페일 오버가 유일한 방법입니다. disk-timeout의 기본값은 0이며, 이는 무한 시간 초과를 나타냅니다. 시간 초과는 0.1 초 단위로 지정됩니다.

md-flushes

메타 데이터 장치에서 디스크 플러시 및 disk barrier을 활성화합니다. 이 옵션은 기본적으로 활성화되어 있습니다. disk-flush 매개 변수를 참조하십시오.

on-io-error handler

하위 레벨 장치에서 bsr이 I/O 오류에 대응하는 방식을 구성합니다. 다음과 같은 정책이 정의됩니다.

  • passthrough 하위 장치에서 오류가 반환될 경우 해당 블럭 계층을 OOS로 기록하고 상위 계층으로 오류를 전달합니다. 해당 오류 블럭은 보통 상위 계층에 의해 재시도 I/O가 발생 되고 재시도 시점에 성공할 경우 OOS 는 자연스럽게 해소되거나 그렇지 않을 경우 OOS 가 기록되어 남겨집니다. bsr 의 기본값 입니다.

  • call-local-io-error local-io-error 핸들러를 호출합니다 ( handlers 섹션을 참고하세요).

  • detach 하위레벨 장치를 분리하고 diskless 상태로 전환합니다. diskless 상태에서는 I/O가 수행될 수 없으며 즉시 failover가 필요합니다.

max-passthrough-count

on-io-error 가 패스스루 정책일 때, 일정 수 이상 패스스루가 반복될 경우 영구적 디스크 장애로 간주합니다. 여기의 임계점을 숫자로 지정합니다. 리눅스에서만 사용하고 기본값은 100 입니다.

resync-after res-name/volume

지정된 다른 장치가 동기화된 이후에만 장치를 재 동기화하도록 정의합니다. 기본적으로 장치간에는 동기화 순서가 정의되어 있지 않으며 모든 장치가 병렬로 재 동기화 됩니다. 하위 장치 구성, 사용 가능한 네트워크 및 디스크 대역폭에 따라 전체 재 동기화 프로세스가 느려질 수 있기 때문에 이 옵션을 사용하여 장치 간의 종속성 체인 또는 트리를 형성 할 수 있습니다.

disable-write-same {yes | no}

write same I/O 를 지원하지 않는 디스크 장치의 경우 yes 로 설정하여 bsr 이 해당 I/O의 유형을 오류로 처리하지 않도록 합니다.

peer-device-options

peer-device-options 섹션 이지만 disk 키워드로 이 섹션을 기술합니다. (예전 버전에서 사용하던 방식을 취하여 하위 호환을 유지하기 위함)

resync-rate rate

재 동기화에 사용할 수 있는 대역폭을 정의합니다. bsr은 재 동기화 중에도 일반적인 응용 프로그램 I/O를 허용합니다. 재 동기화가 너무 많은 대역폭을 차지하면 응용 프로그램 I/O가 매우 느려질 수 있으며 이 매개 변수를 사용하면 이를 피할 수 있습니다. 이 옵션은 고정대역 동기화 설정에서만 유효하며 가변대역 동기화일 경우는 재동기화의 초기 시도 값으로 사용됩니다.

c-plan-ahead plan_time

재 동기화 속도를 동적으로 제어합니다. 이 메카니즘은 c-plan-ahead 매개 변수를 양수 값으로 설정하여 사용할 수 있습니다. 최대 대역폭은 c-max-rate 매개 변수에 의해 제한됩니다. c-plan-ahead 매개 변수는 bsr이 재 동기화 속도의 변화에 ​​얼마나 빨리 적응하는 지를 정의합니다. 보통 네트워크 왕복 시간(RTT)의 5 배 이상으로 설정해야 합니다. c-fill-target이 정의되면 데이터 경로를 따라 정의 된 양의 데이터로 버퍼를 채우려고 하고 c-delay-target이 정의 된 경우 정의된 지연을 갖게 합니다. "정상" 데이터 경로에 대한 c-fill-target의 공통 값 범위는 4K ~ 100K입니다. drx를 사용하는 경우 c-fill-target 대신 c-delay-target을 사용하는 것이 좋습니다. 다소 간의 지연된 동기화 데이터의 전달은 DRX 복제 버퍼링에 부담을 덜어주긴 하겠지만 절대적인 것은 아닙니다. c-delay-target 매개 변수는 c-fill-target 매개 변수가 정의되지 않거나 0으로 설정된 경우에 사용됩니다. c-delay-target 매개 변수는 네트워크 왕복 시간의 5 배 이상으로 설정해야 합니다. c-max-rate 옵션은 bsr 호스트와 drx 를 호스팅하는 시스템간에 사용 가능한 대역폭 또는 사용 가능한 디스크 대역폭으로 설정해야 합니다. 이 매개 변수들의 기본 값은 다음과 같습니다. c-plan-ahead = 20 (0.1 초 단위), c-fill-target = 0 (섹터 단위), c-delay-target = 1 (0.1 초 단위) ) 및 c-max-rate = 102400 (KiB/s 단위).

c-min-rate min_rate

Primary 이고 동기화 소스 인 노드는 애플리케이션 I/O 요청과 동기화 요청을 스케줄링 해야 합니다. c-min-rate 매개 변수는 재 동기화 I/O에 사용하는 최소 대역폭을 설정합니다. 나머지 대역폭은 응용 프로그램 I/O의 복제에 사용됩니다. c-min-rate 값이 0이면 재 동기화 I/O 대역폭에 제한이 없음을 의미합니다. 이로 인해 응용 프로그램 I/O 속도가 크게 느려질 수 있습니다. 가장 낮은 재 동기화 속도를 위해서는 1 (1 KiB/s) 값을 사용하십시오. c-min-rate의 기본값은 KiB/s 단위로 250 입니다.

c-max-rate max_rate

재 동기화 I/O에 사용하는 최대 대역폭을 설정합니다. bsr 은 복제 대역과 절충하여 c-min-rate 에서 c-max-rate 까지의 동기화 대역을 유지합니다.

resync-ratio ratio

복제 수행 중 동기화가 병행 될 경우의 동기화 최소 대역폭 비율을 정의합니다. 만약 이 값이 높은 비율로 설정된다면 복제 대역의 비율이 상대적으로 낮아지고 그에 따라 응용 I/O 의 성능이 저하될 수 있으므로 이에 유의해야 합니다.

  • resync-ratio 설정은 동기화 최소 대역폭 비율 이므로 resync-ratio보다 실제 동기화 대역이 높을 경우 동기화 대역을 낮추지 않고 현 상태를 유지합니다.

  • resync-ratio 설정으로 얻은 동기화 대역폭 비율의 크기가 c-min-rate 설정보다 작다면 c-min-rate로 동기화 대역폭이 설정됩니다.

  • resync-ratio 설정은 복제 중 동기화 속도가 c-min-rate 보다 낮을 때 적용됩니다.

handlers

특정 이벤트가 발생할 때 호출 될 핸들러를 정의합니다. 커널은 핸들러의 첫 번째 명령 줄 인수에서 리소스 이름을 전달하고 이벤트 문맥에 따라 다음 환경 변수를 설정합니다.

  • 특정 device와 관련된 이벤트의 경우: 장치의 부 번호는 BSR_MINOR, 장치의 볼륨 번호는 BSR_VOLUME 에 있습니다.

  • 특정 peer의 특정 device와 관련된 이벤트의 경우: BSR_MY_ADDRESS, BSR_MY_AF, BSR_PEER_ADDRESS 및 BSR_PEER_AF에 connection 엔드 포인트가 있습니다; BSR_MINOR에 있는 장치의 로컬 부 번호 및 BSR_VOLUME에 장치의 볼륨 번호가 있습니다.

  • 특정 connection과 관련된 이벤트의 경우: BSR_MY_ADDRESS, BSR_MY_AF, BSR_PEER_ADDRESS 및, BSR_PEER_AF에 connection 엔드 포인트; 그리고 해당 connection에 대해 정의된 각 device의 장치 부 번호가 BSR_MINOR_volume-number에 있습니다.

  • 장치를 식별하는 이벤트의 경우 하위 장치가 연결되어 있으면 하위 장치의 장치 이름이 BSR_BACKING_DEV (또는 BSR_BACKING_DEV_volume-number)로 전달됩니다.

이 섹션의 모든 매개 변수는 선택 사항입니다. 각 이벤트에 대해 단일 핸들러만 정의 할 수 있습니다. 핸들러가 정의되어 있지 않으면 아무 일도 일어나지 않습니다.

after-resync-target cmd

재 동기화가 완료 될 때 노드 상태가 "Inconsistent"에서 "Consistent"로 변경되면 SyncTarget에서 호출됩니다. 예를 들어, 이 핸들러는 before-resync-target 핸들러에서 작성된 스냅 샷을 제거하는 데 사용할 수 있습니다.

before-resync-target cmd

재 동기화가 시작되기 전에 SyncTarget에서 호출됩니다. 이 핸들러는 재 동기화 기간 동안 하위 레벨 디바이스의 스냅 샷을 작성하는 데 사용할 수 있습니다. 재 동기화 중에 재 동기화 소스를 사용할 수없는 경우 스냅 샷으로 되돌리면 Consistent한 상태로 복원 할 수 있습니다.

before-resync-source cmd

재동기화를 시작하기 전 동기화 소스에서 호출됩니다.

out-of-sync cmd

정합성 검사를 수행 후 OOS 블록이 발견되면 모든 노드에서 호출됩니다. 이 핸들러는 주로 모니터링 목적으로 사용되며 관리자에게 경고를 주는 용도로 사용될 수 있습니다.

fence-peer cmd

노드가 특정 피어의 리소스를 차단해야 할 때 호출됩니다. 핸들러는 bsr이 피어와 통신하는 데 사용하는 동일한 통신 경로를 사용해서는 안됩니다.

unfence-peer cmd

노드가 다른 노드에서 펜싱 제약 조건을 제거해야 할 때 호출됩니다.

initial-split-brain cmd

스플릿 브레인 상태임을 감지하면 호출됩니다. 이 핸들러는 스플릿 브레인 자동 해결 시나리오에서도 호출됩니다.

local-io-error cmd

하위 장치에서 I/O 에러가 발생할 경우 호출됩니다.

pri-lost cmd

로컬 노드는 현재 Primary 노드이지만 bsr이 동기화 대상이 되어야 한다고 생각될 때 호출 됩니다. 이 경우 노드는 Primary 역할을 포기해야 합니다.

pri-lost-after-sb cmd

로컬 노드는 현재 Primary 노드이지만 스플릿 후 자동 복구 절차를 통해 잃었을 때 호출됩니다. 이 경우 노드는 버려야 합니다.

split-brain cmd

bsr이 자동으로 해결할 수 없는 스플릿 브레인 상황임을 감지했으며 수동 복구가 필요합니다. 이 핸들러는 관리자에게 주의를 주는 데 사용될 수 있습니다.

net

연결의 매개 변수를 정의합니다. 이 섹션의 모든 매개 변수는 선택 사항입니다.

after-sb-0pri policy

스플릿 브레인이 감지되고 두 노드 중 어느 것도 Primary 역할이 아닐 경우의 대응 방법을 정의합니다. 스플릿 브레인은 항상 두 노드 사이에서 결정되며 두 노드가 연결될 때 감지합니다. 정의 된 정책은 다음과 같습니다.

  • disconnect 단순히 연결을 끊습니다.

  • discard-younger-primary 최근에 Primary가 된 노드(younger primary)에 쓰여진 데이터를 취소하고 되돌립니다. younger primary를 판단할 수 없다면 discard-zero-changesdiscard-least-changes 순서로 동작하게 됩니다. 

  • discard-older-primary 처음 Primary 가 됬던 노드(older primary)를 폐기합니다. 만일 두 노드가 독립적으로 Primary 가 됐었다면 discard-least-changes 정책을 사용합니다.

  • discard-zero-changes 하나의노드에서만 데이터를 쓴 경우 해당 노드를 기준으로 재 동기화 합니다. 두 노드가 모두 데이터를 쓴 경우 연결을 끊습니다.

  • discard-least-changes 많은 데이터를 쓴 노드를 기준으로 동기화 합니다.

  • discard-node-nodename 명명된 노드를 항상 폐기합니다.

after-sb-1pri policy

Primary 노드 1 개와 Secondary 노드 1 개로 스플릿 브레인이 감지되는 경우 대처 방법을 정의합니다.

  • disconnect 단순히 연결을 끊습니다.

  • consensus 희생노드가 선택될 수 있다면 자동으로 해결합니다. 그렇지 않으면, disconnect처럼 동작합니다.

  • discard-secondary Secondary 의 노드를 폐기합니다.

after-sb-2pri policy

스플릿 브레인 시나리오가 감지되고 두 노드가 모두 Primary 역할을 하는 경우 대응 방법을 정의합니다.

  • disconnect 단순히 연결을 끊습니다. 2 primary 스플릿 브레인의 경우 disconnect 정책만 제공되며 수동 복구만 사용할 수 있습니다.

allow-two-primaries

bsr 에선 이중 primary 모드를 지원하지 않습니다.

connect-int time

bsrsetup connect로 두 노드 간 연결이 구성되는 즉시 연결 설정을 시도합니다. 이것이 실패하면 bsr은 connect-int초 동안 기다렸다가 반복합니다. connect-int의 기본값은 3초입니다.

csums-alg hash-algorithm

일반적으로 두 노드가 다시 동기화 되면 동기화 대상은 동기화 소스로부터 out-of-sync 데이터를 요청하고 동기화 소스는 데이터를 전송합니다.

많은 사용 패턴에서 볼 때 상당수의 블록이 실제로 동일합니다. csums-alg 알고리즘이 지정되면 동기화되지 않은 데이터를 요청할 때 동기화 대상도 현재 보유한 데이터의 해시를 전송합니다. 동기화 소스는이 해시를 자기의 데이터와 비교합니다. 해시가 다르면 동기화 대상에 새 데이터를 보내고 해시가 같으면 데이터가 동일하다는 것을 알려줍니다. 이렇게 하면 필요한 네트워크 대역폭이 줄어들지만 반면 CPU 사용률은 높아지고 SyncTarget의 읽기 I/O가 증가합니다 . csums-alg는 커널이 지원하는 보안 해시 알고리즘 중 하나로 설정 될 수 있습니다. /proc/crypto에 나열된 shash 알고리즘을 참조하십시오. 기본적으로 csums-alg는 설정되어 있지 않습니다.

data-integrity-alg alg

bsr은 일반적으로 TCP/IP 프로토콜에 내장 된 데이터 무결성 검사에 의존하지만, 데이터 무결성 알고리즘이 구성된 경우 이 알고리즘을 사용하여 네트워크를 통해 수신 된 데이터가 발신자가 보낸 것과 일치하는지 확인합니다. 데이터 무결성 오류가 감지되면 bsr은 네트워크 연결을 닫고 다시 연결하여 재 동기화를 트리거합니다. data-integrity-alg는 커널이 지원하는 보안 해시 알고리즘 중 하나로 설정 될 수 있습니다. /proc/crypto에 나열된 shash 알고리즘을 참조하십시오. 기본적으로이 메커니즘은 해제되어 있습니다. 관련된 CPU 오버 헤드로 인해 운영 환경에서는 이 옵션을 사용하지 않는 것이 좋습니다.

fencing fencing_policy

펜싱은 두 노드가 연결이 끊어져서 모두 Primary 가 되는 상황을 방지하기 위한 예방 조치입니다. 이것은 스플릿 브레인 상황 이라고도 합니다. bsr은 다음과 같은 펜싱 정책을 지원합니다.

  • dont-care 펜싱 조치가 수행되지 않습니다. 이것이 기본 정책입니다.

  • resource-only 노드가 연결이 끊긴 Primary 노드가 되면 피어를 차단하려고 합니다. 이것은 "fence-peer" 핸들러를 호출하여 수행됩니다. 핸들러는 대체 통신 경로를 통해 피어에 도달하여 'bsradm outdate minor'를 호출해야 합니다.

  • resource-and-stonith 노드가 연결이 끊긴 Primary 노드가 되면 모든 IO 작업을 중지하고 fence-peer 핸들러를 호출합니다. fence-peer 핸들러는 대체 통신 경로를 통해 피어에 도달하여 'bsradm outdate minor'를 호출해야 합니다. 그렇게 할 수없는 경우에는 상대방을 (전원 제어)차단해야 합니다. 상황이 해결 되자마자 IO가 재개됩니다. 펜스 피어 핸들러가 실패한 경우 잠재적으로 스플릿 브레인이 발생했다고 판단하고 수동으로 복구해야 합니다.

ko-count number

송신 버퍼링 시 데이터 전송지연 또는 실패에 대한 TX 노드 측의 송신 재 시도 회수를 정의합니다.

max-buffers number

수신 측 peer-request의 최대 버퍼 크기를 정의합니다. 단위는 PAGE_SIZE(대부분의 시스템에서 4KiB)입니다. 가능한 최소 설정은 32(= 128 KiB)로 지정되어 있습니다. 이 버퍼는 디스크에 쓰거나 디스크에서 읽는 동안 데이터 블록을 보유하는 데 사용됩니다. max-buffers 페이지 이상이 사용 중이면 이 풀의 추가 할당이 제한됩니다. 수신 측에서 I/O 부하를 감당할 수 없는 경우 max-buffers를 늘려야 합니다.

max-epoch-size number

쓰기 barrier을 발행하기 전에 bsr이 발행 할 수 있는 최대 쓰기 요청 수를 정의합니다. 기본 값은 2048이며 최소 1에서 최대 20000까지 지정 가능합니다. 이 매개 변수를 10 미만의 값으로 설정하면 성능이 저하 될 수 있습니다.

on-congestion policy,

congestion-fill threshold,

congestion-extents threshold

기본적으로 bsr은 TCP 송신 큐가 가득 찬 경우 대기합니다. 이럴 경우 송신 큐를 다시 사용할 수 있을 때까지 응용 프로그램에서 추가 쓰기 요청을 생성 할 수 없습니다. bsr을 프록시와 함께 사용하는 경우 전송 대기열이 가득 차기 전에 bsr을 Ahead/Behind 모드로 전환 할 수 있는 Pull-ahead 혼잡 정책을 사용하는 것이 좋습니다. 어헤드 모드에선 비트 맵에 자신과 피어의 차이점을 기록하고 복제는 일시 중지 됩니다. 버퍼 공간이 충분해져 다시 사용 가능 해지면 노드는 피어와 재 동기화하고 정상 복제로 다시 전환됩니다. 이는 요청 대기열이 가득 차더라도 응용 프로그램 I/O를 차단하지 않는 이점이 있지만 피어 노드가 원본에 비해 훨씬 더 뒤쳐 질 수 있다는 단점이 있습니다. 그리고 재 동기화하는 동안은 피어 노드가 Inconsistent 상태입니다.

사용 가능한 혼잡 정책은 blocking(기본값), disconnect, pull-ahead 입니다. congestion-fill 매개 변수는이 연결에서 복제 중인 데이터가 허용되는 양을 정의합니다. 기본 값은 0(혼잡 제어 메커니즘을 사용하지 않도록 설정합니다)이며 최대 1TB입니다. congestion-extents 매개 변수는 Ahead/Behind 모드로 전환하기 전에 활성화 될 수있는 비트맵 범위의 수를 정의합니다. congestion-extents 매개 변수는 al-extents 보다 작은 값으로 설정 한 경우에만 유효합니다.

ping-int interval

피어에 대한 TCP/IP 연결이 1 초 이상 유휴 상태 인 경우 bsr은 ping 패킷을 보내 실패한 피어 또는 네트워크 연결이 빨리 감지되도록 합니다. 기본값은 3초이며 최소 1과 최대 120 초입니다. 단위는 초입니다.

ping-timeout timeout

ping 패킷에 대한 회신 시간 초과를 정의합니다. 피어가 ping 시간 초과 내에 응답하지 않으면 bsr이 연결을 닫고 다시 연결하려고 시도합니다. 기본값은 3초이며 최소 0.1 초와 최대 3 초입니다. 단위는 10분의 1초입니다.

protocol name

복제 연결에 지정된 프로토콜을 정의합니다. 지원되는 프로토콜은 다음과 같습니다.

  • A 로컬 디스크 및 TCP/IP 전송 버퍼에 복사한 즉시 로컬 I/O 를 완료합니다.

  • B 로컬 디스크에 기록하고 피어에서 복제 데이터를 수신하는 즉시 ACK 를 반환합니다. 로컬에서 ACK 를 수신하면 I/O 를 완료 합니다.

  • C 로컬 디스크에 기록하고 피어에서 복제 데이터를 디스크에 기록한 후 쓰기 ACK 를 반환합니다. 로컬에서 쓰기 ACK 를 수신하면 I/O 를 완료합니다.

rcvbuf-size size

TCP/IP 수신 버퍼의 크기를 구성합니다. 값이 0(기본값)이면 버퍼 크기가 동적으로 조정됩니다. 이 매개 변수는 개발자 디버깅 및 튜닝 용도로 사용하며 일반적으로 사용하지 않습니다. 최대 10MiB의 값으로 설정할 수 있으며 기본 단위는 바이트입니다.

sndbuf-size size

송신 작업자 쓰레드에서 할당하는 TX 버퍼의 크기를 설정합니다. 최대 1TB 까지 설정할 수 있습니다.

tcp-cork

tcp-cork 옵션을 사용하여 커널이 작은 메시지에 대한 전송을 유보하여 네트워크 상에서 패킷을 최대한 크게 보냅니다. 이 최적화를 사용할 경우 네트워크 대역은 효율적으로 사용할 수 있지만 패킷을 모으는 시간 동안의 지연이 발생하므로 일부 네트워크 스택의 성능이 저하 될 수 있습니다. 기본 비활성화 되어 있습니다.

timeout time

네트워크를 통한 응답 시간 초과를 정의합니다. 피어 노드가 지정된 시간 초과 내에 예상 응답을 보내지 않으면 응답이 없는 것으로 간주하고 TCP/IP 연결을 닫습니다. 시간 초과 값은 connect-int보다 낮아야 하고 ping-int보다 작아야 합니다. 기본 값은 5초이고 10분의 1초로 단위로 지정됩니다.

use-rle

use-rle 매개 변수는 run length encoding 을 사용해야 하는지 결정합니다. 클러스터 노드의 각 복제 된 장치에는 각 피어 장치에 대한 별도의 비트맵이 있습니다. 비트맵은 로컬 장치와 피어 장치의 차이점을 추적하는 데 사용됩니다. 클러스터 상태에 따라 장치의 비트맵, 피어 장치의 비트맵 또는 두 비트맵에서 디스크 범위가 피어와 다른 것으로 표시 될 수 있습니다. 두 클러스터 노드가 연결되면 서로의 비트맵을 교환하고 각각 로컬 및 피어 비트맵의 합집합을 계산하여 전체 차이를 결정합니다. 매우 큰 장치의 경우 비트맵이 비교적 크기 때문에 일반적으로 run length encoding을 사용하여 압축률을 높이고 이를 통해 비트맵 전송에 필요한 시간과 대역폭을 절약 할 수 있습니다. 기본적으로 활성화 되어 있습니다.

verify-alg hash-algorithm

온라인 검증 (bsradm verify)은 디스크 블록 (즉, 해시값)의 체크섬을 계산하고 비교하여 서로 다른 지를 감지합니다. verify-alg 매개 변수는 이러한 체크섬에 사용할 알고리즘을 결정합니다. 온라인 검증을 사용하기 전에 커널이 지원하는 보안 해시 알고리즘 중 하나로 설정해야 합니다. /proc/ crypto에 나열된 shash 알고리즘을 참조하십시오.

stacked-on-top-of 

3-4 개의 노드로 스택 된 리소스를 구성하기 위해 on 섹션 대신 사용됩니다. bsr에선 더 이상 사용하지 않습니다.