...
복제를 구축하기 위해서는 노드(호스트)와 복제 대상 볼륨, 그리고 복제 노드간의 통신 채널을 위한 네트워크가 네트워크 연결이 구성되어야 합니다. 그리고 이러한 구성요소들을 하나의 리소스 단위로 구성파일에 기술하여 복제 클러스터를 정의합니다.
...
위에서 언급한 구성요소들을 구성파일로 작성합니다. 즉, 노드(호스트) 정보와 볼륨, 연결 정보를 정해진 구역(섹션)내에서 속성에 맞는 키워드들을 통해 기술하면 됩니다.
몇 가지 약속된 구역을 기준으로 속성을 기술하는 데 이 구역을 섹션이라고 합니다. 섹션은 Global, Common, Resource 섹션이 있으며 각 섹션내의 속셩 별 하위 섹션들이 존재합니다.
bsr의 모든 구성 파일은 설치경로의 하위 etc 디렉터리에 위치하고 bsr 유틸리티들은 해당 경로에서 구성파일을 로드합니다.
...
Info |
---|
include "bsr.d/global_common.conf"; |
우선 관례적으로 bsr의 전역(global), 공통(common) Global, Common 섹션을 /etc/bsr.d/global_common.conf 파일에서 작성합니다. 그리고 리소스 파일들을 각각의 .res 파일들로 작성하여 모든 .res 파일들을 포함(include)하도록 하여 시켜 둡니다. 이렇게 리소스 별로 파일을 분리해서 관리할 수 있도록 하는 관리하는 체계를 권장합니다.
몇 가지 약속된 구역을 기준으로 속성을 기술하는데 이 구역을 섹션이라고 합니다. 섹션은 최상위 구역으로 Global, Common, Resource 섹션이 있으며, 각 섹션내에서 속셩 별 하위 섹션들이 있습니다. 여기서는 주요한 섹션과 일부 기본적인 속성에 대해서만 설명합니다. 구성파일과 관련한 자세한 내용은 부록의
Global 섹션
...
Global 섹션
이 섹션은 전역적으로 한번 만 사용 할 수 있으며, 일반적으로 /etc/bsr.d/global_common.conf 파일 안에 있습니다. 단일 파일로 구성한다면 구성 파일의 맨 상단에 작성하면 됩니다.
...
한 개의 리소스 구성 파일명은 보통 /etc/bsr.d/<resource>.res 형태로 생성합니다. 여기서 사용된 리소스 이름은 리소스파일 내에서 명시해야 합니다. 이름을 정하는 것은 임의로 식별 가능하게 명명하지만 US-ASCII 형식이어야 하며 공백문자를 포함해선 안됩니다. 또한 모든 리소스 구성에는 <host> 하위 섹션이 두 개 이상 있어야 합니다. 다른 모든 구성 설정은 Common 섹션으로부터 상속되거나 bsr의 기본값으로 설정됩니다. 양쪽 호스트에 공통적인 값을 가진 옵션은 <host>의 상위 <resource> 섹션 부분에서 한 번에 바로 지정해도 되는데 다음 예제처럼 기술하여 간소화 시킬 수 있습니다.
Info |
---|
각 노드의 노드 id(node-id) 의 지정은 필수사항 입니다. |
|
|
|
|
|
구성 방식
bsr 은 다양한 구성 방식을 통해 기업의 중요 데이터를 유연한 방식으로 이중화할 수 있습니다. 미러 구성은 통상 로컬 네트워크 내에서 복제하는 구성을 말하고, 원격지 네트워크 간의 복제 구성을 재해복구(DR) 구성이라고 합니다.
로컬 미러
로컬 네트워크 내에서의 이중화를 위한 일반적인 미러링 구성 방식으로 복제 프로토콜은 일반적으로 동기방식으로 구성합니다.
/etc/bsr.d/r0.res
...
Code Block |
---|
resource r0 {
net {
protocol C;
}
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:N 미러
로컬 네트워크 내의 N 노드 복제 구성으로 1:1 미러를 N 노드로 확장한 구성입니다. 복제 프로토콜은 일반적으로 동기방식으로 구성하지만 N 노드 복제로 인해 성능저하가 발생할 경우 비동기 방식 구성도 고려할 수 있습니다. 복제 프로토콜은 구성에서 생략할 경우 기본값이 동기(C) 방식입니다.
Code Block |
---|
resource r0 {
//net {
// protocol C;
//}
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;
}
} |
원격 재해복구(DR)
WAN 구간을 통한 재해복구 복제 구성으로 비동기 프로토콜을 기본으로 사용하고 버퍼링을 위한 송신버퍼 설정과 버퍼가 혼잡해졌을 경우의 상황을 대비하기 위한 모드를 설정해야 합니다. 혼잡모드와 관련한 더 자세한 사항은 혼잡 모드 부분을 참고하세요.
...
리소스 섹션에서 필수로 기술해야 하는 속성들은 다음과 같습니다.
disk
복제 장치를 지정합니다. 플랫폼에 따라 백킹디바이스 또는 볼륨 레터로 지정합니다.
device
bsr 논리 장치 정보를 지정합니다. /dev/bsr1
과 같이 장치명으로 직접 지정하거나 minor 1;
과 같이 부번호로 지정할 수 있습니다.
윈도우즈에선 레터와 함께 부번호를 지정하는 방식만 사용됩니다. 윈도우즈에서 장치 부번호는 C 드라이브 볼륨을 0번으로 하고 레터값이 증가 할 수록 1 씩 증가시켜서(D 는 1, E 는 2 , F 는 3, …) 부번호를 지정하면 됩니다.
meta-disk
메타디스크 정보를 기술합니다.
on host 섹션
호스트 정보를 기술하는 섹션입니다. node-id 와 연결정보를 기술합니다.
node-id
0번 부터 노드 id 를 임의로 지정할 수 있습니다. 주 역할을 하는 노드일 수록 작은 숫자로 지정하는게 좋습니다.
연결
ip 와 포트 정보를 지정합니다.
연결은 다음과 같이 connection 섹션을 이용하여 별도 기술할 수도 있습니다. n node 복제 구성에서 많이 사용합니다.
Code Block |
---|
resource "r0" {
device minor 1;
disk "/dev/sda7";
meta-disk internal;
on "alice" {
node-id 0;
}
on "bob" {
node-id 1;
}
connection {
host "alice" address 10.1.1.31:7789;
host "bob" address 10.1.1.32:7789;
}
} |
그 외 섹션 및 하위섹션, 개별 옵션에 대한 구체적인 설명은 부록의 구성파일 내용을 참고하세요.
구성 형태
bsr 은 다양한 구성 형태로 기업의 중요 데이터를 유연하게 이중화할 수 있습니다. 통상 로컬 네트워크 내에서 복제하는 구성을 미러 구성이라 하고, 원격지 네트워크 간의 복제 구성을 재해복구(DR) 구성이라고 합니다.
로컬 미러
로컬 네트워크 내에서의 이중화를 위한 일반적인 미러링 구성 방식으로 복제 프로토콜은 일반적으로 동기방식으로 구성합니다.
/etc/bsr.d/r0.res
|
...
|
또한 복제 가속기(DRX)를 연동 할 경우 복제 처리 성능을 극대화할 수 있습니다.
로컬 미러 & 원격 재해복구(MDR)
...
로컬 1:N 미러
로컬 네트워크 내의 N 노드 복제 구성으로 1:1 미러를 N 노드로 확장한 구성입니다. 복제 프로토콜은 일반적으로 동기방식으로 구성하지만 N 노드 복제로 인해 성능저하가 발생할 경우 비동기 방식 구성도 고려할 수 있습니다. 복제 프로토콜은 구성에서 생략할 경우 기본값이 동기(C) 방식입니다.
Code Block |
---|
resource r0 { volume 0//net { device e// minorprotocol 2C; disk //} device e minor 2; disk e; meta-disk f; } on store1 { node-idaddress 10.1.10.1:7100; // Active node-id 0; } on store2 { node-idaddress 10.1.10.2:7100; // Standby node-id 1; } on store3 { node-idaddress 10.1.10.3:7100; // DR node-id 2; } connection-mesh { nethosts { protocol c; store1 } host store1 address 10.10.0.240:7789; // Active host store2 address 10.10.0.241:7789; // Standby } connection { net { store2 store3; } } |
원격 재해복구(DR)
WAN 구간을 통한 재해복구 복제 구성으로 비동기 프로토콜을 기본으로 사용하고 버퍼링을 위한 송신버퍼 설정과 버퍼가 혼잡해졌을 경우의 상황을 대비하기 위한 모드를 설정해야 합니다. 혼잡모드와 관련한 더 자세한 사항은 혼잡 모드 부분을 참고하세요.
Code Block |
---|
resource r0 { net { protocol A; sndbuf-size 1G; on-congestion pull-ahead; congestion-fill 900M; on-congestion pull-ahead; } on main_server { congestion-filldisk 900Md; } host store2 address 10address 10.101.01.24131:7789; // Standby host store3 address 20.20.0.253:7789; // DR } connection { net { protocol A; sndbuf-size 1G; meta-disk f; node-id 0; } on dr_server { disk d; on-congestion pull-ahead address 10.1.1.32:7789; congestion-fill 900M; } host store1 address 10.10.0.240:7789; // Active host store3 address 20.20.0.253:7789; // DR } } |
공유 디스크 & 원격 재해복구(SDR)
주 운영사이트의 공유디스크를 소스로 하고 타깃을 재해복구 노드로 구성하여 WAN 구간을 통해 복제하는 방식입니다. 주 사이트의 공유디스크에 접근하는 2 노드는 Active/Standby 로 구성하며 DR 노드를 제2의 Standby 노드로 구성합니다. Active-Standby 노드는 동일 가상 IP 주소(VIP)로 설정하여 리소스 기동을 노드 간 상호배제하여 운영하고 DR 측 노드는 이 VIP 로 통신하여 Active/Standby 노드의 데이터를 수신합니다.
...
meta-disk f;
node-id 1;
}
} |
또한 복제 가속기(DRX)를 연동 할 경우 복제 처리 성능을 극대화할 수 있습니다.
MDR(로컬 미러 & 원격 재해복구)
로컬 네트워크의 미러링 구성과 WAN 구간 원격 재해복구 복제의 혼합 구성입니다. 로컬 미러는 동기방식으로 WAN 원격 복제는 비동기 방식으로 혼합하여 구성합니다. WAN 구간 복제는 송신버퍼와 혼잡모드를 설정해야 하고 복제 가속기(DRX)의 연동을 권장합니다.
Code Block |
---|
resource r0 { volume 0 net{ device e minor protocol A2; disk verify-alg crc32; e; meta-disk f; } on store1 { sndbuf-size 1G; # max buffer size is 1 / 8 of physical ram node-id 1; // Active } on store2 { node-id on-congestion pull-ahead 2; // Standby } on congestion-fill 950M; store3 { node-id 3; // DR } connection { net { protocol c; } host store1 floatingaddress 10.2010.2100.4240:77887789; {// Active host store2 address 10.10.0.241:7789; // Standby } connection { net { protocol A; sndbuf-size 1G; on-congestion pull-ahead; # VIP 사용 options { svc-autostart nocongestion-fill 900M; } host store2 address 10.10.0.241:7789; // Standby host store3 address 20.20.0.253:7789; // DR } connection { net { protocol A; sndbuf-size 1G; on-congestion pull-ahead; congestion-fill 900M; } host store1 address 10.10.0.240:7789; // Active host store3 address 20.20.0.253:7789; // DR # SDR 구성간 Active,Standby에 적용 필수 옵션, 리소스 자동 시작 no } } |
SDR(공유 디스크 & 원격 재해복구)
주 운영사이트의 공유디스크를 소스로 하고 타깃을 재해복구 노드로 구성하여 WAN 구간을 통해 복제하는 방식입니다. 주 사이트의 공유디스크에 접근하는 2 노드는 Active/Standby 로 구성하며 DR 노드를 제2의 Standby 노드로 구성합니다. Active-Standby 노드는 동일 가상 IP 주소(VIP)로 설정하여 리소스 기동을 노드 간 상호배제하여 운영하고 DR 측 노드는 이 VIP 로 통신하여 Active/Standby 노드의 데이터를 수신합니다.
WAN 재해복구 구성으로서 비동기 방식 프로토콜 운영과 복제 가속기(DRX) 연동을 고려해야 합니다.
Code Block |
---|
resource r0{ net{ } protocol A; device e minorverify-alg 2crc32; disksndbuf-size e1G; # max buffer size is 1 / 8 meta-disk "\\\\?\\Volume{d4006597-e3d1-4685-a91b-b23a669499f4}\\"; of physical ram # 양서버에서 동시 접속이 가능한 스토리지 (RAW) 볼륨on-congestion pull-ahead; nodecongestion-idfill 0950M; } floating 10.20.210.34:7788 { #// DRVIP IP 사용 options { svc-autostart yesno; // SDR 구성간 Active,Standby에 #적용 SDR필수 구성간옵션, DR리소스 은자동 리소스시작 자동시작 yesno } device e minor 2; disk e; meta-disk "\\\\?\\Volume{58f21aacd4006597-2b90e3d1-464e4685-9ceaa91b-42a25846fd56b23a669499f4}\\"; // 양서버에서 #동시 내장접속이 혹은가능한 스토리지 (RAW 상태) 볼륨 node-id 10; } } |
N:1 미러
서로 다른 노드에 위치하는 리소스들의 복제 타깃 노드를 한 노드로 지정하는 방식입니다. 개별 리소스 측면에선 1:1 미러 구성이지만 전체 운영 측면에서 N:1 미러로 정의 합니다.
소스노드 store1 에서 타깃노드를 store3 으로 지정합니다.
...
floating 10.20.210.3:7788 { |
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
...
|
...
// |
...
DR |
...
IP |
...
사용 |
...
|
...
|
...
|
...
options { |
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
소스노드 store2 에서 타깃노드를 store3 으로 지정하여 위에서 구성한 store1 과 store2 가 store3 을 타깃으로 지정하는 N:1 구성입니다.
...
svc-autostart yes; |
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
타깃노드 store3에선 store1과 store2 의 구성을 모두 수용합니다.
...
// SDR 구성간 DR 은 리소스 자동시작 yes |
...
|
...
} |
...
|
...
device e |
...
|
...
minor 2; |
...
|
...
|
...
|
...
disk |
...
e; |
...
...
|
...
meta-disk "\\\\?\\Volume{58f21aac-2b90-464e-9cea-42a25846fd56}\\"; |
...
// |
...
내장 혹은 |
...
스토리지 |
...
(RAW 상태) 볼륨 node-id 1; |
...
}
} |
N:1 미러
서로 다른 노드에 위치하는 리소스들의 복제 타깃 노드를 한 노드로 지정하는 방식입니다. 개별 리소스 측면에선 1:1 미러 구성이지만 전체 운영 측면에서 N:1 미러로 정의 합니다.
소스노드 store1 에서 타깃노드를 store3 으로 지정합니다.
|
|
|
|
|
floating peer 구성
호스트 이름을 지정하지 않고 IP 주소를 기반으로 구성할 수 있습니다.
...
소스노드 store2 에서 타깃노드를 store3 으로 지정하여 위에서 구성한 store1 과 store2 가 store3 을 타깃으로 지정하는 N:1 구성입니다.
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
타깃노드 store3에선 store1과 store2 의 구성을 모두 수용합니다.
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
floating peer 구성
호스트 이름을 지정하지 않고 IP 주소를 기반으로 구성할 수 있습니다.
Code Block |
---|
resource r0 { addressfloating 10200.10200.0200.2526:7788; { device address 10.10.0.253:7788d minor 1; } disk d; meta-disk n; } |
혼합 구성
윈도우즈와 리눅스 노드를 혼합하여 구성할 수 있습니다. DR 구축, 백업 등의 용도로 사용합니다.
Code Block |
---|
resource r0 { node-id 0; } floating-on-linux 200.200.200.67:7788 { device d disk /dev/sdb1minor 1; device /dev/bsr0disk d; meta-disk internal n; node-id 01; } } |
Code Block |
---|
resource r0 { floating-on-windows 20010.20010.2000.7251:7788 { device de minor 12; disk de; meta-disk nf; node-id 10; } } |
주의 사항
Windows
볼륨
복제 볼륨은 온라인(마운트)된 상태로 레터가 할당되어 있어야 합니다.
메타디스크 볼륨은 레터 또는 GUID로 지정되어 있어야 하며, RAW 포맷 상태로 준비해야 합니다. 특정 파일 시스템(예: NTFS)으로 포맷할 경우 메타 볼륨 초기화 시점에 권한 문제로 인한 초기화 오류가 발생합니다.
디스크 볼륨 크기
볼륨의 크기는 반드시 소스 노드 볼륨의 크기보다 타깃 노드 볼륨의 크기가 같거나 커야 합니다.
여기서 볼륨의 크기는 포맷한 이후의 파일시스템의 크기가 아닌 파티션의 크기를 의미하며 다음과 같이 powershell 명령라인에서 구할 수 있습니다.
Info |
---|
Windows PowerShell PS C:\Users\sekim>gwmi -Query "SELECT * from Win32_DiskPartition" NumberOfBlocks : 488392704 NumberOfBlocks : 716800 NumberOfBlocks : 487675904 NumberOfBlocks : 976766976 NumberOfBlocks : 1953519616 BootPartition : False Name : 디스크 3번, 파티션 0번 PrimaryPartition : True Size : 500104691712 Index : 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;
}
} |
혼합 구성
윈도우즈와 리눅스 노드를 혼합하여 구성할 수 있습니다. DR 구축, 백업 등의 용도로 사용합니다.
Code Block |
---|
resource r0 {
floating-on-linux 200.200.200.6:7788 {
disk /dev/sdb1;
device /dev/bsr0;
meta-disk internal;
node-id 0;
}
floating-on-windows 200.200.200.7:7788 {
device d minor 1;
disk d;
meta-disk n;
node-id 1;
}
} |
주의 사항
Windows
볼륨
복제 볼륨은 온라인(마운트)된 상태로 레터가 할당되어 있어야 합니다.
메타디스크 볼륨은 레터 또는 GUID로 지정되어 있어야 하며, RAW 포맷 상태로 준비해야 합니다. 특정 파일 시스템(예: NTFS)으로 포맷할 경우 메타 볼륨 초기화 시점에 권한 문제로 인한 초기화 오류가 발생합니다.
디스크 볼륨 크기
볼륨의 크기는 반드시 소스 노드 볼륨의 크기보다 타깃 노드 볼륨의 크기가 같거나 커야 합니다.
여기서 볼륨의 크기는 포맷한 이후의 파일시스템의 크기가 아닌 파티션의 크기를 의미하며 다음과 같이 powershell 명령라인에서 구할 수 있습니다.
Info |
---|
Windows PowerShell PS C:\Users\sekim>gwmi -Query "SELECT * from Win32_DiskPartition" NumberOfBlocks : 488392704 … |
노드
구성파일 host 섹션에 호스트 이름을 기술해야 합니다.(floating peer 방식은 예외)
구성파일 host 섹션에 node-id 항목이 기술되어 있어야 합니다.
...
연결
미러링 주소와 포트에 대한 로컬 방화벽 예외정책을 추가해야 합니다.
NIC 에 설정된 네트워크 주소가 net 섹션의 IP 주소로 기술되어야 합니다.
...