Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

개요

bsr 은 다양한 구성 방식을 통해 기업의 중요 데이터를 유연한 방식으로 이중화할 수 있으며, 복제를 구축하기 위해서는 노드(호스트)와 복제 대상 볼륨, 그리고 복제 노드간의 통신 채널을 위한 네트워크가 구성되어야 합니다. 그리고 이러한 구성요소들을 하나의 리소스 단위로 구성파일에 기술하여 복제 클러스터를 정의합니다.

구성 방식

1:1 미러

로컬 네트워크 내에서의 이중화를 위한 일반적인 미러링 구성 방식으로 프로토콜은 동기방식 구성이 일반적이나 프로토콜 설정에 제한은 없습니다.

1:N 미러

로컬 네트워크 내의 N 노드 복제 구성으로 1:1 미러를 N 노드로 확장한 구성입니다. 동기방식 구성이 일반적이나 프로토콜 설정에 제한은 없습니다.

1:1 재해복구(DR)

WAN 구간을 통한 재해복구 복제 구성으로 비동기 프로토콜을 사용해야 하고 송신버퍼와 혼잡모드를 설정해야 합니다. WAN 구간 복제는 복제 가속기(DRX) 연동을 통해 복제 성능을 극대화할 수 있습니다.

1:N 미러 & 재해복구(DR)

로컬 네트워크의 미러링 구성과 WAN 구간 원격 재해복구 복제의 혼합 구성입니다. 로컬 미러는 동기방식으로 WAN 원격 복제는 비동기 방식으로 혼합하여 구성합니다. WAN 구간 복제는 송신버퍼와 혼잡모드를 설정해야 하고 복제 가속기(DRX)의 연동을 권장합니다.

공유 디스크 재해복구(DR)

주 운영사이트의 공유디스크를 소스로 하고 타깃을 재해복구 노드로 구성하여 WAN 구간을 통해 복제하는 방식입니다. 주 사이트의 공유디스크에 접근하는 2 노드는 Active-Standby 로 구성하여 DR 노드를 제2의 Standby 노드로 구성합니다. Active-Standby 노드는 동일 가상 IP 주소(VIP)로 설정하여 리소스 기동에 대한 상호배제된 운영을 수행하고 DR 측 노드는 이 VIP 를 통해 주 사이트와 연계하여 Active 또는 Standby 노드의 데이터를 수신합니다.

WAN 재해복구 구성으로서 비동기 방식 프로토콜 운영과 복제 가속기(DRX) 연동을 고려해야 합니다.

N:1 미러

서로 다른 노드에 위치하는 리소스들의 타깃 노드를 하나의 노드로 구성하는 방식입니다. 개별 리소스 측면에선 1:1 미러 구성이지만 전체 토폴로지 운영측면에서 N:1 미러로 정의 합니다.

로컬 마이그레이션

로컬 내의 다중리소스 구성을 통해 로컬 소스 볼륨을 로컬 타깃 볼륨으로 복제하는 구성입니다. 실시간 마이그레이션을 위한 용도로 사용합니다.

구성 요소

BSR 이 요구하는 복제 클러스터의 구성요소는 노드, 볼륨, 네트워크 입니다. 사용자는 복제 클러스터의 운영환경에 맞게 다음의 구성요소들을 준비해야 합니다.

노드

기본적으로 운영노드와 대기노드를 준비해야 하며 대기노드는 N 개의 노드로 운영할 수 있습니다. 복제를 위해 최소한 둘 이상의 노드가 요구됩니다.

Info

노드는 호스트와 구분되는 용어 이지만 여기서는 엄격하게 구분하지는 않으며 구분이 필요한 경우에만 호스트로 기술하고 그 이외에는 노드로 기술합니다.

볼륨

데이터 볼륨

클러스터 노드 모두에서 동일한 크기의 저장 장치를 준비해야 합니다. 크기가 다른 볼륨으로 구성할 경우, 최소한 타겟 노드의 볼륨의 크기가 소스노드의 볼륨 크기보다 커야합니다.

...

Info

가상화 환경의 thin provisioning 구성 방식은 복제를 구성하는 환경에 부적합 합니다. 복제는 정합성 유지를 위해 볼륨의 전체 영역에 대한 데이터 변경 분을 지속 추적해야 하는데 thin provisioning 환경에선 볼륨의 사용량에 따라 볼륨의 물리적 공간을 늘이거나 줄이는 등 능동적으로 조절하기 때문에 게스트 OS 에 설치된 복제 에이전트는 볼륨의 전체영역에 대한 지속적인 추적을 할 수 없게 됩니다. 이와 같은 이유로 가상화 환경에서 thin provision 방식으로 복제를 구성할 경우 문제가 될 수 있습니다.

이와 다른 옵션인 thick provisioning 방식은 볼륨의 전체 영역을 고정적으로 할당하는 방식이기 때문에 기존의 복제 운영 개념에 부합합니다. 가상화 환경에서 볼륨을 구성할 경우 thick provisioning 구성방식만 사용해야 합니다.

메타 볼륨

bsr은 복제를 운영하기 위해 필요한 부가 정보들을 별도의 비휘발성 저장공간에 보관하고 이 데이터를 실시간 쓰고 읽는 작업을 복제 중에 동시에 수행합니다. 이러한 부가정보를 메타 데이터라고 하고 이를 기록하는 저장장치 볼륨을 메타 볼륨이라고 합니다. 메타 볼륨은 복제 볼륨에 1:1 대응하도록 준비해야 하며, 크기는 1 node 복제를 기준으로 1TB 당 약 33MB의 공간을 요구합니다. 예를 들어 1:2 복제, 3TB 복제 볼륨의 경우 2 * 3 * 33MB = 198MB 크기의 메타 볼륨이 필요합니다.

...

Note

메타 디스크 볼륨은 일반적인 파일시스템으로 포맷하지 않고 RAW 파일시스템 상태로 준비해야 합니다.

네트워크

bsr은 복제셋 구성 시 전용선의 사용을 권장하지만 절대적인 것은 아닙니다. 전용선이나 back-to-back 연결, Gigabit 이더넷 연결이 가장 합리적인 선택이지만, 스위치 장비를 넘어서 복제를 할 경우엔 라우터를 통한 처리율과 지연률등의 성능 문제를 감안해야 합니다.

...

  • bsr호스트들은 전용 네트워크 인터페이스 eth1을 사용하고 IP주소는 10.1.1.31 및 10.1.1.32으로 할당 합니다. 

  • bsr에서 TCP포트 7788 부터 7799를 사용 합니다.

  • 로컬 방화벽에서 호스트들 간에 인바운드 및 아웃바운드 포트 모두 허용 설정 합니다.

리소스 작성

리소스 작성은 위에서 언급한 구성요소들을 구성파일에 기술하는 과정입니다. 즉, 노드(호스트) 정보와 볼륨, 연결 정보를 정해진 구역(섹션)내에서 속성에 맞는 키워드들을 통해 구성파일에 기술하면 됩니다.

...

몇 가지 약속된 구역을 기준으로 속성을 기술하는데 이 구역을 섹션이라고 합니다. 섹션은 최상위 구역으로 Global, Common, Resource 섹션이 있으며, 각 섹션내에서 속셩 별 하위 섹션들이 있습니다. 여기서는 주요한 섹션과 일부 기본적인 속성에 대해서만 설명합니다. 구성파일과 관련한 자세한 내용은 부록의 구성파일을 참고하세요.

Global 섹션

이 섹션은 전역적으로 한번 만 사용 할 수 있으며, 일반적으로 /etc/bsr.d/global_common.conf 파일 안에 있습니다. 단일 파일로 구성한다면 구성 파일의 맨 상단에 작성하면 됩니다.

이 섹션에 포함되는 구성은 명령어 타임아웃, ip 유효성 검사 등 사용자 인터페이스와 관련 있는 옵션들입니다.

Common 섹션

이 섹션에서는 모든 리소스에 공통적인 속성으로 설정할 수 있는 설정값을 제공하며 보통 /etc/bsr.d/global_common.conf 에서 작성합니다. 물론 리소스 개별적으로 각각의 속성 옵션을 정의 할 수도 있습니다.

<Common> 섹션이 반드시 있어야 되는건 아니지만, 둘 이상의 리소스를 사용하는 경우에는 꼭 사용할 것을 권장합니다. 그렇지 않으면, 재사용되는 옵션들에 의해 복잡해질 수 있습니다. 예를들어, <Common> 섹션에서 <net> {protocal C;}를 설정할 경우 모든 리소스는 별도의 옵션이 지정되지 않는 한 이 옵션을 상속합니다.

Resource 섹션

한 개의 리소스 구성 파일명은 보통 /etc/bsr.d/<resource>.res 형태로 생성합니다. 여기서 사용된 리소스 이름은 리소스파일 내에서 명시해야 합니다. 이름을 정하는 것은 임의로 식별 가능하게 명명하지만 US-ASCII 형식이어야 하며 공백문자를 포함해선 안됩니다. 또한 모든 리소스 구성에는 <host> 하위 섹션이 두 개 이상 있어야 합니다. 다른 모든 구성 설정은 Common 섹션으로부터 상속되거나 bsr의 기본값으로 설정됩니다. 양쪽 호스트에 공통적인 값을 가진 옵션은 <host>의 상위 <resource> 섹션 부분에서 한 번에 바로 지정해도 되는데 다음 예제처럼 기술하여 간소화 시킬 수 있습니다.

...

Code Block
resource r0 {
  disk      d;
  meta-disk f;
  on alice {
    address   10.1.1.31:7789;
    node-id 0;
  }
  on bob {
    address   10.1.1.32:7789;
    node-id 1;
  }
}

구성 예제

단순 구성

다음의 예는 최소한의 설정으로 구성하는 Windows bsr 구성파일 예시 입니다.

...

Code Block
resource r0 {
  on alice {  
    disk      d;
    address   10.1.1.31:7789;
    meta-disk f;
    node-id 0;  
  }
  
  on bob {  
    disk      d;
    address   10.1.1.32:7789;
    meta-disk f;
    node-id 1;
  }
  
}

1:2 Mesh

Code Block
resource r0 {
	device	e minor 2;
	disk	e;
	meta-disk f;

	on store1 {
		address   10.1.10.1:7100;
		node-id   0;
	}
	on store2 {
		address   10.1.10.2:7100;
		node-id   1;
	}
	on store3 {
		address   10.1.10.3:7100;
		node-id   2;
	}
	
	connection-mesh {
		hosts     store1 store2 store3;
  	}
}

1:2 개별 연결 구성

Code Block
resource r0 {

	volume 0 {
		device    e  minor 2;
		disk      e;
		meta-disk f;
	}

  	on store1 {
		node-id   0;
  	}

  	on store2 {
		node-id   1;
  	}
  	on store3 {
		node-id   2;
  	}


	connection {
		host store1 address 10.10.0.245:7789;
		host store2 address 10.10.0.252:7789;
	}
	connection {
		host store2 address 10.10.0.252:7789;
		host store3 address 10.10.0.247:7789;
	}
	connection {
		host store1 address 10.10.0.251:7789;
		host store3 address 10.10.0.247:7789;
	}
}

floating peer 구성

Code Block
resource r0 {

	floating 200.200.200.6:7788 {
		device	d minor 1;
		disk	d;
		meta-disk	n;
		node-id  0;
	}

	floating 200.200.200.7:7788 {
		device	d minor 1;
		disk	d;
		meta-disk	n;
		node-id  1;
	}
}
Code Block
resource r0 {

	floating 10.10.0.251:7788 {
		device	e minor 2;
		disk	e;
		meta-disk	f;
		node-id  0;
	}

	floating 10.10.0.252:7788 {
		device	e minor 2;
		disk	e;
		meta-disk	f;
		node-id  1;
	}
	floating 10.10.0.253:7788 {
		device	e minor 2;
		disk	e;
		meta-disk	f;
		node-id  2;
	}


	
	connection {
		address 10.10.0.251:7788;
		address 10.10.0.252:7788;
	}
	connection {
		address 10.10.0.251:7788;
		address 10.10.0.253:7788;
	}
	connection {
		address 10.10.0.252:7788;
		address 10.10.0.253:7788;
	}
	

}

2:1 복제 구성

store1

Code Block
resource r0 {
	device    e  minor 2;
	disk      e;
	meta-disk f;

  	on store1 {
		node-id   0;
  	}

  	on store3 {
		node-id   2;
  	}

	connection {
		host store1 address 10.10.0.245:7789;
		host store3 address 10.10.0.247:7789;
	}
}

...

Code Block
resource r0 {
	device    e  minor 2;
	disk      e;
	meta-disk f;

  	on store1 {
		node-id   0;
  	}

  	on store3 {
		node-id   2;
  	}

	connection {
		host store1 address 10.10.0.245:7789;
		host store3 address 10.10.0.247:7789;
	}
}


resource r1 {
	device    g  minor 4;
	disk      g;
	meta-disk h;

  	on store2 {
		node-id   1;
  	}

  	on store3 {
		node-id   2;
  	}

	connection {
		host store2 address 10.10.0.246:7790;
		host store3 address 10.10.0.247:7790;
	}
}


주의 사항

Windows

볼륨

  • 복제 볼륨은 온라인(마운트)된 상태로 레터가 할당되어 있어야 합니다.

  • 메타디스크 볼륨은 레터 또는 GUID로 지정되어 있어야 하며, RAW 포맷 상태로 준비해야 합니다. 특정 파일 시스템(예: NTFS)으로 포맷할 경우 메타 볼륨 초기화 시점에 권한 문제로 인한 초기화 오류가 발생합니다.

  • 디스크 볼륨 크기

    • 볼륨의 크기는 반드시 소스 노드 볼륨의 크기보다 타깃 노드 볼륨의 크기가 같거나 커야 합니다.

    • 여기서 볼륨의 크기는 포맷한 이후의 파일시스템의 크기가 아닌 파티션의 크기를 의미하며 다음과 같이 powershell 명령라인에서 구할 수 있습니다.

Info

Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. All rights reserved.

PS C:\Users\sekim>gwmi -Query "SELECT * from Win32_DiskPartition"

NumberOfBlocks : 488392704
BootPartition : False
Name : 디스크 4번, 파티션 0번
PrimaryPartition : True
Size : 250057064448
Index : 0

NumberOfBlocks : 716800
BootPartition : True
Name : 디스크 0번, 파티션 0번
PrimaryPartition : True
Size : 367001600
Index : 0

NumberOfBlocks : 487675904
BootPartition : False
Name : 디스크 0번, 파티션 1번
PrimaryPartition : True
Size : 249690062848
Index : 1

NumberOfBlocks : 976766976
BootPartition : False
Name : 디스크 5번, 파티션 0번
PrimaryPartition : True
Size : 500104691712
Index : 0

NumberOfBlocks : 1953519616
BootPartition : False
Name : 디스크 2번, 파티션 0번
PrimaryPartition : True
Size : 1000202043392
Index : 0

NumberOfBlocks : 976766976
BootPartition : False
Name : 디스크 3번, 파티션 0번
PrimaryPartition : True
Size : 500104691712
Index : 0

NumberOfBlocks : 488392704
BootPartition : False
Name : 디스크 1번, 파티션 0번
PrimaryPartition : True
Size : 250057064448
Index : 0

노드

  • 구성파일 host 섹션에 호스트 이름을 기술해야 합니다.(floating peer 방식은 예외)

  • 구성파일 host 섹션에 node-id 항목이 기술되어 있어야 합니다.

네트워크

  • 미러링 주소와 포트에 대한 로컬 방화벽 예외정책을 추가해야 합니다.

  • NIC 에 설정된 네트워크 주소가 net 섹션의 IP 주소로 기술되어야 합니다.

...