DRX 1.1.x User's Guide

1. 개요 

1.1. 사용 목적

DRX(Data Replication Xcelerator)는 WAN 구간(원거리) 데이터 복제를 위한 DRBD 연동 프록시 솔루션 입니다.

DRBD의 비동기 방식(A type) 복제는 기본적으로 동기 방식에 비해 로컬 I/O 응답 성능이 좋습니다. 그러나 비동기 복제는 복제 데이터를 원격으로 전송한 시점에 복제를 수행한 것으로 간주하고 로컬 I/O 를 완료하기 때문에 데이터 전송의 성공 여부에 따라 로컬 I/O 응답성능에 영향이 있을 수 있습니다. 만약 송신버퍼에 여유공간이 없어서 TCP 소켓 버퍼로 데이터 복사가 지연되면 로컬 I/O의 대기(block)가 발생하게 됩니다. 즉, 송신 버퍼의 크기와 버퍼의 여유공간이 로컬 I/O 응답성능에 영향을 주게 됩니다. 일반적으로 TCP 소켓 송신 버퍼는 제한된 크기를 가지기 때문에 소켓 버퍼의 여유공간은 다량의 복제 데이터를 처리하기에는 상시 부족하며 따라서 로컬 I/O 쓰기 요청이 급격히 발생하게 되면 복제가 동반된 로컬 I/O의 응답성능 저하는 피하기 어렵습니다. 이러한 I/O 응답성능 저하 문제는 DRX의 버퍼링 메커니즘을 사용하여 극복할 수 있습니다. 

DRX는 DRBD 송신부와 TCP 소켓 채널을 직접 연결하여 Primary 노드의 변경된 데이터를 즉시 수용하고 DRX 내부에서 버퍼링함으로써 로컬 I/O가 대기하는 문제를 해소하고 로컬 응용프로그램의 쓰기 성능저하 현상을 큰폭으로 개선합니다.

DRX의 버퍼링은 시스템이 제공하는 메모리 아키텍처 상의 주소 공간과 사용 가능한 실제 물리메모리의 한도 내에서 자유롭게 구성할 수 있습니다. 만약 DRX의 버퍼 크기를 초과하는 데이터를 수용해야 하는 혼잡(full)상황에 이를 경우 DRX는 이에 대해 능동적으로 처리하지 않기 때문에 DRBD 가 스스로 혼잡을 인지하고 지연복제(Ahead mode)로 구동할 수 있도록 설정해야 합니다. 통상 DRX 와 DRBD를 연동할 경우 지연복제 모드를 기본구성으로 하는 것은 필수적입니다.

또한 DRX는 원격지 데이터의 가용성 증대를 위해 데이터 가속(압축)기능을 제공하여 타겟 RPO(Recovery Point Objective)를 큰 폭으로 개선할 수 있습니다. 그리고 원거리 복제의 특성상 고객의 중요 데이터가 WAN 구간을 경유하여 노출되는 상황에 대비할 수 있도록 데이터 암호화 기능을 동시에 제공합니다.

다음 그림은 DRX와 DRBD 간 버퍼링 연동 모습입니다.


  • DRX 버퍼링은 WAN 구간을 경유하기 이전 시점에 로컬 DRX로 부터 수행되며 원격 DRX에선 버퍼링 할 필요가 없습니다.

1.2. 고려 사항

DRX는 DRBD를 설치한 시스템에서 동작하거나 전용 서버에 설치하여 동작합니다. 또한 DRX 인스턴스는 여러 노드에 분산된 DRBD 디바이스에 프록시 역할을 할 수 있습니다. 일반적으로 송신 시점에 데이터 패킷이 몰릴 경우를 대비하여 DRBD의 Activity Log를 충분한 용량으로 미리 설정해야 합니다. 만약 송신 시점에 과도한 데이터 패킷이 처리되는 도중 Primary 노드가 손상되어 Primary 노드가 재 기동 된다면 다량의 Activity Log가 OOS로 설정되어 장시간 동안 재 동기화 될 수 있습니다. 이러한 장시간 동기화가 발생하는 게 우려된다면 DRBD의 csums-alg 설정을 활성화하는 것이 좋습니다.

1.3. 지원 플랫폼

플랫폼OS 버전
WindowsWindows 2008 이상 64비트
LinuxCentOS 6.4 이상 64비트


2. DRX 네트워크

DRX는 다음과 같은 다양한 구성이 가능합니다.


  • 한 시스템에서 DRBD와 DRX를 모두 설치하여 운영합니다.
  • DRX 전용머신을 통해 운영합니다.
  • 하나의 DRX 전용서버를 경유하여 여러 DRBD 리소스를 운영합니다.

3. 설치

DRX 는 운영머신에 DRBD 가 이미 설치된 경우 DRX 패키지만 추가로 설치하면 됩니다. 그러나 DRX 전용서버로 별도 구성할 경우 DRX 패키지와 더불어 DRBD 유틸리티를 부가적으로 설치해야 하며 HW 압축을 사용할 경우 QAT 라이브러리에 대한 설치가 요구됩니다.

플랫폼로컬형전용서버비고
Linuxdrbd-utils 버전: 8.9.x
Windows
  • Windows DRBD 설치
  • DRX 설치: 3.2 Windows 설치 참고
  • DRX 설치: 3.2 Windows 설치 참고
  • drbd-uitls(wdrbd-drbd-utils-x64-1_5_2) 설치
    • DRX 설치경로(c:\Program Files\drx\bin)로 직접 복사


3.1. Linux 설치

설치는 Shell Script 설치와 GUI 기반의 자동설치를 지원하고 수동으로 직접 설치할 수도 있습니다. 자동 설치 시 기본 설치 위치는 "/opt/DRX" 경로이며 해당 경로에 DRX 라이선스 파일이 위치해야 합니다.

3.1.1. Linux 서비스 자동 설치 - Shell Script 설치

다음은 Shell Script 설치할 때 화면 출력입니다.

[root@node1 opt]# sh DRX_Centos-x64_1_1-A7.sh -c
Unpacking JRE ...
Preparing JRE ...
Starting Installer ...
Please select a language:
1: English [Enter]
2: Korean
[1 - 2]

3.1.2. Linux 서비스 자동 설치 - GUI 설치

DRX 설치파일을 직접 실행하여 GUI 방식 설치를 합니다. 설치한 다음 새 명령창을 열어서 다음 순서대로 DRX를 구축합니다(설치를 마친 다음, 새로운 명령 라인으로 수행해야 합니다).

                                                                                             



3.1.3. Linux 서비스 수동 설치

서비스를 데몬 서비스로 설정하여 시스템을 재시작 하면 자동으로 DRX 서비스가 시작됩니다.(서비스에 대한 자동시작은 systemctl 또는 chkconfig를 통해 구성할 수 있습니다.) 설치가 끝나면 DRX 서비스가 등록되지만, 설치 경로에 DRX 라이선스가 없을 경우 DRX가 시작되지 않습니다. 이럴 경우 라이선스 파일을 설치경로에 복사하고 서비스를 다음의 명령을 통해 수동 시작하십시요. 

  • 서비스 실행
# Centos7 
[root@node1 ~]# systemctl start drxsvc
# Centos6
[root@node1 ~]# service drxsvc start 


  • 서비스 중지
# Centos7 
[root@node1 ~]# systemctl stop drxsvc
# Centos6
[root@node1 ~]# service drxsvc stop


  • 삭제
[root@node1 ~ ]# /opt/DRX/uninstall


3.1.4. Linux DRX 와치독

Linux DRX는 DRX 서비스의 관리를 위해 DRX 와치독을 함께 구동하며 다음과 같은 상황에서 동작합니다.

  • DRX 프로세스가 예기치 않게 종료된 경우
  • 리눅스에서 "drx-ctl -c shutdown" 명령어를 사용하여 DRX 종료시킨 경우 

위 동작의 과정은 "DRX_HOME/logs/service.log" 로그에서 확인할 수 있으며 리눅스에서 DRX를 완전히 종료시키고자 할 경우에는 다음과 같은 명령으로 수행해야 합니다.

CentOS6: service drxsvc [start/stop] 
CentOS7: systemctl [start/stop] drxsvc


3.2. Windows 설치


3.2.1. DRX Windows 서비스 자동 설치

인스톨러를 사용하여 설치하면 DRX 서비스는 시스템 기동 시 자동 시작 되도록 Windows 서비스에 등록 됩니다.

3.2.2. DRX Windows 서비스 수동 설치

다음 명령을 이용하여 DRX 서비스를 직접구축 할 수 있습니다.

  • drxsvc /i: Drx 서비스 설치

  • drxsvc /u: Drx 서비스 제거

  • drxsvc /s:  Drx 서비스 시작

  • drxsvc /t:  Drx 서비스 종료

3.2.3. Widnows DRX 와치독

Widnows DRX는 DRX 서비스의 관리를 위해 DRX 와치독을 함께 구동하고 DRX 프로세스의 이상 종료를 감지하면 DRX를 재기동 시키는 역할을 합니다.

4. 삭제

4.1. Windows 삭제

제어판 → 프로그램 → 프로그램 제거 및 변경 창에서 DRX 삭제하거나 설치 경로에 제공되는 "uninstall.exe" 명령으로 삭제합니다.

4.2. Linux 삭제

설치 경로에 제공되는 "uninstall.exe" 명령으로 삭제합니다. 

DRX를 삭제 하더라도 로그와 설정 파일 및 라이선스 파일은 유지됩니다.


5. 라이선스

DRX를 운영하려면 라이선스 파일이 필요합니다.

  • 파일 이름: "drx.lic"
  • DRX를 설치한 경로에 라이선스 파일을 복사해야 합니다.

라이선스 관련 문의 사항은 맨텍에 문의하시기 바랍니다.


6. 구성


6.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 구성

  • on <host-name> 섹션
    • address <host ip address:port>
    • proxy on <proxy on host-name> 섹션
      • inside <proxy inside ip address:port>
      • outside <proxy outside ip address:port>
  • Proxy 섹션
    • memlimit
    • plugin 섹션
      • compressor <zlib | lzma | iqa> level <1~9>
      • crypto openssl

1:N 구성

  • connection 섹션
    • host <host-name> address <host ip address:port> via proxy on <proxy on host-name> 섹션
      • inside <proxy inside ip address:port>
      • outside <proxy outside ip address:port>
  • Proxy 섹션
    • memlimit
    • plugin 섹션
      • compressor <zlib | lzma | iqa> level <1~9>
      • crypto openssl

6.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;
		ping-timeout 30;
    }

	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;
		ping-timeout 30;
    }

	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 복제

  • Windows: MDR 구성
  • Linux: stacked 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;
      ping-timeout 30;
  }

  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 {
       disk {
               on-io-error detach;
       }
       net {
              protocol A;
              verify-alg crc32c;
              on-congestion pull-ahead; 
              sndbuf-size 10M;
              congestion-fill 80M;
              ping-timeout 30;
       }
       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{
       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;
              ping-timeout 30;
       }
       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
               }
       }
}

6.1.2. 전용 서버 구성

기본적으로 config는 양 노드, DRX 노드 모두 동일하게 구성하나, 전용서버의 특성상 이 기종 노드 즉 WDRBD 노드와 Linux DRBD 노드들을 모두 DRX에서 수용하려면 전용서버에 설치된 drbd-utils 의 특성에 맞게 DRX config를 수정할 필요가 있습니다.

절차는 하기 기술된 내용에 준하며 구성예제는 Linux 전용 머신을 기준으로 합니다.

  • Windows 전용서버
    1. DRX 서버로 "drbdadm.exe" 파일 복사
    2. "drbdadm.exe" 파일이 있는 폴더의 상위 폴더에 etc 폴더를 생성
    3. cygwin.dll 파일을 
    4. 생성한 etc 경로에서 "drbd.conf" 구성
  • Linux 전용서버
    1. drbd-utils 설치
    2. 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;
		}
	}
}


6.2. 구성 절차

6.2.1. 로컬 구성 


초기 구성

Linux
  1. DRX 관련 설정을 "drbd config" 파일에 작성
  2. DRX를 설치 
  3. DRX를 설치한 디렉터리에 라이선스 파일(drx.lic)을 복사
  4. CentOS 버전에 맞게 다음 명령어 중 하나를 사용하여 DRX 서비스를 실행

    CentOS 6
    service drxsvc start
    CentOS 7
    systemctl start drxsvc
Windows
  1. DRX 관련 설정을 "drbd config" 파일에 작성
  2. DRX를 설치
  3. DRX를 설치한 디렉터리에 라이선스 파일(drx.lic)을 복사
  4. 다음 명령어를 사용하여 DRX를 재시작

    DRX 종료
    sc stop drxsvc
    DRX 재시작
    sc start drxsvc


설정 변경

Linux
  1. 새롭게 작성된 "drbd.conf" 또는 "drx.conf" 파일을 기존 설정 파일과 교체
  2. 명령어 "drbdadm down"으로 리소스 종료 
  3. 명령어 "drbdadm up"으로 리소스 시작 
  4. 다음 명령어를 사용하여 DRX 종료 

    CentOS 6
    service drxsvc stop
    CentOS 7
    systemctl stop drxsvc
  5. OS별로 다음 명령어를 사용하여 DRX 재시작 

    CentOS 6
    service drxsvc start
    CentOS 7
    systemctl start drxsvc
Windows
  1. 새롭게 작성된 "drbd.conf" 또는 "drx.conf" 파일을 기존 설정 파일과 교체
  2. 명령어 "drbdadm down"으로 리소스 종료 
  3. 명령어 "drbdadm up"으로 리소스 시작 
  4. 다음 명령어를 사용하여 DRX 종료 

Windows
sc stop drxsvc
Windows
sc start drxsvc



6.2.2. 전용 서버 구성


초기 구성

Linux
  1. 시스템에 "drbd util" 설치
  2. DRX 설치
  3. DRX 설치 디렉터리에 라이선스 파일 복사(drx.lic)
  4. DRBD가 구성된 시스템에서 DRBD 설정 파일(drbd.conf, *.res)을 복사해 DRX가 설치된 시스템의 DRBD /etc 경로로 복사 : DRBD 구성파일과, DRX 구성파일 내용 일치 확인
    1. DRX 가 다수의 노드에 대한 다중 복제 세션을 처리하는 경우에는 다중리소스 형태로 각 노드들의 리소스 파일을 관리하도록 필요.
  5. CentOS 버전에 맞게 다음 명령어 중 하나를 사용하여 DRX 서비스를 실행 

    CentOS 6
    service drxsvc start
    CentOS 7
    systemctl start drxsvc
Windows
  1. 시스템에 "drbd util" 설치
  2. DRX 설치
  3. DRX 설치 디렉터리에 라이선스 파일 복사(drx.lic)
  4. DRBD가 구성된 시스템에서 DRBD 설정 파일(drbd.conf, *.res)을 복사해 DRX가 설치된 시스템의 DRBD /etc 경로로 복사 : DRBD 구성파일과, DRX 구성파일 내용 일치 확인
    1. DRX 가 다수의 노드에 대한 다중 복제 세션을 처리하는 경우에는 다중리소스 형태로 각 노드들의 리소스 파일을 관리하도록 필요.
  5. DRX 서비스를 실행 

DRX 종료
sc stop drxsvc
DRX 종료
sc start drxsvc


설정 변경

6.2.1 설정 변경 동일 절차


위의 절차에 따라 정상적으로 구성이 되었을 경우 DRBD와 DRX는 연결을 성립하고 복제를 시작합니다.


6.3. DRX 속성 파일 구성

DRX 속성 파일을 사용하면, DRBD 구성과는 별개로 DRX 내부 속성을 설정할 수 있습니다. 보통의 경우는 DRX 기본 설정으로 동작하기 때문에 속성파일을 제공할 필요가 없습니다.

이 속성은 DRX가 시작될 때 적용되고, DRX 속성 파일은 다음과 같이 생성하고 하기 속성표의 내용을 참고하여 작성합니다.

  • 파일 이름: "drx.conf"
  • 기본 위치: 설치한 경로와 동일
  • 기타: 파일의 시작 부분에 "[global]  section"을 지정해야 함

속성표

구분속성기본 값설명
기본langkorean DRX 언어 설정 파일
  • 환경설정의 "base-dir/lang"에 위치(미지정 시 실행파일 하부에 위치)
  • "korean.ini"나 "english.ini" 등과 같은 방법으로 파일 생성(utf8 파일)
    예)"korean.ini" 설정
base-dir

DRX 설치 경로

로그 저장이나 언어 설정과 관련한 파일이 있는 디렉터리의 상위 디렉터리로 지정

(미지정 시 DRX를 설치한 경로로 자동 지정됨)

drbd-conf

Windows:

  • ../etc/drbd.conf

Linux:

  • /etc/drbd.conf
"drbd config"를 이용할 경우, 해당 파일의 경로
connect-timeout10

원격 DRX와 연결 후, 초기화 패킷을 주고 받는 동안의 타임아웃 값(단위: 초)

(※ 네트워크 환경에 따라 연결 지연이 있을 수 있으므로 연결이 원활하지 않을 때 늘릴 것을 권장)

bwlimit0 (disabled)송신 시 대역폭 제한 값 (수신 대역폭은 원격 DRX 의 bwlimit 값에 의해 제어)
loglevel-fileinfo

파일로 저장되는 로그 레벨 지정

  • 위치: 설치 경로의 logs 폴더에 저장
ip-verificationon

off로 설정시 연결을 위해서 대기(Listen)하기위해 매칭(bind)하는 IP가 0.0.0.0(모든 IP 수신)으로 설정됩니다.

압축/암호화block-size63K압축/암호화시 사용할 block size

bab-read-spin-counter10bab에서 read시 block size 보다 작을 경우 재시도 횟수

bab-read-spin-delay10bab read 재시도시 delay 값 (ms)

min-raw-block-size1K압축/암호화 설정시에도 평문으로 보낼 minimum size

process-thread-count-1 (auto)

멀티쓰레드 패킷 처리시 사용할 쓰레드 개수. 

※ 튜닝과 디버깅의 용도이므로 변경하는 것을 권장하지 않습니다. 


drx.conf 예제

drx.conf

#
# DRX properties
#

[global]

lang=korean
drx_path=./

#drbd-conf=c:\program files\DRX\drbd.conf

#connect-timeout=10

# log levels: debug < info < warn < err 
loglevel-file=info


block-size=1M # 압축/암호화시 사용할 block size (기본 63K)
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


  • 압축/암호화의 전송 Buffer사이즈는 block-size값의 2배로 설정되며 최대 1M까지 설정된다. 


7. 관리 명령


DRX는 "drx-ctl" 명령어로 관리합니다.

  • "drbd proxy" 호환 명령어 중 "show" 계열의 명령과 "print statistics" 계열의 명령어를 제공합니다.
  • "add", "del", "set" 등과 같은 설정 명령들은 제공하지 않으며 drbd.config 구성 파일을 통해서만 관련 설정할 수 있습니다.


7.1. 명령어

다음은 명령 목록입니다. 

drx-ctl show 

현재 구성된 리소스의 정보와 상태를 출력합니다.

C:\Users\sekim>drx-ctl show
Command id (4) : show
================================================================================================================================================================================
Name                             Type   Status         local-drbd-ip            listen-lan-ip            local-drx-wan-ip         remote-drx-ip            Up since
================================================================================================================================================================================
active-standby-x64-pas1-x64-act data   established    10.10.0.250:7789         10.10.0.250:7790         10.10.0.250:7791         10.10.0.251:7791         2018-08-21 09:29:11
active-standby-x64-pas1-x64-act meta   established    10.10.0.250:7789         10.10.0.250:7790         10.10.0.250:7791         10.10.0.251:7791         -
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 All connections : 2


  • Name: 연결 이름
  • type: data or meta
  • Status: 연결 상태
    • stopped: 기동 중지 상태
    • stopping: 기동 중지 중
    • waiting: 연결을 대기 중
    • connecting: 로컬 스트림과 연결 중
    • bridging: 로컬 DRX와 원격 DRX가 연결을 시작하는 상태
    • bridged: 로컬 DRX와 원격 DRX가 연결된 상태
    • connected: 로컬 DRX와 로컬 DRBD 연결된 상태
    • establishing: 로컬 DRX와 원격 DRX 연결, 로컬 DRBD 연결된 상태
    • established: 로컬 DRX와 원격 DRX 연결, 로컬 DRBD 원격 DRBD 모두 연결된 상태 (복제 기동 상태)
  • local-drbd-ip: drbd 연결 IP
  • listen-lan-ip: DRX 에서 listen하는 로컬 IP
  • local-drx-wan-ip: DRX 에서 원격 수신 대기하는 IP
  • remote-drx-ip: DRX 에서 원격으로 연결하는 IP
  • up since: drbd/drx 기동 시작 시간.


drx-ctl show  states

현재 구성된 리소스의 상세 연결 상태를 출력합니다.

C:\Users\sekim>drx-ctl show states
Command id (4) : show states
=========================================================================================================================================================
Name                           Type local-drbd-ip         State          local-drx-ip                                State          remote-drx-ip
=========================================================================================================================================================
p-s-drxdev1-DESKTOP-L141PH6    data 192.168.35.112:7789   -established-> 192.168.35.1:7790/192.168.35.1:7791         <-bridged----- 192.168.35.101:7791
p-s-drxdev1-DESKTOP-L141PH6    meta 192.168.35.112:7789   <-established- 192.168.35.1:7790/192.168.35.1:7791         -----bridged-> 192.168.35.101:7791
---------------------------------------------------------------------------------------------------------------------------------------------------------
 All connections : 2, Established : 2


  • Name: 연결 이름
  • Type: data or meta
  • State: 연결 상태. (화살표: 연결 방향)
    • bridging: 로컬 DRX와 원격 DRX가 연결을 시작하는 상태
    • bridged: 로컬 DRX와 원격 DRX가 연결된 상태
    • stopped: 기동 중지 상태
    • stopping: 기동 중지 중
    • waiting: 연결을 대기 중
    • connecting: 로컬 스트림과 연결 중
    • connected: 로컬 DRX와 로컬 DRBD 연결된 상태
    • establishing: 로컬 DRX와 원격 DRX 연결, 로컬 DRBD 연결된 상태
    • established: 로컬 DRX와 원격 DRX 연결, 로컬 DRBD 원격 DRBD 모두 연결된 상태 (복제 기동 상태)
  • local-drbd-ip: drbd 연결 IP
  • local-drx-ip: DRX의 IP
  • remote-drx-ip: DRX 에서 원격으로 연결하는 IP


drx-ctl show memusage

현재 연결된 세션의 메모리 사용량을 표시합니다.

C:\Users\sekim>drx-ctl show memusage
Command : show memusage
================================================================================================================================================
Name                             Capacity                   Begin            End              Size                       Full Counts      Use
================================================================================================================================================
r0-2008r2-x64-pas1-2008r2-x64-act 1073741824 (1.00 GB)       829              829              0 (0.00 B)                 0                0 %
                                  10485760 (10.00MB)         0                0                0 (0.00 B)                 -                0 %
------------------------------------------------------------------------------------------------------------------------------------------------
 Active bab counts : 1
-------------------------------------------------------------------------------------------------------------
name                              Latency              cur              avg              max              min
=============================================================================================================
r0-2008r2-x64-pas1-2008r2-x64-act  TX BAB  00:00:00.105064  00:00:00.104454  00:00:00.105833  00:00:00.102081
                                   RX BAB  00:00:00.000000  00:00:00.000000  00:00:00.000000  00:00:00.000000
                                 Compress  00:00:00.000038  00:00:00.000068  00:00:00.000120  00:00:00.000038
                               Decompress  00:00:00.000019  00:00:00.000037  00:00:00.000063  00:00:00.000019
-------------------------------------------------------------------------------------------------------------


  • Name: 연결 이름
  • Capacity: 버퍼링에 사용되는 메모리 크기
  • Begin: 현재 운용 중인 링버퍼의 메모리 시작 지점 오프셋
  • End: 현재 운용 중인 링버퍼의 메모리 마지막 지점 오프셋
  • Size: 현재 버퍼링에 사용되고 있는 메모리 크기
  • Full Counts: 버퍼 혼잡상태 진입 횟수
  • Use: 전체 버퍼링 메모리 대비 현재 사용량 비율(%)
  • Latency: BAB/압축/해제 지연시간 통계
    • Cur: 현재 Latency
    • avg: 평균 Latency
    • max: 최대 Latency
    • min: 최소 Latency


drx-ctl show connections

현재 연결된 DRBD 리소스 단위의 상태를 보여줍니다. 

C:\Users\sekim>drx-ctl show connections
Command : show connections
======================================================================================================================================================================================
Name                             Type     TX.raw         TX.net         TX.Ratio       Tx.Speed       RX.raw         RX.net         RX.Ratio       RX.Speed       Up since
======================================================================================================================================================================================
r0-2008r2-x64-pas1-2008r2-x64-act meta     18.54 GB       36.23 MB       52,416 %       27.00 B        51.36 KB       85.71 KB       59 %           27.00 B        2017-08-17 17:48:40
r0-2008r2-x64-pas1-2008r2-x64-act data     305.84 KB      412.21 KB      74 %           0.00 B         1.75 MB        2.55 MB        68 %           0.00 B         2017-08-21 09:18:58
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Active connections : 2


  • Name: 연결 이름
  • TX.raw: 원격으로 전송할 패킷 양
  • TX.net:원격으로 전송한 패킷 양 (압축/암호화 시 TX.raw 와 구분)
  • TX.ratio: 압축 시 TX 압축 효율
  • TX.speed: TX 전송 속도
  • RX.raw: 로컬로 전송할 패킷 양
  • RX.net: 로컬로 전송한 패킷 양 (압축/암호화 시 RX.raw 와 구분)
  • RX.ratio: 압축 시 RX 압축 효율
  • RX.speed: RX 전송 속도
  • Up since: 연결 시간


drx-ctl print statistics 

현재 연결된 세션의 상세 정보가 분석 가능한 형식으로 출력됩니다. 

C:\Users\sekim>drx-ctl print statistics
Command : print statistics
================================================================================
 Name : r0-2008r2-x64-pas1-2008r2-x64-act
================================================================================
   * options
      memlimit: 1.00 GB
      bwlimit: 0.00 B
      bab-read-spin-counter: 10
      block-size: 64512 (63.00 KB)
      bab-read-spin-delay: 10
      min-raw-block-size: 0
      compressor: ZLIB level: 9
      crypto: OPENSSL
      crypto-key-file:
   * available plugins
      ZLIB
      LZMA
      OPENSSL
   ----------------------------------------
   * session
      drbd stream type: data
      connected: 2017-08-17 17:48:40
      up time: 1 mins 40 secs
      status: established
      * tx
       raw packets: 6.28 GB
       net packets: 12.24 MB
       speed: 0.00 B
       * compress ratio
          average: 1.79152
          best: 20.3922
          worst: 1.05263
       * compress time
          counts: 104555
          average: 00:00:00
          max: 00:00:00.015601
          min: 00:00:00
       * encrypt time
          counts: 104555
          average: 00:00:00
          max: 00:00:00.015601
          min: 00:00:00
      * rx
       raw packets: 725.00 B
       net packets: 262.00 B
       speed: 0.00 B
       * decompress time
          counts: 2
          average: 00:00:00
          max: 00:00:00
          min: 00:00:00
       * decrypt time
          counts: 2
          average: 00:00:00
          max: 00:00:00
          min: 00:00:00
   ----------------------------------------


  • Name: 연결 이름 
    • options: drx 설정 옵션
    • avaliable plugins: 사용가능한 압축,암호화 플러그인
    • session : 세션 정보
      • tx or rx : 전송/수신 관련 상세(압축,암호화) 정보
      • compress ratio: 압축률. (원본 크기 ÷ 압축된 크기)


drx-ctl set bwlimit <channel name> <bwlimit-in-bytes>

DRX 운영 중 리소스별 대역폭 제한 기능을 지원합니다. 지정된 대역폭 내에서 데이터를 송신하기 때문에 DRX가 사용하는 네트워크 대역폭을 제한할 수 있습니다. 기본값은 0 이며 대역폭이 제한되지 않음을 의미합니다.

<channel name> 은 DRX 내부적으로 사용하는 연결 채널명을 지정해야 합니다. 이 채널명은 drx-ctl show 명령을 통해 구할 수 있습니다.

C:\Users\sekim>drx-ctl show
Command : show
==============================================================================================================================================================================================
Name                             Type   Status         listen-lan-ip         remote-drx-ip          local-drx-wan-ip       local-drbd-ip               Up since
==============================================================================================================================================================================================
active-standby-2008r2-x64-pas1-2008r2-x64-act data   established    10.10.0.245:7790         10.10.0.246:7791         10.10.0.245:7791         10.10.0.245:7789         2018-02-07 13:08:51
active-standby-2008r2-x64-pas1-2008r2-x64-act meta   established    10.10.0.245:7790         10.10.0.246:7791         10.10.0.245:7791         10.10.0.245:7789         2018-02-07 13:08:50
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
All connections : 2

C:\Users\sekim>drx-ctl set bwlimit active-standby-2008r2-x64-pas1-2008r2-x64-act 10MB
Command : set bwlimit active-standby-2008r2-x64-pas1-2008r2-x64-act 10MB
Result: done.



proxy {
     bwlimit 2M;
}

위의 예는 set bwlimit 명령을 사용하지 않고 drbd.conf 의 설정을 통해 대역폭을 초당 약 2MiB로 제한하도록 합니다.


drx-ctl shutdown 

DRX를 종료합니다. 그러나 DRX 와치독에 의해 자동 재기동하게 되므로 DRX 를 재시작 하는 기능으로도 사용됩니다.



8. 로그

8.1. 저장 방식

DRX의 로그는 다음과 같은 저장 방식을 제공합니다.

  • 파일

8.2. 로그 설정

로그 설정은 "drx.conf" 파일에 지정하거나 "drx-ctl" 명령으로 적용할 수 있습니다.

  • drx-ctl -c set loglevel-file <level>

로그 수준은 다음과 같습니다.

  • debug < info < warn < err < none
  • none은 로그를 사용하지 않겠다는 의미입니다.


9. 명령어 옵션

자세한 명령어 세트는 다음을 참조하십시오.

drx 

옵션

설명

기본값

-f

포그라운드로 DRX 시작

-f

-c

구성 파일 위치를 지정

설치 경로

  • 사용 예제 
    • 옵션 "-c"

      C:\Users\dgkim\Downloads>drx -f -c c:\drx.conf
       loading config : [c:\drx.conf]
      ...생략...

drx-ctl 

옵션

설명

기본값

기타
-vDRX 버전 및 버전 빌드 날짜 확인
Windows, Linux
-c show기본 연결 정보
Windows, Linux
-c set loglevel-file파일방식 로그저장 레벨을 지정INFO 이상Windows, Linux

drxsvc

옵션

설명

기본값

/i

DRX 서비스 설치

Windows

/u

DRX 서비스 제거

Windows

/sDRX 서비스 실행Windows
/tDRX 서비스 종료Windows

10. 주의사항

DRX의 버퍼링 기능을 위해 할당하는 메모리 버퍼의 크기가 시스템의 가용 메모리를 초과하여 할당한 경우 때에 따라 시스템을 불안정하게 하거나 시스템 크래쉬를 유발하게 할 수 있습니다. 메모리 버퍼의 크기는 이러한 시스템 전체 가용메모리 한도 내에서 할당되도록 구성해야 합니다.

11. 참고

  • DRX 명령어 사용 시 통신(DRX와 "drx-ctl" 간 통신)에 필요한 루프백 TCP 기본 포트는 9100입니다.

  • 리눅스 시스템은 가용 메모리가 부족해 질 경우 자체적으로 oom(out of memory) kill 모듈을 통해 다량의 메모리를 사용하는 프로세스를 강제적으로 종료시키기 때문에 DRX 는 이에 대비하여 oom kill에 의해 강제 종료되지 않도록 oom_score_adj의 설정 값을 조정합니다.