...
- DRX의 물리적 버퍼 사양 계측을 위해 네트워크 대역, 운영 머신 I/O 부하도에 대한 사전조사가 필요합니다.
- 사전 조사 항목
- 운영머신의 리소스당 평균 I/O 양
- 최대 I/O 양
- 최대 I/O 지속시간
- 운영 머신의 평균 I/O 와 최대 I/O 의 수치는 적절한 버퍼링 환경을 구축하기 위한 근거 자료가 됩니다.
case | 버퍼 | 비고 | |
---|---|---|---|
1 | 평균 I/O < 최대 I/O < 대역폭 | 권장 버퍼 크기: 1 GByte 이상 | 예)1Gbps 대역폭, 1G Buffer = 최대 100MB/s I/O를 약 10초간 유지 가능 |
2 | 평균 I/O < 대역폭 < 최대 I/O | (최대 I/O - 대역폭) * 최대 I/O 지속시간 | 예) 평균 50MB/s I/O, 100Mbps 대역폭, 최대 200MB/s, 최대 I/O 10초간 지속 (200MB/s - 약 10MB/s) * 10초 = 약 2GB |
3 | 대역폭 < 평균 I/O < 최대 I/O | 네트워크 대역 확장 요구, 압축 기능 고려 |
DRX의 버퍼는 사전 조사한 운영 노드의 I/O 부하 수치가 감당될 수 있도록 적절한 크기로 설정되어야 합니다. 사전 조사를 바탕으로한 I/O 데이터가 확보되지 못했다면 1번 case 기준의 권장 버퍼 사양에 따라 구성 및 시범 운영을 한 후 버퍼 크기에 대한 튜닝 과정을 필요로 합니다.
...
혼잡상태란 복제부하가 가중되어 DRX의 버퍼에 여유 공간이 남아 있지 않아 버퍼링이 불가한 상태를 의미합니다. 이럴 경우 DRX는 어떤 특별한 동작을 수행하지는 않으며 버퍼에 있는 복제 데이터를 원격으로 지속 전달하는 것에 주력합니다. 그리고 혼잡상태에 대한 대응은 DRBD의 BSR의 혼잡정책에 맡깁니다.
혼잡(congestion)정책은 DRX의 버퍼가 혼잡상태에 진입할 경우 DRBD에서 BSR에서 대응하는 정책입니다. 혼잡정책을 설정하는 방법은 다음과 같습니다.
Code Block | ||
---|---|---|
| ||
resource r0 { proxy { memlimit 1G: # DRX 버퍼 } net { on-congestion pull-ahead; # 혼잡정책 설정(Ahead 모드) congestion-fill 950M; # 혼잡인지 시점 설정(950M 바이트 데이터가 버퍼링되는 시점을 혼잡시점으로 인지) } } |
DRBD의 BSR의 혼잡정책은 다음의 3가지이며 WAN 구간 비동기 복제 운영 시에는 Ahead 모드의 설정을 권장 합니다.
- block: 버퍼가 비워질 때 까지(버퍼에 큐잉할 수 있을 때까지) I/O 대기 합니다. 혼잡정책을 설정하지 않았을 때의 기본값 입니다.
- disconnect: 복제 연결을 단절하고 StandAlone 상태로 진입합니다.
- pull-ahead: 지연 복제 모드로 진입합니다. 이럴 경우 복제 연결은 유지하되 복제는 중단되고 로컬 I/O는 out-of-sync로 기록하되 혼잡상황이 해제될 시 기록됬던 out-of-sync 에 대한 재동기화를 수행합니다.
2.3.2. 버퍼 크기 조정
- DRBD의 BSR의 Ahead 모드(지연복제) 비동기 복제 구성을 전제로 합니다.
- 복제 연결이 유지되는 구간의 I/O 측정치에 대해서만 계측될 수 있도록 합니다. 복제연결 단절 구간에 대한 I/O 측정치는 고려대상이 아닙니다.
- 다음의 방법을 통해 DRBD가 BSR의 Ahead 모드로 진입하는 회수(혼잡 진입 회수)를 취합합니다.
- drbd 로그상의 BSR 로그상의 "Congestion-fill threshold reached" 의 출력 회수 취합
- drbdsetup bsrsetup events2 명령을 통한 Ahead 진입 회수 확인
- 취합한 혼잡진입 회수를 기준으로 버퍼 크기를 재조정합니다. 혼잡빈도가 잦은 경우 버퍼의 크기는 더욱 증설되어야 합니다.
- 버퍼를 증설 했음에도 혼잡구간이 빈도가 낮아지지 않을 경우 압축에 대해 고려합니다.
...