Versions Compared

Key

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

...

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

fence-peer cmd

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

...

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

...

로컬 노드는 현재 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 명명된 노드를 항상 폐기합니다.

...

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

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

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

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

...

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

  • disconnect 단순히 연결을 끊습니다. 2 primary 스플릿 브레인의 경우 disconnect

...

  • 정책만 제공되며 수동 복구만 사용할 수 있습니다.

allow-two-primaries

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

...

csums-alg hash-algorithm

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

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

...

펜싱은 두 노드가 연결이 끊어져서 모두 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를 늘려야 합니다.

...

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

...

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

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

...