Posted on 2010/03/30 15:23
Filed Under 클러스터란/고성능연산_HPC 조회수: view 17574

#### Redhat Linux ES4 기반 Diskless Cluster 구축하기 #####


작성일 : 2010년 3월 25일
수정일 : 2010년 3월 31일
작성자 : 클루닉스 / 서 진우

 

1. cluster nodes 구성

192.168.30.1    masternode01   master node : 관리서버(OS이미지서버)
192.168.30.2    node02 00:15:17:23:63:9C computing node : 계산서버
192.168.30.3    node03 00:15:17:23:65:52 computing node : 계산서버
192.168.30.4    node04 00:15:17:23:63:48 computing node : 계산서버

diskless 방식의 클러스터 시스템은 관리서버에만 디스크가 존재하고 나머지 계산서버들에는
디스크가 필요없는 형태의 클러스터 구성법이다. 관리서버에서 계산서버들의 디스크 이미지를
생성하고, 계산서버는 부팅 시 PXE네트워크 부팅 방식으로 관리서버의 OS이미지에 네트워크로
연결하여 운영체제 구성을 하는 방식이다. 이런 형태의 클러스터 구성일 경우 관리서버에서만
패키지 관리를 하면 나머지 계산서버에 적용되는 형태로 관리 부담이 많이 줄어드는 장점이
있다. 하지만 관리서버에 문제가 발생하면, 전체 클러스터 시스템이 마비되는 안정성의 문제가
존재한다. 또한 모든 디스크 이미지를 관리서버에 NFS 접속 후 공유하는 방식임으로 NFS성능
상의 문제가 존재한다.

이밖에도 다양한 문제 소지가 있지만, 계산서버의 치명적인 문제가 발생하여 운영체제를 다시
설치해야할 필요가 없기 때문에 초기 한번 구성한 후 계산 서버의 증설이나 교체 절차가 매우
간편하다는 장점이 있다.

diskless 방식의 장점 중 일반 사용자들이 잘못 이해하고 있는 부분이 있는데, 이는 흔히 diskless
방식의 경우 관리노드만 구성하면 계산노드는 모두 자동으로 알아서 모든 설정과 패키지 구성이
이루어 진다는 오해가 많이 있다.

물론 diskless 방식의 경우 사용자 데이터 저장공간인 /home 과 패키지 설치 공간인 /usr등을
관리서버와 공유함으로 이런 효과가 있지만, 이는 diskless 방식이 해주는 것이 아니라, NFS
를 통해 특정 서버의 디렉토리를 공유하는 기술 때문이다. 즉 계산서버의 디스크에 운영체제를
별도로 설치를 한다하더라도 /home, /usr 등을 별도로 NFS 공유를 하게 되면, diskless와 같은
효과를 볼수 있다. 이외의 운영체제 관련 이미지는 관리서버의 운영체제 상태를 그대로 반영
하는 것이 아닌 관리서버 상에 존재하는 계산서버의 운영체제 이미지를 인식하는 것이여서
관리서버의 운영체제 환경이 변경되어도, 계산서버 이미지에 변경 정보를 적용하지 않으면
관리서버 변경 정보가 자동으로 적용되지는 않는다.
(어찌보면 당연한 이야기지만, 계산서버의 운영체제가 관리서버와 동일하게 적용된다면,
hostname, ipaddress, disk partition등의 서버별 공유의 정보도 모두 동일하게 적용되어 문제
가 발생할것이다. )

결과적으로 diskless만의 기술로는 계산노드에 운영체제를 별도로 설치하지 않아도 된다는 장점ㅑ
이외엔 다른 장점은 없다 할 수 있다.

아무튼..diskless 구축 방법에 대해 알아보도록 하자.

참고 : 클러스터 시스템을 패키지로 간단하게 공급하고자 할때 괜찮은 시스템 구성 방식이 될수도
있어 보인다. SI형태로 클러스터 시스템을 구성할 경우가 아닌 단순 패키지형태로 클러스터 시스템
을 구성할 경우 Diskless 방식으로 구성하면 매우 간편할 것이다.


2. 관리서버 구성 - 기본 운영체제 환경 구성

- 기본 패키지 설치

diskless 방식에서는 운영체제 설치, 패키지 설치, 설정 등을 모두 관리서버에서 수행한다.
diskless 방식으로 구성하기 위해서는 기본적으로 아래 3가지 서비스가 반드시 필요하다.

TFTP
DHCP
NFS

이밖에 통합계정관리 환경을 구성할 경우 NIS 혹은 LDAP등의 서비스 구성도 필요하다.

일단 가장 기본적으로 diskless에 필요한 몇 가지 패키지를 관리서버에 설치하도록 한다.

# rpm -Uvh busybox-anaconda-1.00.rc1-8.el4.x86_64.rpm
# rpm -Uvh dhcp-3.0.1-62.EL4.x86_64.rpm
# rpm -Uvh dhcp-devel-3.0.1-62.EL4.x86_64.rpm
# rpm -Uvh tftp-0.39-3.el4.x86_64.rpm tftp-server-0.39-3.el4.x86_64.rpm
# rpm -Uvh system-config-netboot-0.1.40.1-1.el4.x86_64.rpm
# rpm -Uvh system-config-netboot-cmd-0.1.40.1-1.el4.x86_64.rpm

# chkconfig --level 345 tftp on
# /etc/rc.d/init.d/xinetd restart

- 계산노드 이미지 생성

관리노드에 계산서버의 운영체제 이미지를 구성해야 한다. 이 작업은 관리서버의 운영체제를 설치한 바로 직후
구성하는 것이 가장 좋다. 구성되는 계산서버 이미지는 클러스터 노드중 모든 계산서버들이 공유하는 운영체제
이미지로 관리노드 중에 하드디스크 공간이 여유로운 파티션에 구성하는 것이 좋다. 초기 운영체제 구성에 필요
한 디스크 용량의 두배 이상의 공간을 확보하는 것을 권장한다.

# mkdir -p /tftpboot/gridcenter_os/root
# mkdir -p /tftpboot/gridcenter_os/snapshot

관리서버에 설치된 운영체제 파일과 디렉토리를 /tftpboot/gridcenter_os/root 디렉토리에 복사하도록한다.
이때 /proc 와 /sys 밑에 존재하는 파일과 디렉토리는 생략하도록 한다.

# cp -a bin dev etc initrd lib64 media mnt sbin srv usr boot engrid home lib misc opt root selinux tmp var \
/tftpboot/gridcenter_os/root

# du -hs /tftpboot/gridcenter_os/root
3.3G    /tftpboot/gridcenter_os/root

-> 위 구성 중 /usr 등과 같이 이후 diskless 구성이 완료된 후 계산서버에서 관리서버의 실제 /usr을 바로 nfs로
공유하는 디렉토리는 이미지로 보존할 필요가 없다. 하지만 초기 diskless 구성 시점에서 /usr 밑에 존재하는
몇가지 라이브러리(lib, lib64) 와 운영체제 명령어(bin, sbin) 등이 필요하기 때문에 초기 구성할때는 복사를
해두는 것을 권장한다.

/tftpboot/gridcenter_os/root 디렉토리는 모든 계산노드의 / 로 마운트 되게 된다. 본 디렉토리에 있는 파일은
기본적으로 ro 형태로 마운트 되어 지며, 각 계산노드별로 독립적인 구성이 필요한 파일에 대해서는 이후 별도로
정의한 후 계산 노드별로 /tftpboot/gridcenter_os/snapshot 디렉토리 밑에서 관리되어 진다. 

- DHCP 구성

# vi /etc/dhcpd.conf
------------------------------------------------------------------------------------
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample 
#
ddns-update-style none;
ignore client-updates;
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.30.255;
option routers 192.168.30.1;
#option domain-name-servers 192.168.30.1;
#option domain-name "masternode.gridcenter.hpc";

allow bootp;
allow booting;

class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server 192.168.30.1;
    filename "linux-install/pxelinux.0";
}
group {
        next-server 192.168.30.1;
        filename "linux-install/pxelinux.0";
        host node02 {
                hardware ethernet 00:15:17:23:63:9C;
                fixed-address 192.168.30.2;
                }
        host node03 {
                hardware ethernet 00:15:17:23:65:52;
                fixed-address 192.168.30.3;
                }

        host node04 {
                hardware ethernet 00:15:17:23:63:48;
                fixed-address 192.168.30.4;
                }
        }

subnet 192.168.30.0 netmask 255.255.255.0 {
   range 192.168.30.2 192.168.30.5;
}
------------------------------------------------------------------------------------------

# /etc/rc.d/init.d/dhcpd restart
# ps aux | grep dhcpd
root     11078  0.0  0.0  5152 1232 ?        Ss   15:01   0:00 /usr/sbin/dhcpd

# chkconfig --level 345 dhcpd on

- NFS 구성

# vi /etc/exports
-------------------------------------------------------------------------------------------
/tftpboot/gridcenter_os         *(rw,sync,no_root_squash)

-------------------------------------------------------------------------------------------

# /etc/rc.d/init.d/nfs restart
# chkconfig --level 345 nfs on

- PXE Diskless 구성

# pxeos -a -i gridcenter -p NFS -D 1 -s 192.168.30.1 -L /tftpboot/gridcenter_os -k 2.6.9-78.ELsmp gridcenter
Kernel not specified, using 2.6.9-78.ELsmp

Usage: pxeos [-a|-m|-d|-l] [-h] [-i <description> ] [-p <protocol> ] [-D<1|0>] [-s <server>] [-L <location>] [-A <1|0>] [-u <user>] [-k <kernel>] [-K <kickstart>] [-P <password>] name

pxeos 를 통해 diskless 방식으로 boot kernel 이미지를 생성하고, pxeos 이미지를 생성한다.
정상적으로 수행되면 /tftpboot/linux-install/gridcenter 디렉토리 밑에 vmlinuz 와 initrd.img 파일이 생성되어 있다.

# ls /tftpboot/linux-install/gridcenter/
initrd.img  vmlinuz

# pxeos -l
gridcenter
        Description:    gridcenter
        Protocol:       NFS
        isDiskless:     True
        Server:         192.168.30.1
        Location:       /tftpboot/gridcenter_os

다음으로 pxeboot 명령을 통해 계산노드별 PXE boot 환경 설정을 해야한다. 본 과정에 앞서 전체 클러스터 구성 서버의
네트워크 정보를 사전에 정의하도록 한다.

# vi /etc/hosts
----------------------------------------------------------------------------------
127.0.0.1               localhost.localdomain localhost
192.168.30.1            masternode01
192.168.30.2            node02
192.168.30.3            node03
192.168.30.4            node04
-----------------------------------------------------------------------------------

# vi /etc/hosts.diskless
-----------------------------------------------------------------------------------
192.168.30.2,node02,00:15:17:23:63:9C
192.168.30.3,node03,00:15:17:23:65:52
192.168.30.4,node04,00:15:17:23:63:48
-----------------------------------------------------------------------------------

# pxeboot -a -O gridcenter -r 28753 -S node02 -e eth0 192.168.30.2
# pxeboot -a -O gridcenter -r 28753 -S node03 -e eth0 192.168.30.3
# pxeboot -a -O gridcenter -r 28753 -S node04 -e eth0 192.168.30.4


pxeboot 명령을 통해 pxeboot 노드를 추가하면 /tftpboot/linux-install/pxelinux.cfg 디렉토리 하단에 각 노드별
고유의 pxeboot 설정 파일(C0XXXXX)이 생성된다.

# cat C0A81E02
-------------------------------------------------------------------------------------
default gridcenter

label gridcenter
    kernel gridcenter/vmlinuz
    append  initrd=gridcenter/initrd.img root=/dev/ram0 init=disklessrc NFSROOT=192.168.30.1:/tftpboot/gridcenter_os ramdisk_size=28753 ETHERNET=eth0 SNAPSHOT=node02
--------------------------------------------------------------------------------------

그리고 /tftpboot/gridcenter_os/snapshot 디렉토리 밑에 각 계산 노드별 독립적으로 구성이 되어야하는 파일 및 디렉토리
에 대한 구성이 각 노드의 hostname 명으로 생성되어 있을 것이다.

# ls /tftpboot/gridcenter_os/snapshot/
files  node02  node03  node04

# vi /tftpboot/gridcenter_os/snapshot/files
--------------------------------------------------------------------------------------
/boot/kernel.h
/dev/
/etc/resolv.conf
/etc/resolv.conf.predhclient
/etc/yp.conf
/etc/yp.conf.predhclient
/etc/ntp.conf
/etc/ntp.conf.predhclient
/etc/ntp/step-tickers
/etc/ntp/step-tickers.predhclient
/etc/adjtime
/etc/cups/certs/
/etc/modules.conf
/etc/fstab
/etc/sysconfig/hwconf
/etc/X11/XF86Config
/etc/X11/XF86Config.backup
/etc/X11/xorg.conf
/etc/X11/xorg.conf.backup
..
/var/lib/nfs/
/var/lib/random-seed
/var/lib/xkb/
/var/tmp/
/var/lock/
/var/run/
/var/spool/
/var/log/
/var/lib/logrotate.status
/var/cache/man/
/var/lib/misc/
/var/lib/mrtg/
/var/lib/dhcp/
/var/lib/dhclient/
/var/lib/ntp/
/var/yp/binding/
/root/
-----------------------------------------------------------------------------------------

/tftpboot/gridcenter_os/snapshot/files 파일에 명시된 파일은 각 노드별로 독립적인 구성이 필요한 파일리스트
로 기본 정의된 파일 목록이 정의되어 있다.
만일 추가할 파일이 있을 경우엔 동일 디렉토리내에 files.custom 파일을 생성하고 관련 파일 목록을 기록하면 된다.
기본적으로 PXE Diskless 구성 방법은 여기까지 이다. 이후 각 클러스터 시스템의 운영체제 구성과 파티션 구성에
맞게 최적화하는 작업이 남아있다.

일단 지금까지 구성한 내용으로 정상적으로 diskless 운영체제로 게산노드가 부팅이 되는지를 확인한다.

부팅까지는 잘된다고 가정하고..이후 적용되는 셋팅 내용들에 대해 알아보도록 한다.
위 방식으로 diskless 를 구성하면 부팅 도중 sysfs mount 에러가 발생할 것이다.
해결 방법은 아래와 같다.

# mkdir /tftpboot/gridcenter_os/root/sys
# mkdir /tftpboot/gridcenter_os/snapshot/<hostname>/sys
# vi /tftpboot/gridcenter_os/snapshot/files.custom
-------------------------------------------------------------------------------------------
/sys/
-------------------------------------------------------------------------------------------

이제 sysfs 문제는 발생하지 않을 것이다.

이제 각 노드별 고유의 설정을 반영해야 한다. 우선 네트워크 정보에 대해 반영하도록 하자.
diskless 방식에서 초기 셋팅 이후 변경 정보를 반영할때 고려해야하는 경우가 두가지가 있다.
첫째는 모든 서버에 공통으로 적용되는 설정, 둘째는 각 서버별로 고유의 설정이 존재하는 경우이다.
모든 계산 서버에 공통으로 적용되는 설정은 /tftpboot/gridcenter_os/root 밑에 반영하도록 한다.
각 계산서버별로 독립적인 설정이 필요한 경우는 /tftpboot/gridcenter_os/snapshot/<hostname> 밑에
설정을 반영하고, /tftpboot/gridcenter_os/snapshot/files.custom 에 해당 파일을 등록하도록 한다.

계산노드별로 고유의 hostname 과 고유의 ip를 등록해야 한다. 하지만 /etc/hosts 파일의 경우 모든
계산 서버가 동일한 설정 파일을 가지게 된다.

# vi /tftpboot/gridcenter_os/root/etc/hosts
---------------------------------------------------------------------------------------------
127.0.0.1               localhost.localdomain localhost
192.168.30.1            masternode01
192.168.30.2            node02
192.168.30.3            node03
192.168.30.4            node04
---------------------------------------------------------------------------------------------

# vi /tftpboot/gridcenter_os/snapshot/node02/etc/sysconfig/network
---------------------------------------------------------------------------------------------
NETWORKING=yes
HOSTNAME=node02
GATEWAY=192.168.30.1
---------------------------------------------------------------------------------------------

node03, node04 도 적용한다.

# vi /tftpboot/gridcenter_os/snapshot/files.custom
---------------------------------------------------------------------------------------------
/sys/
/etc/sysconfig/network
---------------------------------------------------------------------------------------------

다음은 계산서버별 디스크 파티션 고유 설정을 적용한다.
diskless 방식으로 계산노드를 구성한 경우 기본 파티션 구성은 아래와 같다.

# cat /tftpboot/gridcenter_os/snapshot/node02/etc/fstab
---------------------------------------------------------------------------------------------
# /etc/fstab for diskless clients, written by system-config-netboot
none               /dev/pts                devpts  gid=5,mode=620  0 0
none               /dev/shm                tmpfs   defaults        0 0
none               /tmp                    tmpfs   defaults        0 0
/dev/cdrom         /media/cdrom            iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0           /media/floppy           auto    noauto,owner,kudzu 0 0
---------------------------------------------------------------------------------------------

기본 운영체제 구성 이외의 사용자 데이터 저장공간인 /home 이나 추가 패키지 저장소인 /usr 등에
대해 nfs 마운트 설정을 추가하도록 한다.

# vi /etc/exports
---------------------------------------------------------------------------------------------
/tftpboot/gridcenter_os         *(rw,sync,no_root_squash)
/home                           *(rw,sync,no_root_squash)
/usr                            *(rw,sync,no_root_squash)
/engrid                         *(rw,sync,no_root_squash)
---------------------------------------------------------------------------------------------

# /etc/rc.d/init.d/nfs reload

# vi /tftpboot/gridcenter_os/snapshot/node02/etc/fstab
---------------------------------------------------------------------------------------------
none               /dev/pts                devpts  gid=5,mode=620  0 0
none               /dev/shm                tmpfs   defaults        0 0
none               /tmp                    tmpfs   defaults        0 0
/dev/cdrom         /media/cdrom            iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0           /media/floppy           auto    noauto,owner,kudzu 0 0
masternode01:/home      /home           nfs     rw,intr,soft 0 0
masternode01:/usr       /usr            nfs     rw,intr,soft 0 0
masternode01:/engrid    /engrid         nfs     rw,intr,soft 0 0
---------------------------------------------------------------------------------------------

node03,node04 에도 동일하게 적용한다.

/tftpboot/gridcenter_os/snapshot/node02/etc/fstab 파일은 기본적으로 snapshot/files 에 등록되어
있으므로 별도 등록이 필요하진 않다.

계산 노드에 다른 독립적인 구성이 필요한 파일이 있는 경우에도 동일한 방법으로 관련 파일을 추가하면
된다.

3. HPC 클러스터 구성

위 단계에서 운영체제에 관련된 기본 Diskless 방식에 대해 알아보았다. 본 단계에서는 Diskless 환경으로
구성된 운영체제 시스템에서 HPC 클러스터 관련 설정을 적용해 보도록 한다.

HPC 클러스터 환경 구성을 위해서는 rsh 설정, ssh 설정, compiler 설치, mpich 관련 패키지 설치등이 있다.
먼저 rsh, ssh 설정에 대해 알아보자.

먼저 관리노드 자신에 대한 rsh 관련 설정을 한다.
# chkconfig --level 345 rsh on
# chkconfig --level 345 rlogin on
# vi /etc/securetty
------------------------------------------------------------------------------------------------
.
.
rsh
rlogin
------------------------------------------------------------------------------------------------

# vi /etc/hosts.equiv
------------------------------------------------------------------------------------------------
masternode01
node02
node03
node04
------------------------------------------------------------------------------------------------

# vi /root/.rhosts
------------------------------------------------------------------------------------------------
masternode01
node02
node03
node04
------------------------------------------------------------------------------------------------

 

다음은 계산 노드들에 대한 rsh 관련 설정을 한다.
모든 계산 노드에 rsh 관련 설정 적용하기 위해서는 /tftpboot/gridcenter_os/root 밑에 있는 설정 파일을 수정
하면 바로 적용된다. 이때 chroot 를 사용하면 경로에 대한 혼돈을 조금이나마 줄일 수 있을 것이다.

# chroot /tftpboot/gridcenter_os/root
# chkconfig --level 345 rsh on
# chkconfig --level 345 rlogin on
# vi /etc/securetty
------------------------------------------------------------------------------------------------
.
.
rsh
rlogin
------------------------------------------------------------------------------------------------

# vi /etc/hosts.equiv
------------------------------------------------------------------------------------------------
masternode01
node02
node03
node04
------------------------------------------------------------------------------------------------

# exit

/root/.rhosts 파일은 /root 디렉토리 자체가 계산노드별로 독립 구성 가능토록 지정되어 있기 때문에 계산노드별로
개별 설정을 해야한다.

# vi /tftpboot/gridcenter_os/snapshot/node02/root/.rhosts
------------------------------------------------------------------------------------------------
masternode01
node02
node03
node04
------------------------------------------------------------------------------------------------

node03, node04 모두 적용한다.

# /etc/rc.d/init.d/xinetd restart

xinetd 데몬 재시작은 모든 서버에 적용하다.
이제 모든 서버에 rsh 접속이 정상적으로 이루어 지는지를 확인한다.


다음은 ssh 인증 설정이다. ssh 관련 설정은 rsh 와 같은 방식으로 수동으로 적용해도 되고, 관리노드에
ensh 설치 후 ssh 설정 적용도 가능하다. ensh 의 rsh_apply는 diskless 방식에서는 기본적으로 적용이 안되는데,
이는 rsh 설정 시 반영되는 /etc/xinit.d  , /etc/securetty , /etc/hosts.equiv 파일 모두가 diskless
root 이미지에서 공통으로 공유하는 파일이기 때문이다. 적용가능토록 하기 위해서는 snapshot/files.cutom 파일에
관련 파일 정보를 등록한 후 사용하면 되지만 그러면 해당 파일은 개별적으로 관리를 해야한다.
ssh 인증 관련 설정은 /root/.ssh /etc/ssh 에 설정이 반영되는데, 위 디렉토리들은 모두 기본적으로 개별
설정될 수 있게 사전 정의된 디렉토리들이다. 그러므로 ssh 설정은 ensh 를 통해 적용이 가능하다.

관리노드에 ensh rpm 을 설치한다.

# rpm -Uvh ensh-2.1.11-091009.x86_64.rpm
# vi /engrid/ensh/etc/nodelist
------------------------------------------------------------------------------------------------
masternode01
node02
node03
node04
-----------------------------------------------------------------------------------------------
# source /etc/profile.d/ensh.sh

# cp /etc/profile.d/ensh.sh /tftpboot/gridcenter_os/root/etc/profile.d/
# ensh --init

# sshkeysync.exe 

- 패키지 설치 관련

기본 인증 관련 설정이 완료되면, 패키지 설치 단계 이다. 패키지 설치는 /usr, /engrid 등에 설치가 될것인데,
이 경로는 모두 관리 노드의 실제 디렉토리가 모두 직접적으로  NFS 공유된 상태임으로 관리노드에만 설치하면
계산노드에는 바로 반영이 될것이다. 가급적 패키지 설치는 위와같이 직접 NFS 공유된 경로에 설치를 하도록
한다.

패키치 설치 이후 설정 파일 적용은 다음과 같다.

관리노드 자신에 대한 패키지 환경 설정은 /etc/profile.d 밑에 설정 파일을 만들면 된다.
게산노드는 /tftpboot/gridcenter_os/root/etc/profile.d 밑에 만들도록 한다.

만일 rpm 과 같이 운영체제 디렉토리에 분산되어 설치되는 패키지의 경우 chroot 를 통해 root 경로 변경 후
설치 하면 모든 계산 서버에 적용이 되어 질것이다.

# chroot /tftpboot/gridcenter_os/root
# rpm -Uvh ensh-2.1.11-091009.x86_64.rpm

만일 패키지 관리가 안되어서 관리노드와 계산노드의 패키지 구성이 일치 하지 않은 경우에는 앞서 diskless
초기 구성때에 수행했던 관리노드 패키지 설치 구성으로 계산노드 운영체제 이미지를 만드는 방법과 동일하게
재 적용해도 된다. (가급적 이런 상황이 안 생기게 주의할 것..)

# cp -a bin dev etc initrd lib64 media mnt sbin srv usr boot engrid home lib misc opt root selinux tmp var \
/tftpboot/gridcenter_os/root

- 사용자 계정 동기화

관리노드에 적용된 사용자 계정을 계산노드에 동기화 하는 방법으로 NIS나 LDAP을 이용해도 되지만, Diskless
방식에서는 모든 계정 관련 설정이 관리노드에 물리적으로 존재함으로 굳이 NIS 같은 서비스로 동기화 할 필요는
없어 보인다.

계정동기화 방법은 아래와 같다.

먼저 관리노드에서 계정을 생성한다.

# adduser alang
# passwd alang

# cp /etc/passwd /etc/group /etc/shadow /tftpboot/gridcenter_os/root/etc


- network channel 분리

eth1 네트워크 장치를 통해 두개의 이더넷 환경을 구성하고자 할 경우 아래와 같이 수행한다.

# vi /tftpboot/gridcenter_os/root/etc/sysconfig/network-scripts/ifcfg-eth1
---------------------------------------------------------------------------------------------------------
DEVICE=eth1
ONBOOT=no
---------------------------------------------------------------------------------------------------------

# vi /tftpboot/gridcenter_os/snapshot/files.custom
---------------------------------------------------------------------------------------------------------
.
/etc/sysconfig/network-scripts/ifcfg-eth1
---------------------------------------------------------------------------------------------------------

# vi /tftpboot/gridcenter_os/snapshot/node02/etc/sysconfig/network-scripts/ifcfg-eth1
--------------------------------------------------------------------------------------------------------
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.20.2
NETMASK=255.255.255.0
ONBOOT=yes
--------------------------------------------------------------------------------------------------------

node03,node04 적용

3. 시스템 구성 자동화

- 패키지 설치 및 root 이미지 구성
위에서 설명한 diskless 구성하는 방법을 모두 자동화 시키는 스크립틀를 만들어 보자
본 스크립트 사용방법은 아래와 같다.

먼저 해당 설치 패키지를 관리노드의 /usr/local/src 밑에 압축을 해제 한다.

# tar xzvf gc_diskless_pkg.tar.gz -C /usr/local/src
# cd /usr/local/src/gc_diskless_pkg

그런 후 hosts.diskless 파일을 생성한다.

# vi /usr/local/src/gc_diskless_pkg/hosts.diskless
-------------------------------------------------------------------------------------------------------
192.168.30.2,node02,00:15:17:23:63:9C
192.168.30.3,node03,00:15:17:23:65:52
192.168.30.4,node04,00:15:17:23:63:48
-------------------------------------------------------------------------------------------------------

기본적인 rsh 설정 및 패키지 설치등을 모두 마무리 한다.
그런 후 설치 스크립트의 설치 관련 변수를 확인한 후 설치 환경에 맞게 수정한다.

# vi /usr/local/src/gc_diskless_pkg/gc_diskless_install.sh
-------------------------------------------------------------------------------------------------------
PKG_SRC="/usr/local/src/gc_diskless_pkg"  -> 설치 패키지 위치
HOSTMAP="${PKG_SRC}/hosts.diskless"       -> diskless node map 설정 파일
MASTERIP="192.168.30.1"                   -> diskless 관리서버 IP
DHCPIP="192.168.30.2 192.168.30.100"      -> DHCP range 설정
ETHERNETDEV="eth0"                        -> diskless 구성 네트워크 장치
------------------------------------------------------------------------------------------------------

설치 스크립트를 실행한다.

# /usr/local/src/gc_diskless_pkg/gc_diskless_install.sh

설치 스크립트 내용은 아래와 같다.

# vi gc_diskless_install.sh
---------------------------------------------------------------------------------------------------------
#!/bin/sh

#####################################################################
PKG_SRC="/usr/local/src/gc_diskless_pkg"
HOSTMAP="${PKG_SRC}/hosts.diskless"
MASTERIP="192.168.30.1"
DHCPIP="192.168.30.2 192.168.30.100"
ETHERNETDEV="eth0"
#####################################################################

# sample hosts.diskless file 
# 192.168.30.2,node02,00:15:17:23:63:9C

if [ \( ! -d $PKG_SRC \) -o \( ! -f ${HOSTMAP} \) ]
then
 echo "check $PKG_SRC directory or ${HOSTMAP} file .. "
 exit;
fi


echo "1. Install to GridCenter Diskless Package.."

cd $PKG_SRC
rpm -Uvh busybox-anaconda*
rpm -Uvh dhcp*
rpm -Uvh tftp*
rpm -Uvh system-config-netboot*

/sbin/chkconfig --level 345 tftp on
/etc/rc.d/init.d/xinetd restart

echo "2. Create Root Image.."

mkdir -p /tftpboot/gridcenter_os/root
mkdir -p /tftpboot/gridcenter_os/snapshot

cd /

#cp -a bin dev etc initrd lib64 media mnt sbin srv usr boot engrid home lib misc opt root selinux tmp var \
#/tftpboot/gridcenter_os/root

ROOTIMGFILE=`ls -1 / | grep -v "sys" | grep -v "proc" | grep -v "lost+found" | grep -v "tftpboot"`

for SRCFILE in `echo $ROOTIMGFILE`
do
echo "copy $SRCFILE directory .."
cp -a /${SRCFILE} /tftpboot/gridcenter_os/root
done


du -hs /tftpboot/gridcenter_os/root

echo "3. Configure Diskless Environment.."
echo "3.1. Configure DHCP.."

BROADCAST=`echo $MASTERIP | cut -d . -f 1,2,3`

cat <<make_scripts > /etc/dhcpd.conf
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample 
#
ddns-update-style none;
ignore client-updates;
default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address ${BROADCAST}.255;
option routers $MASTERIP;
#option domain-name-servers $MASTERIP;
#option domain-name "masternode.gridcenter.hpc";

allow bootp;
allow booting;

class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    next-server $MASTERIP;
    filename "linux-install/pxelinux.0";
}
group {
        next-server $MASTERIP;
        filename "linux-install/pxelinux.0";
make_scripts

DHCPVAR=`cat $HOSTMAP`

for A in `echo $DHCPVAR`
do

 IP_VAR=`echo $A | cut -d , -f 1`
 HOST_VAR=`echo $A | cut -d , -f 2`
 MAC_VAR=`echo $A | cut -d , -f 3`

 echo -n "host $HOST_VAR {
 hardware ethernet $MAC_VAR;
 fixed-address $IP_VAR;
 }
 " >> /etc/dhcpd.conf
done

echo -n "
        }
subnet ${BROADCAST}.0 netmask 255.255.255.0 {
   range $DHCPIP;
}
" >> /etc/dhcpd.conf

/etc/rc.d/init.d/dhcpd restart
/sbin/chkconfig --level 345 dhcpd on

echo "3.2. Configure NFS .."

echo "/tftpboot/gridcenter_os         *(rw,sync,no_root_squash)" >> /etc/exports
/etc/rc.d/init.d/nfs restart
/sbin/chkconfig --level 345 nfs on


echo "3.3. Configure PXEOS.."

/usr/sbin/pxeos -a -i gridcenter -p NFS -D 1 -s $MASTERIP -L /tftpboot/gridcenter_os -k `uname -r` gridcenter

for B in `echo $DHCPVAR`
do

        IP_VAR=`echo $B | cut -d , -f 1`
        HOST_VAR=`echo $B | cut -d , -f 2`

/usr/sbin/pxeboot -a -O gridcenter -r 28753 -S $HOST_VAR -e $ETHERNETDEV $IP_VAR

done

ls /tftpboot/gridcenter_os/snapshot

echo "3.4. Configure etc .."

mkdir /tftpboot/gridcenter_os/root/sys

for C in `echo $DHCPVAR`
do
        HOST_VAR=`echo $C | cut -d , -f 2`

mkdir /tftpboot/gridcenter_os/snapshot/${HOST_VAR}/sys

cat <<make_scripts > /tftpboot/gridcenter_os/snapshot/${HOST_VAR}/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=${HOST_VAR}
GATEWAY=${MASTERIP}
make_scripts

done

echo "/sys/" > /tftpboot/gridcenter_os/snapshot/files.custom
echo "/etc/sysconfig/network" >> /tftpboot/gridcenter_os/snapshot/files.custom

echo "Complete Diskless Configure .."
--------------------------------------------------------------------------------------------------------

이것으로 Diskless 설치 관련 기술 설명을 마치도록 한다.

Writer profile
author image
-아랑 -
2010/03/30 15:23 2010/03/30 15:23

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우
Twitter :@muchunalang

Counter

• Total
: 4244808
• Today
: 958
• Yesterday
: 1584