DRX 는 DRBD 구성파일과 DRX 자체 구성파일을 통해 구성합니다.
- DRX는 DRBD 의 구성파일을 그대로 사용할 수 있으며, 보통의 경우에 있어서 이미 구성된 DRBD 구성파일 내의 일부 설정을 수정하여 구성합니다.
- DRX의 자체 구동 속성을 지정하기 위해 drx.conf 파일을 정의 합니다.
4.1. 구성 파일
DRX는 DRBD 구성파일 내의 "proxy" 섹션에서 버퍼 크기를 설정하고 호스트 섹션 내의 "proxy on" 섹션에서 DRX IP 주소를 설정합니다. 압축,암호화 설정은 proxy 섹션내의 plugin 서브섹션에서 기술합니다.
DRX는 DRBD와 같은 시스템에 설치하는 로컬 구성방식과 별도 전용머신으로 운영하는 구성방식을 모두 제공합니다. 기본적으로 각 노드의 구성파일은 동일한 내용의 "drbd.conf" 파일을 이용합니다. 그러나 상황에 따라 DRBD 노드와 DRX 구성파일의 리소스명을 다르게 설정해야 하는 경우도 있기 때문에 절대적인 것은 아닙니다. 구성 파일 경로나 이름을 다르게 지정하려면, DRX 실행 옵션에서 "-c"를 사용하여 구성 파일의 위치를 직접 지정할 수도 있습니다.
DRX는 기존 DRBD 구성파일 내에 다음과 같이 Proxy 섹션과 Proxy on 섹션을 설정하여 DRBD와 연동 합니다. 하기 내용과 같이 1:1 복제 구성과 1:N 복제 구성 시 다소 차이가 있습니다.
1:1 구성
- Proxy 섹션
- memlimit
- plugin 섹션
- compressor [zlib | lzma | iqa] level [1~9]
- crypto openssl
- on [hostname] 섹션 내의 proxy on [ proxy on hostname ] 섹션
- inside [ proxy inside ip address]:[ port ]
- outside [ proxy inside ip address ]:[ port]
1:N 구성
- Proxy 섹션
- memlimit
- plugin 섹션
- compressor [zlib | lzma | iqa] level [1~9]
- crypto openssl
- connection 섹션 내의 host [ hostname] address [ host ip address ]:[port] via proxy on [proxy on hosname] 섹션
- inside [ proxy inside ip address]: [ port ]
- outside [ proxy inside ip address ]: [ port]
4.1.1. 로컬 구성
- node1 과 node2 같은 시스템 상에 DRX가 구동되는 설정으로 node1과 node2의 "drbd.conf"의 내용은 양 노드 동일합니다.
- 다음은 1:1 복제 구성과 1:2 복제 구성의 예입니다.
각각의 포트 정보는 방화벽에 의해 예외 처리 적용이 되어야 하며, 중복 사용되는 포트가 없도록 구성하는 것에 유의하십시오.
방식 | Windows 구성파일 | Linux 구성파일 | 비고 |
---|---|---|---|
1:1 복제 (2proxy) | drbd.conf resource r0 { device d minor 1; disk d; meta-disk f; net { protocol A; sndbuf-size 20M; on-congestion pull-ahead; congestion-fill 480M; } proxy { memlimit 500M; # DRX TX Buffer plugin { #compressor zlib level 1; #crypto openssl; } } on node1 { address 10.10.0.250:7789; node-id 0; proxy on node1 { inside 10.10.0.250:7790; outside 10.10.0.250:7791; } } on node2 { address 10.10.0.253:7789; node-id 1; proxy on node2 { inside 10.10.0.253:7790; outside 10.10.0.253:7791; } } } | drbd.conf resource r0 { device /dev/drbd1; disk /dev/sdb1; meta-disk internal; net { protocol A; sndbuf-size 10M; on-congestion pull-ahead; congestion-fill 480M; } proxy { memlimit 500M; # DRX TX Buffer plugin { #compressor zlib level 1; #crypto openssl; } } on node1 { address 100.100.10.31:7789; proxy on node1 { inside 100.100.10.31:7790; outside 100.100.10.31:7791; } } on node2 { address 100.100.10.41:7789; proxy on node2 { inside 100.100.100.41:7790; outside 100.100.100.41:7791; } } } | |
1:2 복제
| drbd.conf resource r2 { startup { wfc-timeout 3; } proxy { memlimit 500M; } net { protocol A; verify-alg crc32c; on-congestion pull-ahead; sndbuf-size 20M; congestion-fill 480M; } device e minor 2; disk e; meta-disk g "C:/r2_meta.vhd"; on node1 { node-id 1; } on node2 { node-id 2; } on node3 { node-id 3; } connection DR-node1-node3 { # DR 로 시작하고 노드간 구분자 = 로 표기 필요 host node1 address 100.100.100.9:6677 via proxy on node1 { inside 100.100.100.9:6678; outside 100.100.100.9:6679; } host node3 address 100.100.100.11:6677 via proxy on node3 { inside 100.100.100.11:6678; outside 100.100.100.11:6679; } } connection DR-node2-node3 { # DR 로 시작하고 노드간 구분자 = 로 표기 필요 host node2 address 100.100.100.10:6680 via proxy on node2 { inside 100.100.100.10:6681; outside 100.100.100.10:6682; } host node3 address 100.100.100.11:6680 via proxy on node3 { inside 100.100.100.11:6681; outside 100.100.100.11:6682; } } connection { host node1 address 10.20.25.9:6677; host node2 address 10.20.25.10:6677; } } | drbd.conf global { disable-ip-verification; usage-count no; } common { startup { wfc-timeout 3; } } resource r0 { protocol B; disk { on-io-error detach; } net { protocol A; verify-alg crc32c; on-congestion pull-ahead; sndbuf-size 10M; congestion-fill 80M; } on pr1 { device /dev/drbd0; disk /dev/sdb1; address 200.200.23.132:7799; meta-disk internal; } on pr2 { device /dev/drbd0; disk /dev/sdb1; address 200.200.23.137:7799; meta-disk internal; } } resource r0_1{ protocol A; meta-disk internal; device /dev/drbd10; proxy { memlimit 500M; } net { protocol A; verify-alg crc32c; on-congestion pull-ahead; sndbuf-size 10M; congestion-fill 450M; } stacked-on-top-of r0 { address 10.30.0.135:7788; proxy on pr1 pr2{ inside 10.30.0.135:7789; outside 10.30.0.135:7790; # mirror VIP } } on dd1 { address 10.30.0.199:7788; proxy on dd1 { inside 10.30.0.199:7789; outside 10.30.0.199:7790; #DR mirror IP } } } |
4.1.2. 전용 서버 구성
기본적으로 config는 양 노드, DRX 노드 모두 동일하게 구성하나, 전용서버의 특성상 이 기종 노드 즉 WDRBD 노드와 Linux DRBD 노드들을 모두 DRX에서 수용하려면 전용서버에 설치된 drbd-utils 의 특성에 맞게 DRX config를 수정할 필요가 있습니다.
절차는 하기 기술된 내용에 준하며 구성예제는 Linux 전용 머신을 기준으로 합니다.
- Windows 전용서버
- DRX 서버로 "drbdadm.exe" 파일 복사
- "drbdadm.exe" 파일이 있는 폴더의 상위 폴더에 etc 폴더를 생성
- cygwin.dll 파일을
- 생성한 etc 경로에서 "drbd.conf" 구성
- Linux 전용서버
- drbd-utils 설치
- etc 경로에 "drbd.conf" 구성
로컬 노드 | LAN | 로컬 DRX | WAN | 원격 DRX | LAN | 원격 노드 |
---|---|---|---|---|---|---|
Windows node r0 resource r0 { device d minor 1; disk d; meta-disk e; proxy { memlimit 1G; } net { protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on w12std-0 { node-id 0; } on w12std-1 { node-id 1; } connection win-r0 { host w12std-0 address 10.10.0.77:7789 via proxy on 74proxy1 { inside 10.10.0.115:7790; outside 10.10.0.115:7791; } host w12std-1 address 10.10.0.203:7789 via proxy on 74proxy2 { inside 10.10.0.102:7790; outside 10.10.0.102:7791; } } } | r0 resource r0 { device /dev/drbd001; # dummy disk /dev/sdb1; # dummy meta-disk /dev/sdc1; # dummy proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on w12std-0 { node-id 0; } on w12std-1 { node-id 1; } connection win-r0 { host w12std-0 address 10.10.0.77:7789 via proxy on 74proxy1 { inside 10.10.0.115:7790; outside 10.10.0.115:7791; } host w12std-1 address 10.10.0.203:7789 via proxy on 74proxy2 { inside 10.10.0.102:7790; outside 10.10.0.102:7791; } } } r1 resource r1 { device /dev/drbd001; disk /dev/sdb1; meta-disk /dev/sdc1; proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on cen74-1 { node-id 0; } on cen74-2 { node-id 1; } connection linux-r1 { host cen74-1 address 10.10.0.11:7792 via proxy on 74proxy1 { inside 10.10.0.115:7793; outside 10.10.0.115:7794; } host cen74-2 address 10.10.0.105:7792 via proxy on 74proxy2 { inside 10.10.0.102:7793; outside 10.10.0.102:7794; } } } | r0 resource r0 { device /dev/drbd001; # dummy disk /dev/sdb1; # dummy meta-disk /dev/sdc1; # dummy proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on w12std-0 { node-id 0; } on w12std-1 { node-id 1; } connection win-r0 { host w12std-0 address 10.10.0.77:7789 via proxy on 74proxy1 { inside 10.10.0.115:7790; outside 10.10.0.115:7791; } host w12std-1 address 10.10.0.203:7789 via proxy on 74proxy2 { inside 10.10.0.102:7790; outside 10.10.0.102:7791; } } } r1 resource r1 { device /dev/drbd001; disk /dev/sdb1; meta-disk /dev/sdc1; proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on cen74-1 { node-id 0; } on cen74-2 { node-id 1; } connection linux-r1 { host cen74-1 address 10.10.0.11:7792 via proxy on 74proxy1 { inside 10.10.0.115:7793; outside 10.10.0.115:7794; } host cen74-2 address 10.10.0.105:7792 via proxy on 74proxy2 { inside 10.10.0.102:7793; outside 10.10.0.102:7794; } } } | Windows node r0 resource r0 { device d minor 1; disk d; meta-disk e; proxy { memlimit 1G; } net { protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on w12std-0 { node-id 0; } on w12std-1 { node-id 1; } connection win-r0 { host w12std-0 address 10.10.0.77:7789 via proxy on 74proxy1 { inside 10.10.0.115:7790; outside 10.10.0.115:7791; } host w12std-1 address 10.10.0.203:7789 via proxy on 74proxy2 { inside 10.10.0.102:7790; outside 10.10.0.102:7791; } } } | |||
Linux node r1 resource r1 { device /dev/drbd0; disk /dev/sdb1; meta-disk /dev/sdc1; proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on cen74-1 { node-id 0; } on cen74-2 { node-id 1; } connection linux-r1 { host cen74-1 address 10.10.0.11:7792 via proxy on 74proxy1 { inside 10.10.0.115:7793; outside 10.10.0.115:7794; } host cen74-2 address 10.10.0.105:7792 via proxy on 74proxy2 { inside 10.10.0.102:7793; outside 10.10.0.102:7794; } } | Linux node r1 resource r1 { device /dev/drbd0; disk /dev/sdb1; meta-disk /dev/sdc1; proxy { memlimit 1G; } net{ protocol A; on-congestion pull-ahead; congestion-fill 950M; ping-timeout 30; } on cen74-1 { node-id 0; } on cen74-2 { node-id 1; } connection linux-r1 { host cen74-1 address 10.10.0.11:7792 via proxy on 74proxy1 { inside 10.10.0.115:7793; outside 10.10.0.115:7794; } host cen74-2 address 10.10.0.105:7792 via proxy on 74proxy2 { inside 10.10.0.102:7793; outside 10.10.0.102:7794; } } } |
4.2. 구성 절차
4.2.1. 로컬 구성
4.2.2. 전용 서버 구성
위의 절차에 따라 정상적으로 구성이 되었을 경우 DRBD와 DRX는 연결을 성립하고 복제를 시작합니다.
4.3. DRX 속성 파일 구성
DRX 속성 파일을 사용하면, DRBD 구성과는 별개로 DRX 내부 속성을 설정할 수 있습니다. 보통의 경우는 DRX 기본 설정으로 동작하기 때문에 속성파일을 제공할 필요가 없습니다.
이 속성은 DRX가 시작될 때 적용되고, DRX 속성 파일은 다음과 같이 생성하고 하기 속성표의 내용을 참고하여 작성합니다.
- 파일 이름: "drx.conf"
- 기본 위치: 설치한 경로와 동일
- 기타: 파일의 시작 부분에 "[global] section"을 지정해야 함
속성표
구분 | 속성 | 기본 값 | 설명 |
---|---|---|---|
기본 | lang | korean | DRX 언어 설정 파일
|
base-dir | DRX 설치 경로 | 로그 저장이나 언어 설정과 관련한 파일이 있는 디렉터리의 상위 디렉터리로 지정 (미지정 시 DRX를 설치한 경로로 자동 지정됨) | |
drbd-conf | Windows:
Linux:
| "drbd config"를 이용할 경우, 해당 파일의 경로 | |
connect-timeout | 3 | 연결, 리슨 동작에서 사용하는 타임아웃 값(단위: 초) (※ 네트워크 환경에 따라 연결 지연이 있을 수 있으므로 연결이 원활하지 않을 때 늘릴 것을 권장) | |
init-timeout | 10 | 원격 DRX와 연결 후, 초기화 패킷을 주고 받는 동안의 타임아웃 값(단위: 초) (※ 네트워크 환경에 따라 연결 지연이 있을 수 있으므로 연결이 원활하지 않을 때 늘릴 것을 권장) | |
bwlimit | 0 (disabled) | 송신 시 대역폭 제한 값 (수신 대역폭은 원격 DRX 의 bwlimit 값에 의해 제어) | |
loglevel-file | info | 파일로 저장되는 로그 레벨 지정
| |
ip-verification | on | off로 설정시 연결을 위해서 대기(Listen)하기위해 매칭(bind)하는 IP가 0.0.0.0(모든 IP 수신)으로 설정됩니다. | |
압축/암호화 | block-size | 63K | 압축/암호화시 사용할 block size |
bab-read-spin-counter | 10 | bab에서 read시 block size 보다 작을 경우 재시도 횟수 | |
bab-read-spin-delay | 10 | bab read 재시도시 delay 값 (ms) | |
min-raw-block-size | 1K | 압축/암호화 설정시에도 평문으로 보낼 minimum size | |
process-thread-count | -1 (auto) | 멀티쓰레드 패킷 처리시 사용할 쓰레드 개수. ※ 튜닝과 디버깅의 용도이므로 변경하는 것을 권장하지 않습니다. |
drx.conf 예제
drx.conf |
---|
# [global] lang=korean #drbd-conf=c:\program files\DRX\drbd.conf #connect-timeout=10 # log levels: debug < info < warn < err
|
- 압축/암호화의 전송 Buffer사이즈는 block-size값의 2배로 설정되며 최대 1M까지 설정된다.