구성

구성 유형

FSR은 다음의 구성 유형을 지원합니다. 

1:1 복제

하나의 소스 노드와 하나의 타깃노드를 대상으로 한 구성입니다.

1:N 복제

하나의 소스노드를 다수의 타깃노드로 동시 복제하는 N 노드 복제 구성입니다.

N:1 복제

다수의 노드를 소스로 하고 하나의 노드를 타깃으로 구성하는 복제 방식 입니다.

로컬 복제

소스와 타깃의 복제 대상을 하나의 노드에서 지정하는 방식입니다. 별도의 타깃노드를 두지 않고 로컬에 실시간 백업을 하거나 로컬 마이그레이션을 하기 위한 용도로 사용합니다.

공유 볼륨 복제

하나의 소스 데이터를 두(active-standby) 노드가 공유하고 이 소스 데이터를 제 3의 타깃 노드로 복제하는 구성입니다. 이 방식은 SAN 형태의 스토리지 공유 볼륨을 2 노드에서 동시에 공유하면서 DR 로 실시간 복제하는 경우에 사용하는 방식입니다.


주기적 동기화

실시간 복제는 안되지만 원격의 볼륨을 로컬로 마운트하여 주기적으로 동기화하는 구성 방식입니다. 특히 원격의 NAS 공유볼륨의 경우 이 방식을 사용하여 주기적으로 백업하는데 사용합니다.

타깃은 DAS 또는 NAS 가 될 수 있으나, NAS 타깃의 경우 복제 정합성을 맞추려면 해당 타깃 리소스에 쓰기가 발생하지 않도록(NAS에 FSR 이 없으므로 파일 잠금 불가능) 관리자가 보장해야 합니다.

타깃을 NAS로 하는 구성은 FSR 1.2.3 버전부터 지원합니다.

NAS 와 같은 원격지 볼륨에 대한 복제는 볼륨에 접근하는 임의의 모든 클라이언트 호스트들을 통제할 수 없기 때문에 복제 대상 데이터의 모든 변경 분을 실시간 추적하는 것은 기술적으로 불가합니다. 


이와 관련한 보다 자세한 사항은 부록의 주기적 동기화 부분을 참고하세요.


복제 대상

FSR은 기본적으로 로컬디스크에 있는 파일을 복제 대상으로 하고 파일의 데이터와 속성, 파일에 발생하는 쓰기를 포함한 모든 변경 분 I/O 에 대해 동기화 하고 복제 합니다.

  • 파일 접근 시간 속성은 복제할 수 없습니다(소스/타깃 양 측에서 파일에 접근한 시간을 일치시키는 것은 일반적으로 불가능합니다).
  • NAS 경로는 복제하지 않습니다.(주기적 동기화만 지원합니다).
    • 복제 경로 하위에 NAS 경로가 마운트 되는 것 역시 허용하지 않습니다.

그리고 복제를 구성하기 전 다음의 사항들에 대해 주의해야 합니다.

  • 시스템 볼륨 전체(예: c:\, /(root))를 복제 대상으로 지정하면 안됩니다. 시스템 볼륨에는 복제해선 안되는 시스템 파일들이 있으며 FSR은 이들을 모두 제외필터로 자동으로 등록해 주지 않기 때문에 주의해야 합니다.
  • 시스템에서 사용하는 파일이나 디렉터리를 복제해선 안됩니다. 루트(시스템) 경로의 시스템 파일들을 타깃으로 동기화 하거나 복제 할 경우 타깃의 주요 시스템 구성을 파괴할 수 있습니다.
  • 타깃에 복제된 파일을 Application 에서 열도록 허용해선 안됩니다. 양측 파일의 정합성을 유지하기 위해서 취해야 할 최소한의 조치 입니다. 이를 위해 FSR은 타깃 파일 잠금을 통해 Secondary 파일들을 보호합니다.
  • 타깃 디렉터리에 복제하기 전에 타깃 디렉터리에 있던 다른 데이터가 덮어쓰기 되지 않도록 사전에 반드시 확인해야 합니다.

링크파일 복제

FSR 은 경로를 재 지정하는 기능을 갖는 링크(소프트, 하드, 심볼릭, 정션 등) 파일에 대해선 링크 자체만 복제 합니다. 링크 파일이 가리는 대상을 복제 대상으로 하지 않습니다.

복제 경로 분석

복제 경로 내에 링크 파일이나 암호화 파일(EFS)이 존재 할 경우 사전에 구성을 조정해야 합니다.

  • 링크 파일이 가리키는 경로가 복제 경로의 외부 경로를 가리킬 경우 복제를 처리하지 못할 수 있습니다. 링크 파일이 가리키는 경로가 복제 경로 내에 위치하고 있는 지를 먼저 파악하고, 만약 외부 경로를 가리킬 경우 해당 경로를 직접 복제 경로로 추가해 주어야 합니다.
  • 암호화 파일이 있을 경우 암호화에 필요한 인증서를 타깃에 설정해 주는 과정이 필요합니다. 이와 관련한 자세한 사항은 /wiki/spaces/FSR/pages/2144862750 을 참고하세요.

FSR(v1.2)은 지정한 경로를 분석하여 해당 경로 내에 링크 파일이나 암호화 파일의 있는 지 알려주는 기능을 제공합니다. 이와 관련한 자세한 사항은 /wiki/spaces/FSR/pages/3413901908을 참고하세요.



구성 파일

구성파일은 복제의 구성 유형과 속성을 기술하는 json 형식의 텍스트 파일로서 시스템 구성파일과 리소스 구성파일로 기술합니다. 시스템 구성파일에는 FSR의 동작에 필요한 노드 전역적인 경로들이 지정되고, 리소스 구성파일에서 ip주소, 복제대상, 핸들러 등 복제를 위한 구체적인 사항을 기술합니다. 

구성파일은 기본적으로 직접 작성하거나 CLI 를 통해 작성할 수도 있습니다. 운영 중인 리소스의 속성을 변경하고자 할 경우에는 구성 파일을 수정한 후 adjust 명령을 수행하여 최종 적용합니다.

FSR 엔진은 리소스 기동 시점에 구성 파일을 해석하여 구성 형태에 맞게 노드 간 연결 및 복제 대상경로 등을 초기화 하여 복제 서비스를 준비 합니다.

구성파일의 형식과 관련한 세부 속성은 속성 1.1.x의 내용을 참고하세요.

시스템 구성

시스템 구성파일은 config.json 파일입니다. 별도 경로를 지정하지 않을 경우 %FSR_HOME%/conf/config.json 의 경로에 위치합니다.

구성파일을 수정한 뒤 적용하기 위해서는 프로그램을 재 실행하거나 다음의 갱신 명령을 실행합니다.

fsradm config adjust

리소스 구성

리소스 파일의 파일 형식은 '*.res'이며, 경로는 시스템 설정 파일의 'options/resource_path' 항목에 명시되어 있습니다.
resource_path 의 기본 값은 현재 위치('.')이고 시스템 구성 파일의 위치를 기준으로 하여, 기본 위치는 config.json 파일의 위치와 같습니다.

다음은 리소스 구성 파일의 예 입니다.

1:1 복제
{
  "id": "r0",
  "description": "test resource",
  "auto_up": true,
  "nodes": [
    {
      "name": "node1-hostname",
      "url": "10.20.200.75:9810",
      "files": [
        {
          "path": "G:/test/r0",
          "exclude_patterns": [
          ]
        }
      ]
    },
    {
      "name": "node2-hostname",
      "url": "10.20.200.76:9810",
      "files": [
        {
          "path": "G:/test/r0",
          "exclude_patterns": [
          ]
        }
      ]
    }
  ],
  "connections": [
    {
      "node1": {
        "name": "node1-hostname"
      },
      "node2": {
        "name": "node2-hostname"
      },
      "buffer": {
        "size": 1024
      },
      "network": {
        "ping_interval": 10,
        "compress": false,
        "tls": false,
        "limit": 0
      }
    }
  ],
  "options": {
    "exclude_patterns": [
    ]
  }
}
공유볼륨 복제(SDR)
{
    "id": "r0",
    "description": "auto grouping",
    "auto_up": true,
    "nodes": [
        {
            "name": "pr1",
            "group": "pr",
            "url": "192.168.35.151:9830",
            "files": [{"path": "E:/r0"}]
        },
        {
            "name": "pr2",
            "group": "pr",
            "url": "192.168.35.151:9830",
            "files": [{"path": "E:/r0"}]
        },
        {
            "name": "dr",
            "url": "192.168.35.152:9830",
            "files": [{"path": "E:/r0"}]
        }
    ],
    "connections": [
        {
            "node1": { "name": "pr" },
            "node2": { "name": "dr" },
            "buffer": { "size": 1024 }
        }
    ]
}

FSR의 구성파일은 json 형식으로 기술하며 json 형식에 따라 하나의 속성을 키와 값의 쌍으로 기술합니다. 속성의 유형에 따라 객체(object)와 배열(array)형식으로 기술하고, 객체는 중괄호 배열은 대괄호로 구분합니다. 객체와 배열은 혼합하여 기술할 수 있습니다.

기본 구성

  • 리소스를 식별하기 위한 ID(이름)를 지정합니다.
  • 복제 대상 노드들을 nodes 항목에 배열 형식으로 작성하고 node 항목 내에서 hostname, ip 주소:포트를 지정합니다. hostname 방식이 아닌 IP 주소로 name 항목을 지정할 수도 있습니다.
  • 복제대상을 files 항목에 디렉터리와 파일로 지정합니다. 필요하다면 제외패턴을 지정합니다.

제외 패턴

복제 대상에서 배제할 필요가 있는 파일에 대해선 제외 패턴을 통해 복제 대상에서 제외할 수 있습니다. 제외 패턴은 단일 경로 또는 와일드카드(*, !) 기호 등을 사용하여 정규식 기반으로 지정할 수 있습니다.

연결 구성

운영 상황에 따라 복제 연결을 제한하거나 연결 정보를 개별적으로 기술할 필요가 있을 때 connections 항목을 사용합니다. connections 는 개별 연결 단위의 배열로 작성합니다.

각각의 연결은 2 개의 노드에 대한 연결을 의미하여 node1, node2로 고정된 이름 항목에 기술하고, node1.name, node2.name 의 항목은 앞서 node 항목에서 지정한 name 내용과 동일하게 기술하여 node 항목과 connections.node1, connections.node2 의 항목을 일치 시켜야 합니다.

별도로 connections 항목을 기술하지 않으면 기본적으로 복제 대상 노드들은 각 노드 간의 연결을 모두 수립합니다. 이러한 복제 망 구성을 mesh 네트워크라고 합니다. mesh 네트워크에서 n 노드에 대한 복제 연결은 n*(n-1)/2 만큼 생성됩니다.

connections 섹션을 생략하면 자동으로 mesh 네트워크 연결을 성립합니다.

버퍼 구성

비동기 복제에 있어서 실시간 I/O 변경 분은 버퍼에 축적되어 타깃에 순차적으로 반영되기 때문에 버퍼링이 지속되는 한 타깃이 데이터는 최신의 복제 상태를 유지할 수 있습니다. 따라서 버퍼를 구성하는 것은 FSR 구성 에서의 핵심사항으로서 리소스를 기동하기 전에 버퍼 용량과 관련한 사항들을 운영환경에 맞게 적절히 구성해야 합니다. 

버퍼는 커널에 고정적으로 할당하는(비페이징 풀) 커널 메모리 버퍼와 파일로 할당하는 파일버퍼로 구성합니다. 시스템에 가용한 커널 메모리는 제한적이기 때문에 시스템의 메모리 상황에 맞게 메모리 버퍼를 산정해야 하고 메모리 버퍼 공간이 부족할 경우 추가적으로 파일버퍼로 충당할 수 있습니다. FSR은 메모리버퍼를 우선하여 사용하고 메모리 버퍼가 다 사용될 경우 파일버퍼링으로 전환하여 처리합니다. 만약 두 버퍼가 모두 오버플로우 되면 버퍼링은 자동 중단하고 버퍼링되었던 데이터들은 모두 버린 후 재동기화 단계로 이행 합니다. 따라서 복제상태를 유지하려면 충분한 버퍼 공간을 확보하여 동기화 상태로 자주 가지 않게 해야 합니다.

또한 메모리와 파일버퍼는 근본적으로 I/O 성능에 큰 차이가 있기 때문에 로컬 시스템의 I/O 부하가 크다면 메모리 버퍼를 많이 확보하는 운영방식이 성능에 유리합니다.

버퍼는 복제 연결 단위로 작동하기 때문에 N 노드 복제의 경우 연결 개수(N) 만큼 개별적으로 지정해야 합니다.

메모리 버퍼

커널에서 할당되는 메모리는 제한적 입니다. 시스템 가용 용량에 비해 너무 많은 커널 메모리를 할당할 경우 시스템 성능에 영향을 줄 수 있으므로 적정한 수준으로 할당해야 합니다.

최대 수십GB 까지 할당할 수 있으며 보통 수GB 수준으로 할당합니다.

파일 버퍼

파일버퍼는 파일버퍼가 위치하는 디스크의 공간이 허용하는 용량만큼 할당할 수 있습니다. 최대 수십TB 까지 할당할 수 있으나 보통 수 GB 에서 수십GB 수준으로 운영하는 것이 일반적 입니다. 파일버퍼를 시스템 볼륨의 경로로 구성할 경우 파일버퍼의 읽기,쓰기 I/O 가 시스템 볼륨 전반의 성능에 영향을 줄 수 있기 때문에 시스템 볼륨이 아닌 별도의 디스크 경로로 지정하는 것을 권장합니다. 


노드, 복제 대상, 연결 정보, 버퍼 설정의 구성을 마치면 리소스를 기동할 준비가 됬습니다.


DRX 연동 구성

DR 사이트 구축을 위한 DRX 연동 구성은 DRX 파일복제 구성의 내용을 참고하세요.