'LVM'에 해당되는 글 2건

  1. 2009.06.17 Oracle 9i Realse2 RAC for linux 구성
  2. 2009.03.06 리눅스에서 LVM(Logical Volume Manager) 구성
2009. 6. 17. 10:47

Oracle 9i Realse2 RAC for linux 구성

---------------------------------------------------------------------------
작성자 : 문태준 (taejun at tunelinux.pe.kr http://tunelinux.pe.kr http://database.sarang.net)
작성일 : 2003. 1. 28(화)
---------------------------------------------------------------------------

ㅇ 문서소개
본 문서는 IBM 인텔기반 PC서버인 xSeries X440 서버에 운영체제를 리눅스로 하여 Oracle RAC release 2(9.2.0)를 구현하는 것에 대하여 개략적인 설명을 담았다. 이미 리눅스(레드햇)에 대해서는 익숙하다는 전제하에 설명을 하였으며 커널 컴파일, 커널 모듈 컴파일, LVM, raw device, watchdog 에 대한 이해를 필요로 한다. 또한 오라클 설치에 대한 부분은 별도의 문서를 참고하기 바라며 해당 자료도 이 문서에서 소개를 하고 있다.

ㅇ 환경
Hardware : IBM xSeries X440, X335 (Intel 기반 PC 서버)
운영체제 : Redhat Advanced Server 2.1(AS 2.1. 상용으로 인터넷에서 다운받을 수 없으며 구입해야함), Redhat 7.3(RH 7.3)
X440 사이트 자료
http://commerce-28.www.ibm.com/cgi-bin/ncommerce/CategoryDisplay?cntrfnbr=1&cgmenbr=1&cntry=410&lang=ko_KR&cgrfnbr=2249907

ㅇ 하드웨어 작업
X440에 AS 2.1을 설치하는 경우 아래 자료를 먼저 참고한다.
IBM eServer xSeries 440 - Installing Red Hat Advanced Server Linux v2.1
http://www-1.ibm.com/cgi-bin/pc/support/supportR5lite/pagegen/qtechinfo/en_US/MIGR-43851.html?lang=pt_BR&page=brand&brand=IBM+PC+Server&family=&machineType=&doctype=Software+information&subtype=All

redhat 7.3 에 설치하기는 다음의 자료를 참고한다.
http://www.pc.ibm.com/qtechinfo/MIGR-44441.html

어떤 하드웨어이든 먼저 바이오스등을 업데이트해야 한다.
IBM eServer xSeries 440 System Service Package 를 업데이트해야 하는데 네가지 프로그램이 있다.
a. BIOS code
b. Diagnostics code
c. System Management Processor firmware files
d. System Management device driver 

일반적으로는 하드웨어 업체에서 관련 작업을 진행해 줄 것이다.
이와 더불어 하드웨어에 있는 SCSI 어댑터나 ServerRaid 관련 설정을 하드웨어 업체에서 해준다. 이번의 경우는 두개의 HDD를 Raid 1 으로 구성하였다. 

ㅇ 운영체제 설치
- AS 2.1의 설치과정은 다른 레드햇 계열 배포판과 거의 동일하다. Installation Type에서는 custom 대신 Advanced Server 를 선택하면 미리 설정된 구성을 사용하여 편리하게 작업을 할 수 있다.
- X440의 하드웨어적인 특징(summit. NUMA 관련된 부분임)때문에 운영체제 설치시나 설치이후 kernel-summit-2.4.9-e.3.i686.rpm 을 설치해야한다. AS 2.1은 배포판에 기본적으로 summit 패치된 커널 RPM이 들어있다. X440도 모델에 따라 다른데 8way까지 지원되는 모델은 운영체제 설치후 재부팅시 smp나 enterprise 커널로 부팅이 되는데 4way entry 모델은 smp, enterprise로는 부팅되지 않고 single 커널만 부팅이 된다. summit 패치된 커널을 설치하지 않으면 CPU가 4개이지만 TOP에서 확인하보면 두개만 인식이 된다.
- 설치후 redhat-config-network-0.9.30-1.i386.rpm 을 업데이트하여준다. GUI로 네트워크 설정을 해주는 툴이며 업데이트해주지 않는다고 하더라도 특별한 문제가 없다. 네트웍은 쉘 커맨드 상에서도 수정할 수 있기 때문이다.
- 레드햇 관련 ftp 사이트에 접속하여 updates 디렉토리로 가면 kernel 관련 업데이트 파일을 받을 수 있다. 기본설치는 linux-2.4.9e.3summit 으로 하지만 여기서 linux-2.4.9e.8summit 로 업데이트를 할 수 있다.(AS 2.1의 경우 FTP사이트에서는 SRPM만 제공한다)
- summit 커널에서 새로운 드라이버를 추가하려면 커널 소스와 커널 SRPM을 같이 설치하여 커널 소스상에 summit 패치를 적용해주면 된다. Oracle 9.2에서 RAC를 위한 "TSC disable on NUMA" 패치의 경우는 커널 소스 컴파일이 필요하다.
** " TSC disable on NUMA" 패치 : http://oss.software.ibm.com/linux/patches/?patch_id=438
- Oracle RAC를 위한 ocfs 파일 시스템 커널 모듈의 경우에는 AS 2.1를 위해 single, smp, enterprise 커널용 rpm은 있지만 summit 패치된 커널용은 따로 제공하지 않으므로 otn 사이트에서 ocfs 소스를 받아 spec 파일을 이용하여 모듈을 컴파일하면 된다. 물론 이를 위해서는 필요한 패치가 적용된 커널 소스가 있으면 되며 오라클에서 제공하는 spec 파일을 약간만 수정하면 된다. ( http://otn.oracle.com/tech/linux/open_source.html )
- 타회사의 인텔 서버에서 리눅스용 Oracle 9.2와 RAC는 작동을 잘 하지만 X440에서는 개별 노드가 계속 죽는 현상이 발생한다. 이와 관련되어 IBM에서 패치를 제공하며 이에 해당하는 것이 " TSC disable on NUMA" 패치이다. 앞에서 언급한 사이트에서 패치파일을 받고 해당 사이트에 있는 Releaset Note를 참고하여 커널 컴파일을 하면 된다. ( http://oss.software.ibm.com/linux/patches/release_notes.php?patch_release_id=670 ) 해당 패치파일을 살펴보면 TSC 관련 설정(Configure.help, config.in)을 수정하며 io_apic.c, time.c 두개의 소스 파일을 수정한다. 참고로 여기서는 linux-2.4.9e.8summit 파일을 기준으로 하였다.
- 내장된 이더넷 카드 드라이버 업데이트 : X440, X335에 내장된 이더넷의 경우 운영체제 설치후 X440은 bcm5700으로 바로 잡히고 x335는 tg3 모듈로 잡힌다. 레드햇외의 배포판은 잘 모르겠지만 AS 2.1과 RH 7.3에 기본적으로 bcm5700 모듈이 들어있다. 그러므로 /etc/modules.conf에서 alias 명을 바꾸어주고 다시 bcm5700으로 모듈을 올리면 bcm5700으로 잡힌다. 그래도 최근 드라이버로 패치할 것을 권장하고 있다.
Broadcom NetXtreme Gigabit Ehernet Drive Update
http://www.pc.ibm.com/qtechinfo/MIGR-43815.html
위 사이트에서 exe 파일을 다운받아 풀면 각 운영체제별로 사용할 수 있는 드라이버가 있다. 리눅스용의 경우는 소스와 SRPM이 있으며 SRPM을 이용하여 RPM을 생성하여 사용하면 편리할 것이다. 리눅스용의 경우 이 글을 쓰는 당시 최신 버전은 2.2.17이며 RH 7.3에는 2.28이 들어있고 AS2.1의 기본 커널인 kernel-2.4.9-e.3.src.rpm에는 2.0.24 버전의 패치가 들어있다 (해당 모듈의 이름은 bcm5700.o).
- AS 2.1은 기본적으로 LVM이 들어있지 않기 때문에 커널 컴파일을 해야한다. RH 7.X에는 기본적으로 LVM이 들어있기때문에 AS 2.1에도 들어있으리라 생각하면 안된다. 

** IBM redbook중 리눅스 관련 자료

http://publib-b.boulder.ibm.com/Redbooks.nsf/e7141c118473e67885256a420076cf40/d4ba397dfcc5f0b585256b41004ca166?OpenDocument

ㅇ 운영체제 설치후 작업
- 네트워크 설정 : 네트워크 인터페이스 확인, /etc/hosts 설정(rac간 접속을 편하게 하기 위해서 필요)
- 필요한 패키지 업데이트 (보안 및 기능 강화)
- 서버 패키지 관련 작업 : wu-ftpd 설치, telnet, ssh, ftp 설정. xinetd.conf 에 접근할 ip 설정(only_from 이용), rsh 서버 설정(rsh는 여러 노드에 동시에 오라클을 설치할 경우 필요하며 설치이후에는 보안을 위하여 disable 해주거나 제거해주는게 좋을 것이다)
- 추가 패키지 설치 작업 : ncftp(기본들어감), rpmfind(rpm 설치 쉽게), hanterm(필요한 경우), mc(디렉토리 작업 편리하게)
- 스토리지를 붙인 경우 로컬의 HDD보다 스토리지의 HDD를 먼저 읽어들이는 경우 부팅에 문제가 생길 수 있다. (부팅을 위해 SCSI 관련 장비를 먼저 initrd에서 올리므로 문제가 발생함) 이런 경우에는 /etc/modules.conf에서 스토리지와 연결하는 어댑터를 없애고 mkinitrd를 이용하여 initrd 파일을 재생성하여 재부팅하면 된다.

ㅇ Oracle RAC 관련 정보
- 타하드웨어에 비해 IBM X440장비는 위와 같이 몇가지 패치가 필요하다. NUMA 패치(TSC disable)를 해주어야 RAC가 제대로 동작한다. 또한 커널 소스를 가지고 있어야 ocfs 모듈을 컴파일할 수 있다.
- xseries에 운영체제를 리눅스로 하여 Oracle RAC를 설정하는 것과 관련된 자료는 IBM사이트에서 검색하면 나온다. (검색어를 +oracle +linux +xseries ) 해당 자료는 아래의 url에서 볼 수 있다.
http://publib-b.boulder.ibm.com/Redbooks.nsf/9445fa5b416f6e32852569ae006bb65f/90c0f610349ed8e485256ab20064c5aa?OpenDocument&Highlight=0,linux
위 자료는 suse linux 7.2를 기준으로 했으며 Oracle RAC 9.0.1.0, IBM FAStT Storage Manager(하드웨어는 FAStT500), IBM Xserver를 이용하여 Oracle RAC를 구성하고 있다. 두개의 노드 기준이다.
- RAC를 구성할 경우 네트워크가 두개로 구성되며 public의 경우는 100M 이더넷, private는 1G 이더넷으로 구성하고 있다. private는 물론 100M 이더넷으로도 구성가능하지만 각 노드간에 빠른 정보전달을 위하여 기가비트 이더넷을 사용한 것이다.
- 리눅스용 Oracle RAC의 경우 클러스터링 소프트웨어는 오라클에서 직접 제공한다.
- Advanced Server 에서 오라클을 설치하는 경우 문제가 발생한다고 나와있다. binutils 관련하여 에러가 있는데 이에 대한 내용은 아래 자료를 참고하면 된다.
Tips and Techniques: Install and Configure Oracle9i on Red Hat Linux Advanced Server, Aug 2002.
http://otn.oracle.com/tech/linux/pdf/installtips_final.pdf
설치시 링크에러가 발생하는 것에 대하여 어떻게 해결을 하는지 나와있고 또한 Advanced Server에 오라클을 설치하는 경우 어떻게 최적화를 하면 될지에 대하여 나와있다. 그런데 위 자료는 Oracle 9.0.1 기준이며 9.2 대에서는 이 문제가 해결된 듯 하다. 왜냐하면 위에서 말한 binutil을 조정할 필요가 없기 때문이다.
이에 관련한 상세한 자료는 다음의 url을 참고한다.
http://database.sarang.net/?inc=read&aid=12063&criteria=oracle&subcrit=tutorials&record_idx=10&currpg=2
- Oracle RAC 9.0 버전의 경우에는 리눅스 운영체제에서 기본 제공하는 watchdog 을 이용하였는데 9.2.0.1.0에 이어 나온 패치(이것은 웹상에서는 직접 제공하지는 않는듯하며 제품을 구입한 고객에게만 제공하는 것 같다. metalink에 들어가면 볼 수 있을듯. 9.2.0.2.0)를 하면 오라클 자체적으로 해당 기능을 구현한다고 한다. (이부분이 hangcheck-timer인 듯 하다. 참고로 hangcheck-timer rpm을 오라클 자체적으로 제공하는데 ocfs와 같이 summit 패치용 rpm은 따로 제공하지 않지만 smp용 모듈을 설치한후 summit에 모듈을 복사해주면 정상 작동했다. ocfs는 커널과 깊은 연관을 맺지만 hangcheck-timer는 그렇지 않아서 별 문제가 없는 것으로 생각이 된다. 그러나 가장 확실한 것은 소스를 가지고 패치하여 사용하는 것이 아닐까? 아니면 ocfs처럼 커널 소스를 가지고 모듈 컴파일을 해서 사용하거나.)
- watchdog과 연관이 있는 부분이라고 생각이 되는데 오라클에서 hangcheck-timer 라는 rpm을 제공한다. 이 부분이 위에서 말을 한 watchdog 기능을 대체한 것으로 생각이 된다. hangcheck-timer 관련하여 레드햇 7.3에는 해당 모듈이 기본 들어있지는 않다. 이에 대한 자료는 더 검색을 해보아야 할 듯하다. (hangcheck-timer 자체는 공개 소스 형태로 진행되는 듯하다) hangchec-timerk도 오라클에서 제공한다.
(뉴스그룹에서 이와 관련한 논의를 하는곳을 구글에서 찾았다. http://www.uwsg.iu.edu/hypermail/linux/kernel/0301.2/0191.html)

** Oracle RAC를 리눅스에 설치하는 것과 관련된 자료
Step-By-Step Installation of RAC on Linux
http://ocpdba.net/oracle9i_rac/stepbystepRAC.html
==>> 설치과정을 상세하게 설명하고 있다. 9.2.0.2.0패치는 metalink로 링크되어있다. 

Tips and Techniques: Install and Configure Oracle9i on Red Hat Linux Advanced Server, Aug 2002.
http://otn.oracle.com/tech/linux/pdf/installtips_final.pdf
==>> AS 2.1에 오라클을 설치하고 최적화하는 방법에 대하여 자세히 나와있다. 

Implementing Oracle9i RAC with Linux on IBM xSeries servers
http://publib-b.boulder.ibm.com/Redbooks.nsf/9445fa5b416f6e32852569ae006bb65f/90c0f610349ed8e485256ab20064c5aa?OpenDocument&Highlight=0,linux
==>> IBM xSeries servers에 linux, Oracle RAC 설정하기

리눅스용 Oracle9i 설치가이드 (한글)
http://otn.oracle.co.kr/products/oracle9i/download/oracle9i_for_linux_install.doc
==>> 한국 otn 사이트에 있는 한글 문서입니다. 개략적인 설명만 되어 있습니다.

Linux용 Oracle9i Database Release2 : Red Hat Linux Advanced Server 2.1에서의 성능, 안정성, 관리성 강화
이 백서에서는 Linux 상에서 실행되는 오라클 플랫폼을 더욱 강화시키는 Red Hat Linux Advanced Server의 주요 기능에 대해 간단히 설명합니다. 이러한 기능에는 고성능, 안정성, 관리성 등이 포함되어 있습니다.
http://otn.oracle.co.kr/tech/linux/pdf/9iR2-on-Linux-Tech-WP_Final2.pdf 

Red Hat Advanced Server2.1의 Linux Virtual Memory와 Oracle의 메모리 사용 특성
Red Hat Linux Advanced Server 커널과 Linux Virtual Memory 아키텍쳐의 단점이 해결 됨으로써, Oracle과 Linux의 통합이 안정성이 매우 높은 고성능 플랫폼을 제공한다는 결과가 나왔습니다.
http://otn.oracle.com/tech/linux/pdf/1_linuxVM_v2_accepted.pdf

Oracle9i Real Application Clusters 사용에 대한 Linux Logical Volume Manager 및 Linux Metadisk Software RAID의 기능 비교
이 백서에서는 Linux용 Oracle9i RAC를 통해 미션 크리티컬한 환경에서 Logical Volume Manager이나 Metadisk Software RAID의 사용이 가능한지에 대해 상세히 조사하였습니다.
http://otn.oracle.com/tech/linux/pdf/lvm_md_comparison.pdf 

일반적인 Linux를 배포해서 인증 받은 오라클 제품 목록을 볼 수 있습니다. 오라클 고객들은 metalink.oracle.com에서 확인해야 합니다.
http://otn.oracle.com/tech/linux/pdf/AllOracleLinux_Certs.pdf

otn 문서자료
http://otn.oracle.co.kr/tech/linux/

Oracle9i Database 에 대한 문서 자료
PDF Oracle9i Database Release 2 Release Notes - Linux
PDF Oracle9i Database Release 2 Install Guide - Linux
PDF Oracle9i Database Release 2 Administrator's Reference Guide
PDF Oracle9i RAC Release 2 Configuration Guide
PDF Oracle9i Database Release Notes Release 9.0.1 for Linux
PDF Oracle9i Database Quick Installation Procedure Release 9.0.1 for Linux
PDF Oracle9i Database Installation Checklist Release 9.0.1for Linux 

Latest Linux Technical Presentations from Oracle World - Nov. 2002, Nov 2002
http://otn.oracle.com/oracleworld/ow_linux.html

Oracle Cluster File System FAQ, Nov 2002
http://otn.oracle.com/tech/linux/htdocs/ocfs_faq_110602.html

ㅇ 기타 참고자료
-LVM설정관련 자료
LVM 사이트 http://www.sistina.com/products_lvm.htm
LVM HOWTO http://tldp.org/HOWTO/LVM-HOWTO/
Linux@Work 2001. 09 엔터프라이즈환경을 위한 소프트웨어 RAID와 LVM(정진호)
http://kldp.org/HOWTO/html/LVM-HOWTO/index.html (LVM 하우투 한글 번역 문서)
http://tunelinux.pe.kr/bbs/read.php?table=linuxinfo&no=62 (마소에 나왔던 LVM 사용법을 옮겨 놓은 것입니다)
http://tunelinux.pe.kr/zboard/view.php?id=tip&no=28 (제가 간단하게 LVM 사용법을 적은 것입니다)
The Logical Volume Manager (incl. Raw I/O tips) : http://www.suse.com/en/business/certifications/certified_software/oracle/docs/lvm_whitepaper.pdf

- watchdog 자료
커널 소스의 문서 디렉토리에도 watchdog 에 대해서는 자세하게 나와 있지 않다. 위에서 설치문서들을 보면 watchdog 설정 부분이 있으므로 어렵지 않게 해결할 수 있을 것이다. 그런데 위에서 설명했듯이 Oracle RAC release 2 패치에서는 watchdog을 대체하는 프로그램을 제공하고 있다.
http://tunelinux.pe.kr/zboard/view.php?id=tip&no=27 (제가 간단하게 watchdog 사용법을 적은 것입니다)

- raw device
레드햇은 raw device를 사용하도록 준비가 이미 되어있다. AS 2.1 설치시 /etc/sysconfig/rawdevice 에 설정을 하고 /etc/rc.d/init.d/rawdevice start 해주면 된다.

- Oracle + PHP + Apache 연동
Apache은 DSO 방식으로 컴파일되어있을 경우 간단하게 PHP와 연동을 할 수 있다.
PHP를 연동할 웹서버에 Oracle Client 가 설치되어 있어야 한다. Oracle client에서 oracle call interface만 설치해주면 된다. ($ORACLE_HOME/rdbms/demo/oci.h 등의 파일이 필요함.)
이에 대한 상세한 내용은 다음의 자료를 참고한다.
http://tunelinux.pe.kr/zboard/view.php?id=tip&no=12
물론 사전에 tnsnames.ora 설정이 제대로 되어 있고 sqlplus를 이용하여 서버로 접속이 가능한지 먼저 점검해야한다.

- suse + Oracle 자료
http://www.suse.com/us/business/certifications/certified_software/oracle/
수세를 이용할 경우 참고하면 될 듯하다.


Trackback 1 Comment 0
2009. 3. 6. 19:40

리눅스에서 LVM(Logical Volume Manager) 구성


LVM(Logical Volume Manager) on Linux

필자 : 서기현(nefsall@kldp.org)
데비안-kr 개발자

 

     

    Linux의 쓰임새가 점차 대형화, 고속화를 요구하게 되면서, 많은 부분이 그에 맞추어 향상되고 있다. 64 Bit 프로세서, 기가바이트(Giga Byte : 2^30 Byte)대의 메모리, 기가비트급 네트웍, 테라바이트(Tera Byte : 2^40 Byte) 심지어 페라바이트(Pera Byte : 2^50 Byte) 규모의 파일시스템... 이루 말할 수 없는 변화가 시시각각 일어나고 있다.

    올해 초, Linux Kernel 2.4 가 발표되면서 많은 기능 향상과 추가가 이루어졌다. 위에 언급한 기업수준의 규모를 어느 정도 만족시킬 수 있게 되었다. 그중에 눈에 띄는 것이 바로 LVM를 기본으로 지원한다는 것이다.

 

1. LVM 이란?

    LVM 은 Logical Volume Manager 의 약자로서, 저장장치들을 좀더 효율적이고 유연하게 관리할 수 있는 커널의 부분과 프로그램을 말한다. 처음에는 IBM에서 개발되었는데, 그후에 OSF(현재는 OpenGroup http://www.opengroup.org)에서 차용을 하여 OSF/1 operating system 에서 쓰였다. 지금은 HP-UX, Digital Unix operating system, AIX 등의 상용 유닉스에서 쓰고 있다. 리눅스 버전은 현재 HP-UX의 것을 모델로 하여 Sistina Software 사(http://www.sistina.com)에서 open source로 개발하고 있다.

    LVM 을 이해하려면 먼저 Software RAID (Redundant Array of Inexpensive Drives)를 언급해야 하는데, 이 둘은 비슷하면서도 큰 차이가 있다.
    비슷한 점은 여러 물리적인 디스크들을 하나의 논리적인 디스크처럼 다룰 수 있게 함으로서 조합방법에 따라 고용량, 고속, 데이터의 무결성을 실현하는 점이다.
    하지만 분명하게 다른 점이 있는데. lvm은 raid보다 관리 및 확장이 비교적 쉬운 반면, raid에는 lvm에는 없는 disk mirroring(RAID level 1), Parity Stripe (RAID level 4,5) 등의 방식이 있어서 속도 또는 데이터의 무결성을 보장 받을 수 있다.

    그러나 이런 차이점에도 불구하고 lvm가 주목을 받는 이유는 다음과 같다.

    ·쉬운 관리.
    ·서로 다른 많은 디바이스 조합 지원.
    ·직관적인 저장 장치로의 접근.
    ·뛰어난 확장성.
    ·믿을만한 안전성과 효율.
    ·스냅샷 기능 지원.  

    이와 같은 특징들로 인해 사용자들이 얻는 이득은 많다.

    우선, pc 급 시스템 사용자들의 가장 큰 고민 중의 하나가 시스템을 처음 설치할 때에 파티션의 구성을 어떻게 할 것인가 일 것이다. 파티션은 한번 구성해 놓으면 바꾸기가 쉽지 않기 때문이다. 또 파티션이 가득 차기라도 하면 어렵게 백업을 하거나 눈물을 머금고(?) 자료를 지워야 할 경우도 심심치 않게 생기기 마련이다. 하지만 LVM를 쓰면 간단하게 저장공간을 확장, 축소 할 수 있기 때문에 그런 고민을 덜 수 있다.

    다른 예로, 중소형 서버에서는 비교적 적은 비용으로 대용량 저장 장치를 구현하는 것이 가능해진다. 그리고, 백업 없이 기존의 환경을 유지한 채 확장이 가능하기 때문에 (물론 백업은 *언제나* 중요하다.) 유지보수면에서 상당한 이득이 있을 것이다.

 

2. 기본 지식

    일반적으로 유닉스 시스템에서 저장 장치를 쓰는 방법은 그 장치의 블록 디바이스(Block Device)에 파일 시스템 (File System)을 만들어서 (다른 표현으로는 포맷(Format)한다라고 하지만 유닉스의 세계에서는 잘 쓰지 않는다.) 디렉토리에 마운트 시키는 것이다. 예를 들어, 두번째 버스의 프라이머리 ide 디스크의 첫번째 파티션에 reiserfs 파일 시스템을 만든 후, /debian/ftp 라는 디렉토리에 마운트를 시킨다면 다음과 같은 절차를 밟을 것이다.

    # mkfs -t reiserfs /dev/hdc1
    # 화면에 나오는 질문에 y 라고 답변
    # mount -t reiserfs /dev/hdc1 /debian/ftp

    lvm을 써도 마찬가지 절차를 밟는다. 단지, 실제 블록 디바이스가 아닌 가상의 블록 디바이스를 쓴다는 점이 틀리다.

    < 그림 1 >
    실제적으로 lvm은 커널에서 파일 시스템과 블록 디바이스 사이에 위치하여 동작한다. 일반적인 방식과 lvm에 의해 동작하는 방식의 차이는 <그림1>에 잘 나타나 있다.

    lvm의 동작 방식의 이해와 활용을 위해서는 몇 가지 용어에 대한 사전지식이 필요하다.

    1)  VG, PV, LV

    VG(Volume Group)은 LVM의 가장 기본적인 요소이다. 쉽게 말하자면 가상 디스크라고 할 수 있는데, 하나 이상의 실제 물리적으로 존재하는 블록 디바이스가 모여서 VG를 이루게 된다.

    그 물리적인 블록 디바이스를 PV(Physical Volume)라고 하는데, 거의 대부분의 장치를 PV로 쓸 수 있다. 하드디스크 및 그 파티션, 소프트웨어/하드웨어 RAID 장치, 심지어 Loopback 블록 디바이스(파일 시스템상의 파일을 블록 디바이스처럼 쓸 수 있게 해준다)까지도 말이다.

    PV와 대비되는 것이 LV(Logical Volume)이다. 이것은 가상 파티션이라고도 할 수 있는데, VG를 적당히 나누어 할당한 것이 LV이다. 사용자는 LV를 일반 디스크나 파티션처럼 쓰면 된다.

    정리하자면, <그림2>를 보면 알 수 있듯이, 하나 이상의 PV가 모여 VG를 이루고, VG를 가상적으로 나누어 할당하면 LV이 된다.

    < 그림 2 >
    참고적으로, 한 시스템에서 VG는 최대 99개까지 만들 수 있고, 하나의 VG에는 PV, LV 모두 최대 256개까지 할당할 수 있다.

    2)  PE와 LE

    PE(Physical Extent)와 LE(Logical Extent)는 각각 물리적 할당단위와 논리적 할당단위를 뜻한다. 이 둘은 물리적인 위치나 크기는 같다.
    그러므로 PE가 LV에 할당되면 LE가 된다라고 볼 수 있다.

    <그림3>를 보면 PE, LE의 관계가 잘 설명되어 있다.

    < 그림 3 >

    VG를 나누어 LV로 할당할 때 LVM은 하드디스크의 섹터처럼 작은 단위로 하지 않고 적당한 크기의 PE로 하게 된다. 그 이유는 할당단위가 극히 작으면, 할당정보가 엄청나게 커지고, 그에따라 시스템의 성능도 느려질 것이다. 또한 할당할 수 있는 크기에도 한계가 생길 것이다. PE의 크기는 VG를 만들 때에 정해지는데, 그에 따라서 VG의 최대 크기가 정해진다. 하나의 VG에는 65536개까지 PE를 할당할 수 있고, PE의 크기는 최소 8KB에서 2배씩 늘어나 최대 512MB까지이다. 그러므로 VG의 최대 크기의 범위는 최소 512MB(8KB x 65536)에서 최대 32TB(512MB x 65536)일 것이다.

    3)  VGDA

    PV의 앞 부분에는 VGDA(Volume Group Descriptor Area)라는 부분이 있어서 VG의 모든 정보가 기록된다. 같은 VG에 속해 있는 PV들은 VGDA의 내용이 같다.

    그 내용은, VG의 이름, 상태, 속해있는 PV, LV들, PE, LE들의 할당 상태 등이다. LVM은 이 VGDA 를 참조하고, 갱신하면서 모든 일을 수행한다.

    4)  Linear Mapping LV 와 Striped Mapping LV

    앞서 언급한 대로 LVM은 소프트웨어 RAID를 어느 정도는 대체할 수 있다. lvm에서는 두 가지 방식으로 LV를 만들 수 있는데, Linear RAID 와 대응되는 Linear Mapping 방식과 RAID Level 0 과 대응되는 Striped Mapping 방식이 그것이다.  

    두 방식의 차이점은 두개 이상의 비어있는 PV를 가지고 있는 VG에 LV를 할당할 때에, PE를 어떻게 배치시키는가 이다.

    Linear Mapping 방식은 일반적인 것으로써, PE를 순차적으로 할당시킨다. 예를 들어 <그림4>의 왼쪽 그림을 보면, 각각 3개의 PE가 있는 PV1, PV2으로 이루어진 VG1에 4개의 LE를 가진 LV1을 할당한다고 할 때에, LVM은 먼저 PV1에 3개의 PE를 순차적으로 할당하고 나머지 1개의 PE는 PV2에 할당한다.

    반면, Striped Mapping 방식은 <그림4>의 오른쪽 그림에 나타나 있듯이, 위에서와 같은 환경으로 할당한다고 할 때에, PE는 적당한 크기의 조각들(stripes?)로 나누어진다. LVM는 그것을 두 PV에 분산하여 할당하게 된다. 그러므로 두 PV들에 할당된 PE의 갯수는 같다.

    Striped Mapping 방식의 목적은 두개 이상의 PV를 동시에 읽고 씀으로서, 속도 향상을 바랄 수가 있다는 것이다. 물론, PV들이 서로 독립적인 장치이어야지, 같은 장치 내의 파티션들이라면 오히려 역효과가 날 것이다.

    5)  Snapshots  

    규모가 큰 시스템에서 서비스의 중지없이 백업을 할 때에 가장 큰 문제점이 백업도중에 데이터가 변경되는 것이다. 그러면 백업 자체가 무용지물이 될 수도 있기 때문이다.

    그런 문제를 해결하려면 어느 시점에 데이터가 변경되지 못하게 고정시키는 것인데, 그런 기능을 구현한 것이 Snapshot LV이다.

    Snapshot LV는 기존의 LV를 복사하며 별도의 읽기 전용의 LV를 만드는 것이기 때문에, 데이터 변경을 걱정하지 않고 백업을 마칠 수 있을 것이다.  

     

3. 준비사항

    1)  Kernel  

    커널 2.4 대에는 기본적으로 LVM이 들어가 있어서 동작이 가능하게 커널 설정을 하고 다시 컴파일 해주면 된다. 커널 성정은 “Multi-device support (RAID and LVM)”에 있으므로 커널 안에 넣도록할 수도 있고, 모듈로 뺄 수도 있다. 참고적으로 모듈 이름은 ‘lvm-mod.o’이다. 커널 2.2 대에서도 패치를 적용하면 사용이 가능한데, 필자는 시험하지 못했다. LVM Tools tarball의 PATCHES 라는 데렉토리에 있는 README를 읽고 시도해보기 바란다. 또 lvm 패치 이외에 raw-io 패치가 필요한 데, 다음의 사이트에서 각 커널에 맞는 패치를 구할 수 있다.  

    http://www.kernel.org/pub/linux/kernel/people/sct/raw-io

    새로운 커널로 부팅 한 후에 lvm을 사용할 수 있는지 확인을 하려편 /proc/lvm 이라는 디렉토리가 있는지 확인하면 된다.

    2)  Tools

    LVM가 동작하려면 커널의 지원 이외에 프로그램이 필요하다. 다음의 사이트에서 구할 수 있다.

    ftp://ftp.sistina.com/pub/LVM

    설치는 너무도 간단하다. tarball을 푼 후에, 만들어진 디렉토리에 들어가서 다음의 명령을 입력하라.

    # ./configure && make && make install

    혹시라도 프로그램을 지우고 싶다면.

    # make remove  

    Debian의 경우에는 Main FTP에 패키지가 있으므로 다음과 같은 명령으로 설치할 수 있다.

    # apt-get install lvm  

    3)  초기화 스크립트

    커널과 프로그램이 준비되었다면 이제 부팅시나 셧다운시에 자동으로 lvm을 활성화, 비 활성화 시킬 수 있게 고쳐줘야 한다. 각 배포판 마다 초기화 스크립트가 다르지만 들어가야 할 명령은 모두 같다.

    LVM을 활성화 시키려면,

    # vgscan
    # vgchange -a y

    비활성화 시키려면,

    # vgchange -a n

    줈 Debian : 패키지로 설치했다면 이 과정은 필요하지 않다. 하지만 소스로 직접 설치했다면 아래의 절차를 따라야 한다.

    먼저 다음과 같은 내용으로 /etc/init.d/lvm를 작성한다.

    --
    #!/bin/sh

    case "$1" in
      start)
            /sbin/vgscan
            /sbin/vgchange -ay
            ;;
      stop)
            /sbin/vgchange -an
            ;;
      restart|force-reload)
            ;;
    esac

    exit 0
    --

    그리고 다음의 명령을 실행해준다.

    # chmod 0755 /etc/init.d/lvm
    # update-rc.d lvm start 26 S . stop 82 1 .

    * Redhat : /etc/rc.d/rc.sysinit에서 ‘Mount all other filesystems’라는 문구의 바로 전에
       활성화시키는 명령을 넣는다.

    또 /etc/rc.d/init.d/halt에 비활성화시키는 명령을 넣는다.

    * Slackware  : /etc/rc.d/rc.S를 다음과 같이 고친다. 아래의 내용 이후에,

    # Remount the root filesystem in read-write mod
    eecho “Remounting root device with read-write enabled.”
    /sbin/mount -w -v -n -o remount /

    다음과 같은 내용을 추가한다.

    # This was an addition, limits vgscan to /proc thus
    # speeding up the scan immensely.
    /sbin/mount /proc

    # Initialize Logical Volume Manager
    /sbin/vgscan
    /sbin/vgchange -ay

    그리고 ‘/sbin/mount -a’를 다음과 같이 고친다.

    # mount file systems in fstab
    (and create an entry for /)
    # but not NFS because TCP/IP is not yet configured
    /sbin/mount -a -v -t nonfs,proc  

 

4. 실제적인 작업

    이제 본격적으로 LVM를 다루어 보도록 하자.

    1)  PV 초기화

    먼저 제일 처음에 해야 할 작업이 블록 디바이스를 PV로 초기화하는 것이다. PV이 될 수 있는 장치로는, 하드 디스크 (/dev/hda, /dev/sda, ...), 하드디스크의 파티션 (/dev/hda1, /dev/sda1, ...), 소프트웨어 RAID 디바이스 (/dev/md0, ...), Loopback 디바이스 (/dev/loop0, ...) 등이 있다.  

    그러나 하드디스크의 경우 사전 작업을 해야 한다. 만약 파티션을 PV으로 만들 경우 그 파티션의 System ID가 0x8e 이어야 한다. 간단히 fdisk를 사용해서 /dev/hda2를 바꾼다면 다음과 같을 것이다.

    # fdisk /dev/hda
    Command (m for help): t
    Partition number (1-6): 2
    Hex code (type L to list codes): 8e
    Changed system type of partition 2 to 8e (Linux LVM)

    Command (m for help): w

    그리고, 파티션을 나누지 않고 하드디스크 전체를 PV로 만들려고 할 때에, 파티션 정보가 기록되어 있다면 PV로 만들어지지 않을 것이다. 파티션을 fdisk등으로 전부 지워도 마찬가지인데 해결 방법은 dd등의 명령으로 파티션 정보를 깨끗히 지워주면 된다. 예를 들면 다음과 같다.

    # dd if=/dev/zero of=/dev/sda bs=512 count=1

    (**주의** 위의 명령은 한순간에 파티션 정보를 날리는 방법이다. 사용상의 특별한 주의가 필요하다.)

    PV 를 만드는 명령은 pvcreate인데 사용법은 간단하다. 아래는 그 사용의 예이다.

    # pvcreate /dev/hda2
    pvcreate -- physical volume “/dev/hda2”
    successfully created

    추가적으로, 권장하는 것은 특별한 이유가 없으면 하나의 하드디스크에는 두개 이상의 PV를 만들지 않는 것이 좋다. 관리적인 면이나 효율적인 면에서 이득이 많기 때문이다.

    2)  VG 만들기, 이름 바꾸기, 지우기

    만들어진 PV들을 합쳐서 하나의 VG로 만드는 명령은 vgcreate이다.
    아래는 그 예이다.

    # vgcreate -s 16m new_vg /dev/sda /dev/sdb /dev/sdc

    위의 명령은 세개의 SCSI 디스크를 합쳐서 new_vg라는 VG를 만든다는 것이다.
    옵션 ‘-s 16m’은 PE의 크기를 16MB로 정하는 것인데, 만약 옵션 ‘-s’가 생략되면 기본적으로 PE의 크기는 4MB가 된다.  

    VG가 만들어지면 /dev/VolumeGroupName라는 형식으로 디렉토리가 생기게 된다. 위의 예에서는 /dev/new_vg 가 될 것이다.

    VG의 이름을 바꾸려면 vgrename 이라는 명령을 아래와 같이 쓰면 된다.

    # vgrename new_vg vg00

    VG에 LV가 남아있지 않고 비활성화되어 있으면 vgremove로 지울 수 있다. 비활성화시키는 방법은,

    # vgchange -a n vg00

    이고, 다음의 명령으로 지워진다.

    # vgremove vg00

    3)  VG 확장시키기, 축소시키기

    VG의 확장과 촉소는 PV의 추가, 제거로 이루어진다.

    VG에 PV를 추가하는 명령은 vgextend인데, vg00이라는 VG에 PV인 /dev/hda2를 추가하려면 다음과 같이 실행해야 한다.

    # vgextend vg00 /dev/hda2

    PV를 VG에서 제거하는 명령은 vgreduce이다. 그러나 PV에 PE가 할당되어 있으면 제거되지 않는다. 그 할당된 PE를 다른 PV로 옮겨야 제거될 것이다. 빈 PV인 /dev/hda2를 vg00에서 제거하려면,

    # vgreduce vg00 /dev/hda2

    4)  LV 만들기, 이름 바꾸기, 지우기

    VG에 LV를 만들면 /dev/VolumeGroupName/LogicalVolumeName의 형식으로 블록 디바이스가 만들어진다. 이것은 일반 블록 디바이스와 다를 바 없는 용도로 쓸 수 있다.

    LV 를 만드는 명령은 lvcreate인데 일반적인 예는 다음과 같다.

    # lvcreate -L 4g -n data vg00

    위의 명령은 4GB 크기로 vg00이라는 VG에 data라는 새로운 LV를 만드는 것이다. 옵션 ‘-L’은 LV의 크기를 지정하는 것인데, 숫자 뒤의 접미사에 따라 숫자의 단위가 달라진다. k는 KB, m은 MB, g는 GB, t는 TB를 뜻한다. 만약, 접미사가 안 붙어있으면 숫자의 단위는 MB가 된다. ‘-L’ 대신 ‘-l’를 쓸 수도 있는데, ‘-l’ 뒤에는 LE의 갯수를 쓰면 된다.

    LV의 이름을 바꾸는 것은 아래의 명령처럼 간단하고,

    # lvrename /dev/vg00/data /dev/vg00/db

    지우는 것 또한 간단하다.

    # lcremove /dev/vg00/db

    5)  LV 확장시키기

    LV를 확장시키는 명령은 lvextend 인데, 다음은 그 예이다.

    # lvextend -L +2g /dev/vg00/db

    위의 명령은 /dev/vg00/db의 크기를 2GB 만큼 늘린다. 기존의 크기가 4GB 였다면, 옵션 ‘-L 6g’를 줬어도 같은 결과를 보일 것이다. 역시 여기에서도 옵션 ‘-l’를 쓰면 LE 단위로 늘릴 수 있다.

    LV의 크기가 커졌어도 파일 시스템에는 영향을 주지 않으므로 파일 시스템 고유의 툴을 이용하여 확장 해주어야 한다.
    한 가지 주의해야 할 것은 이렇게 크기를 늘릴 때 순서를 뒤바꾸면 절대 안 된다는 것이다. LV 확장 다음에 파일 시스템의 확장이다.

    다음은 파일 시스템 별 확장 방법이다.

    * ext2 : ext2 파일 시스템의 크기를 바꿀 수 있는 명령으로는 resize2fs이 있는데, e2fsprogs 1.19버전 이상에는 기본적으로 포함되어 있다. 그 이하의 버전을 쓴다면 ext2resize라는 프로그램을 다음의 사이트에서 구할 수 있다.

    http;//ext2resize.sourceforge.org

    다음은 일반적인 ext2 의 확장 절차이다.

    # umount /var/lib/mysql
    # lvextend -L +10g /dev/databases/mysql
    # resize2fs /dev/databases/mysql
    # mount /dev/databases/mysql /var/lib/mysql

    LVM tool에 포함되어있는 e2fsadm을 쓰면 LV 확장과 파일 시스템의 확장을 동시에 할 수 있다. 다음의 명령은,

    # e2fsadm?L +10g /dev/databases/mysql

    다음의 두 명령과 같다.

    # lvextend -L +10g /dev/databases/mysql
    # resize2fs /dev/databases/mysql

    * reiserfs : reiserfs는 resize_reiserfs 라는 명령으로 크기를 바꿀 수 있다.

    마운트된 상태에서도 크기를 늘릴 수 있는데, 그 예는 다음과 같다.

    # lvextend -L +5g /dev/devel/cvs
    # resize_reiserfs -f /dev/devel/cvs

    언마운트해서 늘리려면 다음 같이 한다.

    # umount /var/cvs
    # lvextend -L +5g /dev/devel/cvs
    # resize_reiserfs -f /dev/devel/cvs
    # mount /dev/devel/cvs /var/cvs

    6)  LV 축소시키기

    lvreduce는 LV의 크기를 줄이는데, 늘릴 때와 마찬가지로 파일 시스템과 별개로 이루어지므로 데이터를 잃어버릴 수 있으니 상당히 조심해야 한다.

    작업의 순서는 확장할 때와는 반대로, 파일 시스템의 축소 다음에 LV의 축소이다.

    각 파일 시스템 별 축소 방법이다.

    * ext2 : e2fsadm 을 쓰는 것이 간단하다.

    # umount /home
    # e2fsadm -L -2g /dev/vg00/home
    # mount /dev/vg00/home /home

    * reiserfs : 크기를 늘릴 때와는 달리 마운트 된 상태에서는 줄일 수 없다.

    # umount /usr
    # resize_reiserfs -s -1g /dev/vg00/usr
    # lvreduce -L -1g /dev/vg00/usr
    # mount /dev/vg00/usr /usr

    7)  설정의 백업과 복구  

    LVM Tool들은 기본적으로 몇몇을 제외하고 동작 전의 설정상태를 자동으로 백업해둔다.(절대 데이터의 백업이 아니다!) 그 백업파일들은 /etc/lvmconf 라는 디렉토리에 VolumeGroupName.conf{,.[0-9].old}라는 이름으로 만들어진다. 뒤에 번호가 붙어있지 않은 것은 현재의 설정 내용이고, 그 번호가 클수록 오래된 내용이다. 그러므로 바로 전의 설정 내용을 담고 있는 파일에는 이름 뒤에는 .1.old가 붙어있다.

    먼저 설정 백업 파일의 내용을 보려면 다음과 같이 한다.

    # vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -ll -n vg00

    이 파일을 이용해 설정을 복구하려면 다음과 같이 한다.

    # vgchange -a n vg00
    # vgcfgrestore -f /etc/lvmconf/vg00.conf.1.old -n vg00
    # vgchange -a y vg00

 

5. 활용

    몇 가지 유용한 활용 예를 보이겠다.

    1)  두개의 ide disk를 하나의 striped mapping LV로 묶기

    80GB 짜리(실제는 약 76.1GB) IDE 하드디스크 두 개를 striped mapping LV 로 묶는 과정이다.

    먼저 블록 디바이스 이름이 /dev/hde, /dev/hdf 인 디스크들을 PV로 만든다.

    # pvcreate /dev/hde /dev/hdf

    그렇게 만든 PV들을 합쳐서 VG를 만든다.

    # vgcreate vg00 /dev/hde /dev/hdf  

    이제 VG에 LV를 만든다.

    # lvcreate -i 2 -I 4 -L 152g -n striped_lv vg00

    위의 명령으로 152GB 짜리 striped mapping LV가 만들어진 것이다. 옵션을 설명하면 ‘-i 2’는 두개의 PV를 striped 하는데 쓰고, ‘-I 4’는 PE를 4KB로 쪼개서 PV들에게 저장한다는 것이다. ‘-I’ 옵션에는 2^n (0 <= n <= 7), 즉 1, 2, 4, 8, 16, 32, 64, 128 의 숫자를 쓸 수 있다.
    파일 시스템을 만들고, 마운트를 해서,

    # mkreiserfs /dev/vg00/striped_lv
    # mount /dev/vg00/striped_lv /mnt

    bonnie++ 등의 벤치마킹 프로그랭으로 시험해본 결과, linear mapping LV보다 약 1.5배에서 1.8배까지 속도의 차이가 있었다. 물론 억세스가 많아지면 어떻게 되는지는 필자도 시험을 못했다.

    2)  세로운 디스크로 PV 교체하기

    하드디스크를 확장하면서 기존에 있는 하드디스크를 제거해야 할 때는 다음과 같은 과정을 거치면 된다.

    환경은 /dev/hdd, /dev/sda, /dev/sdb가 vg01에 속해있는데, 그중에서 /dev/hdd를 빼고 /dev/sdc를 더하는 과정이다.

    먼저 /dev/sdc 를 PV 로 만들고,

    # pvcreate /dev/sdc

    /dev/sdc를 vg01에 추가한 후에,

    # vgextend vg01 /dev/sdc

    /dev/hdd의 PE 들을 /dev/sdc로 옮긴다.

    # pvmove /dev/hdd /dev/sdc

    성공적으로 옮겨졌으면 vg01에서 /dev/hdd를 제거한다.

    # vgreduce vg01 /dev/hdd

    3)  snapshot LV를 만들어서 안전한 백업하기

    데이터의 변동이 많은 /var등의 디렉토리는 백업 도중에 데이터가 엉키는 수가 있다. 그것을 방지하기 위해서, snapshot LV를 만들어 데이터를 고정시킨 후 백업을 하면 된다.

    일단 snapshot LV 를 만든다.(한 줄로)

    # lvcreate -s -L 5g -n mysqlbackup /dev/vg01/mysql

    위의 명령은 /dev/vg01/mysql에 대한 snapshot LV인 /dev/vg01/mysqlbackup를 만든다. 옵션 ‘-s’는 만들어질 LV가 snapshot 형식임을 정해주고 있다. 옵션 ‘-L’ 는 LV 의 최대 크기를 정해준다. 대게 원본 LV와 크기를 같게 하는 것이 좋다. 사실 snapshot LV는 원본이 갱신되는 부분만 고정시키려고 데이터를 가져와 LE에 할당하기 때문에 많은 LE가 필요하지 않다.

    이제 만든 LV 를 마운트 시킨 후

    # mount /dev/vg01/mysqlbackup /mnt

    백업을 하면 된다.

    # tar cf /dev/rmt0 /mnt

    백업을 마쳤으면 언마운트시킨 후에 snapshot LV 을 지운다.

    # mount /mnt# lvremove /dev/vg01/mysqlbackup

    끝까지 읽어주신 독자들에게 감사드린다. 아무쪼록 필자의 두서없는 글이 많은 도움이 되었으면 한다. 기회가 되면 지면을 통해서 여러분을 다시 뵐  수 있을 것이다.


Trackback 2 Comment 0