一般情况下如果服务器彻底死机。在这种 情况下klogd和syslogd作为两个记录日
志的服务也一并终止。因此在重启之前不会有任何日志记录。所以如果服务器重启
的情况经常发生,最好的方法是通过 netdump来获得死机时候的内存镜像以及
dumplog文件。
在RHEL4.0里面提供了Netdump的工具。该工具的工作模式是C/S结构,其主要作用
与原理是:
在网络中配置一台Netdump服务器来监控网络中所有的Netdump客户端,如果一旦某
客户端因各种原因出现了内核冲突而死机,Netdump服务器就可以收集该客户端在
死机时的完整的内存镜像以及帮助其建立错误日志记录。这些收集的信息会有利于
管理员诊断死机的原因以及排查错误。
现在通过实验来说明这个配置过程以及操作方法:
首先需要两台安装了RHEL4.0的系统,我使用的版本是RHEL4.0 UP4。
其中IP:192.168.1.11 --àNetdump服务器
IP:192.168.1.12 --àNetdump客户端
客户端在当机的时候会通过UDP协议将Crash信息、错误日志以及完整的内核镜像发
送给服务器;而服务器通过打开6666端口监听和接收客户端的错误信息,并将其记
录到/var/crash目录相应的文件夹内。另外,客户端与服务器要实现自动的错误信
息传送,需要通过ssh协议使客户端能够与服务器建立安全连接,这就需要客户端
能够获得服务器上的密钥。
现在开始进行配置:
首先配置服务器:
1. 首先需要确保服务器上的/var/crash目录有足够大的空间,因为尽管客户端所
发送过来的错误日志不会占用很大空间,但是其发送过来的内存镜像vmcore是与其
内存一样大小的。
2. 确保服务器内安装了以下软件包并启动相关服务:
[root@node1 RPMS]# rpm -qa | grep netdump
netdump-0.7.16-2
netdump-server-0.7.16-2 --à尤其是netdump-server
[root@node1 ~]# service netdump-server start
Starting netdump server: [ 确定 ]
[root@node1 ~]# chkconfig netdump-server on
[root@node1 ~]# chkconfig sshd on
并确保UDP的6666端口处于监听状态
[root@node1 ~]# netstat -nl | grep 6666
udp 0 0 0.0.0.0:6666 0.0.0.0:*
同时如果在服务器上只是希望通过Netconsole来接收客户端内核出错的信号,则需
要进行下面的操作:
[root@node1 ~]# vi /etc/sysconfig/syslog
在SYSLOGD_OPTIONS之后加上-r选项,修改之后的结果为:
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
之后保存退出,并重启syslog服务:
[root@node1 ~]# service syslog restart
Shutting down kernel logger:[ OK ]
Shutting down system logger:[ OK ]
Starting kernel logger:[ OK ]
Starting system logger:[ OK ]
3. 在服务器上设置netdump用户的密码:
[root@node1 ~]# passwd netdump
Changing password for user netdump.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
到此为止,在服务器上的工作基本上完成。
现在开始在客户端上进行配置:
1. 首先确保客户端与服务器的网络连通性,为了避免麻烦可以将防火墙关闭。
2. 确保客户端上安装了Netdump工具,但不是服务器包。
[root@node1 RPMS]# rpm -qa | grep netdump
netdump-0.7.16-2
3. 在客户端上编辑/etc/sysconfig/netdump文件,指定netdump服务器的IP地址以
及syslog服务器的IP地址:
[root@node2 ~]# vi /etc/sysconfig/netdump
增加下面的两行:
SYSLOGADDR=192.168.1.11
NETDUMPADDR=192.168.1.11
4. 在客户端上执行:
[root@node2 ~]# service netdump propagate
's password:
[root@node2 ~]#
该命令会使客户端将自己的/etc/sysconfig/.ssh/netdump_id_dsa.pub公钥文件拷
贝到服务器上,并命名为/var/crash/.ssh/authorized_keys2。这样netdump进程
在客户端启动的时候就可以自动通过安全连接拷贝自己的cookie(一个64bit的进
程密钥)到服务器上而不需要询问密码。
5. 启动服务:
[root@node2 ~]# service netdump start
Initializing netdump
Initializing netdump console […networking console startup…]
Message from syslogd@node2 at Sun May 27 08:55:04 2007 ...
node2 kernel: [...network console startup...]
[root@node2 ~]# chkconfig netdump on
现在观察服务器的/var/crash目录下:
[root@node1 ~]# cd /var/crash/
[root@node1 crash]# ls
192.168.1.12-2007-05-23-01:05 magic scripts
已经有了以192.168.1.12-2007-05-23-01:05格式命名的文件夹
[root@node1 crash]# cd 192.168.1.12-2007-05-23-01\:05/
[root@node1 192.168.1.12-2007-05-23-01:05]# ls
log
[root@node1 192.168.1.12-2007-05-23-01:05]# cat log
[...network console startup...]
[...network console startup...]
可见这个文件夹命名的格式就是:/var/crash/Clietn_IP_address$Date$time
到此为止,客户端也配置完成,最后进行测试:
测试的原理就是设法将客户端crash掉,然后看其内存信息以及错误日志是否保存
到服务器中。
为了实现这一要求,需要进行下列操作:
1. 客户端上执行命令开启magic key SysRq的功能:
[root@node2 ~]# echo 1 > /proc/sys/kernel/sysrq
2. 然后在客户端上按住Alt-SysRq-c组合键,这样客户端就当机了。
在当机的时候,会发现最下面有Netdump Start!的显示,之后就是拷贝动作。
而在服务器上,如果进入了/var/crash/192.168.1.12-2007-05-23-01:05目录,会
发现多出一个vmcore的文件,该文件就是客户端的内存信息。
在拷贝完成之后,按照在/var/crash/scripts目录中设置的脚本,可以完成自动重启。
阅读(609) | 评论(0) | 转发(0) |