Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6370842
  • 博文数量: 162
  • 博客积分: 3600
  • 博客等级: 中校
  • 技术积分: 10366
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-19 11:23
个人简介

专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域

文章分类
文章存档

2014年(2)

2013年(16)

2012年(27)

2011年(117)

分类: LINUX

2011-08-05 13:34:49

一般情况下如果服务器彻底死机。在这种 情况下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目录中设置的脚本,可以完成自动重启。
阅读(2715) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~