1. 개념
HP-UX 에서는 여러 개의 Disk 를 묶어서 하나의 Volume Group 을 만들어 물리적인 HW 가 가지는 Size 의 한계를 넘을 수 있다. 이때 사용하는 것이 LVM ( Logical Volume Manager) 이다.
여러 개의 Disk 를 하나의 논리적인 Disk (LVOL)로 만든 후 User 는 그 LVOL 을 Control 하여 Disk 를 READ 또는 Write 하게 된다. 이 때 Disk 에 Data 를 저장하는 방법은 다음의 두 가지로 나누어진다.
1) 같은 Volume Group 에 속해있는 Disk 들에 순차적으로 Data 가 Write되는 방법
( 첫번째 Disk 가 모두 Write 된 후 다음의 Disk로 넘어가는 방법)
2) 같은 Volume Group 에 속해있는 Disk 에 정해진 Size 만큼 돌아가면서 Write 되는 방법 ( 예를 들어 정해진 Size 가 1M 라면 처음 Disk 에 1M write 후 다음 Disk 에 Write 되고 모든 Disk 에 1M Write 되어진 후 다시 처음의 Disk 에 Write 되는 방법)
기본적인 LVOL (Logical Volume )은 1) 의 방법을 따르게 되어 있다. 여기서 2) 의 방법을 Disk Striping 이라고 하라고 하는데 2)번의 방법 또한 두가지 방법으로 나누어 지고 이 것에 대해서 알아보기로 하자.
2. DISK STRIPING 구현 목적
하나의 Volume Group 이 많은 Disk 로 이루어져 있고 그 중 하나의 Disk 에 자주 Access 되는 Data 가 있다고 생각을 해보자. 그 특정 Disk 에는 Disk I/O bottleneck 현상이 발생하여 Performance 의 저하가 예상이 될 것 이다. 이 때 Performance 향상을 위해 사용하는 방법이 DISK Striping 방법이다. Disk Striping 방법으로 Logical Volume 이 구현되면 DISK I/O가 분산이 되어 DISK I/O 에 의한 Performance 저하를 줄일 수 있다.
3. 구현 방법
3-1 . Volume Group 에 STRIPING 만을 구현할 경우
다음 4개의 Disk 를 묶어서 하나의 Volume Group 을 만든다고 생각하자.
(/dev/dsk/c0t0d0 , /dev/dsk/c0t1d0 , /dev/dsk/c1t2d0, /dev/dsk/c1t3d0)
1) PVCREATE
# pvcreate –f /dev/rdsk/c0t0d0
# pvcreate –f /dev/rdsk/c0t1d0
# pvcreate –f /dev/rdsk/c1t2d0
# pvcreate –f /dev/rdsk/c1t3d0
2) VGCREATE ( Volume Group 이름을 vg01 이라고 했을 때 )
# mkdir /dev/vg01
# mknod /dev/vg01/group c 64 0x010000
# vgcreate /dev/vg01 /dev/dsk/c0t0d0 /dev/dsk/c0t1d0 /dev/dsk/c1t2d0 /dev/dsk/c1t3d0
# vgdisplay –v /dev/vg01 ( Volume Group 확인)
3) LVCREATE
# lvcreate –i 4 –I 32 –L 1000 –n lvstripes /dev/vg01
-i : Striping 으로 Write 되는 Disk 개수
-I : Stripe Size ( Kbyte)
-L : Logical Volume 의 Size ( Mega)
-n : Logical Volume 의 이름
위와 같은 명령어를 사용하면 4개의 Disk 를 사용하는 1G Size 의 lvstripes 라는 Logical Volume 이 만들어 진다.
3 –2. VOLUME GROUP 에 MIRRING 과 STRIPING 을 구현할 경우, SHARED DISK에
STRIPING을 구현할 경우 ( DISTRIBUTED LVM)
STRIPING 으로 Volume Group 를 구현할 경우는 하나의 DISK 로 Volume group 를 구현
하는 경우보다 많은 위험성을 지닌다. 만약 많은 Disk 를 하나의 Volume Group 으로 구
성하여 Striping 을 하였을 경우에는 Data 의 안전성이 무척 중요한 요소가 되고 따라서
Striping 과 Mirroring 을 동시에 구현하여 Performance 와 안정성을 동시에 높이는 것이
좋은 방법이다. 이 때 사용하는 방법이 DISTRIBUTED LVM 방법이다. (MIRRORING 을
구현하기 위해서는 MIRROR/UX 가 추가로 설치되어야 한다.)
3-1 의 경우와 같이 4개의 Disk 를 하나의 Volume Group 으로 만든다고 하자.
1) PVCREATE
3-1 번의 방법과 동일
2) VGCREATE
여기서부터는 다른 OPTION 을 이용하여야 한다.
# vgcreate –s 1 -g PVG01 /dev/vg01 /dev/dsk/c0t0d0 /dev/dsk/c0t1d0
# vgcreate –s 1 -g PVG02 /dev/vg01 /dev/dsk/c1t2d0 /dev/dsk/c1t3d0
-s : PE size ( Mega) 를 정의 ( 최소단위는 1M, Default Size 는 4 M).
Striping 단위로 사용된다.
-g : Physical Volume Group 정의
이 명령이 사용되면 /etc/lvmpvg file 이 생성되는데 vgcreate 시 –g option 을 사용하지 않고 직접 /etc/lvmpvg file 을 만들 수도 있다
Example /etc/lvmpvg file:
VG /dev/VG01
PVG PVG1
/dev/dsk/c0t0d0
/dev/dsk/c0t1d0
PVG PVG2
/dev/dsk/c1t2d0
/dev/dsk/c1t3d0
참고 : 위의 File 을 보면 PVG01 은 Controller c0 에 PVG02 는 c1으로 구성됨을 알 수 있다. 이렇게 Controller 별로 PVG 를 만들어서 Mirroring 을 구성함으로서 하나의 Controller 에 장애가 발생하여도 다른 Controller 을 이용해서 계속적인 Service 가 이루어 질 수 있도록 구성되어 있다.
3) LVCREATE
# lvcreate –D y –s g –m 1 –L 1000 –n dist1 /dev/vg01
-D y : Distributed allocation policy 적용
-s g : PVG-strict allocation policy 적용
-m 1 : 1개의 mirroring 구성
-L 1000 : 1G Size 의 Logical Volume 구성
-n dist1 : logical volume name 정의
logical volume 생성을 확인해보자.
# lvdisplay -v /dev/vg01/dist1
--- Logical volumes ---
LV Name /dev/vg01/dist1
VG Name /dev/vg01t
LV Permission read/write
LV Status available/syncd
Mirror copies 1
Consistency Recovery MWC
Schedule parallel
LV Size (Mbytes) 1000
Current LE 1000
Allocated PE 2000
Stripes 0
Stripe Size (Kbytes) 0
Bad block on
Allocation PVG-strict/distributed
IO Timeout (Seconds) default
--- Distribution of logical volume ---
PV Name LE on PV PE on PV
/dev/dsk/c0t0d0 500 500
/dev/dsk/c0t1d0 500 500
/dev/dsk/c1t2d0 500 500
/dev/dsk/c1t2d0 500 500
--- Logical extents ---
LE PV1 PE1 Status 1 PV2 PE2 Status 2
0000 /dev/dsk/c0t0d0 0000 current /dev/dsk/c1t2d0 0000 current
0001 /dev/dsk/c0t1d0 0000 current /dev/dsk/c1t3d0 0000 current
0002 /dev/dsk/c0t0d0 0001 current /dev/dsk/c1t2d0 0001 current
0003 /dev/dsk/c0t1d0 0001 current /dev/dsk/c1t3d0 0001 current
0004 /dev/dsk/c0t0d0 0002 current /dev/dsk/c1t2d0 0002 current
…….
truncated LE 0005-0996
…….
0995 /dev/dsk/c0t1d0 0497 current /dev/dsk/c1t3d0 0497 current
0996 /dev/dsk/c0t0d0 0498 current /dev/dsk/c1t2d0 0498 current
0997 /dev/dsk/c0t1d0 0498 current /dev/dsk/c1t3d0 0498 current
0998 /dev/dsk/c0t0d0 0499 current /dev/dsk/c1t2d0 0499 current
0999 /dev/dsk/c0t1d0 0499 current /dev/dsk/c1t3d0 0499 current
4. 결론
DISK STRIPING 은 PERFORMANCE 를 향상시키는데 좋은 방법으로 VOLUME GROUP 에 속한 DISK 가 많을 수록 나은 효과를 볼 수 있고 Controller 의 분산을 통하여 DISK I/O 의 Performance 와 안정성도 높일 수 있다. XP256 과 같은 RAID장비의 사용 시에도 DISK STRIPING 과 MIRRORING 은 좋은 Solution 이 된다. 이런 구성을 할 때 고려 할 점은 처음 Volume Group 구성 시 Disk 와 Controller 의 배치를 충분히 고려하고 구성을 해야 한다.