Table of Contents |
---|
개요
WDRBD 의 etc/drbd.conf
파일은 drbdadm
에 의해 읽혀집니다.
파일 포멧은 클러스터의 양쪽 노드에 있는 파일의 글자 그대로의 복사본을 가질수 있도록 설계되어 있습니다. 이것은 구성을 유지관리 할 수 있도록 하기위해 적극 권장됩니다. WDRBD 설치폴더의 etc/drbd.conf
파일은 클러스터의 양쪽 노드에서 동일해야하며, WDRBD 의 etc/drbd.conf
에 대한 변경은 즉시 적용되지 않습니다.
관례 상 주요 설정은 두 문장을 포함하고 있습니다. 첫 번째는 WDRBD 의 etc/drbd.d/global_common.conf
파일을, 두번째는 .res
접미사가 있는 모든 파일을 포함합니다.
|
이 예에서, 해당 디바이스들 사이에 연결을 위한 프로토콜 C를 사용하는 하나의 WDRBD 리소스(이름은 r0)가 있습니다.
이 리소스에는 데이타를 위한 디스크 e
드라이브를 사용하는 alice 호스트에서 실행되는 단일 볼륨을 포함하고 있습니다.
IP주소는 사용할 네트워크 인터페이스를 지정하는 데 사용됩니다.
재동기화가 발생하는 경우 재동기화 프로세스는 초당 10MByte 의 IO 대역폭만 사용하게 됩니다.
이 sync-rate
문장은 볼륨 0에 대해서 유효하지만, 더 많은 볼륨에 대해서도 유효할 수 있습니다. 이 예에서는 각 볼륨에 전체 10MByte/second를 지정합니다.
하나의 drbd.conf
파일에 다중 리소스 섹션이 있을 수 있습니다.
파일 포맷
파일은 섹션 및 파라미터로 구성되어 있습니다. 섹션은 키워드, 때로는 추가적인 이름, 그리고 여는 중괄호(“{”)로 시작하며 닫는 중괄호(“}”
)로 끝납니다. 그리고 중괄호는 파라메터를 감싸고 있습니다.
section [name] { parameter value; [...] }
파라메터는 공백 뒤에 파라메터의 식별자와 함께 시작합니다. 모든 후속 문자는 파라메터 값의 일환으로 간주됩니다. 식별자 만으로 구성된 Boolean
파라메터처럼 특별한 경우가 있다. 파라메터는 세미콜론(";"
)에 의해 종료됩니다.
일부 매개변수 값은 K, M 또는 G 기본 단위를 지정할 수 있으며 이들 단위는 일반인 단위들입니다.(K = 2^10 = 1024, M = 1024 K, G = 1024 M
).
속성파일에 주석을 넣을 수 있으며, 반드이 해시기호 (“#”
)로 시작해야 합니다. 주석은 라인이 끝나는 지점까지 유효합니다.
|
섹션
global
글로벌 파라미터를 정의합니다. 현재는 minor-count, disable-ip-verification
만 사용가능합니다. 첫번째 섹션으로 하나의 global
섹션만 사용할 수 있습니다.
common
이 섹션에 설정된 옵션들은 모든 리소스에 상속됩니다. common
섹션은 startup, options, handlers, net
그리고 disk
섹션이 포함될 수 있습니다.
resource name
WDRBD 리소스를 구성합니다. 각 resource
섹션은 두개(혹은 더 이상)의 host
섹션이 있어야 하고 startup, options, handlers, net
그리고 disk
섹션이 포함될 수 있습니다.
on host-name
WDRBD 디바이스의 필요한 구성 파라미터를 전달합니다. host-name
은 필수이며 노드중에 하나의 Windows 호스트 이름과 일치해야 합니다.
...
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 파일들로 정의하는 것이 유용합니다. 구성 파일은 각 클러스터 노드가 전체 클러스터 구성의 동일한 사본을 포함하도록 설계되었습니다. 그러나 때로는 노드 별로 각기 다른 구성파일의 내용을 가져야 할 수도 있어서 절대적인 것은 아닙니다.
|
|
|
|
|
|
|
|
|
또한, floating
섹션 키워드를 참조하시기 바랍니다. 이 섹션에서 요구되는 문법은: address
와 volume
입니다.
floating AF addr:port
WDRBD 디바이스의 필요한 구성 파라미터를 전달합니다. 이 섹션은 on
섹션과 매우 비슷합니다. on
섹션과의 차이점은 host
섹션의 호스트 이름 대신 IP 주소가 사용되는 것이 차이점입니다.
이 섹션에서 필요한 파라메터는 리소스 섹션으로부터 상속받을 수 있는 모든 것과 disk, meta-disk
이며, 이 경우 address
식별자로 이 섹션을 짧게 단축시킬 수 있습니다.
|
disk
이 섹션은 디스크 볼륨에 관한 파라미터를 정의하는 섹션입니다. 이 섹션의 모든 파라미터는 선택가능합니다.
Optional parameters: on-io-error, size, fencing, disk-drain, max-bio-bvecs, resync-rate, resync-after, al-extents, al-updates, c-plan-ahead, c-fill-target, c-delay-target, c-max-rate, c-min-rate, disk-timeout
net
이 섹션은 WDRBD의 네트워크 연결에 관한 파라미터를 정의하는 섹션입니다. 이 섹션의 모든 파라미터는 선택가능합니다.
Optional parameters: protocol, sndbuf-size, rcvbuf-size, timeout, connect-int, ping-int, ping-timeout, max-buffers, max-epoch-size, ko-count, allow-two-primaries, after-sb-0pri, after-sb-1pri, after-sb-2pri, data-integrity-alg, no-tcp-cork, on-congestion, congestion-fill, congestion-extents, verify-alg, use-rle, csums-alg
options
이 섹션은 리소스의 파라미터를 정의하는 섹션입니다. 이 섹션의 모든 파라미터는 선택가능합니다.
Optional parameters: on-no-data-accessible
handlers
이 섹션은 특정한 이벤트가 발생했을 때 호출되는 핸들러(실행가능한)를 정의하는 섹션입니다.
Optional parameters: pri-on-incon-degr, pri-lost-after-sb, pri-lost, fence-peer (formerly oudate-peer), local-io-error, initial-split-brain, split-brain, before-resync-target, after-resync-target
핸들러 서비스는 기본적으로 비활성화되어 있습니다. 다음 명령을 사용하여 handler_use를 1로 설정하면 핸들러 서비스가 활성화됩니다.
핸들러 구성에서 사용 가능한 파일 형식은 다음과 같습니다.
|
인터페이스는 환경 변수를 통해 완성됩니다:
DRBD_RESOURCE
는 리소스의 이름입니다.DRBD_MINOR
는 WDRBD 디바이스의 마이너 숫자입니다.DRBD_CONF
는 주된 구성 파일의 경로입니다; 여러개의 구성 파일(예를 들어,WDRBD 설치위치의etc/drbd.d/
)로 구성하는 경우에는 유용하지 않습니다.DRBD_PEER_AF, DRBD_PEER_ADDRESS
는 어드레스 패밀리(예를 들어, ipv6)이며, 원격노드의 주소와 호스트이름 입니다.
모든 핸들러에 대해 이들 모두가 설정되지 않으며, 일부 값은 floating
정의에 대해 사용되지 않을 수도 있습니다.
파라미터들
disable-ip-verification
보통, WDRBD는 구성파일에 맞는 호스트이름을 IP 주소로 검증합니다. 이 파라미터를 사용하면 이러한 검사를 진행하지 않습니다.
protocol prot-id
TCP/IP 링크에 지정된 프로토콜이 사용됩니다. 유효한 프로토콜 지정자는 A, B, C 입니다.
Protocol A: 쓰기IO가 로컬 디스크 및 로컬 TCP 송신 버퍼에 도달하면, 쓰기는 완료됩니다.
Protocol B: 쓰기IO가 로컬 디스크 및 원격노드의 쓰기 요청에 대한 응답을 받으면, 쓰기는 완료됩니다.
Protocol C: 쓰기IO가 로컬 디스크 및 원격노드 디스크에 도달하면, 쓰기는 완료됩니다.
disk drive_letter
WDRBD 는 이 블록 디바이스에 실제로 데이터를 저장하고 가져옵니다.
device drive_letter minor [minor_index]
WDRBD 는 백킹디바이스의 볼륨레터를 지정하고 minor 값을 직접 지정해야 합니다. minor_index 의 값은 c: 볼륨레터의 경우 0을 기준으로 레터값이 증가됨에 따라 index 도 1씩 증가 되도록 고정되어 있습니다.
예) device e: minor 2;
address
AF addr:port
리소스는 디바이스마다 각각의 파트너 디바이스로부터 들어오는 연결을 대기하는데 사용하는 하나의 IP 주소를 필요로합니다.
AF
는 ipv4 / ipv6 모두 지원하며, ipv4 에 대해서는 AF
가 생략될 수 있습니다.
ipv6 주소 지정
예) address ipv6 [fda1:6ed6:5069:1:fcc7:700:cd9d:9bee]:7789; # unique local address |
각 WDRBD 리소스는 파트너 디바이스와 연결하기 위해 사용되는 TCP 포트를 필요로 합니다.
같은 노드에서 두개의 서로 다른 WDRBD 리소스는 같은 addr:port
조합을 사용할 수 없습니다.
meta-disk drive_letter
meta-data의 크기는 디바이스의 크기에 따라 계산됩니다.
그 meta-data의 크기는 36kB + 스토리지의 크기 / 32k 이고, 다음 4kb경계로 반올림한 값입니다.(눈금량: 스토리지 1GByte 당 32kByte에 다음 MB를 반올림합니다.)
on-io-error handler
로우레벨 디바이스에서 발생한 I/O 에러에 대해서 WDRBD가 어떻게 동작할지에 대한 정의를 합니다. 사용가능한 정책은 다음과 같습니다.
detach
: 디스크를 detach
합니다.(기본값, WDRBD 에선 detach 속성의 사용을 권장합니다)
pass_on
: 디스크 상태를 inconsistent
로 변경하며 실패한 블럭에 대해서는 비트맵에 inconsistent
로 기록하고 원격노드로 I/O 동작을 재시도 합니다.
call-local-io-error
: local-io-error
핸들러를 호출합니다.
svc-autostart { yes | no }
OS 부팅 시 drbdService에 의해 자동으로 리소스를 시작할 지 결정합니다. 기본값은 "yes"입니다.
부팅 시에 디스크가 준비되지 않을 수 있는 공유디스크를 사용하는 환경에서는 리부팅 이후 리소스를 자동 up 하게 되며 공유디스크의 메타디스크 영역에 영향을 줄 수 있기 때문에 up 이 되지 않도록 조치가 필요합니다. 따라서 SDR 리소스는 해당 옵션을 no 로 설정하는 것이 필수 사항입니다.
fencing fencing_policy
fencing
은 양 노드가 disconnected
상황에서 양쪽다 Primary가 되는 상황(스플릿 브레인)을 피하기 위한 정책입니다.
유효한 정책은 다음과 같습니다.
dont-care
이것은 기본 정책입니다. 어떠한 fencing
행동도 취하지 않는다.
resource-only
노드가 disconnected primary
상태가 된다면, 원격노드의 디스크를 막는 시도를 합니다. 이것은 fence-peer
핸들러를 호출함으로써 완료됩니다. 이 핸들러는 대체 경로를 통하여 다른 노드에 도달하여 'drbdadm outdate res
'를 호출합니다.
resource-and-stonith
노드가 disconnected primary
상태가 된다면, 모든 IO 명령이 중지되고 fence-peer
핸들러가 호출됩니다. fence-peer
핸들러는 대체 경로를 통하여 다른 노드에 도달하여 'drbdadm outdate res
'를 호출합니다. 이 경우 원격노드에 도달할 수 없다면 원격노드를 stonith
(재부팅)합니다. IO 는 이 상황이 해결되면 곧바로 재개 됩니다. 이 경우 핸들러가 실패하면 resume-io
명령으로 IO 를 재개할 수 있습니다.
disk-timeout
하위 레벨 디바이스의 드라이버가 정의된 disk_timeout
내에 IO 요청을 완료하지 못할 경우, WDRBD는 그 디스크를 실패로 간주합니다. 하위 레벨 디바이스가 detach
되면, 디바이스의 디스크 상태는 Diskless
로 변경됩니다. WDRBD가 하나이상의 원격노드에 연결되어 있는 경우, 실패한 요청은 원격노드중 하나에게 전달됩니다. 기본값은 0이며, 제한시간이 적용되지 않는다는 의미입니다. 기본 단위는 0.1초입니다.
req-buf-size
로컬 I/O 에 대해 버퍼링을 수행하는 WDRBD 내부 버퍼의 크기입니다. 기본값은 1000 (MByte) 입니다. 저대역폭(1Gbps 미만) 의 복제 라인의 환경이거나 비동기 복제 시 req-buf-size 의 크기에 따라 복제 성능이 차이가 날 수 있습니다. 가용메모리가 충분한 환경일 경우 값을 충분히 늘려주는게 복제 성능에 좋습니다. 512~10000 까지 설정할 수 있습니다.
sndbuf-size size
TCP/IP 송신 버퍼의 크기를 설정합니다. 송신버퍼는 커널의 비페이징 풀로 할당되므로 시스템 메모리 사양에 맞게 적당히 설정되어야 합니다. 과도하게 할당할 경우 시스템의 비페이징풀이 고갈되어 시스템의 전반적인 성능에 영향을 줄 수 있습니다. 설정하지 않았을 경우 기본값은 64KB 입니다.
rcvbuf-size size
TCP/IP 의 수신 버퍼 크기를 설정합니다. 기본값은 0 이며 이것은 동적으로 조정된다는 의미입니다. 일반적으로 이 값은 기본값으로 설정하며 조정하지 않습니다.
timeout time
네트워크상에서 응답시간의 타임아웃 값을 정의합니다. 원격노드가 지정된 타임아웃값 안에 응답을 주지 않으면 원격노드가 죽었다고 간주하고 TCP/IP 연결을 닫습니다. 이 타임아웃 값은 connect-int
과 ping-int
값보다 작아야 합니다. 기본값은 30 (= 3초) 입니다. 기본적으로 망 간의 혼잡이 발생될 수 있는 조건에 놓인 원격 DR 구성의 경우는 기본값보다 두 배정도의 수치(60)로 설정하는 것을 권장합니다.
connect-int time
즉시 원격 WDRBD 디바이스에 연결할 수 없는 경우에, WDRBD는 계속해서 연결을 시도합니다. 이 옵션을 사용하면 두번의 재시도 사이의 시간을 설정할 수 있습니다. 기본값은 3초 이며, 단위는 초 입니다.
ping-int time
원격노드와 TCP/IP 연결이 몇 time
초 이상 유휴 상태 인 경우, WDRBD는 원격노드가 아직 살아있는지 확인하려고 keep-alive 패킷 생성합니다. 기본값은 3초 이며, 단위는 초 입니다.
ping-timeout time
keep-alive 패킷이 응답하는 타임아웃 값입니다. 원격노드가 ping-timout
값 안에 응답하지 않으면 WDRBD 는 이 연결을 끊고 다시 재연결을 시도합니다. 기본값은 3 초이며, 최소는 0.1, 최대는 3초입니다. 단위는 1/10 초 입니다.
max-buffers number
WDRBD 의 resync
혹은 온라인 검증에 사용될 내부 버퍼 또는 수신측에서 디바이스 당 사용될 메모리의 제약입니다. 단위는 PAGE_SIZE
이며, 대부분의 시스템에서 4KiB 입니다. 하드 코딩된 최소 가능한 크기는 32 입니다(이것은 128KiB 와 같습니다.). 이 버퍼는 디스크로부터 쓰기 및 읽기를 할 동안에 데이터 블럭을 잡아둘 때 사용됩니다. 혼잡상태에서 분산된 교착 상태를 회피하기 위해서, 이 설정은 기계적인 한계보다는 스로틀 임계값으로 사용됩니다. max-buffers
이상의 페이지가 사용중이면, 추후에 이 풀에서 추가 할당이 제한됩니다.
ko-count number
secondary
노드가 timeout
파라미터 시간안에 ko-count
만큼 단일 쓰기 요청을 실패할 경우, 클러스터에서 제외시킵니다. (즉, primary
노드가 StandAlone
모드로 전환됩니다.) primary
노드는 노드 상태를 Standalone
으로 변경합니다. 기본값 0이며 이것은 이 기능은 사용하지 않는다는 의미입니다.
unplug-watermark number
secondary
노드에서 얼마나 많은 쓰기 요청이 큐잉되었을 때 처리할지에 대한 설정값입니다. 일부 스토리지 컨트롤러는 max-buffers
와 같게 설정될 때 최고의 성능을 발휘하지만 다른 컨트롤러는 작은 값일 때 더 효과적으로 동작할 수 있습니다. 최소값은 16, 기본값은 128, 그리고 최대값은 131072 입니다.
after-sb-0pri policy
primary
노드가 하나도 없을 경우 스플릿브레인 시나리오 상에서 어떻게 동작할지 정의합니다.
disconnect
자동 재동기화하지 않습니다, 단순히 연결을 끊습니다.
discard-younger-primary
split-brain
상황이 발생하기 전에 primary
이었던 노드에서 자동 동기화합니다.
discard-older-primary
split-brain
상황 동안 두번째로 primary
가 되었던 노드에서 자동 동기화한다.
discard-zero-changes
split-brain
상황이 감지된 후 한 노드에서만 쓰기가 이루어진 경우, 해당 노드를 기준으로 재 동기화 합니다. 양 노드에서 쓰기가 이루어졌다면, 연결을 끊습니다.
discard-least-changes
더 많은 블럭이 변경된 노드를 기준으로 재동기화 합니다.
discard-node-NODENAME
지정된 노드의 데이터를 버리고 원격노드를 기준으로 재 동기화합니다.
after-sb-1pri policy
primary
노드가 하나일 경우 스플릿브레인 시나리오 상에서 어떻게 동작할지 정의합니다.
disconnect
자동 재동기화하지 않습니다, 단순히 연결을 끊습니다.
consensus
만일 after-sb-0pri
알고리즘의 결과가 현재 secondary
노드의 데이터를 폐기하는 결정일 경우에는 secondary
노드의 데이터를 버립니다. 그렇지 않은 경우에는 연결을 끊습니다.
violently-as0p
primary
노드의 데이터가 오류를 발생하더라도 항상 after-sb-0pri
알고리즘의 결과와 같은 결정을 내린다. 이 옵션은 allow-two-primaries
플래그와 함께 단일 노드 파일시스템을 사용할 때 유용합니다. 정확히 어떤 작업을 하는지 자세히 알아야 합니다. 왜냐하면 primary
노드에서 이미 마운트 된 파일 시스템을 사용한다면 이 옵션은 위험하고 시스템을 망가뜨릴 수 있습니다.
discard-secondary
secondary
노드의 데이터를 버립니다.
call-pri-lost-after-sb
항상 after-sb-0pri
알고리즘의 결과와 같은 결정을 내립니다. 만약 primary
노드의 데이터를 폐기하는 결정을 내려진다면, primary
노드에서 pri-lost-after-sb
핸들러를 호출합니다.
이 핸들러는 secondary
노드로 변경할 노드를 리부팅 시킵니다.
after-sb-2pri policy
양 노드가 primary
일 경우 스플릿브레인 시나리오 상에서 어떻게 동작할지 정의합니다.
disconnect
자동 재동기화하지 않습니다, 단순히 연결을 끊습니다.
always-asbp
보통, 자동 after-split-brain
정책은 UUID가 세번째 노드가 가르키지 않는 경우에만 사용됩니다. 이 옵션은 노드들의 데이터 셋 사이에서 어떻게든 관련이 있다면 자동 after-split-brain
정책을 사용할 수 있습니다. 이것은 UUID 가 세번째 노드의 존재를 가르킨다면 전체 동기화를 발생시킬수도 있습니다.
rr-conflict policy
이 옵션은 클러스터에서 모순된 롤 할당시에서의 재동기화 결과를 해결할수 있도록 도와줍니다.
즉, 이 옵션은 WDRBD 재동기화가 필요한 메타데이터가 있고, SyncTarget
노드가 이미 primary
라고 추론될 때 WDRBD 의 행동을 설정합니다.
disconnect
자동 재동기화하지 않습니다, 단순히 연결을 끊습니다.
violently
primary
노드로 재동기를 허락하고, 노드 중 하나에 대해서 블럭 디바이스의 데이터가 위배했다고 가정합니다. 이 옵션은 매위 위험합니다.즉, WDRBD 가 강제로 primary
노드를 SyncTarget
상태로 변경하는 것을 허용하는 옵션입니다.
call-pri-lost
노드중 하나에서 pri-lost
핸들러를 호출합니다. 이 핸들러는 secondary
로 변경될 노드를 리부팅합니다.
data-integrity-alg alg
WDRBD 는 내장된 TCP/IP 프로토콜로 데이터의 무결성을 보장하지만, 다른 알고리즘을 사용할 수 있도록 구성할 수 있습니다. 이것은 추가적으로 네트워크로 송신된 데이터가 수신된 데이터와 일치하는지 확인하는데 사용됩니다.
WDRBD에선 crc32c 알고리즘만 지원합니다.
on-congestion congestion_policy
, congestion-fill fill_threshold
, congestion-extents active_extents_threshold
DRBD의 기본적인 통신은 TCP 송신버퍼가 꽉 차면 송신을 블록(대기)한다. 이는 후속 쓰기 요청이 대기하게 되어 응용 프로그램을 느려진다는 의미이다.
DRBD가 DRBD-proxy와 함께 배포되는 경우, 전송 큐가 가득차기 전에 DRBD가 짧게 AHEAD/BEHIND 모드로 진행되는 것이 더 바람직 할 수 있다. AHEAD/BEHIND 모드에서 DRBD는 데이터 복제를 더이상 하지 않지만 네트웍 연결은 유지한다.
AHEAD/BEHIND 모드의 장점은 DRBD-proxy의 버퍼가 쓰기 요청 버퍼로 충분하지 않더라도 응용 프로그램을 느리게하지 않는다는 것이다. 단점은 peer 노드가 뒤쳐지고, 재동기화로 다시 그것을 가져와야 한다는 것이다. 재동기화 동안 peer노드는 "inconsistent" 상태의 디스크를 갖게 된다.
사용 가능한 congestion_policys 는 block과 pull-ahead 이며, 기본값은 block 이다. Fill_threshold 는 0에서 10GiBytes의 범위에 있다. 기본값은 0이며 이는 혼잡모드를 사용안한다는 의미이다. Active_extents_threshold 는 al-extents 와 같은 크기의 제한을 갖는다.
wfc-timeout time
time 만큼 연결을 기다립니다. 대기 시간을 제한하려면 time
을 입력합니다. 기본값이 0이면 무제한을 의미하며, 단위는 초이다.
degr-wfc-timeout time
이 노드가 클러스터에서 강등된 노드라면, 연결 제한시간까지 기다립니다. 강등된 클러스터(= 하나의 노드 만이 클러스터에 존재)가 재 부팅되는 경우, 원격노드가 이전에 죽은상태라면 시간 내에 나타날 가능성이 줄어들기 때문에 wfc-timeout
대신에 이 시간제한 값이 사용됩니다. 0은 무제한을 대기하는 것을 의미합니다.
outdated-wfc-timeout time
원격노드가 outdated
일 경우, 연결 제한시간까지 기다립니다. 원격노드가 oudated
상태인 디스크인 채 강등된 클러스터(= 하나의 노드 만이 클러스터에 존재)가 재 부팅되는 경우, 원격노드가 시간 내에 primary
가 될 수 없기 때문에 wfc-timeout
대신에 이 시간제한 값이 사용된다. 0은 무제한을 대기하는 것을 의미합니다.
wait-after-sb
이 파라미터는 스플릿브레인이 상황이 감지되었을 때 얼마나 오랫동안 기다릴지에 대한 정의힙니다.
resync-rate rate
WDRBD의 상단에있는 응용 프로그램의 원활한 작동을 보장하려면, 백그라운드 동기화에 의해 사용될 수있는 대역폭을 제한 할 수 있습니다. 기본 값은 250 KB/sec이며, 기본 단위는 KB/sec이다. K, M, G를 접미사로 선택할 수 있습니다.
use-rle
resync-handshake
동안, 노드의 dirty-bitmaps
이 교환되고 병합되어(bit-or
을 사용), 노드들은 동일하게 dirty
블록을 판단할 수 있습니다. 대형 디바이스에서, 작은단위의 dirty-bitmap
은 커질 수 있으며, 비트맵 교환은 낮은 대역폭에서 꽤 시간이 걸릴 수 있습니다. 일반적으로 비트맵은 모든 비트가 해제(clean
) 또는 설정(dirty
)되는 간단한 영역을 포함하며, 간단한 run-length
인코딩 방식은 비트맵 교환에 필요한 네트워크 트래픽을 상당히 줄일 수 있습니다.
resync-after res-name
기본적으로 모든 디바이스의 재동기화는 병렬로 실행됩니다 resync-after
의존성을 정의함으로써, 이 리소스의 재동기화는 res-name
으로 기입된 리소스가 이미 connected
상태일 경우에만 시작될 것입니다.(즉, 해당 재동기가 완료된 경우에만 진행됩니다)
al-extents extents
WDRBD는 자동으로 hot area 감시를 수행합니다. 이 파라메타를 사용하면 더 많은 hot area (= active set)를 제어 할 수 있습니다. 각 extent
는 스토리지(= 로우 레벨 디바이스)의 4M를 표시합니다. primary
노드가 예기치 않게 클러스터를 벗어나 실패한 경우, 액티브 셋에 포함된 그 영역은 실패한 노드의 합류 시 재동기화 되어야 합니다. 데이터 구조는 메타 데이터 영역에 저장되므로 active set 의 각 변경부분은 메타데이터 장치의 쓰기 동작입니다. 더 많은 수의 extent
는 재동기화 시간을 길게 하지만, 메타 데이터 업데이트 보다는 짧습니다. extents
의 기본 값은 127입니다 (최소:7, 최대:65534)
al-updates { yes | no }
WDRBD의 activeity log
트랜잭션 쓰기는 primary
노드 실패후에 부분(bit-map
기반) 재동기화만으로 최신 데이터로 갱신하는것을 가능하게 해줍니다. al-updates
를 "no
"로 설정하면 기본 성능은 향상되지만 실패한 primary
가 다시 연결될때 DRBD가 전체 재동기화를 해야하는 원인이 됩니다. 기본값은 "yes
"입니다.
verify-alg hash-alg
온라인 검증(verify
하위 명령어에 의해 시작함)동안에는 비트 연산 비교를 하는 것 보다, WDRBD 는 모든 확인된 블럭의 컨텐츠에 대해서 해쉬 기능을 적용하고, 원격노드와 해당 해쉬를 비교합니다. 이 옵션은 이 목적을 위해서 사용되는 해쉬 알고리즘을 정의하며 WDRBD에서는 crc32c 를 제공합니다. 기본값은 사용하지 않도록 되어 있기 때문에, 온라인 검증을 사용하려면 명시적으로 이 옵션을 설정해야만 합니다.
csums-alg hash-alg
아무런 cums-alg
가 설정되어 있지 않은 경우에는 재동기화 프로세스에 소스로부터 모든 표시된 데이터를 타겟 노드로 보냅니다. 알고리즘 중 하나가 기입되면 재동기화 프로세스는 모든 표시된 데이터블럭의 해쉬값을 먼저 교환하고, 해쉬값이 다른 데이터 블럭만을 전송합니다. 이 설정은 WDRBD 가 낮은 대역폭 연결로 구성되어 있을 경우 유용한 옵션입니다. 크래쉬된 primary
노드를 리부팅시키는 동안 재동기를 위해 activity log
에 의해서 표시된 모든 블럭을 포함할 수 있습니다. 그러나 activity log
에 표시된 블럭의 대부분은 여전히 동기화 상태로 있을 것입니다. 따라서 csums-alg
를 사용하면 CPU 사용하여 낮은 대역폭을 쓸 수 있습니다.
c-plan-ahead plan_time, c-fill-target fill_target, c-delay-target delay_target, c-max-rate max_rate
동적으로 재동기 속도를 제어합니다. 양수 값으로 plan_time
을 설정함으로써 활성화됩니다. 데이터 경로에 fill_target
만큼의 데이터가 버퍼에 채워지거나, dealy_target
만큼 지연될 경우 동작한다. 동적 재동기화 속도의 상한값은 c-max-rate
파라미터에 의해 정의됩니다. 얼마나 빨리 동작하는지의 설정은 plan_time
으로 설정할 수 있습니다. 큰 값으로 설정할 경우 느리고/낮은 응답으로 동작합니다. 최소한 RTT(round-trip time) 의 5배 이상이어야 합니다. 일반적인 데이터 경로에서는 4k에서 100k의 영역이 fill_target
값이 적합합니다.
fill_target
이 0으로 설정된 경우에만 컨트롤러는 delay_target
를 사용합니다. 합리적인 값은 RTT의 5배 입니다. Max_rate
는 사용가능한 disk
대역폭으로 설정 해야합니다. plan_time
의 기본값은 0이며 기본단위는 0.1초입니다. Fill_target
의 기본값은 0이며 기본단위는 sector 입니다. Delay_target
의 기본값은 1(100ms)이며 기본단위는 0.1입니다. Max_rate
의 기본값은 10240(100MiB/s)이며 기본단위는 KiB/s입니다.
c-min-rate min_rate
primary
이고 sync-source
인 노드는 응용프로그램의 IO 요청과 재동기 IO 요청을 위해서 스케줄을 해야 합니다. min_rate
는 WDRBD 가 재동기 IO 를 위한 최대 대역폭의 할당이며, 다른 모든 가능한 IO 요청은 응용프로그램 요청에 할당하도록 알려줍니다.
메모 : 0 값은 특별한 의미가 있습니다. 재동기 IO 를 완전히 해제함으로써 응용 프로그램의 IO 속도를 상당히 느려지게 할 수 있습니다. 이 값을 1로 설정하면 재동기 IO 가 응용프로그램 IO 를 느리게 하지 않습니다.
메모 : 이름으로 추측되는 것은 동적 재동기 속도 컨트롤러의 하위 한계점으로 보일 수 있지만, 그렇지 않습니다.
Min_rate
의 기본값은 4096 (4MiB/s)이며, 기본단위는 KiB/s이다.
on-no-data-accessible ond-policy
이 설정은 성능이 저하된 diskless
노드(즉, 데이터 저장소에 도달할 수 없습니다.) 에서 IO 요청이 일어나는 것을 제어합니다. 가능한 정책은 io-error
와 suspend-io
입니다.
suspend-io
로 설정되어 있는 경우, 마지막으로 손실된 데이터 스토리지를 attaching/connecting
하거나 또는 drbdadm resume-io res 명령 둘 중 하나로 IO를 재개할 수 있습니다. 후자는 당연히 IO오류가 발생합니다.
기본값은 io-error
입니다.
pri-on-incon-degr cmd
이 핸들러는 노드가 primary
이고 성능이 저하된 것이면서, 데이터의 로컬 복사본이 inconsistent
일 경우에 호출됩니다.
pri-lost-after-sb cmd
노드가 현재 primary
이나, after-split-brain
자동 복구 절차에 따라서 primary
롤을 잃었다면 결과적으로 노드는 버려집니다.
pri-lost cmd
노드가 현재 primary
이나, WDRBD 의 알고리즘에 의해 sync target 이 되어야 한다고 판단되면 primary
롤을 버립니다.
fence-peer cmd
이 핸들러는 fencing
메커니즘의 일부입니다. 이 핸들러는 노드가 원격노드의 디스크에 fence
가 필요한 경우에 호출됩니다. WDRBD 의 네트워크 링크가 아닌 다른 통신 경로를 사용합니다.
local-io-error cmd
하위레벨 디바이스에서 IO 오류가 발생할 경우 호출됩니다.
initial-split-brain cmd
원격노드와 연결되고 split-brain
을 감지했을 경우 호출됩니다. 이 핸들러는 split brain
의 모든 경우에 미해결로 남지 않도록 경고를 알려 줍니다.
split-brain cmd
자동으로 해결되지 않은 split-brain
상황을 감지했을때 사용됩니다. 수동 복구가 필요하며 관리자에게 경고를 할때 사용되는 핸들러입니다.
before-resync-target cmd
재동기화 대상이 되는 노드에서 재동기가 시작되기 전에 호출됩니다. 블럭 디바이스의 스냅샷을 찍는데 사용되기도 합니다.
after-resync-target cmd
재동기화 동안 재동기 작업이 완료되어 디스크 상태가 inconsistent
에서 consistent
상태로 변경된 노드에서 이 핸들러가 호출됩니다. before-resync-target
핸들러에서 생성했던 블럭 디바이스의 스냅샷을 제거하는데 사용되기도 합니다.
다른 키워드들
include file-pattern
와일드 카드 패턴 file-pattern
과 일치하는 모든 파일을 포함합니다.
포함된 문장은 최 상위 레벨에서 허용됩니다. 즉, 어떤 섹션 내부에서도 허용되지 않습니다.
데이터 무결성에 대한 메모
WDRBD 는 두가지 다른 메커니즘으로 데이터 무결성 체크를 합니다. 첫번째. data-integrity-alg
네트워크 파라미터로 네트워크로 보낸 데이터의 체크섬을 추가하는 방법이 있습니다. 두번째. 온라인 검증 메커니즘(drbdadm verify
명령과 verify-alg
파라미터)로 디스크 상의 차이를 체크할 수 있습니다.
두 메커니즘은 IO 가 발생되는 도중에 수행할 경우 수정된 데이터(네트워크상에 보내는 중의 데이터 혹은 디스크에 쓰여지는 중의 데이터)에 대해서 오탐(false positive)이 발생할 수는 있으나 데이터 무결성에 문제가 되는 것은 아닙니다.
예를 들어 파일 시스템과 응용프로그램은 IO 중에 특정한 명령을 위해서 데이터를 수정하고 스왑 공간 역시 IO 중에 변화를 겪을 수 있습니다. 네트워크 데이터 무결성 체크는 송신측에서 데이터를 보낸 후 체크섬을 확인함으로써 IO 수행 동안 데이터 수정여부를 확인합니다. 만약 불일치가 발생하면, 오류로 기록합니다. 수신자 역시 불일치가 발생하면 오류로 기록합니다. 그러므로 수신자 측에서 오류가 기록되면 네트워크 상에서 오류로 지정하고 IO가 발생한 도중의 데이터 수정은 양 측에 오류로 기록됩니다.
...
|
이 예에서는 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 문은 섹션 외부에서만 허용됩니다.
다음과 같이 섹션이 정의됩니다. 들여 쓰기 된 섹션이 하위 섹션 입니다.
|
위에서 대괄호 안의 섹션은 구성의 다른 부분에 영향을 줍니다. 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-id 및 address 매개 변수는 이 섹션에서 정의해야 합니다. device, disk 및 meta-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, disk 및 meta-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-changes, discard-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에선 더 이상 사용하지 않습니다.