linux运维趋势 第12期 故障排除

28

Upload: 51cto

Post on 14-May-2015

9.375 views

Category:

Technology


0 download

DESCRIPTION

《Linux运维趋势》是由 51CTO 系统频道策划、针对 Linux/Unix 系统运维人员的一份电子杂志,内容从基础的技巧心得、实际操作案例到中、高端的运维技术趋势与理念等均有覆盖。本期主题为服务器故障排除,内容目录如下:【人物】天涯首席工程师王建科:技术人要有产品观【交流】网站扩展实例:1亿用户的Tagged架构进化史【八卦】Linux 20周年庆,2011最佳开源软件【本期专题:服务器故障排除】strace命令使用实例Unix调试的瑞士军刀:lsof使用top命令的一些小技巧网站排障分析常用的命令MySQL生产环境突发故障处理手册oracle审计导致的系统性能故障数据库故障分析与排查【技巧·工具·脚本】Linux管理员常用网络资源收集五款救急的Linux文件恢复软件运维自动化之Cobbler系统安装详解用SHELL脚本来防止SSH和vsftpd暴力破解

TRANSCRIPT

002

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

目录Index

002

目录

人物·People

003 天涯首席工程师王建科:技术人要有产品观

交流·Interact

005 网站扩展实例:1亿用户的Tagged架构进化史

八卦·News

007 Linux 20周年庆,2011最佳开源软件

专题·Special

009 strace命令使用实例

010 Unix调试的瑞士军刀:lsof

012 使用top命令的一些小技巧

013 网站排障分析常用的命令

014 MySQL生产环境突发故障处理手册

016 oracle审计导致的系统性能故障

017 数据库故障分析与排查

技巧·工具·脚本

021 Linux管理员常用网络资源收集

022 五款救急的Linux文件恢复软件

024 运维自动化之Cobbler系统安装详解

027 用SHELL脚本来防止SSH和vsftpd暴力破解

出版方 :51CTO 系统频道(北京无忧创想信息技术有限公司)

本期责编 :李晶 杂志主编 :杨赛

联系方法 :[email protected] 010-68476606(分机 8035)

出版日期 :2011 年 9 月 16 日

每月第 2 个星期五出版

订阅 :http://os.51cto.com/art/201011/233915.htm

003

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

人物People

003

天涯首席工程师王建科:技术人要有产品观

国内的网民们大多听说过天涯社区,只是也许很

多人并不知道,这个有 12 年历史的、现在同时在线已

经超过 50 万人的巨大社区,在最开始几年的产品设

计、开发和运维,都是由一个人来完成的。他就是现

在天涯的首席工程师、天涯论坛产品总监王建科。本

次访谈内容大致分为天涯的技术发展历程、天涯界面

的设计、对技术债务的观点、对技术选型的观点、对技

术人员成长的建议、以及开源相关的一些话题。对于

互联网行业的开发、运维和产品运营人员而言,相信

王建科的分享会给你带来一些启发。

51CTO :首先,简单的介绍一下天涯的技术发展历

程吧。

王建科 :天涯最初只有一个开发者,就是我。产品

的设计和技术实现都是我。当时是用 ASP 来做,有

很多困难,因为那时 ASP 这个技术没有文档,全靠摸

索,不像现在,网上资料非常多。那是在 98 年底的时

候。

天涯最开始上线运营的话是 99 年 3 月 1 号。我

的 ID 是 2 月 28 号注册的,是天涯第一个 ID。回想当

时,其实对技术的要求并不很高,只要把这个东西实

现出来,快速的实现出来。当时整个互联网的网民也

比较少,所以用户比较少,所以对整个性能的压力也

比较小。当然服务器硬件也比较差,大概是 586 这样

的吧。

51CTO :当时服务器是托管在机房?

王建科 :当时我们还没在机房,只有一条链路,好

像也就是几十 K 吧,马上感觉不够,就搬到电信的机

房去了。当时电信还没有 IDC 这个概念,也就是一张

桌子,有个网线,连上去就行了(笑)。当时门槛是比

较低的。

我们把天涯分为几个阶段,第一个就是 2003 年之

前,刚起步的一个阶段。网民比较少,当时网友还是

一个比较异类的人群,ID 千奇百怪的,谈的话题别人

都听不懂。所以那个时候,同时在线也就是 90 人左

右。2002 年同时在线是 1000 人,到 2003 年的时候,

同时在线就差不多快要 10000 人了。不过 2003 年那

时候还是只有一台服务器,又当 web 又当 db,内存只

有 512MB,这个压力可想而知。

当时天涯还有一个特点,就是帖子是不分页的。

一千回复也好,一万回复也好,一个页面都要全部加

载进来。长帖对天涯的系统压力非常大。

2003 年之后到 2006 年之间,是天涯发展的一个

中期阶段。这个阶段天涯快速发展,从 2003 年的同

时在线 8000 人,到 2006 年达到 20 万。快速发展我

觉得有几个原因吧,第一个是大概在 2005 年左右,中

国互联网快速增长,网民大爆发,天涯用户也跟着往

上增长。还有一个就是当时天涯的媒体性凸显出来,

因为天涯当时很多网络事件和话题,很多媒体就把天

涯作为一个新闻源去报导,这样相当于传播天涯的品

牌。

这样就导致了天涯的快速增长,而天涯的服务器

这时候增长的也比较快……

51CTO :不再是一台服务器了。

王建科 :嗯,不再是一台了。2004 年的时候,已经

是 4 台 web,2 台 db 了。之前已经是扛不住了,负载

全都满了这么一个状况。后来我们就拆分嘛,把 db

拆分。天涯不是论坛分很多版块吗,所以就是把不同

版块拆分到不同的服务器上。如果是所有版块在一

个表里的话就很难拆分,所以我们就是一个版块对应

一套表。所以如果这个服务器压力比较大的话,我们

就可以把一整个版块,就是一个表,迁移到别的服务

器上去。

所以 db 方面就是按版块拆分表这个模式。web

方面就是增加。现在 web 方面扩展比较容易点,最

采访/杨赛

人物简介:

王建科(天涯ID:卓锐),1996年毕业于吉林大学计算机科学

系,现任海南天涯在线网络科技有限公司首席工程师、天涯论坛

产品总监,天涯早期建设者及参与者,主导开发了天涯论坛、天

涯博客等产品。

004

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

人物People

004

早做的时候就是通过 session 会话把 web 进行拆分。

db 另一个方面就是不使用连合查询。天涯最早为

了优化性能有几个特点,一个就是不使用连合查询。

比如有的时候你要呈现用户的名字啊,标题等信息的

时候,就要去读,那么我们的做法是在产生的时候就

把信息写到同一个地方去了,读的时候就只要把它一

起呈现出来。这样表之间就没有太多关联,因为表关

联也是十分影响性能的。而且表关联还会造成难以

拆分的问题。

还有就是一帖到底这个,我们的做法就是把所有

回复写到一个字段里面去。有新的回复时,就把这个

内容插到字段最下面,这样呈现的时候,只要读一个

字段就全出去了。这样就极大的降低了 db 的 I/O,

因为多一次读写就多一次 I/O 嘛,你只有一个字段,

就只有一个 I/O ;如果 100 个回复分为 100 个字段,

那就是 100 倍的 I/O,1000 个就是 1000 个 I/O。所

以天涯把所有回复合并,就极大的减少了 I/O。所以

天涯才能大体做到“一帖到底”,不分页。

另一个有关这个分页。很多论坛数据量很大的时

候,你越往后翻页,处理的速度就越慢,效果很差了。

所以天涯这边我们用 where 子句来分页。Where 子

句就是判断,你点下一页的时候,用 where 子句定位

到这个下一页的数据。所以这样的话,你每次点下一

页,每次请求在性能上的消耗都是一样的,一致的。

51CTO :就不用做 n 次计算了。

王建科 :对,就不用再去计算我下一页这个数据到

底在什么位置,尤其数据量大的时候,这就很快。当

然天涯只提供了下一页的功能,而没有提供直接到某

一页的功能,就只能一页一页翻这样。

另一个就是锁。很多网站采用了死锁这种机制,

但是天涯呢,因为网友看内容对一致性的要求并不

高,我们就都全部允许脏读。就是说你不用忽略这个

更新,不用在读的时候把它锁上这样。

51CTO :因为没这个需要。

王建科 :对,没必要。因为我们的数据不像银行数

据,对一致性要求并不特别高,就避免了死锁这样的

方式。

另外一方面就是我们也用了 DNS 轮询,但是 DNS

轮询这个效果并不是特别好,没有我们想象的那么均

匀,所以后来我们就自己写了应用来控制负载均衡。

另一个就是在 2003 年后来压力大的时候,我们开

始用 Squid 做页面缓存。当时因为天涯很多动态的

内容,变化比较大,而用了页面缓存之后,命中率在

70 左右吧,还不错,减少了后端的很多压力。

这样就是 2003 年到 06 年这个阶段。

那么 07 年到现在呢,就是比较强调架构化这个方

面。07 年之前我们不是只有电信这么一个链路吗,

网通用户就抱怨很多,所以就购买了网通链路,然后

用 F5 做链路负载均衡。

然后就是做更多的页面缓存。Squid 之后我们开

始用 Varnish,这个感觉效果更好一些。然后就是对

页面进行压缩。因为天涯都是文本内容嘛,所以压

缩率能达到 70%,效果挺好。然后就是 memcached

内存缓存,就是你要往 db 读写的内容都先放在

memcached 里面,这个命中率比较高,有 90%。

所以就是一步一步做过来,先解决网通用户的抱

怨,再整个做优化。

51CTO :您对技术人员在中国的发展有何看法?

王建科 :在中国的话,技术人员在大企业成长的空

间会更大一点,在中小企业的成长空间就会小一点,

这是中国技术人员面临的一个问题。

51CTO :意思是中国的技术人员还是尽量在大企业

寻求发展是吗(笑)?

王建科 :这个嘛(笑),比如像我的话,其实从一开

始就是同时做技术和产品两条线。很多技术人员要

往产品的方向转,觉得有很大困难,但是我这边就要

求,技术人员也必须关注一些产品,因为接触过产品

的技术人员思考交流的方式跟没接触过产品的技术

人员是不一样的。他能够考虑到一个产品使用会不

会有问题,技术特点方面能不能作出更漂亮的功能。

像是国外很多互联网产品都是技术人员驱动的,好比

Google 这样的。那么我也会鼓励我们的技术人员,多

关注产品,参与一些决策。否则的话,现在很多公司

一个常态就是,运营人员埋怨产品,然后技术就成了

推脱责任的借口,我们叫做“炮灰”(笑),很辛苦,又

没有成就感。这是不利的,所以就想怎么把这部分和

运营团队糅合在一起,共同做一件事情,共同关注用

户。

这是知识面方面。另一方面技术人员也要扩展一

下深度,还是要走专业化的路线。所以我们也鼓励技

术人员进行交流,好比刘天斯,就很喜欢写博客分享

一些东西,这个过程也学到很多东西。

本文有删节,完整内容见原文 :

http://os.51cto.com/art/201104/254678.htm

005

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

交流Interact

005

网站扩展实例:1亿用户的Tagged架构进化史

一家2004年创建的试水社交网站,经过7年的成长和扩展,现在已经拥有了1亿用户。平均50亿次的pv,承

担在1000多台服务器的网站架构上。Tagged网站,现在承载了1亿个用户、1千台服务器和50亿次页面浏览量。

这个过程是如何实现的?

本文将要介绍的就是这个叫 Tagged 的网站——

Tagged 架构实例 :1 亿个用户、1 千台服务器和 50 亿

次页面浏览量。下面,Tagged 的 CTO 兼联合创始人

Johann Schleier-Smith 将为我们介绍 Tagged 网站

架构的成长历程。

自 2004 年以来,Tagged 从一家试水社交领域的

小不点网站,逐渐变成全球最大的社交网络之一,数

百万的成员访问该网站以结交新成员,每个月的页面

浏览量达到 50 亿次。这个逐步发展的历程迫使我们

Tagged 不断完善网站架构,最终获得了功能异常强

大的平台。

第一个阶段:2004年,PHP Web应用程序、10万个

用户和15台服务器

孵化器有着一种快速成型文化 :每年通常推出两

个新概念,寻觅其中的大赢家。正是在这样的文化中,

Tagged 应运而生。LAMP 是适合这种类型的工作的

自然选择 ;这种工作注重灵活性和快速开发周期。当

时,Java 开发主要面向大企业的开发工作,Python 吸

引的编程员寥寥无几,Perl 方面的编程员又不是我们

所要的那一种。我们还知道,雅虎是 PHP 的大力支持

者 ;所以一旦有需要,完全有可能扩展业务规模。

我在以前的项目上运行 MySQL 方面有着丰富的

经历,这让我对这项技术爱恨交加。本着尝试的精神,

我们为 Tagged 购买了几份入门级 Oracle 许可证,看

看甲骨文的技术是不是用起来更好。

值得注意的是,许多构建的小型网站仍然就像早

期的 Tagged。具有一种简单的美 ;无状态的 PHP 与

有状态的 Oracle 之间的双向分离正是一台服务器中

最棘手的部分,而额外的 Web 显示计算能力很容易

添加。

第二个阶段:2005年,缓存PHP Web应用程序、100

万个用户和20台服务器

即使只有在 8 台服务器的时候,Tagged 的网站流

量也要比大多数人所知道的来得多。幸运的是,分布

式内存缓存系统 memcached 带来了两个优势 :既消

除了 90% 以上的数据库读操作,又确保含有大量不

同信息的社交网络面面可以迅速显示。

自一开始,我们的对象缓存注重显式缓存更新,支

持更简单的技术,比如删除无效的键 ;或者根据计时

器,使失效数据无效。这种方法的缺点是代码比较复

杂,但大幅减轻了数据库负载,而且使网站保持快速

运行,涉及经常更新的对象时更是如此。

我们的网站继续越来越复杂,在标准的社交网络

功能的基础上,添加了搜索和社交发现等功能。我的

团队说服我使用 Java 来建立搜索功能,那样我们就

能得益于 Lucene 库。当我们学会了让 Java 顺畅运行

后,我有一种如释重负的感觉。

第三个阶段:2006年,数据库扩展、1000万个用户

和100台服务器

文/Todd Hoff编译/布加迪

006

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

交流Interact

006

此时 Tagged 已拥有 1000 万个注册用户,随时都

有成千上万个用户在线,我们开始着手解决我一直忧

心忡忡的挑战。那时我们刚筹集到了一笔资金,竭力

寻求发展,但是数据库亟需添加容量。我们进行了一

次又一次的缓存或 SQL 调整和优化,但服务器的处

理器其占用率还是会一再逼近 100% 大关。

向上扩展系统的想法是个权宜之计,但是多插槽

服务器硬件动辄数百万美元,于是我们选择了 Oracle

真正应用集群 RAC,该系统让我们可以使用标准网

络系统来连接数量众多的大众化 Linux 主机,以构建

一个庞大的数据库。再结合最新处理器具有的优势,

Oracle RAC 的容量比我们的第一台数据库服务器足

足增加了 20 倍,这一点很重要,而且允许应用程序开

发人员可以继续致力于开发新的功能特性。

Tagged 通过结合来自一个庞大内存中数据集

的统计数字,开始提供个性化的人员匹配(people-

matching)推荐服务。用 PHP 实现这一点完全不现实,

于是 Java 进一步渗透到了我们的环境中。

第四个阶段:2007年,数据库拆分、5000万个用户

和500台服务器

拆分数据库是最具有难度的任务,也是在扩展

Tagged 方面最具有成效的技术。由于在多个数据库

之间分割用户,我们最终拥有了这种设计 :在所有地

方都允许我们只要添加硬件,就可以进行扩展。

我们 Tagged 的一条规定是,将每个表分成 64 个

分区 ;我们牢牢遵守这个不成文的规定,除非有着非

常诱人的理由才允许有例外。只有得益于游戏玩家

之间高性能受保护事务的某些游戏才在单独的数据

库中垂直分区。

拆分现有的数据意味着针对数 TB 的数据进行复

杂的转换工作。一开始,我们每次逐个着手解决功能

特性,依赖应用程序代码来代替连接(join),但最后

我们还是在应用程序的核心部分遇到了一大批表,这

些表的结合得太紧密了,这个方法行不通。于是我们

编写了生成 SQL 的迁移代码,导出、转换和重新装入

了数亿行的数据,并使用触发器来跟踪源系统上面出

现的变化,逐渐更新目标,那样最后的同步所带来的

停运时间不到 30 分钟。

拥有许多数据库意味着拥有许多的数据库连接。

尤其是由于我们添加了更多的“社交发现”功能(比

如我们的第一项约会功能 Meet Me),拆分工作可能

会让 PHP 不堪重负。为了解决这个问题,我们开发了

一款 Java 应用程序,负责提供运行查询的 Web 服务 ;

该应用程序还继续提供一个非常方便的监控点,便于

轻松自如地处理数据库故障。

第五个阶段:2010年,架构完善和扩展、8000万个

用户和1000台服务器

这次我们把时间提前几年。解决了关键的数据库

扩展性问题后,我们发现通过添加硬件来支持扩展相

当容易。

在这一段期间,扩展性方面的考量因素转向了减

少故障和应对越来越多的易损坏部件所带来的威胁。

通过负载均衡器的运行状况检查和自动关闭毫无反

应的服务,实现了针对 Web 层的全方位保护,避免了

各种相关问题。我们在设计核心组件的架构时还考

虑到了弹性。

Java 扮演了极其重要的角色,一方面归因于 Java

越来越得到接受,拥有相应专长的人也越来越多 ;另

一方面是由于面临的挑战越来越多。为了对付垃圾

邮件及其他滥用现象,我们的算法充分利用了庞大的

共享内存空间,还充分利用了计算密集型方法。社交

游戏也得益于 Java 的高性能和并发控制,但面临的

代价是系统很复杂 ;现在不同的应用程序池比以前

多得多,有待我们加以管理。

本文有删节,完整内容见原文 :

Tagged Architecture - Scaling To 100 Million

Users, 1000 Servers, And 5 Billion Page Views

http://os.51cto.com/art/201108/283807.htm

007

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

八卦News

007

Linux 20周年庆,2011最佳开源软件

【2011 年最佳开源软件】开源软件已经无所不在,

今年又有哪些开源软件对这个产业造成了深刻的影

响?请看 2011 年度 Bossie 奖的公布结果——最佳开

源应用程序、最佳桌面与移动应用、最佳开发软件、最

佳数据中心与云计算软件。

http://os.51cto.com/art/201109/290392.htm

【Ubuntu 11.10】经过了 3 个 Alpha 版之后,开发

代号为 Oneiric Ocelot 的 Ubuntu 11.10 终于发布了

Beta 1 版,主要新特性包括 :全新的 LightDM 登录界

面、全新的 Alt+Tab 程序切换样式、Thunderbird 为默

认邮件客户端等。

http://os.51cto.com/art/201109/288781.htm

【五个九】如今还有人真的把所谓“五个九”类

承诺当回事吗?从理论层面上来说,这意味着

99.999% 的可用运行时间比例,也就是说业务经理

们每天会遭遇到的故障时段也就八分之一秒多一点。

http://os.51cto.com/art/201108/285496.htm

【二十年】Linux 至今已走过二十年。LAMP 架构

在 Linux 诞生之初诞生,不过从 LAMP 架构诞生之初

到现在已经有了很大的变化。

http://os.51cto.com/art/201108/285171.htm

【3650 万】StudioNow 证明了使用开源软件来构建

一个成功的科技企业是有可能的,事实上,StudioNow

是如此成功,于是 AOL 花费 3650 万美元买下了该公

司。

http://os.51cto.com/art/201109/289045.htm

【Linux Mint 11】Linux Mint 11 LXDE 于 8 月 16

日发布更新。这一版本在软件管理器、更新管理器等

方面都有更新。

http://os.51cto.com/art/201108/284674.htm

【Fedora 16】代号为“Verne”的 Fedora 16 Alpha

经过一个星期的跳票,终于在 8 月 24 日晚正式发布

了。该版本给我们带来了许多新特性 :GRUB 2 取代

GRUB 作为默认的 BootLoader、KDE 4.7 和 GNOME

3.1 开发版本更新、SELinux 增强等。

http://os.51cto.com/art/201108/285988.htm

【Debian 18 载】2011 年 8 月 16 日,世界上最流行

和最稳定的 GNU/Linux 发行版 Debian 走过了 18 周

年。在过去的 18 年里,Debian 确立了自身最稳定操

作系统的定位,很多 GNU/Linux 发行版如 Ubuntu 和

Knoppix 都是基于 Debian。

http://os.51cto.com/art/201108/284455.htm

【26 年】理查德·斯托曼于 1985 年 10 月创立了

自由软件基金会 (FSF)。至今已 26 年,自由软件基

金会和刚刚年满 20 岁的 Linux 彻底地改变了整个计

算机世界,并引发了一场革命。直到现在,这场软件

革命仍没有结束,很可能仅仅是开始。

http://os.51cto.com/art/201109/289688.htm

【LinuxCon 2011】为庆祝 Linux 诞生 20 周年,,

Linux Foundation 于 8 月 17 日 �8 月 19 日在温哥华

举办了 LinuxCon 2011。包括 Linus Torvalds 先生

在内的多位业界大佬都参加了这一盛会,大佬们指点

江山、激扬文字,感怀过去、展望未来。

http://os.51cto.com/art/201108/281372.htm

【11 个里程碑】Linux 操作系统诞生到现在已经 20

年了,在这 20 年里,Linux 从学校里的玩物发展到今

天成为操作系统中一股坚实的力量。我们从这 20 年

中总结出 Linux 发展的 11 个重要的里程碑。

http://os.51cto.com/art/201108/287916.htm

——八卦,新闻与数字 2011.08 - 2011.09

008

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

008

服务器故障排除当你的网络服务出现问题的时候,首先要做的事

情自然是分析问题出在哪里。在 Linux 系统下,有很

多工具可以帮助你发现故障的原因所在。一些基础

的排障工具包括 :

strace

如果一个应用编译正常但运行期间报错,报错信

息又不知所云,可以通过这个工具挖掘一些线索。

lsof

列出某个进程打开所有文件的信息——而在

Linux 下,一切皆文件。

top

检查当前正在运行哪些进程,这些进程各自占用

的 CPU 和内存资源。

traceroute

检查两个节点之间网络接入情况的基本工具。

ping

检查远程服务器连接状况的基本工具。

hexdump

用来搜索二进制文件中的字符串,在没有源代码

的情况下,可以有效的定位问题所在。

来源 :www.linux.com/archive/feed/60136

009

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

009

strace命令使用实例

文/edeed

有时候一个程序出现了问题,无法找到原因,所以

我们需要调试。strace 是一个必不可少的调试工具,

可以用来监视系统调用,不仅可以调试一个新开始的

程序,也可以调试一个已经在运行的程序。

首先让我们看一个真实的例子 :

前一段时间,我在启动 KDE 的时候出了问题,KDE

的错误信息无法给我任何有帮助的线索。我决定采

用 strace 看一下在启动 dcopserver 时到底程序做了

什么 :

strace -f -F -o ~/dcop-strace.txt dcopserver

这里 -f -F 选项告诉 strace 同时跟踪 fork 和

vfork 出来的进程,-o 选项把所有 strace 输出写到 ~/

dcop-strace.txt 里 面,dcopserver 是要启动和调试

的程序。再次出现错误之后,我检查了错误输出文件

dcop-strace.txt,文件里有很多系统调用的记录。在

程序运行出错前的有关记录如下 :

其中第一行显示程序试图创建 /tmp/.ICE- unix

目录,权限为 0777,这个操作因为目录已经存在而失

败了。第二个系统调用 (lstat64) 检查了目录状态,

并显示这个目录的权限是 0755,这里出现了第一个

程序运行错误的线索 : 程序试图创建属性为 0777

的目录,但是已经存在了一个属性为 0755 的目录。

第三个系统调用 (unlink) 试图删除一个文件,但是这

个文件并不存在。这并不奇怪,因为这个操作只是试

图删掉可能存在的老文件。

但是,第四行确认了错误所在。它试图绑定到 /

tmp /.ICE-unix/dcop27207-1066844596,但 是 出

现了拒绝访问错误。ICE_unix 目录的用户和组都是

root,并且只有所有者具有写权限。一个非 root 用户

无法在这个目录下面建立文件,如果把目录属性改成

0777, 则前面的操作有可能可以执行,而这正是第一

步错误出现时进行过的操作。

用strace解决库依赖问题

strace 的另一个用处是解决和动态库相关的问题。

让我们看一个例子 :

whoami 程序会给出自己的用户名,这个程序在一

些 需要知道运行程序的真正用户的脚本程序里面非

常有用,whoami 的一个示例输出如下 :

27207 mkdir("/tmp/.ICE-unix",0777) = -1

EEXIST (File exists)

(略)

假设因为某种原因在升级 glibc 的过程中负责用

户名 和用户 ID 转换的库 NSS 丢失,我们可以通过把

nss 库改名来模拟这个环境 :

# whoami

root

这里可以看到,运行 whoami 时出现了错误,ldd

程序的输出不会提供有用的帮助 :

只 会 看 到 whoami 依 赖 Libc.so.6 和 ld-linux.

so.2,它没有给出运行 whoami 所必须的其它库。这

里时用 strace 跟踪 whoami 时的输出 :

# mv /lib/libnss_files.so.2 /lib/libnss_files.

so.2.backup

# whoami

whoami: cannot find username for UID 0

可以发现在不同目录下面查找 libnss.so.2 的尝

试,但是都失败了。如果没有 strace 这样的工具,很

难发现这个错误是由于缺少动态库造成的。现在只

需要找到 libnss.so.2 并把它放回到正确的位置就可

以了。

3 限制strace只跟踪特定的系统调用

如果已经知道要找什么,可以让 strace 只跟踪

一些类型的系统调用。例如,需要看看在 configure

脚本里面执行的程序,需要监视的系统调用就 是

execve。让 strace 只记录 execve 的调用用这个命令 :

# ldd /usr/bin/whoami

libc.so.6 => /lib/libc.so.6 (0x4001f000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2

(0x40000000)

已经看到了,strace 不仅可以被程序员使用,普通

系统管理员和用户也可以使用 strace 来调试系统错

误。

本文有删节,完整内容见原文 :

h t t p ://h i . b a i d u. com/ede ed/b l o g/ i t em/

c59d8d10f362e30a213f2eb8.html

010

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

010

Unix调试的瑞士军刀:lsof

Lsof 是遵从 Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所

有文件信息。打开的文件可能是普通的文件,目录,NFS 文件,块文件,字符文件,共享库,常规管道,明明

管道,符号链接,Socket 流,网络 Socket,UNIX 域 Socket,以及其它更多。

文/Peteris Krumins译/张元一

如果说 netcat 是进行网络诊断的瑞士军刀,那么

lsof 就是 Unix 调试的瑞士军刀。

Lsof 遵从 Unix 哲学的典范,它只做一件事情,并

且做的相当完美——它可以列出某个进程打开的所

有文件信息。打开的文件可能是普通的文件,目录,

NFS 文件,块文件,字符文件,共享库,常规管道,明

明管道,符号链接,Socket 流,网络 Socket,UNIX 域

Socket,以及其它更多。因为 Unix 系统中几乎所有东

西都是文件,你可以想象 lsof 该有多有用。

如何使用 lsof ?

这篇文章中我会尽力列举我能想到的所有 lsof

的用法,让我们先从最简单的开始(或许你已经知道

了),然后逐渐增加复杂度 :

列出所有打开的文件

# lsof

不带任何参数运行 lsof 会列出所有进程打开的所

有文件。

找出谁在使用某个文件

# lsof /path/to/file

只需要执行文件的路径,lsof 就会列出所有使用

这个文件的进程,你也可以列出多个文件,lsof 会列

出所有使用这些文件的进程。

你也可以一次制定多个文件 :

# lsof /path/to/file1 /path/to/file2

递归查找某个目录中所有打开的文件

# lsof +D /usr/lib

加上 +D 参数,lsof 会对指定目录进行递归查找,

注意这个参数要比 grep 版本慢 :

# lsof | grep '/usr/lib'

之所以慢是因为 +D 首先查找所有的文件,然后

一次性输出。

列出某个用户打开的所有文件

# lsof -u pkrumins

-u 选项限定只列出所有被用户 pkrumins 打开的

文件,你可以通过逗号指定多个用户 :

# lsof -u rms,root

这条命令会列出所有 rms和 root用户打开的文件。

你也可以像下面这样使用多个 -u 做同样的事情 :

# lsof -u rms -u root

查找某个程序打开的所有文件

# lsof -c apache

-c 选项限定只列出以 apache 开头的进程打开的

文件 :

所以你可以不用像下面这样写 :

# lsof | grep foo

而使用下面这个更简短的版本 :

# lsof -c foo

事实上,你可以只制定进程名称的开头 :

# lsof -c apa

这会列出所有以 apa 开头的进程打开的文件

你同样可以制定多个 -c 参数 :

# lsof -c apache -c python

这会列出所有由 apache 和 python 打开的文件

列出所有由某个用户或某个进程打开的文件

# lsof -u pkrumins -c apache

你也可以组合使用多个选项,这些选项默认进行

或关联,也就是说上面的命令会输入由 pkrumins 用户

或是 apache 进程打开的文件。

列出所有由一个用户与某个进程打开的文件

# lsof -a -u pkrumins -c bash

-a 参数可以将多个选项的组合条件由或变为与,

上面的命令会显示所有由 pkrumins 用户以及 bash 进

程打开的文件。

列出除 root 用户外的所有用户打开的文件

# lsof -u ^root

注意 root 前面的 ^ 符号,它执行取反操作,因此

lsof 会列出所有 root 用户之外的用户打开的文件。

011

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

011

列出所有由某个 PID 对应的进程打开的文件

# lsof -p 1

-p 选项让你可以使用进程 id 来过滤输出。

记住你也可以用都好来分离多个 pid。

# lsof -p 450,980,333

列出所有进程打开的文件除了某个 pid 的

# lsof -p ^1

同前面的用户一样,你也可以对 -p 选项使用 ^ 来

进行取反。

列出所有网络连接

# lsof -i

lsof 的 -i 选项可以列出所有打开了网络套接字

(TCP 和 UDP)的进程。

列出所有 TCP 网络连接

# lsof -i tcp

也可以为 -i 选项加上参数,比如 tcp,tcp 选项会

强制 lsof 只列出打开 TCP sockets 的进程。

列出所有 UDP 网络连接

# lsof -i udp

同样 udp 让 lsof 只列出使用 UDP socket 的进程。

找到使用某个端口的进程

# lsof -i :25

:25 和 -i 选项组合可以让 lsof 列出占用 TCP 或

UDP 的 25 端口的进程。

你也可以使用 /etc/services 中制定的端口名称

来代替端口号,比如 :

# lsof -i :smtp

找到使用某个 udp 端口号的进程

# lsof -i udp:53

同样的,也可以找到使用某个 tcp 端口的进程 :

# lsof -i tcp:80

找到某个用户的所有网络连接

# lsof -a -u hacker -i

使用 -a 将 -u 和 -i 选项组合可以让 lsof 列出某

个用户的所有网络行为。

列出所有 NFS(网络文件系统)文件

# lsof -N

这个参数很好记,-N 就对应 NFS。

列出所有 UNIX 域 Socket 文件

# lsof -U

这个选项也很好记,-U 就对应 UNIX。

列出所有对应某个组 id 的进程

# lsof -g 1234

进程组用来来逻辑上对进程进行分组,这个例子

查找所有 PGID 为 1234 的进程打开的文件。

列出所有与某个描述符关联的文件

# lsof -d 2

这个命令会列出所有以描述符 2 打开的文件。

你也可以为描述符指定一个范围 :

# lsof -d 0-2

这会列出所有描述符为 0,1,2 的文件。

-d 选项还支持其它很多特殊值,下面的命令列出

所有内存映射文件 :

# lsof -d mem

txt 则列出所有加载在内存中并正在执行的进程 :

# lsof -d txt

输出使用某些资源的进程 pid

# lsof -t -i

-t 选项输出进程的 PID,你可以将它和 -i 选项组

合输出使用某个端口的进程的 PID,下面的命令将会

杀掉所有使用网络的进程 :

# kill -9 `lsof -t -i`

循环列出文件

# lsof -r 1

-r 选项让 lsof 可以循环列出文件直到被中断,参

数 1 的意思是每秒钟重复打印一次,这个选项最好同

某个范围比较小的查询组合使用,比如用来监测网络

活动 :

# lsof -r 1 -u john -i -a

如何安装 lsof ?

许多 Unix 系统都内置了 lsof,如果你的系统没有

安装,你可以从这里直接下载源代码。

BSD 系统有一个类似的工具可以做同样的事情,

叫做 fstat。

你可以通过man lsof来了解关于 lsof的完整文档,

或者通过 lsof -h 查看。

本文有删节,完整内容见原文 :

A Unix Utility You Should Know About: lsof

ht tp://heikezhi.com/2011/06/19/swiss-

army-knife-of-unix-debugging-lsof/

012

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

012

使用top命令的一些小技巧

文/周振兴

1. 有用的命令 top-z-x

z :打开 / 关闭彩色显示

x :高亮显示排序列

在使用 top 命令后,“先按 z 键,再按 x 键”,这时屏

幕会彩色显示输出,白色显示的列是当前排序的列 ;

偶尔还会有一些白色显示行,这些行是当前正在运行

进程。使用该参数可以帮助我们更清楚的看到排序

列。例如,我想按照 cpu 使用排序来查看进程 :

(见图 1)

使用了 top-z-x命令后是不是看得清晰了一些 :)

2. 有用的命令 top-1

1 :SMP 的系统,会单独显示各个 CPU 的运行状态

(见图 2)

3. 选择排序列 top-z-x-<

< :改变排序列

> :改变排序列

top-z-x-< 试试就知道是什么意思了 :) 。

例如,默认是按照 cpu 使用率排序的,现在我想看

看安装使用的虚拟内存排序看看,使用命令

top-z-x-<-<-<-<-<

(见图 3)

4. 其他技巧

W :把当前配置文件到 home 目录下 .toprc 配置

热门图书推荐:

本书是《鸟哥的 Linux 私房

菜基础学习篇》的最新版,

全书分为 5 个部分 :第一部

分着重说明 Linux 的起源及

功能,如何规划和安装 Linux

主机 ;第二部分介绍 Linux

的文件系统、文件、目录与

磁盘的管理 ;第三部分介绍

文字模式接口 shell…… [ 更

多 ]

文件中

F or O :支持更强的选择排序列的方式

-b :参数可以帮你在脚本中使用 top 命令

图1 按cpu使用排序查看进程

图2 显示各个cpu的运行状态

图3 按照虚拟内存排序

-n :配合 -b 使用,表示重新刷新一定次数后退出

-d :刷新延时时间。例如 -d 5 表示 top 每隔 5

秒刷新一次。(默认是 3 秒)

更多请查看 top-h 或者 RTFM。

原文 :

h t t p : / / w w w . o r c z h o u . c o m / i n d e x .

php/2010/12/linux-top-tips/

013

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

013

网站排障分析常用的命令整理/LinuxTone

系统连接状态篇 :

1. 查看 TCP 连接状态

netstat -nat |awk '{print $6}'|sort|uniq -c|sort

-rn

netstat -n | awk '/^tcp/ {++S[$NF]};END

{for(a in S) print a, S[a]}'

netstat -n | awk '/^tcp/ {++state[$NF]}; END

{for(key in state) print key,"\t",state[key]}'

netstat -n | awk '/^tcp/ {++arr[$NF]};END

{for(k in arr) print k,"\t",arr[k]}'

netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq

-c|sort -rn

netstat -ant | awk '{print $NF}' | grep -v

'[a-z]' | sort | uniq -c

2. 查找请求数请 20 个 IP(常用于查找攻来源):

netstat -anlp|grep 80|grep tcp|awk '{print

$5}'|awk -F: '{print $1}'|sort |uniq -c|sort

-nr|head -n20

n e t s t a t - a n t | a w k ' / : 8 0 /

{split($5,ip,":");++A[ip[1]]}END{for(i in A) print

A[i],i}' |sort -rn|head -n20

3. 用 tcpdump 嗅探 80 端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 |

awk -F"." '{print $1"."$2"."$3"."$4}' | sort |

uniq -c | sort -nr |head -20

4. 查找较多 time_wait 连接

ne t s t a t -n | g r e p T IME_WAIT | awk '{p r i n t

$5}'|sort|uniq -c|sort -rn|head -n20

5. 找查较多的 SYN 连接

netstat -an | grep SYN | awk '{print $5}' |

awk -F: '{print $1}' | sort | uniq -c | sort -nr

| more

6. 根据端口列进程

netstat -ntlp | grep 80 | awk '{print $7}' |

cut -d/ -f1

网站日志分析篇 1(Apache):

1. 获得访问前 10 位的 ip 地址

cat access.log|awk '{print $1}'|sort|uniq -c|sort

-nr|head -10

cat access.log|awk '{counts[$(11)]+=1}; END

{for(url in counts) print counts[url], url}'

2. 访问次数最多的文件或页面 , 取前 20

cat access.log|awk '{print $11}'|sort |uniq

-c|sort -nr|head -20

3. 列出传输最大的几个 exe 文件(分析下载站的

时候常用)

cat access.log |awk '($7~/\.exe/){print $10

" " $1 " " $4 " " $7}'|sort -nr|head -20

4. 列出输出大于 200000byte( 约 200kb) 的 exe

文件以及对应文件发生次数

cat access.log |awk '($10 > 200000 &&

$7~/\.exe/){print $7}'|sort -n|uniq -c|sort

-nr|head -100

5. 如果日志最后一列记录的是页面文件传输时

间,则有列出到客户端最耗时的页面

cat access.log |awk '($7~/\.php/){print $NF

" " $1 " " $4 " " $7}'|sort -nr|head -100

6. 列出最最耗时的页面 ( 超过 60 秒的 ) 的以及

对应页面发生次数

cat access.log |awk '($NF > 60 && $7~/\.

php/){print $7}'|sort -n|uniq -c|sort -nr|head

-100

7. 列出传输时间超过 30 秒的文件

cat access.log |awk '($NF > 30){print $7}'|sort

-n|uniq -c|sort -nr|head -20

8. 统计网站流量(G)

cat access.log |awk '{sum+=$10} END {print

sum/1024/1024/1024}'

9. 统计 404 的连接

awk '($9 ~/404/)' access.log | awk '{print

$9,$7}' | sort

10. 统计 http status(略)

本文有删节,完整内容见原文 :

bbs.linuxtone.org/thread-5151-1-1.html

014

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

014

MySQL生产环境突发故障处理手册

这里所说的iptables是ipchains的后继工具,但具有更强的可扩展性。内核模块可以注册一个新的规则表

(table),并要求数据包流经指定的规则表。三种数据报处理功能都基于netfilter的钩子函数和IP表,都是相互

间独立的模块。

1. LOAD 飙高

一般导致 MySQL 服务器 LOAD 突然飙高,可能的

五种情况 :

1>. 全表扫描的 SQL 语句 ;

2>.SELECT 操作语句的执行计划走错 ;

3>.存在 UPDATE/DELETE 语句没有索引可选择,

而导致堵塞其他 SQL 语句的执行 ;

4>. 存在修改表结构或 OPTIMIZE 语句执行 ;

5>. 大数据量的导入 或 导出,尤其数据库的逻

辑备份操作 ;

6>. 业务量大到超过服务器处理能力(我们大家

都高度关注业务发展,以及公司业务特点,

还有与开发和运营保持良好联系,很难出现未知

的业务突然爆发性增长);

要解决 LOAD 飙高,必须先找到造成飙高的真实

原因,请登陆数据库服务器后,执行命令 :

SHOW PROCESSLIST;(适合 MySQL 各种版本)

SELECT * FROM INFORMATION_SCHEMA.

PROCESSLIST WHERE COMMAND <> ‘sleep’ AND

TIME>100;(5.1.x 系列及以上版本)

若一直处在执行状态,且执行时间比较久,可以分

析下 SQL 语句执行计划 :

EXPLAIN SQL-statement;

若执行计划不合理,则可以根据 SQL 类型选择是

否与应用负责人联系。首先,查找造成服务器 LOAD

飙高的 PID,特别是 DELETE 或 UPDATE 等会堵住其

他 SQL 语句的 PID,然后进入 MySQL 命令行工具中,

对一些 SQL 先记录下来,再适情考虑执行 :

kill sql_pid;

1.1 统计信息更新

单表索引统计信息查看命令 :

SHOW INDEXES FROM tablename;

若发现其统计信息存在偏差,则可以执行 :

ANALYZE LOCALE TABLE tablename;

备注 :请加上 LOCALE 参数,从而使此语句执行时

不需要登记到二进制文件中。

1.2 碎片整理和统计信息更新

OPTIMIZE 操作等于 recreate + analyze 的组合

操作,所以会堵塞更新类型 SQL 语句。对于备机上

跑只读类型操作的业务,可以考虑使用此操作命令,

对于主服务器不建议使用此命令,为此备机上执行

OPTIMIZE 语句,必须这样写 :

OPTIMIZE LOCAL TABLE tablename;

备注 :这样执行将不会记录到二进制日志文件中,

从而不会复制到对其有复制关系的主机上。

2. HA 切换

2.1 启动备机 Heartbeat

若要启动备机上的 Heartbeat 进程,则必须先保证

备机上的 mysqld 服务已经停止掉,然后再启动备机

上的 Heartbeat 服务,最后再启动 mysqld 服务。

2.2 VIP 服务快速漂移

直接关闭掉 VIP 所挂载的主服务器上的 Heartbeat

服务 :service heartbeat stop,待切换之前的备机 VIP

服务挂载成功,再启动被关掉机器的 Heartbeat 服务,

且确保 mysqld 服务已经处于停止状态,最后再启动

mysqld 服务。

另外一种强制 VIP 飘移办法 :

c rm_ r e sou r c e -M -r r e so u r c e_name -H

nodename

其中 :resource_name 可以通过命令

crm_resource -L

进行强制 VIP 漂移后,还需要检查 failcount 值,命

令与设置值,如下 :

crm_failcount -U nodename -r resource_name

文/金官丁

015

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

015

服务 ;对于没有 Heartbeat 服务的数据库服务器,则直

接启动 mysqld 服务即可。

5. 紧急事件处理的流程

1>. 突发紧急事情 :

首先,要保持头脑清醒,心态要放平,建议先深呼

吸 ;

其次,仔细检查相关状态、日志等信息,并且保存

现场的状态信息,以便后续分析 ;

最后,确认解决此问题的可行方案,以及判断此方

案是否会引入新风险,是否需要其他同事协助 ;

2>. 处理步骤复杂或命令语句多的情况,必须先

把相关命令,分步骤在文档中写好 ;

3>. 突发紧急事情的处理,会影响到前端应用服

务的事情,应先跟团队领导沟通和确认处理方法,以

及影响范围有多大,影响程度有多严重 ;

4>. 确定紧急处理过程或完毕后,需要那些应用

方负责人检查应用是否正常,则应该先联系相关同

事 ;

5>. 处理完毕且业务正常之后,优先分析问题和

查找是否还有隐患 ;

6>. 发邮件描述整个故障发生、影响范围和程度

、处理过程,以及补填写紧急处理的 ITIL 流程单 ;

7>. 回复报警邮件 ;

原文 :

http://www.mysqlops.com/author/admin

如果需要联系作者,可在新浪微博上联系

@mysqlops

�G

如果 failcount 大于 0,则进行下面的操作 :

crm_resource -r resource_name -p is_managed

-v false (设置资源为非受控)crm_failcount -U

nodename -r resource_name -G �D (重新设置

failcount 值 )

crm_resource -H nodename -r resource_name

�C

crm_resource -r resource_name -d is_managed

( 设置为受控)

3. 复制中断

复制突然中断的可能原因 :

1>. 备机无法连接到主服务器,可能是网络问

题,也可能是主服务器的 mysqld 已停止 ;

2>. 主键冲突 ;

3>. 主从服务器数据不一致 ;

4>. 其他原因 ;

为使复制继续,我们可以进行如下处理 :

1>. Stop slave ;

2> start slave;

3> 检查服务是否正常 :show slave status\G

若是主健冲突或数据不一致的情况,则需要额外

处理 :

1>.stop slave;

2> start slave;

3> show slave status\G 记录错误的信息,一般

会有详细的 SQL 保存起来

4> stop slave;

5> SET GLOBAL sql_slave_skip_counter=1;

6> start slave ;

7> show slave status\G

8> 检查复制是否恢复正常,若没有循环 1>…7>

步骤(备注 :有些场景,也可以考虑借助脚

本循环的方式解决)

4.MySQL 假死

4.1 假死状态判断

MySQL 假死状态一般只会响应对内存表、服务器

状态和变量的操作,而且 SHOW PROCESSLIST; 可以

看到很多连接线程处于命令解析或处理的各种状态,

且 SQL 语句执行时间较长。此时,为校验是否真处

于 MysQL 假死状态,那么可以到库 test 中任意执行

创建表或更新数据的语句,若回车键后没有响应,则

一般可以断定 MySQL 是否已经处于假死状态。

4.2 假死状态处理

若使用 Heartbeat + Dual Master 的数据库架构,

VIP 所在的数据库服务器出现假死状态,则应该直接

关闭 service heartbeat stop,从而迫使 VIP 服务转移

到另外一台数据库服务器上。

其次,根据处理 MySQL 假死状态的经验,使用

mysqladmin �uroot �p shutdown 命令关闭 mysqld

服务也是无法处理的,最快的办法是直接 Kill 进程 :

ps -ef | grep mysql | grep -v grep | awk ‘{

print $2 }’| xargs kill -9

然后,把 Heartbeat 启动成功之后,再启动 mysqld

016

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

016

oracle审计导致的系统性能故障

shift加P:按CPU资源利用率降序排列,shift加M:按内存占用资源率降序排列。我们发现ORACLE进程占用

率较高。CPU几次超限飙升到90%以上,严重影响了系统性能。通过AWR报告发现,审计表更新比较频繁,当

天有比较多的报表更新。

昨天数据库主机接连出现几次 CPU 资源占用率过

高报警,经过一番调查最终找出问题的原因,解决了

这一故障,具体过程如下 :

环境:

主机 SUSE LINUX 10 (64 位)

ORACLE11G(64 位)

一、报警信息(故障呈现)

suselinux 服务器 CPU 利用率当前值为 :90.93,

阀值范围为 [90-100],发生时间 11:17:01

suselinux 服务器 CPU 利用率当前值为 :92.20,

阀值范围为 [90-100],发生时间 14:46:02

suselinux 服务器 CPU 利用率当前值为 :92.54,

阀值范围为 [90-100],发生时间 15:14:01

二、分析过程(故障调查)

1、使用 TOP 命令查看系统资源

shift 加 P :按 CPU 资源利用率降序排列 shift 加

M :按内存占用资源率降序排列

我们发现 ORACLE 进程占用率较高,CPU 几次超

限飙升到 90% 以上,严重影响了系统性能。

2、利用 SAR 命令检查 IO 和传送情况 :

注 :suse linux 下使用 sar,需要安装 sysstat 包。

发现每秒读入和写出的数据量比较大。

3、分析 AWR 报告

通过 AWR 报告发现,审计表更新比较频繁,当天

文/waring_id

有比较多的报表更新。

4、连接数据库,针对审计、索引进行查证

发现索引失效,导致数据检索变的缓慢,SQL 语句

执行效率低,CPU 消耗大。

5、问题解决,关闭审计重建索引

6、后续待优化 :

查证 SQL 语句,避免效率低下的语句高并发执行

引发 buffer cache 冲突而导致 CPU 资源的过度消耗。

本文有删节,完整内容见原文 :

h t t p : / / x j s u n j i e . b l o g . 5 1 c t o .

com/999372/604144

017

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

017

数据库故障分析与排查

每个整点的第10分的任务,密集的插入和更新SYS.OBJ$,容易产生这张系统表的资源争用。会造成两个实

例之间的全局一致性读和全局资源锁。buffer busy global cache ,buffer busy wait 等待。一个数据块可以插入多

条记录,并发修改这些记录,会出现buffer busy wait 等待。

8 月 1 日周一上午系统出现无法登陆,数据库挂

起的故障,经排查,现记录具体故障排查过程包括故

障的原因和现象,以及解决方法。

故障:

1、8 月 1 日,归档满,数据库挂起,应用系统无法

登陆

解决方法 :8 月 1 日的解决方法,删除归档文件。

故障原因:

分析数据库后台日志 :alert_ybzdb1.log 发现从 7

月 6 日至 8 月 1 日开始短短 40 天时间,连续 4 次出

现归档目录空间满。有以下的原因 :

1、 备份软件

Veritas Netbackup Server 安装 ybzback 服务器上

Veritas Client 部署在 ybzdb1 和 ybzdb2 上,安装

路径为 :/usr/tivoli/tsm/StorageAgent

备份脚本在 /usr/tivoli/tsm/client/api/bin64 目

录下

2、 维护人员

在 7 月 6 日,7 月 21 日,8 月 1 日,8 月 15 日连续

4 次出现归档日志空间满的数据库故障 , 总是在数

据库挂起后,才处理问题。

我看到的最早的归档日志文件是

# ls -ltotal 1028354696-rw-r----- 1 oracle oinstall 5 1 7 2 3 5 2 0 0 J u l 3 0 0 6 : 1 4 1_7428_702581932.dbf

-rw-r----- 1 oracle oinstall 5 2 0 9 8 4 0 6 4 J u l 3 0 0 6 : 1 7 1_7429_702581932.dbf

说明有维护人员删除了早期的归档文件,以释放

空间。这件事不是不会做。而是每次要出问题了才

去做。

这是一个上线的正式系统,不要总是等系统出问

题了,才去解决问题,客户满意度就是这样被一次次

故障蚕食掉的。

前瞻性维护,是工作中的一部分。

维护一个系统包括 :应用系统及其业务数据 ,

web 服务器,应用服务器,数据库服务器,主机操作系

统,SAN 网络,磁盘存储阵列,网络,所有这些层面无

故障地配合,形成一个整体,才能给客户提供服务。

你可以只精通其中一个层面,也可以其他层

面不精通,但是每个层面都需要知道如何维护,

知道每个层面系统的发展趋势,把故障扼杀在萌芽阶

段。

请维护人员,把维护系统的所有工作罗列出来,形

成工作指导说明列表。每次维护的操作都需要记录

维护日志,形成系统生命周期中的变更日志,就像人

的病历一样。

维护日志是维护一个系统的实际操作经验和案

例。

3、项目开发团队

对 8 月 16 日凌晨 3 点 13 分 16 分的归档日志进

行挖掘。

1、将归档日志文件添加到 LOGMINER 列表中

EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/arch/1_8498_702581932.dbf',DBMS_LOGMNR.NEW);

EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/arch/1_8499_702581932.dbf');

2、为 LOGMINER 指定将要使用的联机目录字典。

如果源数据库处于打开或者是可用状态,那么它可用

EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);

3、在 V$LOGMNR_CONTENTS 中查询有关已提交

事务的信息

REDO 是把做过的事再做一遍,UNDO 是把做过的

事。

每个整点的第 10 分的任务,建立 200 多张表,插

入数据,完成业务操作,然后再删除表。但是 oracle

文/xiaowohe

018

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

018

10G 数据库,drop 表,只是做了改名,并不是实际的物

理删除。24 小时,就是 4800 张表。

回收站积压的垃圾表越来越多 ,SYS.OBJ$ 表无

限膨胀。

每个整点的第 10 分的任务,密集的插入和更新

SYS.OBJ$,容易产生这张系统表的资源争用。会

造成两个实例之间的全局一致性读和全局资源锁。

buffer busy global cache ,buffer busy wait 等待。

一个数据块可以插入多条记录 , 并发修改这些记录,

会出现 buffer busy wait 等待。

所以目前虽然是集群数据库,但应用系统只能用

其中一个节点。如果两个实例全用,会产生资源争用

和等待。

占了 500G 的磁盘空间放归档,闲置一台小型机。

这种是一种资源浪费。小型机需要折旧和能源消耗,

却没有被有效利用。

4、结束LOGMNR

EXECUTE DBMS_LOGMNR.END_LOGMNR;

解决方案:

1、解决 TSM 软件的故障。 备份管理服务器也要

纳入维护职责。

2、从 5 月 23 日数据库有 0 级增量备份后,其后

无数据库物理备份,期间归档也被删除断档了。

失去了有效备份,系统在这条钢丝走了 3 个月,我们

何其幸运。( 使真的到了磁阵损坏,数据库丢失,备

份全无的情况。也是有办法的,重新实施一次项目的

数据库,重新抽各省数据,一直抽到当前时间点。)

解决 TSM 故障后,立即备份数据库。并定期检查备

份。

3、明确维护人员的维护职责,监控范围。

4、明确需要记录归档的业务操作,不需要记录归

档的操作也要明确出来。减少数据库的归档量。减

少资源争用,有效利用 RAC 集群环境。

5、目前数据库物理备份的采用了冗余度 6

清理过期备份 :

1、在主机 ybzdb1 切换到 oracle 用户

#hostnameybzdb1#su - oracle 2、进入 rman 使用恢复目录数据库

$rman catalog rrrrr/rrrrr@rman3、连接目标数据库

RMAN>connect target /4、查看备份配置

RMAN>show all;RMAN configuration parameters are:CONFIGURE RETENTION POLICY TO REDUNDANCY 6;

CONFIGURE BACKUP OPTIMIZATION OFF; # default

CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default

CONFIGURE CONTROLFILE AUTOBACKUP ON;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default

CONFIGURE MAXSETSIZE TO UNLIMITED; #

defaultCONFIGURE ENCRYPTION FOR DATABASE OFF; # default

CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default

CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/oracle/app/product/10.2/dbs/snapcf_ybzdb1.f'; # default

5、查看已有的备份集

RMAN>list backup;

6、查出过期的备份

RMAN>REPORT OBSOLETE;7、删除冗余度 6 以上的备份集

RMAN>DELETE OBSOLETE REDUNDANCY 6 ;8、进行交叉检查 恢复目录数据库、目标库控制文

件、备份集合 三者交叉检查

检查归档 :

RMAN>CROSSCHECK ARCHIVELOG ALL; 检查备份 :

RMAN>CROSSCHECK BACKUP ; 9、删除失效的归档,备份集

RMAN>DELETE EXPIRED ARCHIVELOG ALL;

RMAN>DELETE EXPIRED BACKUP;

维护人员职责之一 :数据库的物理备份管理,也是

维护工作的一部分。要定期的把过期的备份文件,从

磁带上删除。定期检查备份有效性,都是维护要做的

工作。

本文有删节,完整内容见原文 :

h t t p://b log.csdn.ne t/x i aowohe/a r t i c l e/

details/6693506

019

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

019

案例:PC做为DHCP客户端获取地址时间较长

从 debug 信息分析,PC 发送了 5 个 DHCP-DISCOVER 报文后才申请到了地址。 前4个,DHCP服务器都

分配了租约,但在发送 DHCP-OFFER 报文的时候发送失败了,直到PC发送了第5个 DHCP-DISCOVER报文后,

DHCP服务器才成功分配了租约。

DHCP(Dynamic Host Configuration Protocol,动

态主机配置协议)采用客户 / 服务 器通信模式。由

客户端先向服务器发送请求配置信息的报文(包括分

配的 IP 地址、 子网掩码、缺省网关等参数),服务器

根据策略返回携带相应配置信息的报文,以 实现 IP

地址等信息的动态配置。请求报文和回应报文都采

用 UDP 进行封装。

1. 组网环境

2. 故障现象

以 PC 做为 DHCP 客户端,通过 DHCP 申请地

址,经过 1 分钟左右才能获取地址。

3. 处理过程

文/杭州华三通信技术有限公司

图 案例组网图

检查 DHCP 服务器配置

DHCP 服务器上的配置如下,不存在问题。

#dhcp server ip-pool 1network 1.1.0.0 mask 255.255.0.0#……#interface Ethernet1/0 port link-mode route

ip address 1.1.1.1 255.255.255.0#……#dhcp enable#检查 DHCP 服务器上接口 Ethernet1/0 的状态

与 DHCP 客户端相连的接口 Ethernet1/0 处于

up 状态。

[server] display ip interface brief Ethernet 1/0

*down: administratively down(s): spoofingInterface Physical Protocol IP AddressEthernet1/0 up up 1.1.1.1检查物理连接是否通畅

<server> debugging dhcp server all*May 27 13:02:19:494 2007 server DHCPS/7/

DHCPS_DEBUG_COMMON: DHCPServer: Receive DHCPDISCOVER from 00e0-e100-0201.

*May 27 13:02:19:494 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Rx, interface Ethernet1/0

Message type: requestHardware type: 1, Hardware address length: 6Hops: 0, Transaction ID: 16777216Seconds: 0, Broadcast flag: 0Client IP address: 0.0.0.0 Your IP

address: 0.0.0.0Server IP address: 0.0.0.0 Relay agent IP

address: 0.0.0.0Client hardware address: 00e0-e100-0201Server host naame: Not Configured, Boot file

name: Not ConfiguredDHCP message type: DHCP Discover*May 27 13:02:19:494 2007 server DHCPS/7/

DHCPS_DEBUG_COMMON: DHCPServer: Assign Free Lease from global pool.

……*May 27 13:02:20:110 2007 server DHCPS/7/

DHCPS_DEBUG_PACKET: Tx, interface Ethernet1/0

Message type: replyHardware type: 1, Hardware address length: 6Hops: 0, Transaction ID: 16777216Seconds: 0, Broadcast flag: 0Client IP address: 0.0.0.0 Your IP

address: 1.1.0.2Server IP address: 0.0.0.0 Relay agent IP

address: 0.0.0.0

在 PC 上手工配置 IP 地址 1.1.1.2,可以 ping

通 DHCP 服务器的 IP 地址 1.1.1.2。

通过调试信息进行定位

在用户视图下打开 DHCP 服务器的调试信息开

关 debugging dhcp server all。

DHCP 服务器上打印如下调试信息 :

020

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

专题Special

020

Client hardware address: 00e0-e100-0201Server host naame: Not Configured, Boot file name: Not ConfiguredDHCP message type: DHCP Offer*May 27 13:02:20:110 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DhcpServer: Failed to send DHCPOFFER

to MAC=> 00e0-e100-0201 .*May 27 13:02:20:110 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Sending DHCPOFFER failed!……*May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Receive DHCPDISCOVER from

00e0-e100-0201.*May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Rx, interface Ethernet1/0Message type: requestHardware type: 1, Hardware address length: 6Hops: 0, Transaction ID: 266602672Seconds: 0, Broadcast flag: 1Client IP address: 0.0.0.0 Your IP address: 0.0.0.0Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0Client hardware address: 00e0-e100-0201Server host naame: Not Configured, Boot file name: Not ConfiguredDHCP message type: DHCP Discover*May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Assign Free Lease from

global pool.……*May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Tx, interface Ethernet1/0Message type: replyHardware type: 1, Hardware address length: 6Hops: 0, Transaction ID: 266602672Seconds: 0, Broadcast flag: 1Client IP address: 0.0.0.0 Your IP address: 1.1.0.2Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0Client hardware address: 00e0-e100-0201Server host naame: Not Configured, Boot file name: Not ConfiguredDHCP message type: DHCP Offer*May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DhcpServer: Send DHCPOFFER to 00e0-

e100-0201 Offer IP=> 1.1.0.2.*May 27 13:09:54:848 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Receive DHCPREQUEST from

00e0-e100-0201.*May 27 13:09:54:848 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Rx, interface Ethernet1/0Message type: requestHardware type: 1, Hardware address length: 6Hops: 0, Transaction ID: 266602672Seconds: 0, Broadcast flag: 1Client IP address: 0.0.0.0 Your IP address: 0.0.0.0Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 (代码为节选)

从 debug 信息分析,PC 发送了 5 个 DHCP-

DISCOVER 报文后才申请到了地址。 前 4 个,

DHCP 服务器都分配了租约,但在发送 DHCP-OFFER

报文的时候发送失 败了,直到 PC 发送了第 5 个

DHCP-DISCOVER 报文后,DHCP 服务器才成功分

配了租约。比较第 5 个 DHCP-DISCOVER 报文与

前 4 个的不同,发现报文的 Broadcast flag 不一样,

前 4 个为 0,即要求 DHCP 服务器单播发送回应报

文,第 5 个为 1,DHCP 服务器广播发送回应报文。

DHCP 服务器在单播回应报文的时候发送失败,

原因是 DHCP 服务器 Ethernet1/0 接口配置的 IP

地址为 1.1.1.1/24,没有到 1.1.0.0/16 网段的

路由,导致单播到 1.1.0.2 失败。

将地址池的可分配网段修改为与接口一致,则可

以解决上述问题 :

# dhcp server ip-pool 1network 1.1.1.0 mask 255.255.255.0#本文节选自《DHCP 故障处理》

原文下载地址 :

http://down.51cto.com/data/231602

热门图书推荐:本书讲解如何在一个计算机网

络中用有限的资源部署计算机,

以及安装自由软件让计算机象

一台服务器那样一起运行。

021

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

技巧Tips

021

Linux管理员常用网络资源收集

本文收集 Linux 管理员常用网络资源。

Corntab

http://www.corntab.com/

Corntab 是一款简易的网络 crontab 端,无需安装,

轻松创建 crontab 语句。不用担心格式问题。使用

“crontab -e”命令进入后复制 crontab 即可。

我们知道“crontab 命令提交、编辑、列出或除去

cron 作业。一个 cron 作业是一个命令,其运行是由

cron 守护进程在规则的调度间隔执行”

正则表达式

http://public.kvalley.com/regex/regex.asp

该网站允许你写入字符并简单测试正则表达式是

否运行。

类似的网站有 :

http://regexpal.com/

http://rubular.com/

http://regex.larsolavtorvik.com/

Ascii制作器

http://www.network-science.de/ascii/

http://www.kammerl.de/ascii/AsciiSignature.

php

http://www.glassgiant.com/ascii/

密码生成

http://www.onlinepasswordgenerator.com/

文/tuhaihe

http://www.md5.cz/

升级源列表

Ubuntu 升 级 源 生 成 器 @ http://repogen.

simplylinux.ch/index.php,大家根据选项选择国家,

Ubuntu 版本等等就可以生成升级源列表,然后用生成

的列表替代原系统文件即可,这个确实方便!!

类似的 Debian Sources List Generator

http://debgen.simplylinux.ch/

同时,我们常用的还有 Ginspect, 生成 INSPECT

和 Tcpdump 过滤表达式。

http://decock.org/ginspect/

附:命令行制作随机密码

#1

date +%s | sha256sum | base64 | head -c 32

; echo

使用 SHA 来哈希日期,输出头 32 个字节。

#2

< /dev/urandom tr -dc _A-Z-a-z-0-9 |

head -c${1:-32};echo;

使用内嵌的 /dev/urandom,只输出字符,结果取

头 32 个。

#3

openssl rand -base64 32

使用系统自带的 openssl 的随机特点来产生随机

密码

#4

tr -cd ‘[:alnum:]‘ < /dev/urandom | fold

-w30 | head -n1

#5

strings /dev/urandom | grep -o ‘[[:alnum:]]’ |

head -n 30 | tr -d ‘\n’; echo

通过过滤字符命令,输出随机密码

#6

< /dev/urandom tr -dc _A-Z-a-z-0-9 |

head -c6

这个命令比起来比较简单了

#7

dd if=/dev/urandom bs=1 count=32 2>/dev/

null | base64 -w 0 | rev | cut -b 2- | rev

#8

</dev/urandom tr -dc ’12345!@#$%qwertQ

WERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”

#9

randpw(){ < /dev/urandom tr -dc _A-Z-

a-z-0-9 | head -c${1:-16};echo;}

使用 randpw 随时产生随机密码,可以把它放到

~/.bashrc 文件里面。

#10

date | md5sum

本文有删节,完整内容见原文 :

http://www.bentutu.com/2011/06/collection-

sites-help-linu-admin/

022

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

工具Tools

022

五款救急的Linux文件恢复软件

TestDisk,也是Linux下一款强力文件恢复软件,该应用可帮你从删除的分区、FAT32 boot扇区恢复数据。同

时,也可以修复MFT 镜像、FAT 分区表,恢复从FAT/exFAT/NTFS/ext2/ext3/ext4等文件系统格式删除的数据

文件。

文件有备份,啥子也不愁!文件无备份,啥子也白

搭。但是,面对突如其来的悲剧,文件恢复软件来帮

忙时可以尽量最小化减小损失。下面 Linux 用户需

知的 5 款文件恢复软件 :

#1,Ddrescue

主页 :http://www.gnu.org/software/ddrescue/

ddrescue.html

Ddrescue 是一款优秀的文件恢复程序。当出现读

错误时,该应用可复制数据从一个文件到另一个文

件。

#2,Safecopy

主页 :http://safecopy.sourceforge.net/

Safecopy 可帮助你从 CD、软盘等存储器中提取文

件、数据。

#3,TestDisk

主 页 :http://www.cgsecur i ty.org/wiki/

TestDisk

TestDisk,也是 Linux 下一款强力文件恢复软件,该

应用可帮你从删除的分区、FAT32 boot 扇区恢复数

据。同时,也可以修复 MFT 镜像、FAT 分区表,恢复

从 FAT/exFAT/NTFS/ext2/ext3/ext4 等文件系统格

式删除的数据文件。

#4,PhotoRec

主 页 :http://www.cgsecur i ty.org/wiki/

PhotoRec

该软件最适合恢复图片和多媒体文件,同样可从

外部存储介质回复文件数据。

文/Umar Anjum译/笨兔兔

023

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

工具Tools

023

#5,Mondo Rescue

主页 :http://www.mondorescue.org/

该应用遵循 GPL 协议,支持从外部存储介质恢复

数据,也被打包在多个发行版本如 RedHat, RHEL,

SuSE, SLES, Mandriva, Debian 和 Gentoo 等发行版

本中。

恢复毕竟是恢复,提前做好备份才是王道!

英文 :

5 Must Have File Recovery Tools For Linux

Users

原文 :

http://os.51cto.com/art/201108/282953.htm

答读者问读者 Morphy Hu 勘误 :

在第 11期《用 iptables的 raw表解决压力过大报错问题》一文中, 釜底抽薪的方法(以Web 服务器为示例)

iptables -A FORWARD -m state –state UNTRACKED -j ACCEPT应为

iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

另有疑问一则 :

iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp –dport 80 -j NOTRACKiptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

这里的第二条规则,既然是 WEB 服务器,为什么是 FORWARD 链创建规则,而不是在 INPUT 链呢?

作者 守住每一天 回答 :

如果在 PREROUTING 链中创建规则,就需要在 FORWARD 中进行过滤。

电子杂志推荐: 电子杂志推荐:《Windows 运维月刊》

2011 年 8 月 目录

51CTO 专访微软 MVP 张诚

本期专题 :IIS 验证方法的灵

活应用与设置技巧

《开发月刊》

2011 年 9 月 目录

编程排行 Billboard

专题报道 《2011 年暑期关

于 Java 的那些事》

024

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

工具Tools

024

运维自动化之Cobbler系统安装详解

SA 们现在都知道运维自动化的重要性,运维自动

化安装方面,早期一般使用人工配置 pxe+dhcp+tftp

配合 kickstart,现在开源工具就多了,如 cobbler,

OpenQRM 和 Spacewalk。本文重点介绍 Cobbler。

Cobbler介绍

Cobbler 是一个快速网络安装 linux 的服务,而且

在经过调整也可以支持网络安装 windows。Cobbler

支持命令行管理,web 界面管理,还提供了 API 接口,

可以方便二次开发使用。

和 Kickstart 不同的是,使用 cobbler 不会因为在局

域网中启动了 dhcp 而导致有些机器因为默认从 pxe

启动在重启服务器后加载 tftp 内容导致启动终止。

常用架构如下图 :

cobbler的安装部署配置

cobbler安装环境准备

对于 centos 本身源 ,可根据自己所在地选择离

自己近的镜像源,比如 mirrors.163.com 或 mirrors.

sohu.com

1, 安装 epel

rpm -Uvh 'http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm'

2, 安装 dhcp 服务

yum -y install dhcp3, 其他服务的安装

额外需要的服务还有 tftp,rsync,xinetd,httpd。

所以如果安装系统的时候如果这几个包没装上,请手

动安装。

4,关闭 selinux

关闭后最好重启一下,让 selinux 的设置生效

cobbler安装配置

1, cobbler 安装

yum -y install cobbler2, cobbler 的配置

启动 cobbler

# /etc/init.d/cobblerd start启动 httpd 服务

# /etc/init.d/httpd start检查配置,执行

cobbler check执行完后出现一段信息,这段信息大意是 :

1,编辑 /etc/cobbler/settings 文件,找到 server

选项,修改为适当的 ip 地址,本实例配置 ip 为 :

192.168.10.1

2,编辑 /etc/cobbler/settings 文件,找到 next_

server 选项,修改为适当的 ip 地址,本实例配置 ip 为 :

192.168.10.1

3,SELinux 的设置。如果上面已经关闭了 SELinux

就不用管了

4,执行 cobbler get-loaders,系统将自动下载

loader 程序,完成提示 4 的修复工作。

5,编 辑 /etc/xinetd.d/tftp 文 件,将 文 件 中 的

disable 字段的配置由 yes 改为 no

6,编辑 /etc/xinetd.d/rsync 文件,将文件中的

disable 字段的配置由 yes 改为 no

7,在 iptables 中将 69,80,25151 端口打开。如果

仅仅只是在内部环境中使用,建议直接将防火墙关掉

8,提 示 说 debmirror 没 安 装。 如 果 不 是 安 装

debian 之类的系统,此提示可以忽略。

9,修改 cobbler 用户的默认密码,可以使用如

下命令生成密码,并使用生成后的密码替换 /etc/

cobbler/settings 中的密码。生成密码命令 :

openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'

其中“random-phrase-here”为干扰码

所有提示全部 fix 之后,执行

/etc/init.d/cobblerd restartcobbler的使用

文/蚊子

025

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

工具Tools

025

配置dhcp服务

首先修改 cobbler 配置,让 cobbler 来管理 dhcp 服

务,编辑文件 /etc/cobbler/settings

manage_dhcp: 1接下来修改 /etc/cobbler/dhcp.template,此文件

是 cobbler 管理 dhcp 的模板

同步cobbler配置

执行

# cobbler sync会看到如一段提示,如右侧。

cobbler 会自动进行初始化工作,移除已经存在的

启动项,然后根据模板拷贝 loader 文件。之后再生成

pxe 的配置文件,生成 dhcp 的配置文件,最后再重启

dhcp 服务。

至此,就可以使用虚拟机来测试 cobbler 安装了。

Cobbler测试安装

在启动的时候选择 PXE 的模式。

然后就能看到图示内容。虚拟机通过 dhcp 获得

了 122段的 ip,然后通过 tftp获得到 pxe的启动文件。

task started: 2011-08-11_170706_synctask started (id=Sync, time=Thu Aug 11 17:07:06 2011)running pre-sync triggerscleaning treesremoving: /var/www/cobbler/images/centos-6.0-i386removing: /var/lib/tftpboot/pxelinux.cfg/defaultremoving: /var/lib/tftpboot/grub/imagesremoving: /var/lib/tftpboot/grub/grub-x86.efiremoving: /var/lib/tftpboot/grub/efidefaultremoving: /var/lib/tftpboot/grub/grub-x86_64.efiremoving: /var/lib/tftpboot/images/centos-6.0-i386removing: /var/lib/tftpboot/s390x/profile_listcopying bootloaderstrying hardlink /var/lib/cobbler/loaders/grub-x86.efi-> /var/lib/tftpboot/grub/grub-x86.efitrying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi-> /var/lib/tftpboot/grub/grub-x86_64.efi

copying distroscopying files for distro: centos-6.0-i386trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/vmlinuz -> /var/lib/tftpboot/images/centos-6.0-i386/vmlinuz

trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/initrd.img -> /var/lib/tftpboot/images/centos-6.0-i386/initrd.img

trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/vmlinuz -> /var/www/cobbler/images/centos-6.0-i386/vmlinuz

trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/initrd.img -> /var/www/cobbler/images/centos-6.0-i386/initrd.img

copying imagesgenerating PXE configuration filesrendering DHCP filesgenerating /etc/dhcp/dhcpd.confcleaning link cachesgenerating PXE menu structurerunning post-sync triggersrunning python triggers from /var/lib/cobbler/triggers/sync/post/*running python trigger cobbler.modules.sync_post_restart_servicesrunning: dhcpd -t -qreceived on stdout:received on stderr:running: /etc/rc.d/init.d/dhcpd restartreceived on stdout: Shutting down dhcpd: [ OK ]Starting dhcpd: [ OK ] (注:代码为节选)

026

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

工具Tools

026

由此看到,系统已经进入重装的状态了。

安装使用心得

以上所有内容虽然是在 kvm 虚拟机上测试的,但

完全可以直接使用于生产环境中,不会给现有环境带

来任何影响。唯一需要做的就是规划好现有网络。

对于很多人担心的生成环境开启 DHCP 服务问题,

我认为不会对现有生产环境产生任何影响,理由有

二 :

1, 没有人会在装好系统后让网卡使用 dhcp模式,

通常都是为网卡配置静态 ip

2, 从测试过程中看到,就算是服务器默认设置成

了通过 pxe 启动,而且也顺利的通过 pxe 启动了,但

之后会收到 cobbler 的引导菜单。如果默认没有任何

选择的话,20 秒后会使用 local 方式加载,也就是启

动硬盘上的系统。

综上所述,cobbler 还是很安全的。

本文有删减,原文 :

http://os.51cto.com/art/201109/288604.htm

安装好的系统如下图所示。

Linux系统重装测试

1,先确定当前 linux系统中已经安装了 koan软件。

对于 koan 的安装可以放到 ks 文件中在安装系统的

过程中完成安装操作。执行如下命令检查

# rpm -qa|grep koankoan-2.0.11-2.el6.noarch2,有了 koan 软件后可以执行如下操作,查看

cobbler 上的系统版本列表

# k o a n - - s e r v e r = 1 9 2 . 1 6 8 . 1 0 . 1 --list=profiles

- l o o k i n g f o r C o b b l e r a t http://192.168.10.1/cobbler_api

centos-6.0-i386centos-6.0-i386-kvmcentos6-vmcentos-6.0-x86_64

这里我们选择 centos-6.0-i386 来重装。可以执

行如下命令。

红色部分是手工输入的,从其他部分信息可以看

到,koan 帮我们做了很多本该人工操作的内容。

接下来看下重启。

# k o a n - - s e r v e r = 1 9 2 . 1 6 8 . 1 0 . 1 --profile=centos-6.0-i386 --replace-self

- l o o k i n g f o r C o b b l e r a t http://192.168.10.1/cobbler_api

- reading URL: http://192.168.10.1/cblr/svc/op/ks/profile/centos-6.0-i386

install_tree: http://192.168.10.1/cobbler/ks_mirror/centos-6.0-i386

downloading initrd initrd.img to /boot/initrd.img

url=http://192.168.10.1/cobbler/images/centos-6.0-i386/initrd.img

- reading URL: http://192.168.10.1/cobbler/images/centos-6.0-i386/initrd.img

downloading kernel vmlinuz to /boot/vmlinuz

url=http://192.168.10.1/cobbler/images/centos-6.0-i386/vmlinuz

- reading URL: http://192.168.10.1/cobbler/images/centos-6.0-i386/vmlinuz

- ['/sbin/grubby', '--add-kernel', '/boot/vmlinuz', '--initrd', '/b o o t / i n i t r d . i m g ' , ' - - a r g s ' , ' " k s = h t t p : / / 1 9 2 . 1 6 8 . 1 0 . 1 / c b l r /svc/op/ks/profile/centos-6.0-i386 ksdevice=link kssendmac lang= text "', '--copy-default', '--make-default', '--title=kick1313675750']

- reboot to apply changes# reboot

027

《Linux 运维趋势》投稿信箱 : [email protected]

杂志订阅 : http://os.51cto.com/art/201011/233915.htm

51CTO Linux 频道:http://os.51cto.com/linux/

脚本Scripts

027

用SHELL脚本来防止SSH和vsftpd暴力破解

我的一台公网服务器,由于网站采取的是双备份

策略,所以开放了 vsftpd 的 21 端口,近来发现许多人

在尝试暴力破解 vsftpd 和 ssh,我随便看了看 /var/

log/secure 日志,显示如下 :118.33.110.52=2834

119.145.254.77=37121.254.179.199=226121.88.250.243=35200.29.110.104=168202.78.173.199=250222.221.2.210=373

这里面除了 119.145.254.77 和 121.88.250.243

是正常的外,其它的基本都是恶意 IP。

由于我的服务器是置于 LVS 集群后面,所以我

原来想用 iptables 的 recent 模块解决这个问题的方

法估计是行不通的。而且,服务器的系统安装的是

CentOS 5.5 x86_64,iptables 还暂时不支持此模块,

报错如下 :

i p t a b l e s : U n k n o w n e r r o r 18446744073709551615

i p t a b l e s : U n k n o w n e r r o r 18446744073709551615

而由于机器已经在跑重要的业务,我又不想去升

级内核,免得影响正常的网站运营,所以 iptables 的

想法暂时告一段落 ; 后来我又想到用 HostsDeny 的

方法来解决这个问题,感觉这个方法还是比较繁琐,

还不如自己手动写脚本来解决这个麻烦,脚本内容如

文/抚琴煮酒

下 :

脚本思路如下 :

由于 /var/log/secure 是以星期为轮询的,所以

我们每次可以查看这个文件,利用 SHELL 脚本统计

出其中访问失败比较频繁的 IP,并定义一个阀值为

100,如果大于 100 的话就将其放进 /etc/hosts.deny

文件,阻止其继续访问 vsftpd 和 ssh; 然后将其写进

crontab 计划列表里,每隔一段时间进行一次排查,如

果下次排查的某 IP 次数又大于 100,首先检查它在

不在我们的黑名单,如果在的话就无视过去 ; 如果不

在,就继续添加进 /etc/hosts.deny 文件。

我的 /etc/crontab 文件最后一行为

* */1 * * * root sh /root/hosts_deny.sh

即每隔 1 小时就重复执行一次这个脚本,这里也

有一个情况要说明下,/var/log/secure 是每隔一个

星期轮询一次的,所以我们这里可以根据服务器的具

体情况来配置多少时间执行一次此脚本,暴力破解频

繁的机器可适当缩小这个周期。

我的公网机器运行脚本一段时间后,/etc/hosts.

deny 文件如下 :

原文 :

http://os.51cto.com/art/201109/290306.htm

sshd:119.145.254.77vsftpd:119.145.254.77sshd:222.221.2.210vsftpd:222.221.2.210sshd:118.218.136.25vsftpd:118.218.136.25sshd:118.33.110.52vsftpd:118.33.110.52sshd:123.196.113.11vsftpd:123.196.113.11sshd:14.140.172.74vsftpd:14.140.172.74sshd:200.29.110.104vsftpd:200.29.110.104sshd:202.102.89.81vsftpd:202.102.89.81sshd:202.78.173.199vsftpd:202.78.173.199

#! /bin/bashcat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1}' > /root/black.txt

DEFINE="100"for i in `cat /root/black.txt`doIP=`echo $i |awk -F= '{print $1}'`NUM=`echo $i|awk -F= '{print $2}'`if [ $NUM -gt $DEFINE ];thengrep $IP /etc/hosts.deny > /dev/nullif [ $? -gt 0 ];thenecho "sshd:$IP" >> /etc/hosts.denyecho "vsftpd:$IP" >> /etc/hosts.denyfifidone

招募启事《Linux 运维趋势》的建设需要您的加入!

您可以通过如下方式参与我们杂志的建

设 :

1、推荐文章

无论是您在互联网上看到的好文章,还是

您自己总结 / 整理的资料 ;无论是英文还是中

文 ;无论是入门的还是高端的,都欢迎推荐!

您可以直接在技术圈中分享 :

http://g.51cto.com/linuxops

2、投稿

如果您愿意与大家分享您技术经验的热

诚,那么欢迎您的投稿!原创或译文均可,稿

件在 51CTO 首发可领取稿酬 :)

投稿信箱 :[email protected]

3、推广与意见

如果您喜欢我们的杂志,认为这本杂志对

于您的工作有所帮助,请向您的 Linux 好友、同

事们推荐它!

如果您觉得这份杂志还有什么地方需要改

进或补充,也希望您能够提出您的宝贵意见!

反馈可至《Linux 运维趋势》新浪微群 :

http://q.weibo.com/121303

或在新浪微博

@51CTO 系统频道

下期预告下期主题为 :

服务器调优,敬请期待!

本刊为月刊,预定每月发布日期为 :

每个月的第二个星期五

您可以通过如下方式检查新刊发布 :

1、电子邮件订阅 :

os.51cto.com/art/201011/233915.htm

2、RSS 订阅 :

www.51cto.com/php/rss.php?typeid=777

《Linux 运维趋势》是由 51CTO 系统频道策

划、针对 Linux/Unix 系统运维人员的一份电

子杂志,内容从基础的技巧心得、实际操作案

例到中、高端的运维技术趋势与理念等均有覆

盖。

《Linux 运维趋势》是开放的非盈利性电子

杂志,其中所有内容均收集整理自国内外互联

网(包含 51CTO 系统频道本身的内容)。对于

来自国内的内容,编辑都会事先征求原作者的

许可(八卦,趣闻 & 数字栏目例外)。如果您认

为本杂志的内容侵犯到了您的版权,可发信至

[email protected] 进行投诉。

往期回顾2010.9,000 期, 运维自动化

2010.10,001 期, 监控与报警

2010.11,002 期, 可用性

2010.12,003 期, 运维与开发

2011.01,004 期, 瓶颈分析

2011.02,005 期, 内网开发环境

2011.03,006 期, 备份

2011.04,007 期, 迁移

2011.05,008 期, 双机操作

2011.06,009 期, Puppet

2011.07,010 期, 日志分析

2011.08.011 期, iptables

更多汇总见《Linux 运维趋势》专题

制作团队本期责编 :李晶

封面制作 :魏峰

以及热心投稿、帮助审稿的热心网友们