Posted
Filed under Computer/Linux

이전 시스템에서는 kexec/kdump를 이용하지 않고 netdump를 사용하였다. 그러나 kernel 2.6.x 부터인가? 아무튼 RHEL부터는 netdump를 사용하지 않고 같은 기능으로 kexec/kdump를 사용하게 되었다.

내가 테스트해본것은 RHEL5.1에서 테스트를 하여 보았다.
아주 잘된다.

Kernel DUMP를 만들고 싶은 노드를 client node라고 말을 하며 kernel dump가 쌓이는 서버를 kdump server라 말을 하겠다. 혼동을 막기위해 이렇게 지칭을 한다.

kdump server )
   Saving kernel crash dump file from client node.
   IP : 192.168.7.13
   setup package : ssh


client node )
   make kernel crash node
   IP : 192.168.7.12
   setup package : kexec/kdump/ssh

   필요한 패키지가 다 깔려 있다고 가정할때 client node 설정을 해보자.
  
   edit /boot/grub/grub.conf file
   ---------------------------------------------
   title Red Hat Enterprise Linux Server (2.6.18-53.el5)
         root (hd0,0)
         kernel /vmlinuz-2.6.18-53.el5 ro root=/dev/sda1 rhgb quiet crashkernel=128M@16M
         initrd /initrd-2.6.18-53.el5.img
   ----------------------------------------------

   여기서 중요한것은 crashkernel=128M@16M 이다. 이것은 i386/x86_64 장비에서 주로 사용하는 옵션이라한다. 만약에 IA64 장비라면 crashkernel=256M@256M 를 사용한다고 인터넷에서 봤다. 정확하게 어떤 옵션을 써야만 하는지는 모르겠다. 일단 128M@16M를 사용하였다.

   이렇게 grub를 수정했다면 이제 시스템을 재부팅하자.

/etc/sysconfig/kdump 파일을 살펴본다. RHEL5.1에서는 이 파일을 별로 수정할것이 없었다. 그러나 혹시나 해서 정보를 넣어본다.
---------------------------------------------
KDUMP_KERNELVER=""
KDUMP_COMMANDLINE=""
KDUMP_COMMANDLINE_APPEND="irqpoll maxcpus=1"
KEXEC_ARGS=" --args-linux"
KDUMP_BOOTDIR="/boot"
KDUMP_IMG="vmlinuz"
KDUMP_IMG_EXT=""
-----------------------------------------------
이 옵션을 본인의 시스템에 맞춰 적당히 수정을 해야할것 같다. 그러나 일반적으로 RHEL5.1같은경우 그냥 default, 값을 썼는데도 잘된다.

그리고 /etc/kdump.conf 파일을 수정해준다.
-------------------------------------------------------
#raw /dev/sda5   # sda5의 raw device에 dump를 save 하고 싶으면 이것을 수정
#net my.server.com:/export/tmp # NFS Server mount된곳에 저장하고 싶을때
net root@192.168.7.13 # kdump server인 192.168.7.13에 root 권한으로 저장하고 싶을때
path /var/crash # dump 파일을 /var/crash 디렉토리에 저장할때
default shell # kernel crash 났을때 shell로 action을 한다.
-------------------------------------------------------
그외 옵션들이 있지만 그외 옵션들은 더 살펴보고 적당히 수정하면 된다. 일단은 여기서는 network 로 다른 server에 kernel crash를 dump떠서 저장하는것이 촛점이므로 그것 위주로 설명한다.
net root@192.168.7.13을 이용했기 때문에 dump파일은 <root@192.168.7.13>:/var/crash/%HOST-%DATE/vmcore 에 저장된다. ( scp /proc/vmcore  <user@server>:/var/crash/%HOST-%DATE/ )

kdump service를 등록하고 start 해준다.

chkconfig kdump on
service kdump start


여기까지 설정이 끝났다면 이제는 ssh를 이용하여 server에 save할수 있도록 ssh 설정을 해줘야 한다. ssh-keygen을 이용하여 kdump용 key를 생성해준다. 위에서 root로 작업했으므로 root에 만들어준다.

ssh-keygen -t rsa -f /root/.ssh/kdump_id_rsa -N ""

이 설정된 파일을 kdump server에 카피를 해서 정상작동되도록 만들어준다.
scp /root/.ssh/kdump_id_rsa root@192.168.7.13:/root/.ssh/authorized_keys2

이제 kdump 의 ssh 설정이 정상으로 되도록 설정을 등록한다.

service kdump propagate
처음하면 암호를 물어본다. 이때 암호를 한번 넣어주면 key가 등록되어 다음부터는 암호없이 된다. 이렇게 꼭 테스트를 해본다.

이렇게 하면 kdump server와 client node의 설정이 끝났다.
server 설정의 거의 없다. 단지 client의 ssh key를 갔다 놓은것이 전부이다. ^^

그러면 정상작동되는지 한번 강제로 kernel을 패닉시켜보자.

client node에서 실행한다.

echo 1 > /proc/sys/kernel/sysrq
echo c > /proc/sysrq-trigger

이렇게하면 자도으로 kernel을 dump 뜨는 화면이 뜨면서 나중에 server에 save한다고 하고 시스템이 재부팅된다. 그럼 server에서 /var/crash 디렉토리를 살펴보면 저장된것을 확인할수가 있다.

2009/08/24 11:07 2009/08/24 11:07
[로그인][오픈아이디란?]