《构建高可用Linux服务器 第3版》—— 2.5 紧急处理线上服务器故障的办法

2.5 紧急处理线上服务器故障的办法

很多时候,网站或业务系统的服务器出现了故障,我们必须紧急修复,保证网站或业务系统能够使用。一般我们会遇到哪些系统故障,又该如何来处理呢?接下来逐个分析。

2.5.1 更改Administrator密码导致计划任务无法执行

问题描述:公司有位系统管理员离职了,他曾负责管理多台Windows Server 2003服务器,于是负责安全的部门要求接手的系统管理员更改Administrator密码,粗心的系统管理员急急忙忙地更改了Windows Server 2003的Administrator密码,却发现Windows Server2003的计划任务(即Scheduled Tasks)全都执行不了,出现这个问题其实是因为Windows Server2003的计划任务都要求输入正确的Administrator密码。

解决办法:大家养成好习惯,每次更改完Windows Server 2003密码后一定要检查一下计划任务能否正常执行,否则很容易导致公司的重要业务执行不了,进而影响整个网站的运维及业务,希望此问题能引起大家的注意。

2.5.2 CentOS 5.8的root密码被恶意篡改

在公司的内部CentOS 5.8开发机器下,用户基本都是由su-切换到root,不过这时有一个问题,假如多人知道root的账号和密码,那么如果出现问题,你就不知道到底是谁干的坏事,日志里记录的都是root干的。新上架的开发服务器的root密码就曾被开发人员乱改。其实,这时候可以给他们的账户分配sudo权限,这样就可以通过log或last等命令查询开发人员做的事情了。

实际部署:我们可以建立一个admin组,让这个组的用户权限和root一样。我们的某开发小组有4个开发人员正准备使用新添置的开发服务器,我们可以准备给每一个开发人员分配一个账户,密码由他们各自保管,以后考虑将权限细化分配。具体步骤如下。

1)修改sudoers文件,即/etc/sudoers文件(执行visudo命令效果一样),在最后加入以下内容:

%admin ALL=(ALL) ALL
2)添加admin组,命令如下:

groupadd admin
3)添加用户,这里添加4个用户,分别对应4个开发人员,添加命令如下:

useradd yuhongchun

useradd wangxiaona

useradd zhanghua

useradd tangyihe
密码均由4个开发人员自己设置和保管,相互之间不知道对方的密码。

4)添加用户到admin组,命令如下:

usermod -a -G admin yuhongchun

usermod -a -G admin wangxiaona

usermod -a -G admin zhanghua

usermod -a -G admin tangyihe
这样每个开发人员就都有sudo权限了,而每个用户所做的事情基本可以通过日志查询到。注意:以上操作只适应于开发或测试环境,线上机器为了安全考虑,不建议分配具有sudo权限的用户。

2.5.3 bash文件损坏该如何正确处理

故障描述:在IP为192.168.21.36的FreeBSD 8.1 x86_64机器上安装软件时不小心将其依赖的库文件libintl.so.8丢失了,导致所有以bash为基础的shell用户不能登录。由于大家都喜欢在此机上用bash,所以均将其配置成了默认的shell,也就是说所有的用户都不能登录了,系统报错如下:

/libexec/ld-elf.so.1: Shared object "libintl.so.8" not found, required by "bash"

Connection to 192.168.21.36 closed.
解决方法如下所示。

1)用单用户模式进入系统;

2)扫描磁盘(此步操作是安全的),命令如下:

fsck -y
3)将文件系统重新挂载,命令如下:

mount -a
4)将root的默认shell切换到sh,命令如下:

chsh -s sh
5)其实进行到第4步,我们就可以用root以sh模式进入系统了,但为了完美解决问题,这时候可以安装一下bash,命令如下:

pkg_add -r-v bash
重启后一切正常,故障排除。

2.5.4 正确操作nohup让程序始终在后台运行

我的Nginx负载均衡器监控Nginx进程的脚本nginx_pid需要放入后台不间断运行,所以想用命令/bin/sh /data/nginx_pid.sh &来达到此目的,在输入完命令后我就关闭了终端,可再次登录终端时发现此程序并没有运行。忽然想起可能是因为没有使用nohup命令,试了试,果然如此,在带上nohup命令后就正常了。

我们的很多程序只是普通的程序,即使它们以&结尾,如果终端关闭,那么程序也会被关闭。为了能够在后台运行,我们需要使用nohup这个命令,原程序的标准输出被自动改向到当前目录下的nohup.out文件里,起到了log的作用。

但是有时候这样做会有问题,如果把终端关闭,进程也会被自动关闭,查看nohup.out可以看到在关闭终端的瞬间服务自动关闭了。

产生此问题的原因是:虽然Shell中提示了nohup成功,但还是需要按终端上的键盘任意键退回到Shell输入命令窗口,然后通过在Shell中输入exit来退出终端,而不是每次在nohup执行成功后直接关闭终端。这个问题很多朋友容易忽视,希望大家在工作中多加注意。

2.5.5 Nginx负载均衡器出现故障

在主Nginx负载均衡器上,由于nginx.conf配置文件有误,导致客户不能正常访问网站。网站架构用的是Nginx+Keepalived,这时我们可以紧急停掉主Nginx上的Keepalived,让从机接管;等网站稳定后,再来修复主Nginx负载均衡器。

注意 其实单纯停掉Nginx是解决不了问题的,因为我们的VIP此时还挂在主Nginx上面,要让从Nginx生效,停掉主Nginx上面的Keepalived是最好的方法(这个从Nginx机器就会将VIP地址接管过来)。

总而言之,线上环境的服务器排障要求我们在最短的时间内解决问题,这其实也是对系统管理员经验和能力的要求。我们平时应该总结在线上环境中容易出现的故障,做到未雨绸缪;平时在维护网站或系统时应该着重注意容易Crash的部分,多花些精力和时间在系统日志或服务日志上面,如果觉得压力过大,单机负载承受不了,可以考虑采用集群的方法来处理。

时间: 2024-12-24 08:56:09

《构建高可用Linux服务器 第3版》—— 2.5 紧急处理线上服务器故障的办法的相关文章

《构建高可用Linux服务器 第3版》—— 导读

前言 我的系统架构师之路 2004年我初识UNIX开源系统.那会儿我正在一家大型国有企业做系统管理员,负责值守公司的Windows Server 2000服务器.当时"震荡波"和"冲击波"这两种病毒很猖狂,虽然我们在防毒方面投入了大量的精力和金钱(当时购买的都是正版Windows 2000系统和正版瑞星杀毒软件),但新上线的机器,偶尔也有遗漏的时候,没有打补丁的机器无一幸免,所以对这个问题比较头疼.有一次去朋友的公司(某省太平洋寿险下面的一个分支机构)参观,我发现他

《构建高可用Linux服务器 第3版》—— 第1章 Linux服务器的构建基础

第1章 Linux服务器的构建基础 在从事目前的系统架构师工作之前,很长一段时间我从事的是系统管理员/高级系统管理员工作.在企业日常运营中,我的工作涉及的内容主要有电子商务网站的运维.内网开发环境的部署.公司外包项目的实施等.在这些工作中,我用到的系统绝大多数是免费开源的CentOS 5.8 x86_64系统,它的稳定和高效令我印象深刻.本章将以CentOS 5.8 x86_64的生产服务器为平台,逐步介绍它的Kickstart无人值守安装.网络配置.日志分析.性能状态监控,以及它的最小化优化等

《构建高可用Linux服务器 第3版》—— 1.5 Linux服务器的优化

1.5 Linux服务器的优化 服务器的优化是我们最小化安装系统时应该做的事情.其实,在做这项工作之前,我们就应该根据实际应用需求来选购Linux服务器,然后有所偏重地选择硬件,比如我们应该根据服务器的应用来确定是需要RAID 5,还是单块硬盘等. 1.5.1 如何根据服务器应用来选购服务器 无论是租用还是托管都要面临一个问题,那就是选择服务器的硬件配置,前面也说了,选购硬件配置时要根据我们的服务器应用需求而定.因为你无法通过一台服务器来满足所有的需求,解决所有的问题.在项目实施或网站架构之前,

《构建高可用Linux服务器 第3版》—— 2.4 系统维护时应该注意的地方

2.4 系统维护时应该注意的地方 无论是自己的内网开发机器还是线上的生产机器,我们在操作时都应该谨慎,否则系统很容易发生Crash的情况.就算我们能用备份很快恢复,在恢复时间之内,我们也会损失大量的数据,而且如果万一恢复不了,那就是灾难性的了. 2.4.1 服务器硬件改动进入了Emergency模式 同事在处理一台CentOS 5.8服务器时,他在机器上移走了一块硬盘,然后就直接启动机器,忽然发现系统进了Emergency模式,于是他连忙跑过来找我.我第一句就是问他:你改动了硬件没?他说他移走硬

《构建高可用Linux服务器 第3版》—— 1.6 用开源工具Nagios监控Linux服务器

1.6 用开源工具Nagios监控Linux服务器 1.6.1 CentOS 5.8下的监控工具 在开源系统CentOS 5.8下有许多监控工具,比如实时监控系统状态的Nagios,还有监控网络流量的Cacti和MRTG,以及我个人比较喜欢的NTOP和Iptraf:另外,在CentOS 5.8下也有许多强大的命令行可用于监控系统状态,大家可以在Google上搜索以了解其具体用法. 1.6.2 Nagios应该监控的服务器基础选项 经过工作实践,我们认为Nagios应该监控服务器的参数有如下几个方

《构建高可用Linux服务器 第3版》—— 第3章 生产环境下的Shell脚本

第3章 生产环境下的Shell脚本 虽然Shell脚本只是一个简单的解释型语言,不会受到开发人员的重视,但对于我们系统管理员来说它有着举足轻重的作用,它可以帮助我们简化日常的工作并减少工作量,成为系统管理员的瑞士军刀.我们在系统维护工作中用Shell脚本常常能比用C语言编写的程序更快地解决相同的问题.此外,Shell脚本具有很好的可移植性,有时跨越UNIX与POSIX兼容的系统,仅需略作修改,甚至不必修改即可使用Shell脚本. 在日常工作中Shell脚本能帮助我们做什么呢? 1)配合Cront

《构建高可用Linux服务器 第3版》—— 1.4 Linux服务器的日志管理

1.4 Linux服务器的日志管理 从安全的角度来说,Linux服务器的日志非常重要,它记录了系统每天所发生的各种各样的事情,如果服务器受到攻击,就可以根据它来进行分析.同时,它更是很重要的排障依据,可以通过它来检查错误发生的原因,所以我们必须了解和熟悉其运作机制. 1.4.1 系统日志syslog.conf的配置详解 目前,Linux依旧使用syslog作为日志监控进程,对其进行必要的配置能减少很多麻烦,并且可更有效地从系统日志监控到系统的状态.理解并完善一个syslog的配置,对于系统管理员

《构建高可用Linux服务器 第3版》—— 1.7 小结

1.7 小结 本章以CentOS 5.8 x86_64下的Kickstart无人值守安装.网络配置.日志分析.性能及状态监控.优化等方面对Linux系统进行了全方位说明,这些都是构建高性能及高可用的Linux系统的基础,希望大家能够掌握此章内容.理解了本章内容,我们以后的工作会更加得心应手.

《构建高可用Linux服务器 第3版》—— 2.8 小结

2.8 小结 在处理生产环境下的服务器故障时,应该本着安全的原则,在尽可能短的时间内处理问题,恢复服务器的正常状态.平时的系统维护工作,在多备份的前提下,也应该本着谨慎小心的原则,减少失误,毕竟我们不可能将每一项重要应用服务都做成集群模式,有些重要业务应该准备备份服务器,这样在出现问题时可以手动将备份的服务器换上去,然后再来解决故障服务器上的问题.另外,我们在用Xmanager 3.0远程管理多台线上服务器时,应该养成的好习惯是操作完一台就退出这一台的窗口,以免将其当成了测试服务器,从而发生误操