환경


DRX 는 운영서버에 로컬로 설치할 경우 버퍼링에 필요한 충분한 물리 메모리 여유 공간을 필요로 합니다. 만약 물리 메모리 공간이 여유가 없을 경우 운영서버의 물리메모리 증설에 대해서도 고려해야 합니다.

그리고 압축기능을 사용할 경우 압축에 따른 CPU 부하가 운영서버 상에서 발생할 수 있음을 감안해야 합니다. 로컬 I/O의 부하가 크지 않고 압축에 따른 운영노드 성능저하가 미미하다면 상관이 없지만 압축 부하로 인해 로컬 시스템 전반의 성능에 영향을 주게 된다면 압축의 사용을 재고해야 합니다. 압축 부하는 로컬 I/O 부하의 약 20~30%의 추가 부하가 발생될 수 있으며 압축을 수행하는 DRX를 전용 머신으로 구성하여 운영환경과 분리 구성할 경우 압축에 따른 부하를 분산시킬 수 있습니다.

이러한 DRX의 운영정책은 로컬 I/O 부하에 대한 사전조사 데이터를 근거로 하여 수립되어야 하며 구성환경의 다음 항목들에 대한 사전조사를 통해 DRX가 구동하는데 적합한 사양과 버퍼 운영 정책 등을 결정해야 합니다.

사양

운영체제

  • Windows 2008 이상 64비트, Linux CentOS 6.4 이상, Ubuntu 12.04 LTS 이상 64비트 플랫폼을 지원합니다.

최소사양

  • 최소 1GHz 이상의 x86/x64 호환 프로세서(2GHz 이상 권장), 최소 4 core 이상 권장
  • 최소 4G 이상 물리메모리
  • 최소 10GB 용량 디스크

권장 메모리사양

DRX의 물리 메모리 사양은 리소스 개수와 최대I/O, 전송 대역폭에 따라 가변적입니다. 다음은 최대I/O 가 전송 대역폭보다 클 경우의 DRX의 물리메모리 사양에 대한 계산식 입니다.

  • 리소스 개수 * (평균 I/O(MB/s) - 대역폭(MB/s)) * I/O 지속시간 (초) + 압축/암호화 버퍼(2GB)

최대 I/O 가 대역폭에 비해 항상 낮다면 리소스 당 버퍼의 크기를 1GB 수준으로 계산하여 물리 메모리 사양을 결정합니다.

  • 리소스 개수 * 1GB + 압축/암호화 버퍼(2GB)

WAN 대역폭은 실질적으로는 보장 대역폭이 아닌 네트웍 상황에 따라 변동이 심한 가변대역의 특성을 가집니다. 통상 WAN 대역폭은 10~100Mbps 정도의 대역으로 간주하여 1MB/s ~10MB/s 로 추산하는 것이 버퍼링 관점에서 적당합니다. 또한 일정 기간 내에 측정한 최대 I/O가 복제 ��역폭보다 낮다고 해서 DRX 버퍼링을 고려하지 않는 것은 바람직 하지 않습니다. 운영환경의 애플리케이션의 특성에 따라 최대 I/O가 불특정 시점에 급등하는 상황이 있을 수 있기 때문에 이런 상황에 대비하여 DRX 버퍼에 여유공간을 두고 구성하는 것이 바람직 합니다. 

다음은 WAN 100Mbps 대역폭,  평균 100MB/s 로 30초간 I/O 가 지속됬을 경우에 대해 DRX가 버퍼링 할 수 있는 물리메모리 사양을 결정하는 예시 입니다.

I/O Load level리소스 개수시스템 메모리 BAB압축/암호화 버퍼최소 사양권장 사양

Normal speed 구성

(100MB/s)

12GB1 * (100MB-10MB) * 30초 = 2.7GB

2GB

(DRX 압축/암호화 버퍼: 최대 2GB)

6.7GB16GB
1010 * (100MB-10MB) * 30초 = 27GB31GB32GB
5050 * (100MB-10MB) * 30초 = 135GB139GB160GB
100100 * (100MB-10MB) * 30초 = 270GB274GB320GB

다음은 WAN 100Mbps 대역폭,  평균 500MB/s 로 30초간 I/O 가 지속됬을 경우에 대해 DRX가 버퍼링 할 수 있는 물리메모리 사양을 결정하는 예시 입니다.

I/O Load level리소스 개수시스템 메모리 BAB압축/암호화 버퍼최소 사양권장 사양

High speed 구성

(500MB/s)

12GB1 * (500MB-10MB) * 30초 = 14.7GB

2GB


18.7GB32GB
1010 * (500MB-10MB) * 30초 = 147GB151GB160GB
5050 * (500MB-10MB) * 30초 = 735GB739GB800GB
100100 * (500MB-10MB) * 30초 = 1.47TB1.49TB1.6TB

리소스 개수

메모리 자원이 허용하는 한도내에서 제한없이 구성할 수 있습니다. 최대 리소스를 100채널로 정하고 있으나 가용메모리의 상황에 따라 유동적일 수 있으며 운영해야 할 리소스 개수가 수십 채널 이상 될 경우 다수의 전용 DRX 노드에 대한 도입을 고려하는게 좋습니다.

서버 I/O 부하 사전 조사

다음의 절차를 통해 운영서버의 I/O 부하도를 측정합니다.

  • 운영서버 복제 대상 디스크의 읽기/쓰기 I/O 데이터 측정 (최소 1~4주 기간 내의 평균 I/O, 최대 I/O)
  • 측정 방법
    • Windows : 성능모니터 도구 이용 디스크 I/O 통계 데이터 취합
    • Linux: iostat 등 유틸리티 이용 디스크 I/O 통계 데이터 취합
  • 측정결과에 따라 버퍼 크기, 압축, 버퍼 운영 정책 고려

복제 대역

복제 대역은 최소 10Mbps~100Mbps 대역폭이 요구되며, 1Gbps 이상을 권장합니다.

  • 네트워크 회선을 통해 볼륨 I/O 양 산정

1Gbps(약 120MB/s) 대역의 경우 최대 전송 가용 대역은 약 80MB/s(70%) 로 가정하고, (초기) 동기화 대역을 30MB/s(약 1/3), 남은 50MB/s 를 가용 복제 대역으로 간주합니다. 볼륨이 2 개일 경우 볼륨 당 25MB/s 이내의 I/O 를 처리할 수 있습니다.

  • I/O 부하가 클 경우(압축 사용)

1Gbps의 경우, 최대 가용 대역 80MB, 동기화 대역을 10MB/s로 하향설정, 남은 70MB/s 에 압축(1.5배)를 하여 105MB/s 의 복제 대역을 산출 합니다. 볼륨이 2 개일 경우 볼륨 당 약 50MB/s 이내의 I/O 를 처리할 수 있습니다.



정책

운영환경의 I/O 부하도 및 압축 사용 여부에 따라 구성방식을 결정합니다. 로컬 구성 방식이 일반적이나 복제 부하가 크고 WAN 구간 가속이 필요할 경우 전용 구성 방식을 권장합니다.

버퍼 정책

  • 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 기준의 권장 버퍼 사양에 따라 구성 및 시범 운영을 한 후 버퍼 크기에 대한 튜닝 과정을 필요로 합니다.

만일 운영 노드의 I/O 부하가 과도하게 크고 최대 I/O 의 지속시간이 장시간(수분~수십분)에 걸쳐 발생되는 상황이라면 DRX 버퍼링으로도 감당하기 어려울 수 있습니다. 이럴 경우에는 데이터 압축에 대해 고려해야 합니다. 

BSR

혼잡 정책

혼잡상태란 복제부하가 가중되어 DRX의 버퍼에 여유 공간이 남아 있지 않아 버퍼링이 불가한 상태를 의미합니다. 이럴 경우 DRX는 어떤 특별한 동작을 수행하지는 않으며 버퍼에 있는 복제 데이터를 원격으로 지속 전달하는 것에 주력합니다. 그리고 혼잡상태에 대한 대응은 BSR의 혼잡정책에 맡깁니다.

혼잡(congestion)정책은 DRX의 버퍼가 혼잡상태에 진입할 경우 BSR에서 대응하는 정책입니다. 혼잡정책을 설정하는 방법은 다음과 같습니다.

drbd.conf
resource r0 {
	proxy {
		memlimit 1G: # DRX 버퍼
	}
	net {
		on-congestion pull-ahead; # 혼잡정책 설정(Ahead 모드)
		congestion-fill 950M; # 혼잡인지 시점 설정(950M 바이트 데이터가 버퍼링되는 시점을 혼잡시점으로 인지)
	}
}

BSR의 혼잡정책은 다음의 3가지이며 WAN 구간 비동기 복제 운영 시에는 Ahead 모드의 설정을 권장 합니다.

  • block: 버퍼가 비워질 때 까지(버퍼에 큐잉할 수 있을 때까지) I/O 대기 합니다. 혼잡정책을 설정하지 않았을 때의 기본값 입니다.
  • disconnect: 복제 연결을 단절하고 StandAlone 상태로 진입합니다. 
  • pull-ahead: 지연 복제 모드로 진입합니다. 이럴 경우 복제 연결은 유지하되 복제는 중단되고 로컬 I/O는 out-of-sync로 기록하되 혼잡상황이 해제될 시 기록됬던 out-of-sync 에 대한 재동기화를 수행합니다.

버퍼 크기 지정

  • BSR 연동의 경우 Ahead 모드(지연복제), 비동기 복제 구성을 전제로 합니다.
  • 복제 연결이 유지되는 측정 구간에 대해서만 계측될 수 있도록 합니다. 연결 단절 구간에 대한 I/O 측정치는 고려대상이 아닙니다.
  • 다음의 방법을 통해 BSR의 Ahead 모드로 진입하는 회수(혼잡 진입 회수)를 취합합니다.
    • BSR 로그상의 "Congestion-fill threshold reached" 의 출력 회수 취합
    • bsrsetup events2 명령을 통한 Ahead 진입 회수 확인
  • 취합한 혼잡진입 회수를 기준으로 버퍼 크기를 재조정합니다. 혼잡빈도가 잦은 경우 버퍼의 크기는 더욱 증설되어야 합니다.
  • 버퍼를 증설 했음에도 혼잡구간이 빈도가 낮아지지 않을 경우 압축에 대해 고려합니다.

FSR

FSR 은 DRX의 버퍼 크기만 지정하면 됩니다. 혼잡모드는 지원하지 않으므로 설��하지 않습니다. DRX 버퍼로 버퍼링을 수행하다가 버퍼가 다 차면 즉시 버퍼를 비우고 동기화 상태로 자동 이행합니다. 

버퍼의 크기를 지정할 때에는 BSR 의 버퍼 정책을 참고하여 버퍼 운영 기준을 세우고 그에 따른 크기 지정만 고려하면 됩니다. 메모리가 허용하는 한도 내에서 통상 수 GB 수준에서 버퍼를 지정하면 됩니다.