目录
杂志订阅 : http://os.51cto.com/art/201011/233915.htm   Index
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




 目录
           人物·People                                             技巧·工具·脚本
 003       天涯首席工程师王建科:技术人要有产品观                             021   Linux管理员常用网络资源收集
           交流·Interact                                     022   五款救急的Linux文件恢复软件
 005       网站扩展实例:1亿用户的Tagged架构进化史                         024   运维自动化之Cobbler系统安装详解
           八卦·News                                         027   用SHELL脚本来防止SSH和vsftpd暴力破解
 007       Linux 20周年庆,2011最佳开源软件
           专题·Special
 009       strace命令使用实例
 010       Unix调试的瑞士军刀:lsof
 012       使用top命令的一些小技巧
 013       网站排障分析常用的命令                                      出版方 :
                                                                51CTO 系统频道(北京无忧创想信息技术有限公司)
 014       MySQL生产环境突发故障处理手册                                本期责编 :
                                                                 李晶                  杂志主编 :
                                                                                          杨赛

 016       oracle审计导致的系统性能故障                                联系方法 :
                                                                 yangsai@51cto.com 010-68476606(分机 8035)
                                                            出版日期 :
                                                                 2011 年 9 月 16 日
 017       数据库故障分析与排查
                                                                    每月第 2 个星期五出版
                                                            订阅 :
                                                               http://os.51cto.com/art/201011/233915.htm




                                                   002                               51CTO Linux 频道 :
                                                                                                    http://os.51cto.com/linux/
人物
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                 People
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


                                                                                      时候还是只有一台服务器,又当 web 又当 db,内存只
天涯首席工程师王建科:技术人要有产品观                                                                   有 512MB,这个压力可想而知。
                                                                            采访/杨赛      当时天涯还有一个特点,就是帖子是不分页的。
                                                                                      一千回复也好,一万回复也好,一个页面都要全部加
                                           人物简介:
                                                                                      载进来。长帖对天涯的系统压力非常大。
                                            王建科(天涯ID:卓锐),1996年毕业于吉林大学计算机科学
                                                                                       2003 年之后到 2006 年之间,是天涯发展的一个
                                       系,现任海南天涯在线网络科技有限公司首席工程师、天涯论坛
                                                                                      中期阶段。这个阶段天涯快速发展, 2003 年的同
                                                                                                      从
                                       产品总监,天涯早期建设者及参与者,主导开发了天涯论坛、天
                                                                                      时在线 8000 人, 2006 年达到 20 万。快速发展我
                                                                                                 到
                                       涯博客等产品。
                                                                                      觉得有几个原因吧,第一个是大概在 2005 年左右,中
                                                                                      国互联网快速增长,网民大爆发,天涯用户也跟着往
    国内的网民们大多听说过天涯社区,只是也许很                          的 ID 是 2 月 28 号注册的,是天涯第一个 ID。回想当   上增长。还有一个就是当时天涯的媒体性凸显出来,
 多人并不知道,这个有 12 年历史的、现在同时在线已                        时,其实对技术的要求并不很高,只要把这个东西实            因为天涯当时很多网络事件和话题,很多媒体就把天
 经超过 50 万人的巨大社区,在最开始几年的产品设                         现出来,快速的实现出来。当时整个互联网的网民也            涯作为一个新闻源去报导,这样相当于传播天涯的品
 计、开发和运维,都是由一个人来完成的。他就是现                           比较少,所以用户比较少,所以对整个性能的压力也            牌。
 在天涯的首席工程师、天涯论坛产品总监王建科。本                           比较小。当然服务器硬件也比较差,大概是 586 这样          这样就导致了天涯的快速增长,而天涯的服务器
 次访谈内容大致分为天涯的技术发展历程、天涯界面                           的吧。                                这时候增长的也比较快……
 的设计、对技术债务的观点、对技术选型的观点、对技                            51CTO :
                                                           当时服务器是托管在机房?                51CTO :
                                                                                             不再是一台服务器了。
 术人员成长的建议、以及开源相关的一些话题。对于                             王建科 :
                                                         当时我们还没在机房,只有一条链路,好            王建科 : 不再是一台了。2004 年的时候,
                                                                                           嗯,                 已经
 互联网行业的开发、运维和产品运营人员而言,相信                           像也就是几十 K 吧,马上感觉不够,就搬到电信的机          是 4 台 web, 台 db 了。之前已经是扛不住了,
                                                                                                2                 负载
王建科的分享会给你带来一些启发。                                   房去了。当时电信还没有 IDC 这个概念,也就是一张         全都满了这么一个状况。后来我们就拆分嘛, db
                                                                                                          把
   51CTO :
         首先,简单的介绍一下天涯的技术发展历                        桌子,有个网线,连上去就行了(笑)。当时门槛是比           拆分。天涯不是论坛分很多版块吗,所以就是把不同
程吧。                                                较低的。                               版块拆分到不同的服务器上。如果是所有版块在一
   王建科 :
       天涯最初只有一个开发者,就是我。产品                            我们把天涯分为几个阶段,第一个就是 2003 年之        个表里的话就很难拆分,所以我们就是一个版块对应
的设计和技术实现都是我。当时是用 ASP 来做,有                          前,刚起步的一个阶段。网民比较少,当时网友还是            一套表。所以如果这个服务器压力比较大的话,我们
很多困难,因为那时 ASP 这个技术没有文档,全靠摸                         一个比较异类的人群, 千奇百怪的,
                                                             ID     谈的话题别人            就可以把一整个版块,就是一个表,迁移到别的服务
索,不像现在,网上资料非常多。那是在 98 年底的时                         都听不懂。所以那个时候,同时在线也就是 90 人左          器上去。
候。                                                 右。2002 年同时在线是 1000 人, 2003 年的时候,
                                                                        到              所 以 db 方 面 就 是 按 版 块 拆 分 表 这 个 模 式。web
   天涯最开始上线运营的话是 99 年 3 月 1 号。我                     同时在线就差不多快要 10000 人了。不过 2003 年那     方面就是增加。现在 web 方面扩展比较容易点,最

                                                                  003                           51CTO Linux 频道 :
                                                                                                               http://os.51cto.com/linux/
人物
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                   People
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


 早做的时候就是通过 session 会话把 web 进行拆分。                   一页的功能,就只能一页一页翻这样。                       怨,再整个做优化。
    db 另一个方面就是不使用连合查询。天涯最早为                          另一个就是锁。很多网站采用了死锁这种机制,                  51CTO :
                                                                                                  您对技术人员在中国的发展有何看法?
 了优化性能有几个特点,一个就是不使用连合查询。                           但是天涯呢,因为网友看内容对一致性的要求并不                   王建科 :
                                                                                                在中国的话,技术人员在大企业成长的空
 比如有的时候你要呈现用户的名字啊,标题等信息的                           高,我们就都全部允许脏读。就是说你不用忽略这个                 间会更大一点,在中小企业的成长空间就会小一点,
 时候,就要去读,那么我们的做法是在产生的时候就                           更新,不用在读的时候把它锁上这样。                       这是中国技术人员面临的一个问题。
 把信息写到同一个地方去了,读的时候就只要把它一                             51CTO :
                                                           因为没这个需要。                         51CTO :
                                                                                                  意思是中国的技术人员还是尽量在大企业
 起呈现出来。这样表之间就没有太多关联,因为表关                             王建科 : 没必要。因为我们的数据不像银行数
                                                         对,                                寻求发展是吗(笑)?
 联也是十分影响性能的。而且表关联还会造成难以                            据,对一致性要求并不特别高,就避免了死锁这样的                  王建科 :
                                                                                                这个嘛(笑) 比如像我的话,
                                                                                                      ,       其实从一开
 拆分的问题。                                            方式。                                     始就是同时做技术和产品两条线。很多技术人员要
   还有就是一帖到底这个,我们的做法就是把所有                             另外一方面就是我们也用了 DNS 轮询,但是 DNS            往产品的方向转,觉得有很大困难,但是我这边就要
回复写到一个字段里面去。有新的回复时,就把这个                            轮询这个效果并不是特别好,没有我们想象的那么均                 求,技术人员也必须关注一些产品,因为接触过产品
内容插到字段最下面,这样呈现的时候,只要读一个                            匀,所以后来我们就自己写了应用来控制负载均衡。                 的技术人员思考交流的方式跟没接触过产品的技术
字段就全出去了。这样就极大的降低了 db 的 I/O,                          另一个就是在 2003 年后来压力大的时候,我们开             人员是不一样的。他能够考虑到一个产品使用会不
因为多一次读写就多一次 I/O 嘛,你只有一个字段,                         始用 Squid 做页面缓存。当时因为天涯很多动态的              会有问题,技术特点方面能不能作出更漂亮的功能。
就只有一个 I/O ;
          如果 100 个回复分为 100 个字段,                    内容,变化比较大,而用了页面缓存之后,命中率在                 像是国外很多互联网产品都是技术人员驱动的,好比
那 就 是 100 倍 的 I/O,1000 个 就 是 1000 个 I/O。 所         70 左右吧,还不错,减少了后端的很多压力。                  Google 这样的。那么我也会鼓励我们的技术人员,多
以天涯把所有回复合并,就极大的减少了 I/O。所以                            这样就是 2003 年到 06 年这个阶段。                关注产品,参与一些决策。否则的话,现在很多公司
天涯才能大体做到“一帖到底” 不分页。
              ,                                      那么 07 年到现在呢,就是比较强调架构化这个方              一个常态就是,运营人员埋怨产品,然后技术就成了
    另一个有关这个分页。很多论坛数据量很大的时                          面。07 年之前我们不是只有电信这么一个链路吗,                推脱责任的借口,我们叫做“炮灰”(笑) 很辛苦,
                                                                                                              ,    又
 候,你越往后翻页,处理的速度就越慢,效果很差了。                          网通用户就抱怨很多,所以就购买了网通链路,然后                 没有成就感。这是不利的,所以就想怎么把这部分和
 所以天涯这边我们用 where 子句来分页。Where 子                     用 F5 做链路负载均衡。                           运营团队糅合在一起,共同做一件事情,共同关注用
 句就是判断,你点下一页的时候, where 子句定位
                用                                    然后就是做更多的页面缓存。Squid 之后我们开              户。
 到这个下一页的数据。所以这样的话,你每次点下一                           始用 Varnish,这个感觉效果更好一些。然后就是对              这是知识面方面。另一方面 技术人员也要扩展一
 页,每次请求在性能上的消耗都是一样的,一致的。                           页面进行压缩。因为天涯都是文本内容嘛,所以压                  下深度,还是要走专业化的路线。所以我们也鼓励技
   51CTO :
         就不用做 n 次计算了。                              缩率能达到 70%,效果挺好。然后就是 memcached           术人员进行交流,好比刘天斯,就很喜欢写博客分享
   王建科 : 就不用再去计算我下一页这个数据到
       对,                                          内 存 缓 存, 是 你 要 往 db 读 写 的 内 容 都 先 放 在
                                                           就                               一些东西,这个过程也学到很多东西。
 底在什么位置,尤其数据量大的时候,这就很快。当                           memcached 里面,这个命中率比较高, 90%。
                                                                         有                  本文有删节,完整内容见原文 :
 然天涯只提供了下一页的功能,而没有提供直接到某                             所以就是一步一步做过来,先解决网通用户的抱                  http://os.51cto.com/art/201104/254678.htm

                                                                    004                               51CTO Linux 频道 :
                                                                                                                     http://os.51cto.com/linux/
交流
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                Interact
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        一家2004年创建的试水社交网站,经过7年的成长和扩展,现在已经拥有了1亿用户。平均50亿次的pv,承
    担在1000多台服务器的网站架构上。Tagged网站,现在承载了1亿个用户、1千台服务器和50亿次页面浏览量。
    这个过程是如何实现的?



 网站扩展实例:1亿用户的Tagged架构进化史
                                                                           文/Todd Hoff    即使只有在 8 台服务器的时候,Tagged 的网站流
                                                                            编译/布加迪
                                                                                         量也要比大多数人所知道的来得多。幸运的是,分布

    本文将要介绍的就是这个叫 Tagged 的网站——                       孵化器有着一种快速成型文化 :
                                                                  每年通常推出两                式内存缓存系统 memcached 带来了两个优势 :
                                                                                                                   既消

 Tagged 架构实例 : 亿个用户、 千台服务器和 50 亿
             1      1                              个新概念,寻觅其中的大赢家。正是在这样的文化中,              除了 90% 以上的数据库读操作,又确保含有大量不

 次页面浏览量。下面,Tagged 的 CTO 兼联合创始人                     Tagged 应运而生。LAMP 是适合这种类型的工作的          同信息的社交网络面面可以迅速显示。

 Johann Schleier-Smith 将 为 我 们 介 绍 Tagged 网 站      自然选择 ;
                                                        这种工作注重灵活性和快速开发周期。当                自一开始,我们的对象缓存注重显式缓存更新,支

 架构的成长历程。                                          时,Java 开发主要面向大企业的开发工作,Python 吸        持更简单的技术,比如删除无效的键 ;
                                                                                                          或者根据计时

    自 2004 年以来,Tagged 从一家试水社交领域的                   引的编程员寥寥无几,Perl 方面的编程员又不是我们            器,使失效数据无效。这种方法的缺点是代码比较复

 小不点网站,逐渐变成全球最大的社交网络之一,数                           所要的那一种。我们还知道,雅虎是 PHP 的大力支持            杂,但大幅减轻了数据库负载,而且使网站保持快速

 百万的成员访问该网站以结交新成员,每个月的页面                           者;
                                                    所以一旦有需要,完全有可能扩展业务规模。                 运行,涉及经常更新的对象时更是如此。

 浏览量达到 50 亿次。这个逐步发展的历程迫使我们                          我在以前的项目上运行 MySQL 方面有着丰富的              我们的网站继续越来越复杂,在标准的社交网络

 Tagged 不断完善网站架构,最终获得了功能异常强                        经历,这让我对这项技术爱恨交加。本着尝试的精神,              功能的基础上,添加了搜索和社交发现等功能。我的

 大的平台。                                             我们为 Tagged 购买了几份入门级 Oracle 许可证,看      团队说服我使用 Java 来建立搜索功能,那样我们就

    第一个阶段:2004年,PHP Web应用程序、10万个                   看甲骨文的技术是不是用起来更好。                      能得益于 Lucene 库。当我们学会了让 Java 顺畅运行

    用户和15台服务器                                       值得注意的是,许多构建的小型网站仍然就像早                后,我有一种如释重负的感觉。

                                                   期的 Tagged。具有一种简单的美 ;
                                                                      无状态的 PHP 与          第三个阶段:2006年,数据库扩展、1000万个用户

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

                                                   最棘手的部分,而额外的 Web 显示计算能力很容易
                                                   添加。
                                                    第二个阶段:2005年,缓存PHP Web应用程序、100
                                                    万个用户和20台服务器



                                                                 005                              51CTO Linux 频道 :
                                                                                                                 http://os.51cto.com/linux/
交流
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                  Interact
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com



    此时 Tagged 已拥有 1000 万个注册用户,随时都                   拆 分 数 据 库 是 最 具 有 难 度 的 任 务, 是 在 扩 展
                                                                                也
 有成千上万个用户在线,我们开始着手解决我一直忧                           Tagged 方面最具有成效的技术。由于在多个数据库
 心忡忡的挑战。那时我们刚筹集到了一笔资金,竭力                           之间分割用户,我们最终拥有了这种设计 :
                                                                      在所有地
 寻求发展,但是数据库亟需添加容量。我们进行了一                           方都允许我们只要添加硬件,就可以进行扩展。
 次又一次的缓存或 SQL 调整和优化,但服务器的处                          我们 Tagged 的一条规定是,将每个表分成 64 个
 理器其占用率还是会一再逼近 100% 大关。                            分区 ;
                                                      我们牢牢遵守这个不成文的规定,除非有着非
    向上扩展系统的想法是个权宜之计,但是多插槽                          常诱人的理由才允许有例外。只有得益于游戏玩家                    这次我们把时间提前几年。解决了关键的数据库
 服务器硬件动辄数百万美元,于是我们选择了 Oracle                       之间高性能受保护事务的某些游戏才在单独的数据                  扩展性问题后,我们发现通过添加硬件来支持扩展相
 真正应用集群 RAC,该系统让我们可以使用标准网                          库中垂直分区。                                 当容易。
 络系统来连接数量众多的大众化 Linux 主机,以构建                        拆分现有的数据意味着针对数 TB 的数据进行复                  在这一段期间,扩展性方面的考量因素转向了减
 一个庞大的数据库。再结合最新处理器具有的优势,                           杂的转换工作。一开始,我们每次逐个着手解决功能                 少故障和应对越来越多的易损坏部件所带来的威胁。
 Oracle RAC 的容量比我们的第一台数据库服务器足                      特性,依赖应用程序代码来代替连接(join) 但最后
                                                                         ,                 通过负载均衡器的运行状况检查和自动关闭毫无反
 足增加了 20 倍,这一点很重要,而且允许应用程序开                        我们还是在应用程序的核心部分遇到了一大批表,这                 应的服务,实现了针对 Web 层的全方位保护,避免了
 发人员可以继续致力于开发新的功能特性。                               些表的结合得太紧密了,这个方法行不通。于是我们                 各种相关问题。我们在设计核心组件的架构时还考
   Tagged 通 过 结 合 来 自 一 个 庞 大 内 存 中 数 据 集          编写了生成 SQL 的迁移代码,导出、转换和重新装入              虑到了弹性。
 的统计数字,开始提供个性化的人员匹配(people-                        了数亿行的数据,并使用触发器来跟踪源系统上面出                   Java 扮演了极其重要的角色,一方面归因于 Java
 matching)推荐服务。用 PHP 实现这一点完全不现实,                   现的变化,逐渐更新目标,那样最后的同步所带来的                 越来越得到接受,拥有相应专长的人也越来越多 ;
                                                                                                                 另
 于是 Java 进一步渗透到了我们的环境中。                            停运时间不到 30 分钟。                           一方面是由于面临的挑战越来越多。为了对付垃圾
    第四个阶段:2007年,数据库拆分、5000万个用户                      拥有许多数据库意味着拥有许多的数据库连接。                  邮件及其他滥用现象,我们的算法充分利用了庞大的
    和500台服务器                                       尤其是由于我们添加了更多的“社交发现”功能(比                 共享内存空间,还充分利用了计算密集型方法。社交
                                                   如我们的第一项约会功能 Meet Me) 拆分工作可能
                                                                       ,                   游戏也得益于 Java 的高性能和并发控制,但面临的
                                                   会让 PHP 不堪重负。为了解决这个问题,我们开发了              代价是系统很复杂 ;
                                                                                                    现在不同的应用程序池比以前
                                                   一款 Java 应用程序,负责提供运行查询的 Web 服务 ;         多得多,有待我们加以管理。
                                                   该应用程序还继续提供一个非常方便的监控点,便于                   本文有删节,完整内容见原文 :
                                                   轻松自如地处理数据库故障。                             Tagged Architecture - Scaling To 100 Million
                                                    第五个阶段:2010年,架构完善和扩展、8000万个             Users, 1000 Servers, And 5 Billion Page Views
                                                    用户和1000台服务器                              http://os.51cto.com/art/201108/283807.htm



                                                                   006                                   51CTO Linux 频道 :
                                                                                                                        http://os.51cto.com/linux/
八卦
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                      News
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


                                                                                                  【26 年】理查德·斯托曼于 1985 年 10 月创立了
 Linux 20周年庆,2011最佳开源软件                                                                          自由软件基金会 (FSF)。至今已 26 年,自由软件基

                                                            ——八卦,新闻与数字 2011.08 - 2011.09         金会和刚刚年满 20 岁的 Linux 彻底地改变了整个计
                                                                                                 算机世界,并引发了一场革命。直到现在,这场软件
  【2011 年最佳开源软件】开源软件已经无所不在,                         【3650 万】StudioNow 证明了使用开源软件来构建               革命仍没有结束,很可能仅仅是开始。
 今年又有哪些开源软件对这个产业造成了深刻的影                            一个成功的科技企业是有可能的,事实上,StudioNow                    http://os.51cto.com/art/201109/289688.htm
 响?请看 2011 年度 Bossie 奖的公布结果——最佳开                   是如此成功,于是 AOL 花费 3650 万美元买下了该公
 源应用程序、最佳桌面与移动应用、最佳开发软件、最                          司。                                             【LinuxCon 2011】为 庆 祝 Linux 诞 生 20 周 年,,
 佳数据中心与云计算软件。                                        http://os.51cto.com/art/201109/289045.htm   Linux Foundation 于 8 月 17 日 8 月 19 日在温哥华
    http://os.51cto.com/art/201109/290392.htm                                                    举办了 LinuxCon 2011。包括 Linus Torvalds 先生
                                                    【Linux Mint 11】Linux Mint 11 LXDE 于 8 月 16   在内的多位业界大佬都参加了这一盛会,大佬们指点
  【Ubuntu 11.10】经 过 了 3 个 Alpha 版 之 后, 发
                                      开            日发布更新。这一版本在软件管理器、更新管理器等                       江山、激扬文字,感怀过去、展望未来。
 代号为 Oneiric Ocelot 的 Ubuntu 11.10 终于发布了           方面都有更新。                                         http://os.51cto.com/art/201108/281372.htm
 Beta 1 版,主要新特性包括 :
                  全新的 LightDM 登录界                    http://os.51cto.com/art/201108/284674.htm
 面、全新的 Alt+Tab 程序切换样式、Thunderbird 为默                                                              【11 个里程碑】Linux 操作系统诞生到现在已经 20
 认邮件客户端等。                                           【Fedora 16】代号为“Verne” Fedora 16 Alpha
                                                                         的                       年了,在这 20 年里,Linux 从学校里的玩物发展到今
    http://os.51cto.com/art/201109/288781.htm      经过一个星期的跳票,终于在 8 月 24 日晚正式发布                   天成为操作系统中一股坚实的力量。我们从这 20 年
                                                   了。该版本给我们带来了许多新特性 :
                                                                    GRUB 2 取代                    中总结出 Linux 发展的 11 个重要的里程碑。
   【五 个 九】如 今 还 有 人 真 的 把 所 谓“五 个 九”类              GRUB 作为默认的 BootLoader、KDE 4.7 和 GNOME           http://os.51cto.com/art/201108/287916.htm
 承 诺 当 回 事 吗? 从 理 论 层 面 上 来 说, 意 味 着
                              这                    3.1 开发版本更新、SELinux 增强等。
 99.999% 的可用运行时间比例,也就是说业务经理                          http://os.51cto.com/art/201108/285988.htm
 们每天会遭遇到的故障时段也就八分之一秒多一点。
    http://os.51cto.com/art/201108/285496.htm       【Debian 18 载】2011 年 8 月 16 日,世界上最流行
                                                   和 最 稳 定 的 GNU/Linux 发 行 版 Debian 走 过 了 18 周
  【二 十 年】Linux 至 今 已 走 过 二 十 年。LAMP 架 构            年。在过去的 18 年里,Debian 确立了自身最稳定操
 在 Linux 诞生之初诞生,不过从 LAMP 架构诞生之初                    作 系 统 的 定 位, 多 GNU/Linux 发 行 版 如 Ubuntu 和
                                                               很
 到现在已经有了很大的变化。                                     Knoppix 都是基于 Debian。
    http://os.51cto.com/art/201108/285171.htm        http://os.51cto.com/art/201108/284455.htm


                                                                      007                                    51CTO Linux 频道 :
                                                                                                                            http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm   Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




                                                    服务器故障排除
                                                              当你的网络服务出现问题的时候,首先要做的事
                                                             情自然是分析问题出在哪里。在 Linux 系统下,有很
                                                             多工具可以帮助你发现故障的原因所在。一些基础
                                                             的排障工具包括 :
                                                              strace
                                                              如果一个应用编译正常但运行期间报错,报错信
                                                             息又不知所云,可以通过这个工具挖掘一些线索。
                                                              lsof
                                                              列 出 某 个 进 程 打 开 所 有 文 件 的 信 息 —— 而 在
                                                             Linux 下,一切皆文件。
                                                              top
                                                              检查当前正在运行哪些进程,这些进程各自占用
                                                             的 CPU 和内存资源。
                                                              traceroute
                                                              检查两个节点之间网络接入情况的基本工具。
                                                              ping
                                                              检查远程服务器连接状况的基本工具。
                                                              hexdump
                                                              用来搜索二进制文件中的字符串,在没有源代码
                                                             的情况下,可以有效的定位问题所在。
                                                              来源 :
                                                                 www.linux.com/archive/feed/60136



                                                    008                    51CTO Linux 频道 :
                                                                                          http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                          Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


                                                                                                  只 会 看 到 whoami 依 赖 Libc.so.6 和 ld-linux.
 strace命令使用实例                                                                                   so.2,它没有给出运行 whoami 所必须的其它库。这
                                                                                                里时用 strace 跟踪 whoami 时的输出 :
                                                                                      文/edeed     # mv /lib/libnss_files.so.2 /lib/libnss_files.
   有时候一个程序出现了问题,无法找到原因,所以                          图删掉可能存在的老文件。                                 so.2.backup
我们需要调试。strace 是一个必不可少的调试工具,                           但是,第四行确认了错误所在。它试图绑定到 /                      # whoami
可以用来监视系统调用,不仅可以调试一个新开始的                            tmp /.ICE-unix/dcop27207-1066844596,但 是 出      whoami: cannot find username for UID 0
程序,也可以调试一个已经在运行的程序。                                现了拒绝访问错误。ICE_unix 目录的用户和组都是                    可以发现在不同目录下面查找 libnss.so.2 的尝
   首先让我们看一个真实的例子 :                                 root,并且只有所有者具有写权限。一个非 root 用户                试,但是都失败了。如果没有 strace 这样的工具,很
   前一段时间,我在启动 KDE 的时候出了问题,KDE                      无法在这个目录下面建立文件,如果把目录属性改成                      难发现这个错误是由于缺少动态库造成的。现在只
的错误信息无法给我任何有帮助的线索。我决定采                             0777, 则前面的操作有可能可以执行,而这正是第一                   需要找到 libnss.so.2 并把它放回到正确的位置就可
用 strace 看一下在启动 dcopserver 时到底程序做了                 步错误出现时进行过的操作。                                以了。
什么 :                                                  用strace解决库依赖问题                              3 限制strace只跟踪特定的系统调用
   strace -f -F -o ~/dcop-strace.txt dcopserver       strace 的另一个用处是解决和动态库相关的问题。                  如 果 已 经 知 道 要 找 什 么, 以 让 strace 只 跟 踪
                                                                                                                      可
   这 里 -f -F 选 项 告 诉 strace 同 时 跟 踪 fork 和            让我们看一个例子 :                                一 些 类 型 的 系 统 调 用。 例 如, 要 看 看 在 configure
                                                                                                                       需
vfork 出来的进程, 选项把所有 strace 输出写到 ~/
            -o                                        whoami 程序会给出自己的用户名,这个程序在一                 脚 本 里 面 执 行 的 程 序, 要 监 视 的 系 统 调 用 就 是
                                                                                                                  需
dcop-strace.txt 里 面,dcopserver 是 要 启 动 和 调 试       些 需要知道运行程序的真正用户的脚本程序里面非                      execve。让 strace 只记录 execve 的调用用这个命令 :
的程序。再次出现错误之后,我检查了错误输出文件                            常有用,whoami 的一个示例输出如下 :                         # ldd /usr/bin/whoami
dcop-strace.txt,文件里有很多系统调用的记录。在                       27207 mkdir(/tmp/.ICE-unix,0777) = -1     libc.so.6 = /lib/libc.so.6 (0x4001f000)
程序运行出错前的有关记录如下 :                                   EEXIST (File exists)                           /lib/ld-linux.so.2 = /lib/ld-linux.so.2
   其中第一行显示程序试图创建 /tmp/.ICE- unix                    (略)                                         (0x40000000)
目录,权限为 0777,这个操作因为目录已经存在而失                            假设因为某种原因在升级 glibc 的过程中负责用                   已经看到了,strace 不仅可以被程序员使用,普通
败了。第二个系统调用 (lstat64) 检查了目录状态,                      户名 和用户 ID 转换的库 NSS 丢失,我们可以通过把                系统管理员和用户也可以使用 strace 来调试系统错
并显示这个目录的权限是 0755,这里出现了第一个                          nss 库改名来模拟这个环境 :                             误。
程序运行错误的线索 : 程序试图创建属性为 0777                            # whoami                                    本文有删节,完整内容见原文 :
的目录,但是已经存在了一个属性为 0755 的目录。                            root                                        http://hi.baidu.com/edeed/blog/item/
第三个系统调用 (unlink) 试图删除一个文件,但是这                         这 里 可 以 看 到, 行 whoami 时 出 现 了 错 误,
                                                                  运                     ldd     c59d8d10f362e30a213f2eb8.html
个文件并不存在。这并不奇怪,因为这个操作只是试                            程序的输出不会提供有用的帮助 :


                                                                           009                                 51CTO Linux 频道 :
                                                                                                                              http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                      Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


       Lsof 是遵从 Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所                                           # lsof -c apache
    有文件信息。打开的文件可能是普通的文件,目录,NFS 文件,块文件,字符文件,共享库,常规管道,明明                                               -c 选项限定只列出以 apache 开头的进程打开的
    管道,符号链接,Socket 流,网络 Socket,UNIX 域 Socket,以及其它更多。                                                文件 :
                                                                                                     所以你可以不用像下面这样写 :
 Unix调试的瑞士军刀:lsof                                                                                    # lsof | grep foo

                                                                                文/Peteris Krumins    而使用下面这个更简短的版本 :
                                                                                        译/张元一        # lsof -c foo
                                                                                                     事实上,你可以只制定进程名称的开头 :
    如果说 netcat 是进行网络诊断的瑞士军刀,那么                     这个文件的进程,你也可以列出多个文件,lsof 会列
                                                                                                     # lsof -c apa
 lsof 就是 Unix 调试的瑞士军刀。                             出所有使用这些文件的进程。
                                                                                                     这会列出所有以 apa 开头的进程打开的文件
    Lsof 遵从 Unix 哲学的典范,它只做一件事情,并                    你也可以一次制定多个文件 :
                                                                                                     你同样可以制定多个 -c 参数 :
 且做的相当完美——它可以列出某个进程打开的所                             # lsof /path/to/file1 /path/to/file2
                                                                                                     # lsof -c apache -c python
 有文件信息。打开的文件可能是普通的文件,目录,                            递归查找某个目录中所有打开的文件
                                                                                                     这会列出所有由 apache 和 python 打开的文件
 NFS 文 件, 文 件, 符 文 件, 享 库, 规 管 道,
         块    字      共    常      明                  # lsof +D /usr/lib
                                                                                                     列出所有由某个用户或某个进程打开的文件
 明 管 道, 号 链 接,
       符      Socket 流, 络 Socket,
                       网         UNIX 域             加上 +D 参数,lsof 会对指定目录进行递归查找,
                                                                                                     # lsof -u pkrumins -c apache
 Socket,以及其它更多。因为 Unix 系统中几乎所有东                    注意这个参数要比 grep 版本慢 :
                                                                                                     你也可以组合使用多个选项,这些选项默认进行
 西都是文件,你可以想象 lsof 该有多有用。                            # lsof | grep '/usr/lib'
                                                                                                    或关联,也就是说上面的命令会输入由 pkrumins 用户
    如何使用 lsof ?                                     之所以慢是因为 +D 首先查找所有的文件,然后
                                                                                                    或是 apache 进程打开的文件。
    这 篇 文 章 中 我 会 尽 力 列 举 我 能 想 到 的 所 有 lsof       一次性输出。
                                                                                                     列出所有由一个用户与某个进程打开的文件
 的用法,让我们先从最简单的开始(或许你已经知道                            列出某个用户打开的所有文件
                                                                                                     # lsof -a -u pkrumins -c bash
 了) 然后逐渐增加复杂度 :
   ,                                                # lsof -u pkrumins
                                                                                                     -a 参数可以将多个选项的组合条件由或变为与,
    列出所有打开的文件                                       -u 选项限定只列出所有被用户 pkrumins 打开的
                                                                                                    上面的命令会显示所有由 pkrumins 用户以及 bash 进
    # lsof                                         文件,你可以通过逗号指定多个用户 :
                                                                                                    程打开的文件。
    不带任何参数运行 lsof 会列出所有进程打开的所                       # lsof -u rms,root
                                                                                                     列出除 root 用户外的所有用户打开的文件
 有文件。                                               这条命令会列出所有 rms 和 root 用户打开的文件。
                                                                                                     # lsof -u ^root
    找出谁在使用某个文件                                      你也可以像下面这样使用多个 -u 做同样的事情 :
                                                                                                     注 意 root 前 面 的 ^ 符 号, 执 行 取 反 操 作, 此
                                                                                                                          它            因
    # lsof /path/to/file                            # lsof -u rms -u root
                                                                                                    lsof 会列出所有 root 用户之外的用户打开的文件。
    只需要执行文件的路径,lsof 就会列出所有使用                        查找某个程序打开的所有文件


                                                                         010                                    51CTO Linux 频道 :
                                                                                                                               http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                       Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com



    列出所有由某个 PID 对应的进程打开的文件                          找到使用某个 udp 端口号的进程                    txt 则列出所有加载在内存中并正在执行的进程 :
    # lsof -p 1                                     # lsof -i udp:53                     # lsof -d txt
    -p 选项让你可以使用进程 id 来过滤输出。                         同样的,也可以找到使用某个 tcp 端口的进程 :            输出使用某些资源的进程 pid
    记住你也可以用都好来分离多个 pid。                             # lsof -i tcp:80                     # lsof -t -i
    # lsof -p 450,980,333                           找到某个用户的所有网络连接                        -t 选项输出进程的 PID,你可以将它和 -i 选项组
    列出所有进程打开的文件除了某个 pid 的                           # lsof -a -u hacker -i             合输出使用某个端口的进程的 PID,下面的命令将会
    # lsof -p ^1                                    使用 -a 将 -u 和 -i 选项组合可以让 lsof 列出某   杀掉所有使用网络的进程 :
    同前面的用户一样,你也可以对 -p 选项使用 ^ 来                     个用户的所有网络行为。                           # kill -9 `lsof -t -i`
 进行取反。                                              列出所有 NFS(网络文件系统)文件                   循环列出文件
    列出所有网络连接                                        # lsof -N                            # lsof -r 1
    # lsof -i                                       这个参数很好记, 就对应 NFS。
                                                            -N                           -r 选项让 lsof 可以循环列出文件直到被中断,参
    lsof 的 -i 选项可以列出所有打开了网络套接字                      列出所有 UNIX 域 Socket 文件              数 1 的意思是每秒钟重复打印一次,这个选项最好同
(TCP 和 UDP)的进程。                                     # lsof -U                          某个范围比较小的查询组合使用,比如用来监测网络
    列出所有 TCP 网络连接                                   这个选项也很好记, 就对应 UNIX。
                                                             -U                        活动 :
    # lsof -i tcp                                   列出所有对应某个组 id 的进程                     # lsof -r 1 -u john -i -a
    也可以为 -i 选项加上参数,比如 tcp, 选项会
                          tcp                       # lsof -g 1234                       如何安装 lsof ?
 强制 lsof 只列出打开 TCP sockets 的进程。                     进程组用来来逻辑上对进程进行分组,这个例子                许多 Unix 系统都内置了 lsof,如果你的系统没有
    列出所有 UDP 网络连接                                  查找所有 PGID 为 1234 的进程打开的文件。          安装,你可以从这里直接下载源代码。
    # lsof -i udp                                   列出所有与某个描述符关联的文件                      BSD 系统有一个类似的工 具可以做同样的事情,
    同样 udp 让 lsof 只列出使用 UDP socket 的进程。             # lsof -d 2                        叫做 fstat。
    找到使用某个端口的进程                                     这个命令会列出所有以描述符 2 打开的文件。               你可以通过 man lsof 来了解关于 lsof 的完整文档,
    # lsof -i :25                                   你也可以为描述符指定一个范围 :                   或者通过 lsof -h 查看。
    :25 和 -i 选 项 组 合 可 以 让 lsof 列 出 占 用 TCP 或       # lsof -d 0-2                        本文有删节,完整内容见原文 :
 UDP 的 25 端口的进程。                                    这会列出所有描述符为 0, 2 的文件。
                                                                 1,                      A Unix Utility You Should Know About: lsof
    你 也 可 以 使 用 /etc/services 中 制 定 的 端 口 名 称       -d 选项还支持其它很多特殊值,下面的命令列出              http://heikezhi.com/2011/06/19/swiss-
 来代替端口号,比如 :                                       所有内存映射文件 :                          army-knife-of-unix-debugging-lsof/
    # lsof -i :smtp                                 # lsof -d mem



                                                                        011                          51CTO Linux 频道 :
                                                                                                                    http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm              Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




 使用top命令的一些小技巧
                                                                           文/周振兴

    1. 有用的命令 top-z-x
    z:
     打开 / 关闭彩色显示                                                                                图3 按照虚拟内存排序

    x:
     高亮显示排序列                                                                         -n :
                                                                                        配合 -b 使用,表示重新刷新一定次数后退出

    在使用 top 命令后,
               “先按 z 键,再按 x 键” 这时屏
                              ,                                                      -d :
                                                                                        刷新延时时间。例如 -d 5 表示 top 每隔 5

 幕会彩色显示输出,白色显示的列是当前排序的列 ;                                                          秒刷新一次。(默认是 3 秒)
                                                         图1 按cpu使用排序查看进程             更多请查看 top-h 或者 RTFM。
 偶尔还会有一些白色显示行,这些行是当前正在运行
 进程。使用该参数可以帮助我们更清楚的看到排序                                                              原文 :

 列。例如,我想按照 cpu 使用排序来查看进程 :                                                           http://www.orczhou.com/index.

  (见图 1)                                                                           php/2010/12/linux-top-tips/

    使用了 top-z-x 命令后是不是看得清晰了一些 :)
    2. 有用的命令 top-1
                                                                                     热门图书推荐:
    1 : 的系统,
      SMP   会单独显示各个 CPU 的运行状态
  (见图 2)                                                                                                本书是《鸟 哥 的 Linux 私 房
    3. 选择排序列 top-z-x-                                                                                  菜 基 础 学 习 篇》的 最 新 版,
   :
    改变排序列                                                                                               全书分为 5 个部分 :
                                                                                                                   第一部
   :
    改变排序列                                                                                               分着重说明 Linux 的起源及
   top-z-x- 试试就知道是什么意思了 :) 。                                                                           功能,如何规划和安装 Linux
   例如,默认是按照 cpu 使用率排序的,现在我想看                                                                            主 机 ; 二 部 分 介 绍 Linux
                                                                                                             第
 看安装使用的虚拟内存排序看看,使用命令                                                                                    的 文 件 系 统、 件、 录 与
                                                                                                                  文  目
   top-z-x-----                                     图2 显示各个cpu的运行状态                                磁盘的管理 ;
                                                                                                              第三部分介绍
  (见图 3)                                           文件中                                                  文字模式接口 shell…… [ 更
   4. 其他技巧                                          F or O :
                                                           支持更强的选择排序列的方式                                多]
   W : 当 前 配 置 文 件 到 home 目 录 下 .toprc 配 置
     把                                              -b :
                                                       参数可以帮你在脚本中使用 top 命令



                                                               012                              51CTO Linux 频道 :
                                                                                                               http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                               Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




 网站排障分析常用的命令                                                                                                     $1   $4   $7}'|sort -nr|head -20
                                                                                                                  4. 列 出 输 出 大 于 200000byte( 约 200kb) 的 exe

                                                                                             整理/LinuxTone      文件以及对应文件发生次数
                                                                                                                  cat access.log |awk '($10  200000 
    系统连接状态篇 :                                           awk -F. '{print $1.$2.$3.$4}' | sort |         $7~/.exe/){print $7}'|sort -n|uniq -c|sort
    1. 查看 TCP 连接状态                                      uniq -c | sort -nr |head -20                           -nr|head -100
    netstat -nat |awk '{print $6}'|sort|uniq -c|sort       4. 查找较多 time_wait 连接                                   5. 如果日志最后一列记录的是页面文件传输时
 -rn                                                       netstat -n|grep TIME_WAIT|awk '{print               间,则有列出到客户端最耗时的页面
    netstat -n | awk '/^tcp/ {++S[$NF]};END             $5}'|sort|uniq -c|sort -rn|head -n20                      cat access.log |awk      '($7~/.php/){print $NF
 {for(a in S) print a, S[a]}'                              5. 找查较多的 SYN 连接                                       $1   $4   $7}'|sort -nr|head -100
    或                                                      netstat -an | grep SYN | awk '{print $5}' |            6. 列出最最耗时的页面 ( 超过 60 秒的 ) 的以及
    netstat -n | awk '/^tcp/ {++state[$NF]}; END        awk -F: '{print $1}' | sort | uniq -c | sort -nr       对应页面发生次数
 {for(key in state) print key,t,state[key]}'         | more                                                    cat access.log |awk '($NF  60  $7~/.
    netstat -n | awk '/^tcp/ {++arr[$NF]};END              6. 根据端口列进程                                          php/){print $7}'|sort -n|uniq -c|sort -nr|head
 {for(k in arr) print k,t,arr[k]}'                      netstat -ntlp | grep 80 | awk '{print $7}' |        -100
    netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq      cut -d/ -f1                                               7. 列出传输时间超过 30 秒的文件
 -c|sort -rn                                               网站日志分析篇 1(Apache):                                     cat access.log |awk '($NF  30){print $7}'|sort
    netstat -ant | awk '{print $NF}' | grep -v             1. 获得访问前 10 位的 ip 地址                                -n|uniq -c|sort -nr|head -20
 '[a-z]' | sort | uniq -c                                  cat access.log|awk '{print $1}'|sort|uniq -c|sort      8. 统计网站流量(G)
    2. 查找请求数请 20 个 IP(常用于查找攻来源):                        -nr|head -10                                              cat access.log |awk '{sum+=$10} END {print
    netstat -anlp|grep 80|grep tcp|awk '{print             cat access.log|awk '{counts[$(11)]+=1}; END         sum/1024/1024/1024}'
 $5}'|awk -F: '{print $1}'|sort|uniq -c|sort            {for(url in counts) print counts[url], url}'              9. 统计 404 的连接
 -nr|head -n20                                             2. 访问次数最多的文件或页面 , 取前 20                                awk '($9 ~/404/)' access.log | awk '{print
    n e t s t a t   - a n t     | a w k   ' / : 8 0 /      cat access.log|awk '{print $11}'|sort|uniq          $9,$7}' | sort
 {split($5,ip,:);++A[ip[1]]}END{for(i in A) print     -c|sort -nr|head -20                                      10. 统计 http status(略)
 A[i],i}' |sort -rn|head -n20                              3. 列出传输最大的几个 exe 文件(分析下载站的                             本文有删节,完整内容见原文 :
    3. 用 tcpdump 嗅探 80 端口的访问看看谁最高                       时候常用)                                                     bbs.linuxtone.org/thread-5151-1-1.html
    tcpdump -i eth0 -tnn dst port 80 -c 1000 |             cat access.log |awk '($7~/.exe/){print $10


                                                                                 013                                            51CTO Linux 频道 :
                                                                                                                                               http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                     Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        这里所说的iptables是ipchains的后继工具,但具有更强的可扩展性。内核模块可以注册一个新的规则表                                   OPTIMIZE 操作等于 recreate + analyze 的组合
    (table),并要求数据包流经指定的规则表。三种数据报处理功能都基于netfilter的钩子函数和IP表,都是相互                                 操作,所以会堵塞更新类型 SQL 语句。对于备机上
    间独立的模块。                                                                                    跑只读类型操作的业务,可以考虑使用此操作命令,
                                                                                               对于主服务器不建议使用此命令,为此备机上执行

 MySQL生产环境突发故障处理手册                                                                             OPTIMIZE 语句,必须这样写 :
                                                                                                 OPTIMIZE LOCAL TABLE tablename;
                                                                                       文/金官丁     备注 :
                                                                                                    这样执行将不会记录到二进制日志文件中,
                                                                                               从而不会复制到对其有复制关系的主机上。
    1. LOAD 飙高                                     PROCESSLIST WHERE COMMAND  ‘sleep’ AND      2. HA 切换
    一般导致 MySQL 服务器 LOAD 突然飙高,可能的                   TIME100;(5.1.x 系列及以上版本)                      2.1 启动备机 Heartbeat
 五种情况 :                                              若一直处在执行状态,且执行时间比较久,可以分                      若要启动备机上的 Heartbeat 进程,则必须先保证
    1. 全表扫描的 SQL 语句 ;                             析下 SQL 语句执行计划 :                             备机上的 mysqld 服务已经停止掉,然后再启动备机
    2.SELECT 操作语句的执行计划走错 ;                          EXPLAIN SQL-statement;                    上的 Heartbeat 服务,最后再启动 mysqld 服务。
    3. 存在 UPDATE/DELETE 语句没有索引可选择,                  若执行计划不合理,则可以根据 SQL 类型选择是                    2.2 VIP 服务快速漂移
 而导致堵塞其他 SQL 语句的执行 ;                               否与应用负责人联系。首先,查找造成服务器 LOAD                     直接关闭掉 VIP 所挂载的主服务器上的 Heartbeat
    4. 存在修改表结构或 OPTIMIZE 语句执行 ;                   飙高的 PID,特别是 DELETE 或 UPDATE 等会堵住其           服务 :
                                                                                                  service heartbeat stop,待切换之前的备机 VIP
    5. 大数据量的导入 或 导出,尤其数据库的逻                       他 SQL 语句的 PID,然后进入 MySQL 命令行工具中,            服务挂载成功,再启动被关掉机器的 Heartbeat 服务,
 辑备份操作 ;                                           对一些 SQL 先记录下来,再适情考虑执行 :                     且确保 mysqld 服务已经处于停止状态,最后再启动
    6. 业务量大到超过服务器处理能力(我们大家                          kill sql_pid;                             mysqld 服务。
 都高度关注业务发展,以及公司业务特点,                                 1.1 统计信息更新                                  另外一种强制 VIP 飘移办法 :
    还有与开发和运营保持良好联系,很难出现未知                            单表索引统计信息查看命令 :                              crm_resource -M -r resource_name -H
 的业务突然爆发性增长);                                        SHOW INDEXES FROM tablename;              nodename
    要解决 LOAD 飙高,必须先找到造成飙高的真实                         若发现其统计信息存在偏差,则可以执行 :                        其中 :
                                                                                                    resource_name 可以通过命令
 原因,请登陆数据库服务器后,执行命令 :                                ANALYZE LOCALE TABLE tablename;             crm_resource -L
    SHOW PROCESSLIST;(适合 MySQL 各种版本)                 备注 :
                                                        请加上 LOCALE 参数,从而使此语句执行时                  进行强制 VIP 漂移后,还需要检查 failcount 值,命
    或                                              不需要登记到二进制文件中。                               令与设置值,如下 :
    SELECT * FROM INFORMATION_SCHEMA.                1.2 碎片整理和统计信息更新                             crm_failcount -U nodename -r resource_name



                                                                      014                                   51CTO Linux 频道 :
                                                                                                                           http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                            Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


G                                                       4 stop slave;                                服务 ;
                                                                                                          对于没有 Heartbeat 服务的数据库服务器,则直
    如果 failcount 大于 0,则进行下面的操作 :                         5 SET GLOBAL sql_slave_skip_counter=1;       接启动 mysqld 服务即可。
    crm_resource -r resource_name -p is_managed          6 start slave ;                               5. 紧急事件处理的流程
-v false (设 置 资 源 为 非 受 控)crm_failcount -U               7 show slave statusG                         1. 突发紧急事情 :
nodename     -r resource_name -G D (重新设置                8 检查复制是否恢复正常,若没有循环 1… 7                     首先,要保持头脑清醒,心态要放平,建议先深呼
 failcount 值 )                                         步骤(备注 :
                                                             有些场景,也可以考虑借助脚                             吸;
    crm_resource -H nodename        -r resource_name     本循环的方式解决)                                      其次,仔细检查相关状态、日志等信息,并且保存
 C                                                      4.MySQL 假死                                    现场的状态信息,以便后续分析 ;
    crm_resource -r resource_name -d is_managed          4.1 假死状态判断                                     最后,确认解决此问题的可行方案,以及判断此方
 ( 设置为受控)                                                MySQL 假死状态一般只会响应对内存表、服务器                      案是否会引入新风险,是否需要其他同事协助 ;
    3. 复制中断                                            状态和变量的操作,而且 SHOW PROCESSLIST; 可以                 2. 处理步骤复杂或命令语句多的情况,必须先
    复制突然中断的可能原因 :                                      看到很多连接线程处于命令解析或处理的各种状态,                         把相关命令,分步骤在文档中写好 ;
    1. 备 机 无 法 连 接 到 主 服 务 器, 能 是 网 络 问
                              可                        且 SQL 语句执行时间较长。此时,为校验是否真处                        3. 突发紧急事情的处理,会影响到前端应用服
题,也可能是主服务器的 mysqld 已停止 ;                               于 MysQL 假死状态,那么可以到库 test 中任意执行                  务的事情,应先跟团队领导沟通和确认处理方法,以
    2. 主键冲突 ;                                         创建表或更新数据的语句,若回车键后没有响应,则                         及影响范围有多大,影响程度有多严重 ;
    3. 主从服务器数据不一致 ;                                   一般可以断定 MySQL 是否已经处于假死状态。                         4. 确定紧急处理过程或完毕后,需要那些应用
    4. 其他原因 ;                                           4.2 假死状态处理                                    方负责人检查应用是否正常,则应该先联系相关同
    为使复制继续,我们可以进行如下处理 :                                  若使用 Heartbeat + Dual Master 的数据库架构,           事;
    1. Stop slave ;                                   VIP 所在的数据库服务器出现假死状态,则应该直接                        5. 处理完毕且业务正常之后,优先分析问题和
    2 start slave;                                    关闭 service heartbeat stop,从而迫使 VIP 服务转移         查找是否还有隐患 ;
    3 检查服务是否正常 :
                show slave statusG                    到另外一台数据库服务器上。                                    6. 发邮件描述整个故障发生、影响范围和程度
    若是主健冲突或数据不一致的情况,则需要额外                                其 次, 据 处 理 MySQL 假 死 状 态 的 经 验, 用
                                                             根                          使              、处理过程,以及补填写紧急处理的 ITIL 流程单 ;
处理 :                                                   mysqladmin uroot p shutdown 命令关闭 mysqld        7. 回复报警邮件 ;
    1.stop slave;                                     服务也是无法处理的,最快的办法是直接 Kill 进程 :                     原文 :
    2 start slave;                                      ps -ef | grep mysql | grep -v grep | awk ‘{    http://www.mysqlops.com/author/admin
    3 show slave statusG 记录错误的信息,一般                  print $2 }’ xargs kill -9
                                                                  |                                     如果需要联系作者,可在新浪微博上联系
会有详细的 SQL 保存起来                                           然后, Heartbeat 启动 成功 之 后,
                                                            把                    再启 动 mysqld            @mysqlops



                                                                             015                                    51CTO Linux 频道 :
                                                                                                                                   http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                           Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        shift加P:按CPU资源利用率降序排列,shift加M:按内存占用资源率降序排列。我们发现ORACLE进程占用                                    有比较多的报表更新。
    率较高。CPU几次超限飙升到90%以上,严重影响了系统性能。通过AWR报告发现,审计表更新比较频繁,当                                                4、连接数据库,针对审计、索引进行查证
    天有比较多的报表更新。



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


    昨天数据库主机接连出现几次 CPU 资源占用率过
 高报警,经过一番调查最终找出问题的原因,解决了
 这一故障,具体过程如下 :                                                                                         发现索引失效,导致数据检索变的缓慢,SQL 语句
    环境:                                                                                              执行效率低,CPU 消耗大。
    主机 SUSE LINUX 10 (64 位)                                                                            5、问题解决,关闭审计重建索引
        ORACLE11G(64 位)
    一、报警信息(故障呈现)
    suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :90.93,                2、利用 SAR 命令检查 IO 和传送情况 :
 阀值范围为 [90-100],发生时间 11:17:01                                注:
                                                              suse linux 下使用 sar,需要安装 sysstat 包。
    suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :92.20,
 阀值范围为 [90-100],发生时间 14:46:02
    suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :92.54,
 阀值范围为 [90-100],发生时间 15:14:01
    二、分析过程(故障调查)
                                                                                                       6、后续待优化 :
    1、使用 TOP 命令查看系统资源
                                                                                                       查证 SQL 语句,避免效率低下的语句高并发执行
    shift 加 P : CPU 资源利用率降序排列
              按                                    shift 加
                                                                                                     引发 buffer cache 冲突而导致 CPU 资源的过度消耗。
 M:
  按内存占用资源率降序排列
                                                             发现每秒读入和写出的数据量比较大。                         本文有删节,完整内容见原文 :
    我们发现 ORACLE 进程占用率较高,CPU 几次超
                                                             3、分析 AWR 报告                               http://xjsunjie.blog.51cto.
 限飙升到 90% 以上,严重影响了系统性能。
                                                             通过 AWR 报告发现,审计表更新比较频繁,当天                com/999372/604144


                                                                            016                                  51CTO Linux 频道 :
                                                                                                                                http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                 Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        每个整点的第10分的任务,密集的插入和更新SYS.OBJ$,容易产生这张系统表的资源争用。会造成两个实                                 你 可 以 只 精 通 其 中 一 个 层 面, 可 以 其 他 层
                                                                                                                    也
    例之间的全局一致性读和全局资源锁。buffer busy global cache ,buffer busy wait 等待。一个数据块可以插入多             面 不 精 通, 是 每 个 层 面 都 需 要 知 道 如 何 维 护,
                                                                                                  但
    条记录,并发修改这些记录,会出现buffer busy wait 等待。                                                  知道每个层面系统的发展趋势,把故障扼杀在萌芽阶
                                                                                          段。

 数据库故障分析与排查                                                                                 请维护人员,把维护系统的所有工作罗列出来,
                                                                                          成工作指导说明列表。每次维护的操作都需要记录
                                                                                                                 形


                                                                             文/xiaowohe   维护日志,形成系统生命周期中的变更日志,就像人
                                                                                          的病历一样。
    8 月 1 日周一上午系统出现无法登陆,数据库挂                       4 次出现归档日志空间满的数据库故障 , 总是在数                维护日志是维护一个系统的实际操作经验和案
 起的故障,经排查,现记录具体故障排查过程包括故                           据库挂起后,才处理问题。                           例。
 障的原因和现象,以及解决方法。                                    我看到的最早的归档日志文件是                          3、项目开发团队
    故障:                                             # ls -l                                 对 8 月 16 日凌晨 3 点 13 分 16 分的归档日志进
                                                    total 1028354696
    1、 月 1 日,
      8      归档满,数据库挂起,应用系统无法                                                             行挖掘。
                                                    -rw-r-----        1 oracle oinstall
 登陆                                                   517235200 Jul 30 06:14                1、将归档日志文件添加到 LOGMINER 列表中
                                                      1_7428_702581932.dbf
    解决方法 : 月 1 日的解决方法,
         8            删除归档文件。
                                                    -rw-r-----        1 oracle oinstall     EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/
                                                      520984064 Jul 30 06:17                  arch/1_8498_702581932.dbf',DBMS_
    故障原因:
                                                      1_7429_702581932.dbf                    LOGMNR.NEW);
    分析数据库后台日志 :
              alert_ybzdb1.log 发现从 7                说明有维护人员删除了早期的归档文件,              以释放     EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/
                                                                                              arch/1_8499_702581932.dbf');
 月 6 日至 8 月 1 日开始短短 40 天时间,连续 4 次出                 空间。这件事不是不会做。而是每次要出问题了才                    2、 LOGMINER 指定将要使用的联机目录字典。
                                                                                                为
 现归档目录空间满。有以下的原因 :                                 去做。                                    如果源数据库处于打开或者是可用状态,那么它可用
    1、 备份软件                                         这是一个上线的正式系统,不要总是等系统出问                   EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS
    Veritas Netbackup Server 安装 ybzback 服务器上                                                  = DBMS_LOGMNR.DICT_FROM_ONLINE_
                                                   题了,才去解决问题,客户满意度就是这样被一次次
                                                                                              CATALOG);
    Veritas Client 部 署 在 ybzdb1 和 ybzdb2 上, 装
                                           安       故障蚕食掉的。                                  3、 V$LOGMNR_CONTENTS 中 查 询 有 关 已 提 交
                                                                                              在
 路径为 :
     /usr/tivoli/tsm/StorageAgent                   前瞻性维护,是工作中的一部分。                       事务的信息
    备份脚本在 /usr/tivoli/tsm/client/api/bin64 目        维护一个系统包括 : 用系统及其业务数据 ,
                                                             应                              REDO 是把做过的事再做一遍,UNDO 是把做过的
 录下                                                web 服务器,应用服务器,数据库服务器,主机操作系             事。
    2、 维护人员                                        统,SAN 网络,磁盘存储阵列,网络,所有这些层面无               每个整点的第 10 分的任务,建立 200 多张表,插
    在 7 月 6 日, 月 21 日, 月 1 日, 月 15 日 连 续
              7       8      8                     故障地配合,形成一个整体,才能给客户提供服务。                入数据,完成业务操作,然后再删除表。但是 oracle



                                                                  017                                 51CTO Linux 频道 :
                                                                                                                     http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                     Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com



 10G 数据库,drop 表,只是做了改名,并不是实际的物                     解决 TSM 故障后,立即备份数据库。并定期检查备                        default
                                                                                                  CONFIGURE ENCRYPTION FOR DATABASE OFF; #
 理删除。24 小时,就是 4800 张表。                             份。
                                                                                                    default
   回收站积压的垃圾表越来越多 ,SYS.OBJ$ 表无                       3、明确维护人员的维护职责,监控范围。                           CONFIGURE ENCRYPTION ALGORITHM 'AES128';
                                                                                                    # default
 限膨胀。                                               4、明确需要记录归档的业务操作,不需要记录归                        CONFIGURE ARCHIVELOG DELETION POLICY TO
   每 个 整 点 的 第 10 分 的 任 务, 集 的 插 入 和 更 新
                          密                        档的操作也要明确出来。减少数据库的归档量。减                           NONE; # default
                                                                                                  CONFIGURE SNAPSHOT CONTROLFILE NAME TO
 SYS.OBJ$, 易 产 生 这 张 系 统 表 的 资 源 争 用。 会
          容                                        少资源争用,有效利用 RAC 集群环境。                             '/oracle/app/product/10.2/dbs/snapcf_
 造成两个实例之间的全局一致性读和全局资源锁。                             5、目前数据库物理备份的采用了冗余度 6                            ybzdb1.f'; # default
                                                                                                  5、查看已有的备份集
 buffer busy global cache ,buffer busy wait 等待。     清理过期备份 :
                                                                                                  RMANlist backup;
 一个数据块可以插入多条记录 , 并发修改这些记录,                          1、在主机 ybzdb1     切换到 oracle 用户
                                                                                                  6、查出过期的备份
 会出现 buffer busy wait 等待。                           #hostname
                                                    ybzdb1                                        RMANREPORT OBSOLETE;
    所以目前虽然是集群数据库,但应用系统只能用                                                                         7、删除冗余度 6 以上的备份集
                                                    #su - oracle
 其中一个节点。如果两个实例全用,会产生资源争用                            2、进入 rman 使用恢复目录数据库                           RMANDELETE OBSOLETE REDUNDANCY 6 ;
 和等待。                                               $rman catalog rrrrr/rrrrr@rman                8、进行交叉检查 恢复目录数据库、              目标库控制文
                                                    3、连接目标数据库                                   件、备份集合 三者交叉检查
   占了 500G 的磁盘空间放归档,闲置一台小型机。
                                                    RMANconnect target /                         检查归档 :
 这种是一种资源浪费。小型机需要折旧和能源消耗,                            4、查看备份配置
却没有被有效利用。                                                                                         RMANCROSSCHECK ARCHIVELOG ALL;
                                                    RMANshow all;                                检查备份 :
   4、结束LOGMNR                                       RMAN configuration parameters are:
                                                    CONFIGURE RETENTION POLICY TO REDUNDANCY      RMANCROSSCHECK BACKUP ;
   EXECUTE DBMS_LOGMNR.END_LOGMNR;                    6;                                          9、删除失效的归档,        备份集
   解决方案:                                            CONFIGURE BACKUP OPTIMIZATION OFF; #          RMANDELETE EXPIRED ARCHIVELOG ALL;
                                                      default
   1、解决 TSM 软件的故障。 备份管理服务器也要                        CONFIGURE DEFAULT DEVICE TYPE TO DISK; #      RMANDELETE EXPIRED BACKUP;
 纳入维护职责。                                              default                                      维护人员职责之一 :
                                                                                                            数据库的物理备份管理,也是
                                                    CONFIGURE CONTROLFILE AUTOBACKUP ON;
   2、 5 月 23 日 数 据 库 有 0 级 增 量 备 份 后, 后
     从                               其              CONFIGURE CONTROLFILE AUTOBACKUP FORMAT     维护工作的一部分。要定期的把过期的备份文件,从
 无 数 据 库 物 理 备 份, 间 归 档 也 被 删 除 断 档 了。
                 期                                    FOR DEVICE TYPE DISK TO '%F'; # default
                                                                                                磁带上删除。定期检查备份有效性,都是维护要做的
                                                    CONFIGURE DEVICE TYPE DISK PARALLELISM 1
 失去了有效备份,系统在这条钢丝走了 3 个月,我们                            BACKUP TYPE TO BACKUPSET; # default       工作。
 何其幸运。( 使真的到了磁阵损坏,数据库丢失,备                           CONFIGURE DATAFILE BACKUP COPIES FOR
                                                                                                  本文有删节,完整内容见原文 :
                                                      DEVICE TYPE DISK TO 1; # default
 份全无的情况。也是有办法的,重新实施一次项目的                            CONFIGURE ARCHIVELOG BACKUP COPIES FOR        http://blog.csdn.net/xiaowohe/article/
 数据库,重新抽各省数据,一直抽到当前时间点。)                              DEVICE TYPE DISK TO 1; # default
                                                                                                details/6693506
                                                    CONFIGURE MAXSETSIZE TO UNLIMITED; #


                                                                      018                                     51CTO Linux 频道 :
                                                                                                                             http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                   Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        从 debug 信息分析,PC 发送了 5 个 DHCP-DISCOVER 报文后才申请到了地址。 前4个,DHCP服务器都                       在 PC 上手工配置 IP 地址 1.1.1.2,可以 ping
    分配了租约,但在发送 DHCP-OFFER 报文的时候发送失败了,直到PC发送了第5个 DHCP-DISCOVER报文后,                          通 DHCP 服务器的 IP 地址 1.1.1.2。
    DHCP服务器才成功分配了租约。                                                                         通过调试信息进行定位
                                                                                             在用户视图下打开 DHCP 服务器的调试信息开

 案例:PC做为DHCP客户端获取地址时间较长                                                                    关 debugging dhcp server all。
                                                                                             DHCP 服务器上打印如下调试信息 :
                                                                   文/杭州华三通信技术有限公司
                                                                                             server debugging dhcp server all
    DHCP(Dynamic Host Configuration Protocol,动      检查 DHCP 服务器配置                            *May 27 13:02:19:494 2007 server DHCPS/7/
                                                                                               DHCPS_DEBUG_COMMON: DHCPServer: Receive
 态主机配置协议)采用客户 / 服务 器通信模式。由                          DHCP 服务器上的配置如下,不存在问题。                      DHCPDISCOVER from 00e0-e100-0201.
                                                                                             *May 27 13:02:19:494 2007 server DHCPS/7/
 客户端先向服务器发送请求配置信息的报文(包括分                            #                                          DHCPS_DEBUG_PACKET: Rx, interface
                                                    dhcp server ip-pool 1                      Ethernet1/0
 配的 IP 地址、 子网掩码、缺省网关等参数) 服务器
                        ,
                                                    network 1.1.0.0 mask 255.255.0.0         Message type: request
 根据策略返回携带相应配置信息的报文, 实现 IP
                   以                                #                                        Hardware type: 1, Hardware address length: 6
                                                    ……                                       Hops: 0, Transaction ID: 16777216
 地址等信息的动态配置。请求报文和回应报文都采                                                                      Seconds: 0, Broadcast flag: 0
                                                    #
 用 UDP 进行封装。                                        interface Ethernet1/0 port link-mode     Client IP address: 0.0.0.0          Your IP
                                                      route                                    address: 0.0.0.0
    1. 组网环境                                                                                  Server IP address: 0.0.0.0    Relay agent IP
                                                    ip address 1.1.1.1 255.255.255.0
                                                                                               address: 0.0.0.0
                                                    #
                                                                                             Client hardware address: 00e0-e100-0201
                                                    ……                                       Server host naame: Not Configured, Boot file
                                                    #                                          name: Not Configured
                                                    dhcp enable                              DHCP message type: DHCP Discover
                                                    #                                        *May 27 13:02:19:494 2007 server DHCPS/7/
                                                    检查 DHCP 服务器上接口 Ethernet1/0 的状态             DHCPS_DEBUG_COMMON: DHCPServer: Assign
                                                                                               Free Lease from global pool.
                                                    与 DHCP 客户端相连的接口 Ethernet1/0 处于           ……
                                                   up 状态。                                    *May 27 13:02:20:110 2007 server DHCPS/7/
                                                                                               DHCPS_DEBUG_PACKET: Tx, interface
                                                    [server] display ip interface brief        Ethernet1/0
                                                      Ethernet 1/0                           Message type: reply
                   图 案例组网图                          *down: administratively down             Hardware type: 1, Hardware address length: 6
                                                    (s): spoofing                            Hops: 0, Transaction ID: 16777216
    2. 故障现象                                                                                  Seconds: 0, Broadcast flag: 0
                                                    Interface
                                                                                             Client IP address: 0.0.0.0          Your IP
    以 PC 做为 DHCP 客户端,通过 DHCP 申请地                    Physical    Protocol   IP Address
                                                                                               address: 1.1.0.2
                                                    Ethernet1/0
 址,经过 1 分钟左右才能获取地址。                                                                          Server IP address: 0.0.0.0    Relay agent IP
                                                    up          up       1.1.1.1               address: 0.0.0.0
    3. 处理过程                                         检查物理连接是否通畅


                                                                    019                                 51CTO Linux 频道 :
                                                                                                                       http://os.51cto.com/linux/
专题
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                           Special
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


                                                                                                          从 debug 信息分析,PC 发送了 5 个 DHCP-
   Client hardware address: 00e0-e100-0201
   Server host naame: Not Configured, Boot file name: Not Configured                                    DISCOVER 报 文 后 才 申 请 到 了 地 址。 前 4 个,
   DHCP message type: DHCP Offer                                                                        DHCP 服务器都分配了租约,但在发送 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 .                                                                          报文的时候发送失 败了,直到 PC 发送了第 5 个
   *May 27 13:02:20:110 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Sending DHCPOFFER failed!
   ……                                                                                                   DHCP-DISCOVER 报 文 后,DHCP 服 务 器 才 成 功 分
   *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Receive DHCPDISCOVER from   配了租约。比较第 5 个 DHCP-DISCOVER 报文与
     00e0-e100-0201.
   *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Rx, interface Ethernet1/0               前 4 个的不同,发现报文的 Broadcast flag 不一样,
   Message type: request
   Hardware type: 1, Hardware address length: 6                                                         前 4 个为 0,即要求 DHCP 服务器单播发送回应报
   Hops: 0, Transaction ID: 266602672                                                                   文, 5 个为 1,
                                                                                                          第       DHCP 服务器广播发送回应报文。
   Seconds: 0, Broadcast flag: 1
   Client IP address: 0.0.0.0    Your IP address: 0.0.0.0                                                 DHCP 服务器在单播回应报文的时候发送失败,
   Server IP address: 0.0.0.0    Relay agent IP address: 0.0.0.0
   Client hardware address: 00e0-e100-0201                                                              原因是 DHCP 服务器 Ethernet1/0 接口配置的 IP
   Server host naame: Not Configured, Boot file name: Not Configured                                    地址为 1.1.1.1/24,没有到 1.1.0.0/16 网段的
   DHCP message type: DHCP Discover
   *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Assign Free Lease from      路由,导致单播到 1.1.0.2 失败。
     global pool.
   ……                                                                                                     将地址池的可分配网段修改为与接口一致,则可
   *May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Tx, interface Ethernet1/0               以解决上述问题 :
   Message type: reply
   Hardware type: 1, Hardware address length: 6                                                           #
   Hops: 0, Transaction ID: 266602672                                                                     dhcp server ip-pool 1
   Seconds: 0, Broadcast flag: 1                                                                          network 1.1.1.0 mask 255.255.255.0
   Client IP address: 0.0.0.0    Your IP address: 1.1.0.2                                                 #
   Server IP address: 0.0.0.0    Relay agent IP address: 0.0.0.0                                          本文节选自     《DHCP 故障处理》
   Client hardware address: 00e0-e100-0201
   Server host naame: Not Configured, Boot file name: Not Configured                                      原文下载地址 :
   DHCP message type: DHCP Offer
   *May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DhcpServer: Send DHCPOFFER to 00e0-       http://down.51cto.com/data/231602
     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/0
   Message type: request                                                                                               本书讲解如何在一个计算机网
   Hardware type: 1, Hardware address length: 6
   Hops: 0, Transaction ID: 266602672
                                                                                                                       络中用有限的资源部署计算机,
   Seconds: 0, Broadcast flag: 1                                                                                       以及安装自由软件让计算机象
   Client IP address: 0.0.0.0    Your IP address: 0.0.0.0
   Server IP address: 0.0.0.0    Relay agent IP address: 0.0.0.0                                                       一台服务器那样一起运行。
                                                                                     (代码为节选)



                                                                             020                                    51CTO Linux 频道 :
                                                                                                                                   http://os.51cto.com/linux/
技巧
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                        Tips
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




 Linux管理员常用网络资源收集                                                                                    密码
                                                                                                       #4

                                                                                         文/tuhaihe     tr -cd ‘[:alnum:]‘  /dev/urandom | fold
                                                                                                     -w30 | head -n1
   本文收集 Linux 管理员常用网络资源。                             http://www.md5.cz/
                                                                                                       #5
   Corntab                                           升级源列表
                                                                                                       strings /dev/urandom | grep -o ‘[[:alnum:]]’ |
   http://www.corntab.com/                           Ubuntu 升 级 源 生 成 器 @ http://repogen.
                                                                                                     head -n 30 | tr -d ‘n’ echo
                                                                                                                            ;
   Corntab 是一款简易的网络 crontab 端,无需安装,                simplylinux.ch/index.php,大家根据选项选择国家,
                                                                                                       通过过滤字符命令,输出随机密码
轻 松 创 建 crontab 语 句。 不 用 担 心 格 式 问 题。 使 用          Ubuntu 版本等等就可以生成升级源列表,然后用生成
                                                                                                       #6
“crontab -e”命令进入后复制 crontab 即可。                    的列表替代原系统文件即可,这个确实方便!!
                                                                                                        /dev/urandom tr -dc _A-Z-a-z-0-9 |
   我们知道“crontab 命令提交、编辑、列出或除去                        类似的 Debian Sources List Generator
                                                                                                     head -c6
cron 作业。一个 cron 作业是一个命令,其运行是由                        http://debgen.simplylinux.ch/
                                                                                                       这个命令比起来比较简单了
cron 守护进程在规则的调度间隔执行”                                 同 时, 们 常 用 的 还 有 Ginspect, 生 成 INSPECT
                                                         我
                                                                                                       #7
   正则表达式                                           和 Tcpdump 过滤表达式。
                                                                                                       dd if=/dev/urandom bs=1 count=32 2/dev/
   http://public.kvalley.com/regex/regex.asp         http://decock.org/ginspect/
                                                                                                     null | base64 -w 0 | rev | cut -b 2- | rev
   该网站允许你写入字符并简单测试正则表达式是                             附:命令行制作随机密码
                                                                                                       #8
否运行。                                                 #1
                                                                                                       /dev/urandom tr -dc ’12345!@#$%qwertQ
   类似的网站有 :                                          date +%s | sha256sum | base64 | head -c 32
                                                                                                     WERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “”
   http://regexpal.com/                            ; echo
                                                                                                       #9
   http://rubular.com/                               使用 SHA 来哈希日期,输出头 32 个字节。
                                                                                                       randpw(){  /dev/urandom tr -dc _A-Z-
   http://regex.larsolavtorvik.com/                  #2
                                                                                                     a-z-0-9 | head -c${1:-16};echo;}
   Ascii制作器                                           /dev/urandom tr -dc _A-Z-a-z-0-9 |
                                                                                                       使 用 randpw 随 时 产 生 随 机 密 码, 以 把 它 放 到
                                                                                                                                  可
   http://www.network-science.de/ascii/            head -c${1:-32};echo;
                                                                                                     ~/.bashrc 文件里面。
   http://www.kammerl.de/ascii/AsciiSignature.       使用内嵌的 /dev/urandom,只输出字符,结果取
                                                                                                       #10
php                                                头 32 个。
                                                                                                       date | md5sum
   http://www.glassgiant.com/ascii/                  #3
                                                                                                       本文有删节,完整内容见原文 :
   密码生成                                              openssl rand -base64 32
                                                                                                       http://www.bentutu.com/2011/06/collection-
   http://www.onlinepasswordgenerator.com/           使用系统自带的 openssl 的随机特点来产生随机
                                                                                                     sites-help-linu-admin/

                                                                        021                                        51CTO Linux 频道 :
                                                                                                                                  http://os.51cto.com/linux/
工具
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                     Tools
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


        TestDisk,也是Linux下一款强力文件恢复软件,该应用可帮你从删除的分区、FAT32 boot扇区恢复数据。同                               #3,TestDisk
    时,也可以修复MFT 镜像、FAT 分区表,恢复从FAT/exFAT/NTFS/ext2/ext3/ext4等文件系统格式删除的数据                            主   页 :t t p : / / w w w . c g s e c u r i t y . o r g / w i k i /
                                                                                                        h
    文件。                                                                                        TestDisk



 五款救急的Linux文件恢复软件
                                                                                文/Umar Anjum
                                                                                    译/笨兔兔

    文件有备份,啥子也不愁!文件无备份,啥子也白                          Ddrescue 是一款优秀的文件恢复程序。当出现读
 搭。但是,面对突如其来的悲剧,文件恢复软件来帮                           错误时,该应用可复制数据从一个文件到另一个文
 忙时可以尽量最小化减小损失。下面 Linux 用户需                        件。
 知的 5 款文件恢复软件 :                                     #2,Safecopy
    #1,Ddrescue                                     主页 :
                                                       http://safecopy.sourceforge.net/
    主页 :
       http://www.gnu.org/software/ddrescue/
 ddrescue.html


                                                                                                  TestDisk,也是 Linux 下一款强力文件恢复软件,该
                                                                                               应用可帮你从删除的分区、FAT32 boot 扇区恢复数
                                                                                               据。同时,也可以修复 MFT 镜像、FAT 分区表,恢复
                                                                                               从 FAT/exFAT/NTFS/ext2/ext3/ext4 等文件系统格
                                                                                               式删除的数据文件。
                                                                                                  #4,PhotoRec
                                                                                                  主   页 :t t p : / / w w w . c g s e c u r i t y . o r g / w i k i /
                                                                                                        h
                                                                                               PhotoRec
                                                                                                  该软件最适合恢复图片和多媒体文件,同样可从
                                                    Safecopy 可帮助你从 CD、软盘等存储器中提取文               外部存储介质回复文件数据。
                                                   件、数据。



                                                                      022                                       51CTO Linux 频道 :
                                                                                                                               http://os.51cto.com/linux/
工具
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                    Tools
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




    #5,Mondo Rescue
    主页 :
       http://www.mondorescue.org/                                                   答读者问
                                                   读者 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 NOTRACK
                                                   iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT

                                                   这里的第二条规则,既然是 WEB 服务器,为什么是 FORWARD 链创建规则,而不是在 INPUT 链呢?


                                                   作者 守住每一天 回答 :
                                                   如果在 PREROUTING 链中创建规则,就需要在 FORWARD 中进行过滤。


    该应用遵循 GPL 协议,支持从外部存储介质恢复
 数 据, 被 打 包 在 多 个 发 行 版 本 如 RedHat, RHEL,
     也
 SuSE, SLES, Mandriva, Debian 和 Gentoo 等发行版
 本中。                                               电子杂志推荐:                                          电子杂志推荐:
    恢复毕竟是恢复,提前做好备份才是王道!                                           《Windows 运维月刊》                                          《开发月刊》
    英文 :                                                           2011 年 8 月 目录                                          2011 年 9 月 目录
    5 Must Have File Recovery Tools For Linux                      51CTO 专访微软 MVP 张诚                                      编程排行 Billboard
 Users                                                             本期专题 : 验证方法的灵
                                                                        IIS                                               专 题 报 道 《2011 年 暑 期 关
    原文 :                                                           活应用与设置技巧                                               于 Java 的那些事》
    http://os.51cto.com/art/201108/282953.htm




                                                                     023                                        51CTO Linux 频道 :
                                                                                                                               http://os.51cto.com/linux/
工具
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                      Tools
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


                                                                                                    cobbler check
 运维自动化之Cobbler系统安装详解                                                                                执行完后出现一段信息,   这段信息大意是 :
                                                                                                    1, 辑 /etc/cobbler/settings 文 件, 到 server
                                                                                                      编                            找
                                                                                        文/蚊子
                                                                                                  选 项, 改 为 适 当 的 ip 地 址, 实 例 配 置 ip 为 :
                                                                                                      修                 本
                                                                                                  192.168.10.1
    SA 们现在都知道运维自动化的重要性,运维自动                          cobbler的安装部署配置
                                                                                                    2, 辑 /etc/cobbler/settings 文 件, 到 next_
                                                                                                      编                            找
 化安装方面,早期一般使用人工配置 pxe+dhcp+tftp                      cobbler安装环境准备
                                                                                                  server 选项,修改为适当的 ip 地址,本实例配置 ip 为 :
 配 合 kickstart, 在 开 源 工 具 就 多 了, cobbler,
               现                如                    对于 centos 本身源 ,可根据自己所在地选择离
                                                                                                  192.168.10.1
 OpenQRM 和 Spacewalk。本文重点介绍 Cobbler。               自 己 近 的 镜 像 源, 如 mirrors.163.com 或 mirrors.
                                                                 比
                                                                                                    3,SELinux 的设置。如果上面已经关闭了 SELinux
    Cobbler介绍                                      sohu.com
                                                                                                  就不用管了
    Cobbler 是 一 个 快 速 网 络 安 装 linux 的 服 务, 且
                                          而          1, 安装 epel
                                                                                                    4, 行 cobbler get-loaders, 统 将 自 动 下 载
                                                                                                      执                      系
 在经过调整也可以支持网络安装 windows。Cobbler                      rpm -Uvh 'http://download.fedoraproject.
                                                       org/pub/epel/6/i386/epel-release-6-5.      loader 程序,完成提示 4 的修复工作。
 支持命令行管理,web 界面管理,还提供了 API 接口,
                                                       noarch.rpm'                                  5, 辑 /etc/xinetd.d/tftp 文 件, 文 件 中 的
                                                                                                      编                         将
 可以方便二次开发使用。                                         2, 安装 dhcp 服务
                                                                                                  disable 字段的配置由 yes 改为 no
    和 Kickstart 不同的是,使用 cobbler 不会因为在局               yum -y install dhcp
                                                     3, 其他服务的安装                                     6, 辑 /etc/xinetd.d/rsync 文 件, 文 件 中 的
                                                                                                      编                          将
 域网中启动了 dhcp 而导致有些机器因为默认从 pxe
                                                     额 外 需 要 的 服 务 还 有 tftp,rsync,xinetd,httpd。   disable 字段的配置由 yes 改为 no
 启动在重启服务器后加载 tftp 内容导致启动终止。
                                                   所以如果安装系统的时候如果这几个包没装上,请手                          7, iptables 中将 69, 25151 端口打开。如果
                                                                                                      在               80,
    常用架构如下图 :
                                                   动安装。                                           仅仅只是在内部环境中使用,建议直接将防火墙关掉

                                                     4,关闭 selinux                                   8, 示 说 debmirror 没 安 装。 如 果 不 是 安 装
                                                                                                      提

                                                     关闭后最好重启一下, selinux 的设置生效
                                                               让                                  debian 之类的系统,此提示可以忽略。

                                                     cobbler安装配置                                    9, 改 cobbler 用 户 的 默 认 密 码, 以 使 用 如
                                                                                                      修                        可

                                                     1, cobbler 安装                                下 命 令 生 成 密 码, 使 用 生 成 后 的 密 码 替 换 /etc/
                                                                                                                并

                                                     yum -y install cobbler                       cobbler/settings 中的密码。生成密码命令 :
                                                     2, cobbler 的配置                                 openssl passwd -1 -salt 'random-phrase-
                                                     启动 cobbler                                       here' 'your-password-here'
                                                                                                    其中  “random-phrase-here” 为干扰码
                                                     # /etc/init.d/cobblerd start
                                                     启动 httpd 服务                                    所有提示全部 fix 之后,执行

                                                     # /etc/init.d/httpd start                      /etc/init.d/cobblerd restart
                                                     检查配置,    执行                                    cobbler的使用


                                                                       024                                       51CTO Linux 频道 :
                                                                                                                                http://os.51cto.com/linux/
工具
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                    Tools
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com



    配置dhcp服务
                                                   task started: 2011-08-11_170706_sync
    首先修改 cobbler 配置, cobbler 来管理 dhcp 服
                    让                              task started (id=Sync, time=Thu Aug 11 17:07:06 2011)
 务,编辑文件 /etc/cobbler/settings                      running pre-sync triggers
                                                   cleaning trees
    manage_dhcp: 1                                 removing: /var/www/cobbler/images/centos-6.0-i386
    接下来修改 /etc/cobbler/dhcp.template,此文件           removing: /var/lib/tftpboot/pxelinux.cfg/default
 是 cobbler 管理 dhcp 的模板                             removing: /var/lib/tftpboot/grub/images
                                                   removing: /var/lib/tftpboot/grub/grub-x86.efi
    同步cobbler配置                                    removing: /var/lib/tftpboot/grub/efidefault
    执行                                             removing: /var/lib/tftpboot/grub/grub-x86_64.efi
                                                   removing: /var/lib/tftpboot/images/centos-6.0-i386
    # cobbler sync                                 removing: /var/lib/tftpboot/s390x/profile_list
    会看到如一段提示,      如右侧。                            copying bootloaders
    cobbler 会自动进行初始化工作,移除已经存在的                     trying hardlink /var/lib/cobbler/loaders/grub-x86.efi- /var/lib/tftpboot/grub/grub-x86.efi
                                                   trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi- /var/lib/tftpboot/grub/
 启动项,然后根据模板拷贝 loader 文件。之后再生成                        grub-x86_64.efi
                                                   copying distros
 pxe 的配置文件,生成 dhcp 的配置文件,最后再重启
                                                   copying files for distro: centos-6.0-i386
 dhcp 服务。                                          trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/vmlinuz - /var/
                                                     lib/tftpboot/images/centos-6.0-i386/vmlinuz
    至此,就可以使用虚拟机来测试 cobbler 安装了。
                                                   trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/initrd.img - /
    Cobbler测试安装                                      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/
    在启动的时候选择 PXE 的模式。
                                                     www/cobbler/images/centos-6.0-i386/vmlinuz
    然后就能看到图示内容。虚拟机通过 dhcp 获得                       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
 了 122 段的 ip,然后通过 tftp 获得到 pxe 的启动文件。              copying images
                                                   generating PXE configuration files
                                                   rendering DHCP files
                                                   generating /etc/dhcp/dhcpd.conf
                                                   cleaning link caches
                                                   generating PXE menu structure
                                                   running post-sync triggers
                                                   running python triggers from /var/lib/cobbler/triggers/sync/post/*
                                                   running python trigger cobbler.modules.sync_post_restart_services
                                                   running: dhcpd -t -q
                                                   received on stdout:
                                                   received on stderr:
                                                   running: /etc/rc.d/init.d/dhcpd restart
                                                   received on stdout: Shutting down dhcpd: [ OK ]
                                                     Starting dhcpd: [ OK ]                                                 (注 : 代码为节选)


                                                                     025                                        51CTO Linux 频道 :
                                                                                                                               http://os.51cto.com/linux/
工具
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                     Tools
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com


    安装好的系统如下图所示。
                                                    #  koan --server=192.168.10.1
                                                      --profile=centos-6.0-i386 --replace-
                                                      self
                                                    - looking for Cobbler at
                                                      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.    以上所有内容虽然是在 kvm 虚拟机上测试的,但
                                                      img
                                                    downloading kernel vmlinuz to /boot/       完全可以直接使用于生产环境中,不会给现有环境带
    Linux系统重装测试                                       vmlinuz                                  来任何影响。唯一需要做的就是规划好现有网络。
                                                    url=http://192.168.10.1/cobbler/images/
    1,先确定当前 linux 系统中已经安装了 koan 软件。                   centos-6.0-i386/vmlinuz                   对于很多人担心的生成环境开启 DHCP 服务问题,
 对于 koan 的安装可以放到 ks 文件中在安装系统的                       - reading URL: http://192.168.10.1/        我认为不会对现有生产环境产生任何影响,理由有
                                                      cobbler/images/centos-6.0-i386/vmlinuz
 过程中完成安装操作。执行如下命令检查                                 - ['/sbin/grubby', '--add-kernel',         二:
                                                      '/boot/vmlinuz', '--initrd', '/
    # rpm -qa|grep koan                                                                         1, 没有人会在装好系统后让网卡使用 dhcp 模式,
                                                      boot/initrd.img', '--args',
    koan-2.0.11-2.el6.noarch
                                                      'ks=http://192.168.10.1/cblr/           通常都是为网卡配置静态 ip
    2, 了 koan 软 件 后 可 以 执 行 如 下 操 作, 看
      有                             查
                                                      svc/op/ks/profile/centos-6.0-i386
                                                                                                2, 从测试过程中看到,就算是服务器默认设置成
 cobbler 上的系统版本列表                                     ksdevice=link kssendmac lang= text ',
                                                      '--copy-default', '--make-default',      了通过 pxe 启动,而且也顺利的通过 pxe 启动了,但
    #  koan --server=192.168.10.1
                                                      '--title=kick1313675750']
      --list=profiles                                                                          之后会收到 cobbler 的引导菜单。如果默认没有任何
                                                    - reboot to apply changes
    - looking for Cobbler at
                                                    # reboot                                   选择的话, 秒后会使用 local 方式加载,
                                                                                                    20                也就是启
      http://192.168.10.1/cobbler_api
    centos-6.0-i386                                                                            动硬盘上的系统。
    centos-6.0-i386-kvm
    centos6-vm                                      红色部分是手工输入的,从其他部分信息可以看                       综上所述,cobbler 还是很安全的。
    centos-6.0-x86_64                              到,koan 帮我们做了很多本该人工操作的内容。                     本文有删减,原文 :

    这里我们选择 centos-6.0-i386 来重装。可以执                  接下来看下重启。                                    http://os.51cto.com/art/201109/288604.htm

 行如下命令。



                                                                      026                                 51CTO Linux 频道 :
                                                                                                                         http://os.51cto.com/linux/
脚本
杂志订阅 : http://os.51cto.com/art/201011/233915.htm                     Scripts
《Linux 运维趋势》投稿信箱 : yangsai@51cto.com




 用SHELL脚本来防止SSH和vsftpd暴力破解                                                                     果下次排查的某 IP 次数又大于 100,
                                                                                               不在我们的黑名单,
                                                                                                                    首先检查它在
                                                                                                        如果在的话就无视过去 ; 如果不

                                                                                    文/抚琴煮酒     在,就继续添加进 /etc/hosts.deny 文件。
                                                                                                 我的 /etc/crontab 文件最后一行为
                                                                                                 * */1 * * * root sh /root/hosts_deny.sh
    我的一台公网服务器,由于网站采取的是双备份                          下:
                                                                                                 即每隔 1 小时就重复执行一次这个脚本,这里也
 策略,所以开放了 vsftpd 的 21 端口,近来发现许多人
                                                                                               有一个情况要说明下,/var/log/secure 是每隔一个
 在尝试暴力破解 vsftpd 和 ssh,我随便看了看 /var/                   #! /bin/bash
                                                     cat /var/log/secure|awk '/Failed/{print   星期轮询一次的,所以我们这里可以根据服务器的具
 log/secure 日志,     118.33.110.52=2834
               显示如下 :                                  $(NF-3)}'|sort|uniq -c|awk '{print      体情况来配置多少时间执行一次此脚本,暴力破解频
    119.145.254.77=37                                  $2=$1}'  /root/black.txt
    121.254.179.199=226                              DEFINE=100                              繁的机器可适当缩小这个周期。
    121.88.250.243=35                                for i in `cat /root/black.txt`
                                                                                                 我的公网机器运行脚本一段时间后,/etc/hosts.
    200.29.110.104=168                               do
    202.78.173.199=250                               IP=`echo $i |awk -F= '{print $1}'`        deny 文件如下 :
    222.221.2.210=373                                NUM=`echo $i|awk -F= '{print $2}'`
                                                     if [ $NUM -gt $DEFINE ];
    这里面除了 119.145.254.77 和 121.88.250.243            then                                        sshd:119.145.254.77
                                                     grep $IP /etc/hosts.deny  /dev/null        vsftpd:119.145.254.77
 是正常的外,其它的基本都是恶意 IP。                                                                             sshd:222.221.2.210
                                                     if [ $? -gt 0 ];
    由 于 我 的 服 务 器 是 置 于 LVS 集 群 后 面, 以 我
                                    所                then                                        vsftpd:222.221.2.210
                                                     echo sshd:$IP  /etc/hosts.deny          sshd:118.218.136.25
 原 来 想 用 iptables 的 recent 模 块 解 决 这 个 问 题 的 方                                                   vsftpd:118.218.136.25
                                                     echo vsftpd:$IP  /etc/hosts.deny
 法估计是行不通的。而且,服务器的系统安装的是                              fi                                          sshd:118.33.110.52
                                                     fi                                          vsftpd:118.33.110.52
 CentOS 5.5 x86_64,iptables 还暂时不支持此模块,                                                           sshd:123.196.113.11
                                                     done
 报错如下 :                                                                                          vsftpd:123.196.113.11
                                                                                                 sshd:14.140.172.74
    iptables: Unknown error                                                                      vsftpd:14.140.172.74
     18446744073709551615                            脚本思路如下 :                                    sshd:200.29.110.104
    iptables: Unknown error                                                                      vsftpd:200.29.110.104
     18446744073709551615                            由 于 /var/log/secure 是 以 星 期 为 轮 询 的, 以
                                                                                         所
                                                                                                 sshd:202.102.89.81
    而由于机器已经在跑重要的业务,       我又不想去升                   我们每次可以查看这个文件,利用 SHELL 脚本统计                    vsftpd:202.102.89.81
 级内核,免得影响正常的网站运营,所以 iptables 的                                                                   sshd:202.78.173.199
                                                   出其中访问失败比较频繁的 IP,并定义一个阀值为
                                                                                                 vsftpd:202.78.173.199
 想法暂时告一段落 ; 后来我又想到用 HostsDeny 的                    100,如果大于 100 的话就将其放进 /etc/hosts.deny
 方法来解决这个问题,感觉这个方法还是比较繁琐,                           文件,阻止其继续访问 vsftpd 和 ssh; 然后将其写进               原文 :
 还不如自己手动写脚本来解决这个麻烦,脚本内容如                           crontab 计划列表里,每隔一段时间进行一次排查,如                  http://os.51cto.com/art/201109/290306.htm


                                                                      027                                   51CTO Linux 频道 :
                                                                                                                           http://os.51cto.com/linux/
招募启事                           往期回顾                      下期预告
 《Linux 运维趋势》的建设需要您的加入!        2010.9, 期, 运维自动化
                                      000                下期主题为 :
 您可以通过如下方式参与我们杂志的建             2010.10, 期, 监控与报警
                                       001               服务器调优,敬请期待!
设:                             2010.11, 期, 可用性
                                       002               本刊为月刊,预定每月发布日期为 :
 1、推荐文章                        2010.12, 期, 运维与开发
                                       003                  每个月的第二个星期五
 无论是您在互联网上看到的好文章,还是            2011.01, 期, 瓶颈分析
                                       004               您可以通过如下方式检查新刊发布 :
您自己总结 / 整理的资料 ;
              无论是英文还是中         2011.02, 期, 内网开发环境
                                       005               1、电子邮件订阅 :
文;
 无论是入门的还是高端的,都欢迎推荐!            2011.03,006 期, 备份         os.51cto.com/art/201011/233915.htm
您可以直接在技术圈中分享 :                 2011.04, 期, 迁移
                                       007               2、RSS 订阅 :
 http://g.51cto.com/linuxops   2011.05, 期, 双机操作
                                       008               www.51cto.com/php/rss.php?typeid=777
 2、投稿                          2011.06, 期, Puppet
                                       009
 如果您愿意与大家分享您技术经验的热             2011.07,010 期, 日志分析
诚,那么欢迎您的投稿!原创或译文均可,稿           2011.08.011 期, iptables    《Linux 运维趋势》是由 51CTO 系统频道策

件在 51CTO 首发可领取稿酬 :)            更多汇总见《Linux 运维趋势》专题       划、 对 Linux/Unix 系 统 运 维 人 员 的 一 份 电
                                                           针

 投稿信箱 :
      yangsai@51cto.com                                  子杂志,内容从基础的技巧心得、实际操作案

 3、推广与意见                                                 例到中、高端的运维技术趋势与理念等均有覆

 如果您喜欢我们的杂志,认为这本杂志对                                      盖。

于您的工作有所帮助,请向您的 Linux 好友、同                                 《Linux 运维趋势》是开放的非盈利性电子

事们推荐它!                                                   杂志,其中所有内容均收集整理自国内外互联

 如果您觉得这份杂志还有什么地方需要改                                      网(包含 51CTO 系统频道本身的内容)。对于

进或补充,也希望您能够提出您的宝贵意见!                                     来自国内的内容,编辑都会事先征求原作者的

 反馈可至《Linux 运维趋势》新浪微群 :
                               制作团队                      许可(八卦,趣闻  数字栏目例外)。如果您认

 http://q.weibo.com/121303                               为本杂志的内容侵犯到了您的版权,可发信至
                               本期责编 :
                                    李晶
 或在新浪微博                                                  yangsai@51cto.com 进行投诉。
                               封面制作 :
                                    魏峰
 @51CTO 系统频道                   以及热心投稿、帮助审稿的热心网友们

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

  • 2.
    目录 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Index 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 目录 人物·People 技巧·工具·脚本 003 天涯首席工程师王建科:技术人要有产品观 021 Linux管理员常用网络资源收集 交流·Interact 022 五款救急的Linux文件恢复软件 005 网站扩展实例:1亿用户的Tagged架构进化史 024 运维自动化之Cobbler系统安装详解 八卦·News 027 用SHELL脚本来防止SSH和vsftpd暴力破解 007 Linux 20周年庆,2011最佳开源软件 专题·Special 009 strace命令使用实例 010 Unix调试的瑞士军刀:lsof 012 使用top命令的一些小技巧 013 网站排障分析常用的命令 出版方 : 51CTO 系统频道(北京无忧创想信息技术有限公司) 014 MySQL生产环境突发故障处理手册 本期责编 : 李晶 杂志主编 : 杨赛 016 oracle审计导致的系统性能故障 联系方法 : yangsai@51cto.com 010-68476606(分机 8035) 出版日期 : 2011 年 9 月 16 日 017 数据库故障分析与排查 每月第 2 个星期五出版 订阅 : http://os.51cto.com/art/201011/233915.htm 002 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 3.
    人物 杂志订阅 : http://os.51cto.com/art/201011/233915.htm People 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 时候还是只有一台服务器,又当 web 又当 db,内存只 天涯首席工程师王建科:技术人要有产品观 有 512MB,这个压力可想而知。 采访/杨赛 当时天涯还有一个特点,就是帖子是不分页的。 一千回复也好,一万回复也好,一个页面都要全部加 人物简介: 载进来。长帖对天涯的系统压力非常大。 王建科(天涯ID:卓锐),1996年毕业于吉林大学计算机科学 2003 年之后到 2006 年之间,是天涯发展的一个 系,现任海南天涯在线网络科技有限公司首席工程师、天涯论坛 中期阶段。这个阶段天涯快速发展, 2003 年的同 从 产品总监,天涯早期建设者及参与者,主导开发了天涯论坛、天 时在线 8000 人, 2006 年达到 20 万。快速发展我 到 涯博客等产品。 觉得有几个原因吧,第一个是大概在 2005 年左右,中 国互联网快速增长,网民大爆发,天涯用户也跟着往 国内的网民们大多听说过天涯社区,只是也许很 的 ID 是 2 月 28 号注册的,是天涯第一个 ID。回想当 上增长。还有一个就是当时天涯的媒体性凸显出来, 多人并不知道,这个有 12 年历史的、现在同时在线已 时,其实对技术的要求并不很高,只要把这个东西实 因为天涯当时很多网络事件和话题,很多媒体就把天 经超过 50 万人的巨大社区,在最开始几年的产品设 现出来,快速的实现出来。当时整个互联网的网民也 涯作为一个新闻源去报导,这样相当于传播天涯的品 计、开发和运维,都是由一个人来完成的。他就是现 比较少,所以用户比较少,所以对整个性能的压力也 牌。 在天涯的首席工程师、天涯论坛产品总监王建科。本 比较小。当然服务器硬件也比较差,大概是 586 这样 这样就导致了天涯的快速增长,而天涯的服务器 次访谈内容大致分为天涯的技术发展历程、天涯界面 的吧。 这时候增长的也比较快…… 的设计、对技术债务的观点、对技术选型的观点、对技 51CTO : 当时服务器是托管在机房? 51CTO : 不再是一台服务器了。 术人员成长的建议、以及开源相关的一些话题。对于 王建科 : 当时我们还没在机房,只有一条链路,好 王建科 : 不再是一台了。2004 年的时候, 嗯, 已经 互联网行业的开发、运维和产品运营人员而言,相信 像也就是几十 K 吧,马上感觉不够,就搬到电信的机 是 4 台 web, 台 db 了。之前已经是扛不住了, 2 负载 王建科的分享会给你带来一些启发。 房去了。当时电信还没有 IDC 这个概念,也就是一张 全都满了这么一个状况。后来我们就拆分嘛, db 把 51CTO : 首先,简单的介绍一下天涯的技术发展历 桌子,有个网线,连上去就行了(笑)。当时门槛是比 拆分。天涯不是论坛分很多版块吗,所以就是把不同 程吧。 较低的。 版块拆分到不同的服务器上。如果是所有版块在一 王建科 : 天涯最初只有一个开发者,就是我。产品 我们把天涯分为几个阶段,第一个就是 2003 年之 个表里的话就很难拆分,所以我们就是一个版块对应 的设计和技术实现都是我。当时是用 ASP 来做,有 前,刚起步的一个阶段。网民比较少,当时网友还是 一套表。所以如果这个服务器压力比较大的话,我们 很多困难,因为那时 ASP 这个技术没有文档,全靠摸 一个比较异类的人群, 千奇百怪的, ID 谈的话题别人 就可以把一整个版块,就是一个表,迁移到别的服务 索,不像现在,网上资料非常多。那是在 98 年底的时 都听不懂。所以那个时候,同时在线也就是 90 人左 器上去。 候。 右。2002 年同时在线是 1000 人, 2003 年的时候, 到 所 以 db 方 面 就 是 按 版 块 拆 分 表 这 个 模 式。web 天涯最开始上线运营的话是 99 年 3 月 1 号。我 同时在线就差不多快要 10000 人了。不过 2003 年那 方面就是增加。现在 web 方面扩展比较容易点,最 003 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 4.
    人物 杂志订阅 : http://os.51cto.com/art/201011/233915.htm People 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 早做的时候就是通过 session 会话把 web 进行拆分。 一页的功能,就只能一页一页翻这样。 怨,再整个做优化。 db 另一个方面就是不使用连合查询。天涯最早为 另一个就是锁。很多网站采用了死锁这种机制, 51CTO : 您对技术人员在中国的发展有何看法? 了优化性能有几个特点,一个就是不使用连合查询。 但是天涯呢,因为网友看内容对一致性的要求并不 王建科 : 在中国的话,技术人员在大企业成长的空 比如有的时候你要呈现用户的名字啊,标题等信息的 高,我们就都全部允许脏读。就是说你不用忽略这个 间会更大一点,在中小企业的成长空间就会小一点, 时候,就要去读,那么我们的做法是在产生的时候就 更新,不用在读的时候把它锁上这样。 这是中国技术人员面临的一个问题。 把信息写到同一个地方去了,读的时候就只要把它一 51CTO : 因为没这个需要。 51CTO : 意思是中国的技术人员还是尽量在大企业 起呈现出来。这样表之间就没有太多关联,因为表关 王建科 : 没必要。因为我们的数据不像银行数 对, 寻求发展是吗(笑)? 联也是十分影响性能的。而且表关联还会造成难以 据,对一致性要求并不特别高,就避免了死锁这样的 王建科 : 这个嘛(笑) 比如像我的话, , 其实从一开 拆分的问题。 方式。 始就是同时做技术和产品两条线。很多技术人员要 还有就是一帖到底这个,我们的做法就是把所有 另外一方面就是我们也用了 DNS 轮询,但是 DNS 往产品的方向转,觉得有很大困难,但是我这边就要 回复写到一个字段里面去。有新的回复时,就把这个 轮询这个效果并不是特别好,没有我们想象的那么均 求,技术人员也必须关注一些产品,因为接触过产品 内容插到字段最下面,这样呈现的时候,只要读一个 匀,所以后来我们就自己写了应用来控制负载均衡。 的技术人员思考交流的方式跟没接触过产品的技术 字段就全出去了。这样就极大的降低了 db 的 I/O, 另一个就是在 2003 年后来压力大的时候,我们开 人员是不一样的。他能够考虑到一个产品使用会不 因为多一次读写就多一次 I/O 嘛,你只有一个字段, 始用 Squid 做页面缓存。当时因为天涯很多动态的 会有问题,技术特点方面能不能作出更漂亮的功能。 就只有一个 I/O ; 如果 100 个回复分为 100 个字段, 内容,变化比较大,而用了页面缓存之后,命中率在 像是国外很多互联网产品都是技术人员驱动的,好比 那 就 是 100 倍 的 I/O,1000 个 就 是 1000 个 I/O。 所 70 左右吧,还不错,减少了后端的很多压力。 Google 这样的。那么我也会鼓励我们的技术人员,多 以天涯把所有回复合并,就极大的减少了 I/O。所以 这样就是 2003 年到 06 年这个阶段。 关注产品,参与一些决策。否则的话,现在很多公司 天涯才能大体做到“一帖到底” 不分页。 , 那么 07 年到现在呢,就是比较强调架构化这个方 一个常态就是,运营人员埋怨产品,然后技术就成了 另一个有关这个分页。很多论坛数据量很大的时 面。07 年之前我们不是只有电信这么一个链路吗, 推脱责任的借口,我们叫做“炮灰”(笑) 很辛苦, , 又 候,你越往后翻页,处理的速度就越慢,效果很差了。 网通用户就抱怨很多,所以就购买了网通链路,然后 没有成就感。这是不利的,所以就想怎么把这部分和 所以天涯这边我们用 where 子句来分页。Where 子 用 F5 做链路负载均衡。 运营团队糅合在一起,共同做一件事情,共同关注用 句就是判断,你点下一页的时候, where 子句定位 用 然后就是做更多的页面缓存。Squid 之后我们开 户。 到这个下一页的数据。所以这样的话,你每次点下一 始用 Varnish,这个感觉效果更好一些。然后就是对 这是知识面方面。另一方面 技术人员也要扩展一 页,每次请求在性能上的消耗都是一样的,一致的。 页面进行压缩。因为天涯都是文本内容嘛,所以压 下深度,还是要走专业化的路线。所以我们也鼓励技 51CTO : 就不用做 n 次计算了。 缩率能达到 70%,效果挺好。然后就是 memcached 术人员进行交流,好比刘天斯,就很喜欢写博客分享 王建科 : 就不用再去计算我下一页这个数据到 对, 内 存 缓 存, 是 你 要 往 db 读 写 的 内 容 都 先 放 在 就 一些东西,这个过程也学到很多东西。 底在什么位置,尤其数据量大的时候,这就很快。当 memcached 里面,这个命中率比较高, 90%。 有 本文有删节,完整内容见原文 : 然天涯只提供了下一页的功能,而没有提供直接到某 所以就是一步一步做过来,先解决网通用户的抱 http://os.51cto.com/art/201104/254678.htm 004 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 5.
    交流 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Interact 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 一家2004年创建的试水社交网站,经过7年的成长和扩展,现在已经拥有了1亿用户。平均50亿次的pv,承 担在1000多台服务器的网站架构上。Tagged网站,现在承载了1亿个用户、1千台服务器和50亿次页面浏览量。 这个过程是如何实现的? 网站扩展实例:1亿用户的Tagged架构进化史 文/Todd Hoff 即使只有在 8 台服务器的时候,Tagged 的网站流 编译/布加迪 量也要比大多数人所知道的来得多。幸运的是,分布 本文将要介绍的就是这个叫 Tagged 的网站—— 孵化器有着一种快速成型文化 : 每年通常推出两 式内存缓存系统 memcached 带来了两个优势 : 既消 Tagged 架构实例 : 亿个用户、 千台服务器和 50 亿 1 1 个新概念,寻觅其中的大赢家。正是在这样的文化中, 除了 90% 以上的数据库读操作,又确保含有大量不 次页面浏览量。下面,Tagged 的 CTO 兼联合创始人 Tagged 应运而生。LAMP 是适合这种类型的工作的 同信息的社交网络面面可以迅速显示。 Johann Schleier-Smith 将 为 我 们 介 绍 Tagged 网 站 自然选择 ; 这种工作注重灵活性和快速开发周期。当 自一开始,我们的对象缓存注重显式缓存更新,支 架构的成长历程。 时,Java 开发主要面向大企业的开发工作,Python 吸 持更简单的技术,比如删除无效的键 ; 或者根据计时 自 2004 年以来,Tagged 从一家试水社交领域的 引的编程员寥寥无几,Perl 方面的编程员又不是我们 器,使失效数据无效。这种方法的缺点是代码比较复 小不点网站,逐渐变成全球最大的社交网络之一,数 所要的那一种。我们还知道,雅虎是 PHP 的大力支持 杂,但大幅减轻了数据库负载,而且使网站保持快速 百万的成员访问该网站以结交新成员,每个月的页面 者; 所以一旦有需要,完全有可能扩展业务规模。 运行,涉及经常更新的对象时更是如此。 浏览量达到 50 亿次。这个逐步发展的历程迫使我们 我在以前的项目上运行 MySQL 方面有着丰富的 我们的网站继续越来越复杂,在标准的社交网络 Tagged 不断完善网站架构,最终获得了功能异常强 经历,这让我对这项技术爱恨交加。本着尝试的精神, 功能的基础上,添加了搜索和社交发现等功能。我的 大的平台。 我们为 Tagged 购买了几份入门级 Oracle 许可证,看 团队说服我使用 Java 来建立搜索功能,那样我们就 第一个阶段:2004年,PHP Web应用程序、10万个 看甲骨文的技术是不是用起来更好。 能得益于 Lucene 库。当我们学会了让 Java 顺畅运行 用户和15台服务器 值得注意的是,许多构建的小型网站仍然就像早 后,我有一种如释重负的感觉。 期的 Tagged。具有一种简单的美 ; 无状态的 PHP 与 第三个阶段:2006年,数据库扩展、1000万个用户 有状态的 Oracle 之间的双向分离正是一台服务器中 和100台服务器 最棘手的部分,而额外的 Web 显示计算能力很容易 添加。 第二个阶段:2005年,缓存PHP Web应用程序、100 万个用户和20台服务器 005 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 6.
    交流 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Interact 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 此时 Tagged 已拥有 1000 万个注册用户,随时都 拆 分 数 据 库 是 最 具 有 难 度 的 任 务, 是 在 扩 展 也 有成千上万个用户在线,我们开始着手解决我一直忧 Tagged 方面最具有成效的技术。由于在多个数据库 心忡忡的挑战。那时我们刚筹集到了一笔资金,竭力 之间分割用户,我们最终拥有了这种设计 : 在所有地 寻求发展,但是数据库亟需添加容量。我们进行了一 方都允许我们只要添加硬件,就可以进行扩展。 次又一次的缓存或 SQL 调整和优化,但服务器的处 我们 Tagged 的一条规定是,将每个表分成 64 个 理器其占用率还是会一再逼近 100% 大关。 分区 ; 我们牢牢遵守这个不成文的规定,除非有着非 向上扩展系统的想法是个权宜之计,但是多插槽 常诱人的理由才允许有例外。只有得益于游戏玩家 这次我们把时间提前几年。解决了关键的数据库 服务器硬件动辄数百万美元,于是我们选择了 Oracle 之间高性能受保护事务的某些游戏才在单独的数据 扩展性问题后,我们发现通过添加硬件来支持扩展相 真正应用集群 RAC,该系统让我们可以使用标准网 库中垂直分区。 当容易。 络系统来连接数量众多的大众化 Linux 主机,以构建 拆分现有的数据意味着针对数 TB 的数据进行复 在这一段期间,扩展性方面的考量因素转向了减 一个庞大的数据库。再结合最新处理器具有的优势, 杂的转换工作。一开始,我们每次逐个着手解决功能 少故障和应对越来越多的易损坏部件所带来的威胁。 Oracle RAC 的容量比我们的第一台数据库服务器足 特性,依赖应用程序代码来代替连接(join) 但最后 , 通过负载均衡器的运行状况检查和自动关闭毫无反 足增加了 20 倍,这一点很重要,而且允许应用程序开 我们还是在应用程序的核心部分遇到了一大批表,这 应的服务,实现了针对 Web 层的全方位保护,避免了 发人员可以继续致力于开发新的功能特性。 些表的结合得太紧密了,这个方法行不通。于是我们 各种相关问题。我们在设计核心组件的架构时还考 Tagged 通 过 结 合 来 自 一 个 庞 大 内 存 中 数 据 集 编写了生成 SQL 的迁移代码,导出、转换和重新装入 虑到了弹性。 的统计数字,开始提供个性化的人员匹配(people- 了数亿行的数据,并使用触发器来跟踪源系统上面出 Java 扮演了极其重要的角色,一方面归因于 Java matching)推荐服务。用 PHP 实现这一点完全不现实, 现的变化,逐渐更新目标,那样最后的同步所带来的 越来越得到接受,拥有相应专长的人也越来越多 ; 另 于是 Java 进一步渗透到了我们的环境中。 停运时间不到 30 分钟。 一方面是由于面临的挑战越来越多。为了对付垃圾 第四个阶段:2007年,数据库拆分、5000万个用户 拥有许多数据库意味着拥有许多的数据库连接。 邮件及其他滥用现象,我们的算法充分利用了庞大的 和500台服务器 尤其是由于我们添加了更多的“社交发现”功能(比 共享内存空间,还充分利用了计算密集型方法。社交 如我们的第一项约会功能 Meet Me) 拆分工作可能 , 游戏也得益于 Java 的高性能和并发控制,但面临的 会让 PHP 不堪重负。为了解决这个问题,我们开发了 代价是系统很复杂 ; 现在不同的应用程序池比以前 一款 Java 应用程序,负责提供运行查询的 Web 服务 ; 多得多,有待我们加以管理。 该应用程序还继续提供一个非常方便的监控点,便于 本文有删节,完整内容见原文 : 轻松自如地处理数据库故障。 Tagged Architecture - Scaling To 100 Million 第五个阶段:2010年,架构完善和扩展、8000万个 Users, 1000 Servers, And 5 Billion Page Views 用户和1000台服务器 http://os.51cto.com/art/201108/283807.htm 006 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 7.
    八卦 杂志订阅 : http://os.51cto.com/art/201011/233915.htm News 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 【26 年】理查德·斯托曼于 1985 年 10 月创立了 Linux 20周年庆,2011最佳开源软件 自由软件基金会 (FSF)。至今已 26 年,自由软件基 ——八卦,新闻与数字 2011.08 - 2011.09 金会和刚刚年满 20 岁的 Linux 彻底地改变了整个计 算机世界,并引发了一场革命。直到现在,这场软件 【2011 年最佳开源软件】开源软件已经无所不在, 【3650 万】StudioNow 证明了使用开源软件来构建 革命仍没有结束,很可能仅仅是开始。 今年又有哪些开源软件对这个产业造成了深刻的影 一个成功的科技企业是有可能的,事实上,StudioNow http://os.51cto.com/art/201109/289688.htm 响?请看 2011 年度 Bossie 奖的公布结果——最佳开 是如此成功,于是 AOL 花费 3650 万美元买下了该公 源应用程序、最佳桌面与移动应用、最佳开发软件、最 司。 【LinuxCon 2011】为 庆 祝 Linux 诞 生 20 周 年,, 佳数据中心与云计算软件。 http://os.51cto.com/art/201109/289045.htm Linux Foundation 于 8 月 17 日 8 月 19 日在温哥华 http://os.51cto.com/art/201109/290392.htm 举办了 LinuxCon 2011。包括 Linus Torvalds 先生 【Linux Mint 11】Linux Mint 11 LXDE 于 8 月 16 在内的多位业界大佬都参加了这一盛会,大佬们指点 【Ubuntu 11.10】经 过 了 3 个 Alpha 版 之 后, 发 开 日发布更新。这一版本在软件管理器、更新管理器等 江山、激扬文字,感怀过去、展望未来。 代号为 Oneiric Ocelot 的 Ubuntu 11.10 终于发布了 方面都有更新。 http://os.51cto.com/art/201108/281372.htm Beta 1 版,主要新特性包括 : 全新的 LightDM 登录界 http://os.51cto.com/art/201108/284674.htm 面、全新的 Alt+Tab 程序切换样式、Thunderbird 为默 【11 个里程碑】Linux 操作系统诞生到现在已经 20 认邮件客户端等。 【Fedora 16】代号为“Verne” Fedora 16 Alpha 的 年了,在这 20 年里,Linux 从学校里的玩物发展到今 http://os.51cto.com/art/201109/288781.htm 经过一个星期的跳票,终于在 8 月 24 日晚正式发布 天成为操作系统中一股坚实的力量。我们从这 20 年 了。该版本给我们带来了许多新特性 : GRUB 2 取代 中总结出 Linux 发展的 11 个重要的里程碑。 【五 个 九】如 今 还 有 人 真 的 把 所 谓“五 个 九”类 GRUB 作为默认的 BootLoader、KDE 4.7 和 GNOME http://os.51cto.com/art/201108/287916.htm 承 诺 当 回 事 吗? 从 理 论 层 面 上 来 说, 意 味 着 这 3.1 开发版本更新、SELinux 增强等。 99.999% 的可用运行时间比例,也就是说业务经理 http://os.51cto.com/art/201108/285988.htm 们每天会遭遇到的故障时段也就八分之一秒多一点。 http://os.51cto.com/art/201108/285496.htm 【Debian 18 载】2011 年 8 月 16 日,世界上最流行 和 最 稳 定 的 GNU/Linux 发 行 版 Debian 走 过 了 18 周 【二 十 年】Linux 至 今 已 走 过 二 十 年。LAMP 架 构 年。在过去的 18 年里,Debian 确立了自身最稳定操 在 Linux 诞生之初诞生,不过从 LAMP 架构诞生之初 作 系 统 的 定 位, 多 GNU/Linux 发 行 版 如 Ubuntu 和 很 到现在已经有了很大的变化。 Knoppix 都是基于 Debian。 http://os.51cto.com/art/201108/285171.htm http://os.51cto.com/art/201108/284455.htm 007 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 8.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 服务器故障排除 当你的网络服务出现问题的时候,首先要做的事 情自然是分析问题出在哪里。在 Linux 系统下,有很 多工具可以帮助你发现故障的原因所在。一些基础 的排障工具包括 : strace 如果一个应用编译正常但运行期间报错,报错信 息又不知所云,可以通过这个工具挖掘一些线索。 lsof 列 出 某 个 进 程 打 开 所 有 文 件 的 信 息 —— 而 在 Linux 下,一切皆文件。 top 检查当前正在运行哪些进程,这些进程各自占用 的 CPU 和内存资源。 traceroute 检查两个节点之间网络接入情况的基本工具。 ping 检查远程服务器连接状况的基本工具。 hexdump 用来搜索二进制文件中的字符串,在没有源代码 的情况下,可以有效的定位问题所在。 来源 : www.linux.com/archive/feed/60136 008 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 9.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 只 会 看 到 whoami 依 赖 Libc.so.6 和 ld-linux. strace命令使用实例 so.2,它没有给出运行 whoami 所必须的其它库。这 里时用 strace 跟踪 whoami 时的输出 : 文/edeed # mv /lib/libnss_files.so.2 /lib/libnss_files. 有时候一个程序出现了问题,无法找到原因,所以 图删掉可能存在的老文件。 so.2.backup 我们需要调试。strace 是一个必不可少的调试工具, 但是,第四行确认了错误所在。它试图绑定到 / # whoami 可以用来监视系统调用,不仅可以调试一个新开始的 tmp /.ICE-unix/dcop27207-1066844596,但 是 出 whoami: cannot find username for UID 0 程序,也可以调试一个已经在运行的程序。 现了拒绝访问错误。ICE_unix 目录的用户和组都是 可以发现在不同目录下面查找 libnss.so.2 的尝 首先让我们看一个真实的例子 : root,并且只有所有者具有写权限。一个非 root 用户 试,但是都失败了。如果没有 strace 这样的工具,很 前一段时间,我在启动 KDE 的时候出了问题,KDE 无法在这个目录下面建立文件,如果把目录属性改成 难发现这个错误是由于缺少动态库造成的。现在只 的错误信息无法给我任何有帮助的线索。我决定采 0777, 则前面的操作有可能可以执行,而这正是第一 需要找到 libnss.so.2 并把它放回到正确的位置就可 用 strace 看一下在启动 dcopserver 时到底程序做了 步错误出现时进行过的操作。 以了。 什么 : 用strace解决库依赖问题 3 限制strace只跟踪特定的系统调用 strace -f -F -o ~/dcop-strace.txt dcopserver strace 的另一个用处是解决和动态库相关的问题。 如 果 已 经 知 道 要 找 什 么, 以 让 strace 只 跟 踪 可 这 里 -f -F 选 项 告 诉 strace 同 时 跟 踪 fork 和 让我们看一个例子 : 一 些 类 型 的 系 统 调 用。 例 如, 要 看 看 在 configure 需 vfork 出来的进程, 选项把所有 strace 输出写到 ~/ -o whoami 程序会给出自己的用户名,这个程序在一 脚 本 里 面 执 行 的 程 序, 要 监 视 的 系 统 调 用 就 是 需 dcop-strace.txt 里 面,dcopserver 是 要 启 动 和 调 试 些 需要知道运行程序的真正用户的脚本程序里面非 execve。让 strace 只记录 execve 的调用用这个命令 : 的程序。再次出现错误之后,我检查了错误输出文件 常有用,whoami 的一个示例输出如下 : # ldd /usr/bin/whoami dcop-strace.txt,文件里有很多系统调用的记录。在 27207 mkdir(/tmp/.ICE-unix,0777) = -1 libc.so.6 = /lib/libc.so.6 (0x4001f000) 程序运行出错前的有关记录如下 : EEXIST (File exists) /lib/ld-linux.so.2 = /lib/ld-linux.so.2 其中第一行显示程序试图创建 /tmp/.ICE- unix (略) (0x40000000) 目录,权限为 0777,这个操作因为目录已经存在而失 假设因为某种原因在升级 glibc 的过程中负责用 已经看到了,strace 不仅可以被程序员使用,普通 败了。第二个系统调用 (lstat64) 检查了目录状态, 户名 和用户 ID 转换的库 NSS 丢失,我们可以通过把 系统管理员和用户也可以使用 strace 来调试系统错 并显示这个目录的权限是 0755,这里出现了第一个 nss 库改名来模拟这个环境 : 误。 程序运行错误的线索 : 程序试图创建属性为 0777 # whoami 本文有删节,完整内容见原文 : 的目录,但是已经存在了一个属性为 0755 的目录。 root http://hi.baidu.com/edeed/blog/item/ 第三个系统调用 (unlink) 试图删除一个文件,但是这 这 里 可 以 看 到, 行 whoami 时 出 现 了 错 误, 运 ldd c59d8d10f362e30a213f2eb8.html 个文件并不存在。这并不奇怪,因为这个操作只是试 程序的输出不会提供有用的帮助 : 009 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 10.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com Lsof 是遵从 Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所 # lsof -c apache 有文件信息。打开的文件可能是普通的文件,目录,NFS 文件,块文件,字符文件,共享库,常规管道,明明 -c 选项限定只列出以 apache 开头的进程打开的 管道,符号链接,Socket 流,网络 Socket,UNIX 域 Socket,以及其它更多。 文件 : 所以你可以不用像下面这样写 : Unix调试的瑞士军刀:lsof # lsof | grep foo 文/Peteris Krumins 而使用下面这个更简短的版本 : 译/张元一 # lsof -c foo 事实上,你可以只制定进程名称的开头 : 如果说 netcat 是进行网络诊断的瑞士军刀,那么 这个文件的进程,你也可以列出多个文件,lsof 会列 # lsof -c apa lsof 就是 Unix 调试的瑞士军刀。 出所有使用这些文件的进程。 这会列出所有以 apa 开头的进程打开的文件 Lsof 遵从 Unix 哲学的典范,它只做一件事情,并 你也可以一次制定多个文件 : 你同样可以制定多个 -c 参数 : 且做的相当完美——它可以列出某个进程打开的所 # lsof /path/to/file1 /path/to/file2 # lsof -c apache -c python 有文件信息。打开的文件可能是普通的文件,目录, 递归查找某个目录中所有打开的文件 这会列出所有由 apache 和 python 打开的文件 NFS 文 件, 文 件, 符 文 件, 享 库, 规 管 道, 块 字 共 常 明 # lsof +D /usr/lib 列出所有由某个用户或某个进程打开的文件 明 管 道, 号 链 接, 符 Socket 流, 络 Socket, 网 UNIX 域 加上 +D 参数,lsof 会对指定目录进行递归查找, # lsof -u pkrumins -c apache Socket,以及其它更多。因为 Unix 系统中几乎所有东 注意这个参数要比 grep 版本慢 : 你也可以组合使用多个选项,这些选项默认进行 西都是文件,你可以想象 lsof 该有多有用。 # lsof | grep '/usr/lib' 或关联,也就是说上面的命令会输入由 pkrumins 用户 如何使用 lsof ? 之所以慢是因为 +D 首先查找所有的文件,然后 或是 apache 进程打开的文件。 这 篇 文 章 中 我 会 尽 力 列 举 我 能 想 到 的 所 有 lsof 一次性输出。 列出所有由一个用户与某个进程打开的文件 的用法,让我们先从最简单的开始(或许你已经知道 列出某个用户打开的所有文件 # lsof -a -u pkrumins -c bash 了) 然后逐渐增加复杂度 : , # lsof -u pkrumins -a 参数可以将多个选项的组合条件由或变为与, 列出所有打开的文件 -u 选项限定只列出所有被用户 pkrumins 打开的 上面的命令会显示所有由 pkrumins 用户以及 bash 进 # lsof 文件,你可以通过逗号指定多个用户 : 程打开的文件。 不带任何参数运行 lsof 会列出所有进程打开的所 # lsof -u rms,root 列出除 root 用户外的所有用户打开的文件 有文件。 这条命令会列出所有 rms 和 root 用户打开的文件。 # lsof -u ^root 找出谁在使用某个文件 你也可以像下面这样使用多个 -u 做同样的事情 : 注 意 root 前 面 的 ^ 符 号, 执 行 取 反 操 作, 此 它 因 # lsof /path/to/file # lsof -u rms -u root lsof 会列出所有 root 用户之外的用户打开的文件。 只需要执行文件的路径,lsof 就会列出所有使用 查找某个程序打开的所有文件 010 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 11.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 列出所有由某个 PID 对应的进程打开的文件 找到使用某个 udp 端口号的进程 txt 则列出所有加载在内存中并正在执行的进程 : # lsof -p 1 # lsof -i udp:53 # lsof -d txt -p 选项让你可以使用进程 id 来过滤输出。 同样的,也可以找到使用某个 tcp 端口的进程 : 输出使用某些资源的进程 pid 记住你也可以用都好来分离多个 pid。 # lsof -i tcp:80 # lsof -t -i # lsof -p 450,980,333 找到某个用户的所有网络连接 -t 选项输出进程的 PID,你可以将它和 -i 选项组 列出所有进程打开的文件除了某个 pid 的 # lsof -a -u hacker -i 合输出使用某个端口的进程的 PID,下面的命令将会 # lsof -p ^1 使用 -a 将 -u 和 -i 选项组合可以让 lsof 列出某 杀掉所有使用网络的进程 : 同前面的用户一样,你也可以对 -p 选项使用 ^ 来 个用户的所有网络行为。 # kill -9 `lsof -t -i` 进行取反。 列出所有 NFS(网络文件系统)文件 循环列出文件 列出所有网络连接 # lsof -N # lsof -r 1 # lsof -i 这个参数很好记, 就对应 NFS。 -N -r 选项让 lsof 可以循环列出文件直到被中断,参 lsof 的 -i 选项可以列出所有打开了网络套接字 列出所有 UNIX 域 Socket 文件 数 1 的意思是每秒钟重复打印一次,这个选项最好同 (TCP 和 UDP)的进程。 # lsof -U 某个范围比较小的查询组合使用,比如用来监测网络 列出所有 TCP 网络连接 这个选项也很好记, 就对应 UNIX。 -U 活动 : # lsof -i tcp 列出所有对应某个组 id 的进程 # lsof -r 1 -u john -i -a 也可以为 -i 选项加上参数,比如 tcp, 选项会 tcp # lsof -g 1234 如何安装 lsof ? 强制 lsof 只列出打开 TCP sockets 的进程。 进程组用来来逻辑上对进程进行分组,这个例子 许多 Unix 系统都内置了 lsof,如果你的系统没有 列出所有 UDP 网络连接 查找所有 PGID 为 1234 的进程打开的文件。 安装,你可以从这里直接下载源代码。 # lsof -i udp 列出所有与某个描述符关联的文件 BSD 系统有一个类似的工 具可以做同样的事情, 同样 udp 让 lsof 只列出使用 UDP socket 的进程。 # lsof -d 2 叫做 fstat。 找到使用某个端口的进程 这个命令会列出所有以描述符 2 打开的文件。 你可以通过 man lsof 来了解关于 lsof 的完整文档, # lsof -i :25 你也可以为描述符指定一个范围 : 或者通过 lsof -h 查看。 :25 和 -i 选 项 组 合 可 以 让 lsof 列 出 占 用 TCP 或 # lsof -d 0-2 本文有删节,完整内容见原文 : UDP 的 25 端口的进程。 这会列出所有描述符为 0, 2 的文件。 1, A Unix Utility You Should Know About: lsof 你 也 可 以 使 用 /etc/services 中 制 定 的 端 口 名 称 -d 选项还支持其它很多特殊值,下面的命令列出 http://heikezhi.com/2011/06/19/swiss- 来代替端口号,比如 : 所有内存映射文件 : army-knife-of-unix-debugging-lsof/ # lsof -i :smtp # lsof -d mem 011 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 12.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 使用top命令的一些小技巧 文/周振兴 1. 有用的命令 top-z-x z: 打开 / 关闭彩色显示 图3 按照虚拟内存排序 x: 高亮显示排序列 -n : 配合 -b 使用,表示重新刷新一定次数后退出 在使用 top 命令后, “先按 z 键,再按 x 键” 这时屏 , -d : 刷新延时时间。例如 -d 5 表示 top 每隔 5 幕会彩色显示输出,白色显示的列是当前排序的列 ; 秒刷新一次。(默认是 3 秒) 图1 按cpu使用排序查看进程 更多请查看 top-h 或者 RTFM。 偶尔还会有一些白色显示行,这些行是当前正在运行 进程。使用该参数可以帮助我们更清楚的看到排序 原文 : 列。例如,我想按照 cpu 使用排序来查看进程 : http://www.orczhou.com/index. (见图 1) php/2010/12/linux-top-tips/ 使用了 top-z-x 命令后是不是看得清晰了一些 :) 2. 有用的命令 top-1 热门图书推荐: 1 : 的系统, SMP 会单独显示各个 CPU 的运行状态 (见图 2) 本书是《鸟 哥 的 Linux 私 房 3. 选择排序列 top-z-x- 菜 基 础 学 习 篇》的 最 新 版, : 改变排序列 全书分为 5 个部分 : 第一部 : 改变排序列 分着重说明 Linux 的起源及 top-z-x- 试试就知道是什么意思了 :) 。 功能,如何规划和安装 Linux 例如,默认是按照 cpu 使用率排序的,现在我想看 主 机 ; 二 部 分 介 绍 Linux 第 看安装使用的虚拟内存排序看看,使用命令 的 文 件 系 统、 件、 录 与 文 目 top-z-x----- 图2 显示各个cpu的运行状态 磁盘的管理 ; 第三部分介绍 (见图 3) 文件中 文字模式接口 shell…… [ 更 4. 其他技巧 F or O : 支持更强的选择排序列的方式 多] W : 当 前 配 置 文 件 到 home 目 录 下 .toprc 配 置 把 -b : 参数可以帮你在脚本中使用 top 命令 012 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 13.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 网站排障分析常用的命令 $1 $4 $7}'|sort -nr|head -20 4. 列 出 输 出 大 于 200000byte( 约 200kb) 的 exe 整理/LinuxTone 文件以及对应文件发生次数 cat access.log |awk '($10 200000 系统连接状态篇 : awk -F. '{print $1.$2.$3.$4}' | sort | $7~/.exe/){print $7}'|sort -n|uniq -c|sort 1. 查看 TCP 连接状态 uniq -c | sort -nr |head -20 -nr|head -100 netstat -nat |awk '{print $6}'|sort|uniq -c|sort 4. 查找较多 time_wait 连接 5. 如果日志最后一列记录的是页面文件传输时 -rn netstat -n|grep TIME_WAIT|awk '{print 间,则有列出到客户端最耗时的页面 netstat -n | awk '/^tcp/ {++S[$NF]};END $5}'|sort|uniq -c|sort -rn|head -n20 cat access.log |awk '($7~/.php/){print $NF {for(a in S) print a, S[a]}' 5. 找查较多的 SYN 连接 $1 $4 $7}'|sort -nr|head -100 或 netstat -an | grep SYN | awk '{print $5}' | 6. 列出最最耗时的页面 ( 超过 60 秒的 ) 的以及 netstat -n | awk '/^tcp/ {++state[$NF]}; END awk -F: '{print $1}' | sort | uniq -c | sort -nr 对应页面发生次数 {for(key in state) print key,t,state[key]}' | more cat access.log |awk '($NF 60 $7~/. netstat -n | awk '/^tcp/ {++arr[$NF]};END 6. 根据端口列进程 php/){print $7}'|sort -n|uniq -c|sort -nr|head {for(k in arr) print k,t,arr[k]}' netstat -ntlp | grep 80 | awk '{print $7}' | -100 netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq cut -d/ -f1 7. 列出传输时间超过 30 秒的文件 -c|sort -rn 网站日志分析篇 1(Apache): cat access.log |awk '($NF 30){print $7}'|sort netstat -ant | awk '{print $NF}' | grep -v 1. 获得访问前 10 位的 ip 地址 -n|uniq -c|sort -nr|head -20 '[a-z]' | sort | uniq -c cat access.log|awk '{print $1}'|sort|uniq -c|sort 8. 统计网站流量(G) 2. 查找请求数请 20 个 IP(常用于查找攻来源): -nr|head -10 cat access.log |awk '{sum+=$10} END {print netstat -anlp|grep 80|grep tcp|awk '{print cat access.log|awk '{counts[$(11)]+=1}; END sum/1024/1024/1024}' $5}'|awk -F: '{print $1}'|sort|uniq -c|sort {for(url in counts) print counts[url], url}' 9. 统计 404 的连接 -nr|head -n20 2. 访问次数最多的文件或页面 , 取前 20 awk '($9 ~/404/)' access.log | awk '{print n e t s t a t - a n t | a w k ' / : 8 0 / cat access.log|awk '{print $11}'|sort|uniq $9,$7}' | sort {split($5,ip,:);++A[ip[1]]}END{for(i in A) print -c|sort -nr|head -20 10. 统计 http status(略) A[i],i}' |sort -rn|head -n20 3. 列出传输最大的几个 exe 文件(分析下载站的 本文有删节,完整内容见原文 : 3. 用 tcpdump 嗅探 80 端口的访问看看谁最高 时候常用) bbs.linuxtone.org/thread-5151-1-1.html tcpdump -i eth0 -tnn dst port 80 -c 1000 | cat access.log |awk '($7~/.exe/){print $10 013 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 14.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 这里所说的iptables是ipchains的后继工具,但具有更强的可扩展性。内核模块可以注册一个新的规则表 OPTIMIZE 操作等于 recreate + analyze 的组合 (table),并要求数据包流经指定的规则表。三种数据报处理功能都基于netfilter的钩子函数和IP表,都是相互 操作,所以会堵塞更新类型 SQL 语句。对于备机上 间独立的模块。 跑只读类型操作的业务,可以考虑使用此操作命令, 对于主服务器不建议使用此命令,为此备机上执行 MySQL生产环境突发故障处理手册 OPTIMIZE 语句,必须这样写 : OPTIMIZE LOCAL TABLE tablename; 文/金官丁 备注 : 这样执行将不会记录到二进制日志文件中, 从而不会复制到对其有复制关系的主机上。 1. LOAD 飙高 PROCESSLIST WHERE COMMAND ‘sleep’ AND 2. HA 切换 一般导致 MySQL 服务器 LOAD 突然飙高,可能的 TIME100;(5.1.x 系列及以上版本) 2.1 启动备机 Heartbeat 五种情况 : 若一直处在执行状态,且执行时间比较久,可以分 若要启动备机上的 Heartbeat 进程,则必须先保证 1. 全表扫描的 SQL 语句 ; 析下 SQL 语句执行计划 : 备机上的 mysqld 服务已经停止掉,然后再启动备机 2.SELECT 操作语句的执行计划走错 ; EXPLAIN SQL-statement; 上的 Heartbeat 服务,最后再启动 mysqld 服务。 3. 存在 UPDATE/DELETE 语句没有索引可选择, 若执行计划不合理,则可以根据 SQL 类型选择是 2.2 VIP 服务快速漂移 而导致堵塞其他 SQL 语句的执行 ; 否与应用负责人联系。首先,查找造成服务器 LOAD 直接关闭掉 VIP 所挂载的主服务器上的 Heartbeat 4. 存在修改表结构或 OPTIMIZE 语句执行 ; 飙高的 PID,特别是 DELETE 或 UPDATE 等会堵住其 服务 : service heartbeat stop,待切换之前的备机 VIP 5. 大数据量的导入 或 导出,尤其数据库的逻 他 SQL 语句的 PID,然后进入 MySQL 命令行工具中, 服务挂载成功,再启动被关掉机器的 Heartbeat 服务, 辑备份操作 ; 对一些 SQL 先记录下来,再适情考虑执行 : 且确保 mysqld 服务已经处于停止状态,最后再启动 6. 业务量大到超过服务器处理能力(我们大家 kill sql_pid; mysqld 服务。 都高度关注业务发展,以及公司业务特点, 1.1 统计信息更新 另外一种强制 VIP 飘移办法 : 还有与开发和运营保持良好联系,很难出现未知 单表索引统计信息查看命令 : crm_resource -M -r resource_name -H 的业务突然爆发性增长); SHOW INDEXES FROM tablename; nodename 要解决 LOAD 飙高,必须先找到造成飙高的真实 若发现其统计信息存在偏差,则可以执行 : 其中 : resource_name 可以通过命令 原因,请登陆数据库服务器后,执行命令 : ANALYZE LOCALE TABLE tablename; crm_resource -L SHOW PROCESSLIST;(适合 MySQL 各种版本) 备注 : 请加上 LOCALE 参数,从而使此语句执行时 进行强制 VIP 漂移后,还需要检查 failcount 值,命 或 不需要登记到二进制文件中。 令与设置值,如下 : SELECT * FROM INFORMATION_SCHEMA. 1.2 碎片整理和统计信息更新 crm_failcount -U nodename -r resource_name 014 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 15.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com G 4 stop slave; 服务 ; 对于没有 Heartbeat 服务的数据库服务器,则直 如果 failcount 大于 0,则进行下面的操作 : 5 SET GLOBAL sql_slave_skip_counter=1; 接启动 mysqld 服务即可。 crm_resource -r resource_name -p is_managed 6 start slave ; 5. 紧急事件处理的流程 -v false (设 置 资 源 为 非 受 控)crm_failcount -U 7 show slave statusG 1. 突发紧急事情 : nodename -r resource_name -G D (重新设置 8 检查复制是否恢复正常,若没有循环 1… 7 首先,要保持头脑清醒,心态要放平,建议先深呼 failcount 值 ) 步骤(备注 : 有些场景,也可以考虑借助脚 吸; crm_resource -H nodename -r resource_name 本循环的方式解决) 其次,仔细检查相关状态、日志等信息,并且保存 C 4.MySQL 假死 现场的状态信息,以便后续分析 ; crm_resource -r resource_name -d is_managed 4.1 假死状态判断 最后,确认解决此问题的可行方案,以及判断此方 ( 设置为受控) MySQL 假死状态一般只会响应对内存表、服务器 案是否会引入新风险,是否需要其他同事协助 ; 3. 复制中断 状态和变量的操作,而且 SHOW PROCESSLIST; 可以 2. 处理步骤复杂或命令语句多的情况,必须先 复制突然中断的可能原因 : 看到很多连接线程处于命令解析或处理的各种状态, 把相关命令,分步骤在文档中写好 ; 1. 备 机 无 法 连 接 到 主 服 务 器, 能 是 网 络 问 可 且 SQL 语句执行时间较长。此时,为校验是否真处 3. 突发紧急事情的处理,会影响到前端应用服 题,也可能是主服务器的 mysqld 已停止 ; 于 MysQL 假死状态,那么可以到库 test 中任意执行 务的事情,应先跟团队领导沟通和确认处理方法,以 2. 主键冲突 ; 创建表或更新数据的语句,若回车键后没有响应,则 及影响范围有多大,影响程度有多严重 ; 3. 主从服务器数据不一致 ; 一般可以断定 MySQL 是否已经处于假死状态。 4. 确定紧急处理过程或完毕后,需要那些应用 4. 其他原因 ; 4.2 假死状态处理 方负责人检查应用是否正常,则应该先联系相关同 为使复制继续,我们可以进行如下处理 : 若使用 Heartbeat + Dual Master 的数据库架构, 事; 1. Stop slave ; VIP 所在的数据库服务器出现假死状态,则应该直接 5. 处理完毕且业务正常之后,优先分析问题和 2 start slave; 关闭 service heartbeat stop,从而迫使 VIP 服务转移 查找是否还有隐患 ; 3 检查服务是否正常 : show slave statusG 到另外一台数据库服务器上。 6. 发邮件描述整个故障发生、影响范围和程度 若是主健冲突或数据不一致的情况,则需要额外 其 次, 据 处 理 MySQL 假 死 状 态 的 经 验, 用 根 使 、处理过程,以及补填写紧急处理的 ITIL 流程单 ; 处理 : mysqladmin uroot p shutdown 命令关闭 mysqld 7. 回复报警邮件 ; 1.stop slave; 服务也是无法处理的,最快的办法是直接 Kill 进程 : 原文 : 2 start slave; ps -ef | grep mysql | grep -v grep | awk ‘{ http://www.mysqlops.com/author/admin 3 show slave statusG 记录错误的信息,一般 print $2 }’ xargs kill -9 | 如果需要联系作者,可在新浪微博上联系 会有详细的 SQL 保存起来 然后, Heartbeat 启动 成功 之 后, 把 再启 动 mysqld @mysqlops 015 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 16.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com shift加P:按CPU资源利用率降序排列,shift加M:按内存占用资源率降序排列。我们发现ORACLE进程占用 有比较多的报表更新。 率较高。CPU几次超限飙升到90%以上,严重影响了系统性能。通过AWR报告发现,审计表更新比较频繁,当 4、连接数据库,针对审计、索引进行查证 天有比较多的报表更新。 oracle审计导致的系统性能故障 文/waring_id 昨天数据库主机接连出现几次 CPU 资源占用率过 高报警,经过一番调查最终找出问题的原因,解决了 这一故障,具体过程如下 : 发现索引失效,导致数据检索变的缓慢,SQL 语句 环境: 执行效率低,CPU 消耗大。 主机 SUSE LINUX 10 (64 位) 5、问题解决,关闭审计重建索引 ORACLE11G(64 位) 一、报警信息(故障呈现) suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :90.93, 2、利用 SAR 命令检查 IO 和传送情况 : 阀值范围为 [90-100],发生时间 11:17:01 注: suse linux 下使用 sar,需要安装 sysstat 包。 suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :92.20, 阀值范围为 [90-100],发生时间 14:46:02 suselinux 服 务 器 CPU 利 用 率 当 前 值 为 :92.54, 阀值范围为 [90-100],发生时间 15:14:01 二、分析过程(故障调查) 6、后续待优化 : 1、使用 TOP 命令查看系统资源 查证 SQL 语句,避免效率低下的语句高并发执行 shift 加 P : CPU 资源利用率降序排列 按 shift 加 引发 buffer cache 冲突而导致 CPU 资源的过度消耗。 M: 按内存占用资源率降序排列 发现每秒读入和写出的数据量比较大。 本文有删节,完整内容见原文 : 我们发现 ORACLE 进程占用率较高,CPU 几次超 3、分析 AWR 报告 http://xjsunjie.blog.51cto. 限飙升到 90% 以上,严重影响了系统性能。 通过 AWR 报告发现,审计表更新比较频繁,当天 com/999372/604144 016 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 17.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 每个整点的第10分的任务,密集的插入和更新SYS.OBJ$,容易产生这张系统表的资源争用。会造成两个实 你 可 以 只 精 通 其 中 一 个 层 面, 可 以 其 他 层 也 例之间的全局一致性读和全局资源锁。buffer busy global cache ,buffer busy wait 等待。一个数据块可以插入多 面 不 精 通, 是 每 个 层 面 都 需 要 知 道 如 何 维 护, 但 条记录,并发修改这些记录,会出现buffer busy wait 等待。 知道每个层面系统的发展趋势,把故障扼杀在萌芽阶 段。 数据库故障分析与排查 请维护人员,把维护系统的所有工作罗列出来, 成工作指导说明列表。每次维护的操作都需要记录 形 文/xiaowohe 维护日志,形成系统生命周期中的变更日志,就像人 的病历一样。 8 月 1 日周一上午系统出现无法登陆,数据库挂 4 次出现归档日志空间满的数据库故障 , 总是在数 维护日志是维护一个系统的实际操作经验和案 起的故障,经排查,现记录具体故障排查过程包括故 据库挂起后,才处理问题。 例。 障的原因和现象,以及解决方法。 我看到的最早的归档日志文件是 3、项目开发团队 故障: # ls -l 对 8 月 16 日凌晨 3 点 13 分 16 分的归档日志进 total 1028354696 1、 月 1 日, 8 归档满,数据库挂起,应用系统无法 行挖掘。 -rw-r----- 1 oracle oinstall 登陆 517235200 Jul 30 06:14 1、将归档日志文件添加到 LOGMINER 列表中 1_7428_702581932.dbf 解决方法 : 月 1 日的解决方法, 8 删除归档文件。 -rw-r----- 1 oracle oinstall EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/ 520984064 Jul 30 06:17 arch/1_8498_702581932.dbf',DBMS_ 故障原因: 1_7429_702581932.dbf LOGMNR.NEW); 分析数据库后台日志 : alert_ybzdb1.log 发现从 7 说明有维护人员删除了早期的归档文件, 以释放 EXECUTE DBMS_LOGMNR.ADD_LOGFILE ('/ arch/1_8499_702581932.dbf'); 月 6 日至 8 月 1 日开始短短 40 天时间,连续 4 次出 空间。这件事不是不会做。而是每次要出问题了才 2、 LOGMINER 指定将要使用的联机目录字典。 为 现归档目录空间满。有以下的原因 : 去做。 如果源数据库处于打开或者是可用状态,那么它可用 1、 备份软件 这是一个上线的正式系统,不要总是等系统出问 EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS Veritas Netbackup Server 安装 ybzback 服务器上 = DBMS_LOGMNR.DICT_FROM_ONLINE_ 题了,才去解决问题,客户满意度就是这样被一次次 CATALOG); Veritas Client 部 署 在 ybzdb1 和 ybzdb2 上, 装 安 故障蚕食掉的。 3、 V$LOGMNR_CONTENTS 中 查 询 有 关 已 提 交 在 路径为 : /usr/tivoli/tsm/StorageAgent 前瞻性维护,是工作中的一部分。 事务的信息 备份脚本在 /usr/tivoli/tsm/client/api/bin64 目 维护一个系统包括 : 用系统及其业务数据 , 应 REDO 是把做过的事再做一遍,UNDO 是把做过的 录下 web 服务器,应用服务器,数据库服务器,主机操作系 事。 2、 维护人员 统,SAN 网络,磁盘存储阵列,网络,所有这些层面无 每个整点的第 10 分的任务,建立 200 多张表,插 在 7 月 6 日, 月 21 日, 月 1 日, 月 15 日 连 续 7 8 8 故障地配合,形成一个整体,才能给客户提供服务。 入数据,完成业务操作,然后再删除表。但是 oracle 017 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 18.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 10G 数据库,drop 表,只是做了改名,并不是实际的物 解决 TSM 故障后,立即备份数据库。并定期检查备 default CONFIGURE ENCRYPTION FOR DATABASE OFF; # 理删除。24 小时,就是 4800 张表。 份。 default 回收站积压的垃圾表越来越多 ,SYS.OBJ$ 表无 3、明确维护人员的维护职责,监控范围。 CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default 限膨胀。 4、明确需要记录归档的业务操作,不需要记录归 CONFIGURE ARCHIVELOG DELETION POLICY TO 每 个 整 点 的 第 10 分 的 任 务, 集 的 插 入 和 更 新 密 档的操作也要明确出来。减少数据库的归档量。减 NONE; # default CONFIGURE SNAPSHOT CONTROLFILE NAME TO SYS.OBJ$, 易 产 生 这 张 系 统 表 的 资 源 争 用。 会 容 少资源争用,有效利用 RAC 集群环境。 '/oracle/app/product/10.2/dbs/snapcf_ 造成两个实例之间的全局一致性读和全局资源锁。 5、目前数据库物理备份的采用了冗余度 6 ybzdb1.f'; # default 5、查看已有的备份集 buffer busy global cache ,buffer busy wait 等待。 清理过期备份 : RMANlist backup; 一个数据块可以插入多条记录 , 并发修改这些记录, 1、在主机 ybzdb1 切换到 oracle 用户 6、查出过期的备份 会出现 buffer busy wait 等待。 #hostname ybzdb1 RMANREPORT OBSOLETE; 所以目前虽然是集群数据库,但应用系统只能用 7、删除冗余度 6 以上的备份集 #su - oracle 其中一个节点。如果两个实例全用,会产生资源争用 2、进入 rman 使用恢复目录数据库 RMANDELETE OBSOLETE REDUNDANCY 6 ; 和等待。 $rman catalog rrrrr/rrrrr@rman 8、进行交叉检查 恢复目录数据库、 目标库控制文 3、连接目标数据库 件、备份集合 三者交叉检查 占了 500G 的磁盘空间放归档,闲置一台小型机。 RMANconnect target / 检查归档 : 这种是一种资源浪费。小型机需要折旧和能源消耗, 4、查看备份配置 却没有被有效利用。 RMANCROSSCHECK ARCHIVELOG ALL; RMANshow all; 检查备份 : 4、结束LOGMNR RMAN configuration parameters are: CONFIGURE RETENTION POLICY TO REDUNDANCY RMANCROSSCHECK BACKUP ; EXECUTE DBMS_LOGMNR.END_LOGMNR; 6; 9、删除失效的归档, 备份集 解决方案: CONFIGURE BACKUP OPTIMIZATION OFF; # RMANDELETE EXPIRED ARCHIVELOG ALL; default 1、解决 TSM 软件的故障。 备份管理服务器也要 CONFIGURE DEFAULT DEVICE TYPE TO DISK; # RMANDELETE EXPIRED BACKUP; 纳入维护职责。 default 维护人员职责之一 : 数据库的物理备份管理,也是 CONFIGURE CONTROLFILE AUTOBACKUP ON; 2、 5 月 23 日 数 据 库 有 0 级 增 量 备 份 后, 后 从 其 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT 维护工作的一部分。要定期的把过期的备份文件,从 无 数 据 库 物 理 备 份, 间 归 档 也 被 删 除 断 档 了。 期 FOR DEVICE TYPE DISK TO '%F'; # default 磁带上删除。定期检查备份有效性,都是维护要做的 CONFIGURE DEVICE TYPE DISK PARALLELISM 1 失去了有效备份,系统在这条钢丝走了 3 个月,我们 BACKUP TYPE TO BACKUPSET; # default 工作。 何其幸运。( 使真的到了磁阵损坏,数据库丢失,备 CONFIGURE DATAFILE BACKUP COPIES FOR 本文有删节,完整内容见原文 : DEVICE TYPE DISK TO 1; # default 份全无的情况。也是有办法的,重新实施一次项目的 CONFIGURE ARCHIVELOG BACKUP COPIES FOR http://blog.csdn.net/xiaowohe/article/ 数据库,重新抽各省数据,一直抽到当前时间点。) DEVICE TYPE DISK TO 1; # default details/6693506 CONFIGURE MAXSETSIZE TO UNLIMITED; # 018 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 19.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 从 debug 信息分析,PC 发送了 5 个 DHCP-DISCOVER 报文后才申请到了地址。 前4个,DHCP服务器都 在 PC 上手工配置 IP 地址 1.1.1.2,可以 ping 分配了租约,但在发送 DHCP-OFFER 报文的时候发送失败了,直到PC发送了第5个 DHCP-DISCOVER报文后, 通 DHCP 服务器的 IP 地址 1.1.1.2。 DHCP服务器才成功分配了租约。 通过调试信息进行定位 在用户视图下打开 DHCP 服务器的调试信息开 案例:PC做为DHCP客户端获取地址时间较长 关 debugging dhcp server all。 DHCP 服务器上打印如下调试信息 : 文/杭州华三通信技术有限公司 server debugging dhcp server all DHCP(Dynamic Host Configuration Protocol,动 检查 DHCP 服务器配置 *May 27 13:02:19:494 2007 server DHCPS/7/ DHCPS_DEBUG_COMMON: DHCPServer: Receive 态主机配置协议)采用客户 / 服务 器通信模式。由 DHCP 服务器上的配置如下,不存在问题。 DHCPDISCOVER from 00e0-e100-0201. *May 27 13:02:19:494 2007 server DHCPS/7/ 客户端先向服务器发送请求配置信息的报文(包括分 # DHCPS_DEBUG_PACKET: Rx, interface dhcp server ip-pool 1 Ethernet1/0 配的 IP 地址、 子网掩码、缺省网关等参数) 服务器 , network 1.1.0.0 mask 255.255.0.0 Message type: request 根据策略返回携带相应配置信息的报文, 实现 IP 以 # Hardware type: 1, Hardware address length: 6 …… Hops: 0, Transaction ID: 16777216 地址等信息的动态配置。请求报文和回应报文都采 Seconds: 0, Broadcast flag: 0 # 用 UDP 进行封装。 interface Ethernet1/0 port link-mode Client IP address: 0.0.0.0 Your IP route address: 0.0.0.0 1. 组网环境 Server IP address: 0.0.0.0 Relay agent IP ip address 1.1.1.1 255.255.255.0 address: 0.0.0.0 # Client hardware address: 00e0-e100-0201 …… Server host naame: Not Configured, Boot file # name: Not Configured dhcp enable DHCP message type: DHCP Discover # *May 27 13:02:19:494 2007 server DHCPS/7/ 检查 DHCP 服务器上接口 Ethernet1/0 的状态 DHCPS_DEBUG_COMMON: DHCPServer: Assign Free Lease from global pool. 与 DHCP 客户端相连的接口 Ethernet1/0 处于 …… up 状态。 *May 27 13:02:20:110 2007 server DHCPS/7/ DHCPS_DEBUG_PACKET: Tx, interface [server] display ip interface brief Ethernet1/0 Ethernet 1/0 Message type: reply 图 案例组网图 *down: administratively down Hardware type: 1, Hardware address length: 6 (s): spoofing Hops: 0, Transaction ID: 16777216 2. 故障现象 Seconds: 0, Broadcast flag: 0 Interface Client IP address: 0.0.0.0 Your IP 以 PC 做为 DHCP 客户端,通过 DHCP 申请地 Physical Protocol IP Address address: 1.1.0.2 Ethernet1/0 址,经过 1 分钟左右才能获取地址。 Server IP address: 0.0.0.0 Relay agent IP up up 1.1.1.1 address: 0.0.0.0 3. 处理过程 检查物理连接是否通畅 019 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 20.
    专题 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Special 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 从 debug 信息分析,PC 发送了 5 个 DHCP- Client hardware address: 00e0-e100-0201 Server host naame: Not Configured, Boot file name: Not Configured DISCOVER 报 文 后 才 申 请 到 了 地 址。 前 4 个, DHCP message type: DHCP Offer DHCP 服务器都分配了租约,但在发送 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 . 报文的时候发送失 败了,直到 PC 发送了第 5 个 *May 27 13:02:20:110 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Sending DHCPOFFER failed! …… DHCP-DISCOVER 报 文 后,DHCP 服 务 器 才 成 功 分 *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Receive DHCPDISCOVER from 配了租约。比较第 5 个 DHCP-DISCOVER 报文与 00e0-e100-0201. *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Rx, interface Ethernet1/0 前 4 个的不同,发现报文的 Broadcast flag 不一样, Message type: request Hardware type: 1, Hardware address length: 6 前 4 个为 0,即要求 DHCP 服务器单播发送回应报 Hops: 0, Transaction ID: 266602672 文, 5 个为 1, 第 DHCP 服务器广播发送回应报文。 Seconds: 0, Broadcast flag: 1 Client IP address: 0.0.0.0 Your IP address: 0.0.0.0 DHCP 服务器在单播回应报文的时候发送失败, Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client hardware address: 00e0-e100-0201 原因是 DHCP 服务器 Ethernet1/0 接口配置的 IP Server host naame: Not Configured, Boot file name: Not Configured 地址为 1.1.1.1/24,没有到 1.1.0.0/16 网段的 DHCP message type: DHCP Discover *May 27 13:09:54:228 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DHCPServer: Assign Free Lease from 路由,导致单播到 1.1.0.2 失败。 global pool. …… 将地址池的可分配网段修改为与接口一致,则可 *May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_PACKET: Tx, interface Ethernet1/0 以解决上述问题 : Message type: reply Hardware type: 1, Hardware address length: 6 # Hops: 0, Transaction ID: 266602672 dhcp server ip-pool 1 Seconds: 0, Broadcast flag: 1 network 1.1.1.0 mask 255.255.255.0 Client IP address: 0.0.0.0 Your IP address: 1.1.0.2 # Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 本文节选自 《DHCP 故障处理》 Client hardware address: 00e0-e100-0201 Server host naame: Not Configured, Boot file name: Not Configured 原文下载地址 : DHCP message type: DHCP Offer *May 27 13:09:54:816 2007 server DHCPS/7/DHCPS_DEBUG_COMMON: DhcpServer: Send DHCPOFFER to 00e0- http://down.51cto.com/data/231602 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/0 Message type: request 本书讲解如何在一个计算机网 Hardware type: 1, Hardware address length: 6 Hops: 0, Transaction ID: 266602672 络中用有限的资源部署计算机, Seconds: 0, Broadcast flag: 1 以及安装自由软件让计算机象 Client IP address: 0.0.0.0 Your IP address: 0.0.0.0 Server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 一台服务器那样一起运行。 (代码为节选) 020 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 21.
    技巧 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tips 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com Linux管理员常用网络资源收集 密码 #4 文/tuhaihe tr -cd ‘[:alnum:]‘ /dev/urandom | fold -w30 | head -n1 本文收集 Linux 管理员常用网络资源。 http://www.md5.cz/ #5 Corntab 升级源列表 strings /dev/urandom | grep -o ‘[[:alnum:]]’ | http://www.corntab.com/ Ubuntu 升 级 源 生 成 器 @ http://repogen. head -n 30 | tr -d ‘n’ echo ; Corntab 是一款简易的网络 crontab 端,无需安装, simplylinux.ch/index.php,大家根据选项选择国家, 通过过滤字符命令,输出随机密码 轻 松 创 建 crontab 语 句。 不 用 担 心 格 式 问 题。 使 用 Ubuntu 版本等等就可以生成升级源列表,然后用生成 #6 “crontab -e”命令进入后复制 crontab 即可。 的列表替代原系统文件即可,这个确实方便!! /dev/urandom tr -dc _A-Z-a-z-0-9 | 我们知道“crontab 命令提交、编辑、列出或除去 类似的 Debian Sources List Generator head -c6 cron 作业。一个 cron 作业是一个命令,其运行是由 http://debgen.simplylinux.ch/ 这个命令比起来比较简单了 cron 守护进程在规则的调度间隔执行” 同 时, 们 常 用 的 还 有 Ginspect, 生 成 INSPECT 我 #7 正则表达式 和 Tcpdump 过滤表达式。 dd if=/dev/urandom bs=1 count=32 2/dev/ http://public.kvalley.com/regex/regex.asp http://decock.org/ginspect/ null | base64 -w 0 | rev | cut -b 2- | rev 该网站允许你写入字符并简单测试正则表达式是 附:命令行制作随机密码 #8 否运行。 #1 /dev/urandom tr -dc ’12345!@#$%qwertQ 类似的网站有 : date +%s | sha256sum | base64 | head -c 32 WERTasdfgASDFGzxcvbZXCVB’ | head -c8; echo “” http://regexpal.com/ ; echo #9 http://rubular.com/ 使用 SHA 来哈希日期,输出头 32 个字节。 randpw(){ /dev/urandom tr -dc _A-Z- http://regex.larsolavtorvik.com/ #2 a-z-0-9 | head -c${1:-16};echo;} Ascii制作器 /dev/urandom tr -dc _A-Z-a-z-0-9 | 使 用 randpw 随 时 产 生 随 机 密 码, 以 把 它 放 到 可 http://www.network-science.de/ascii/ head -c${1:-32};echo; ~/.bashrc 文件里面。 http://www.kammerl.de/ascii/AsciiSignature. 使用内嵌的 /dev/urandom,只输出字符,结果取 #10 php 头 32 个。 date | md5sum http://www.glassgiant.com/ascii/ #3 本文有删节,完整内容见原文 : 密码生成 openssl rand -base64 32 http://www.bentutu.com/2011/06/collection- http://www.onlinepasswordgenerator.com/ 使用系统自带的 openssl 的随机特点来产生随机 sites-help-linu-admin/ 021 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 22.
    工具 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tools 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com TestDisk,也是Linux下一款强力文件恢复软件,该应用可帮你从删除的分区、FAT32 boot扇区恢复数据。同 #3,TestDisk 时,也可以修复MFT 镜像、FAT 分区表,恢复从FAT/exFAT/NTFS/ext2/ext3/ext4等文件系统格式删除的数据 主 页 :t t p : / / w w w . c g s e c u r i t y . o r g / w i k i / h 文件。 TestDisk 五款救急的Linux文件恢复软件 文/Umar Anjum 译/笨兔兔 文件有备份,啥子也不愁!文件无备份,啥子也白 Ddrescue 是一款优秀的文件恢复程序。当出现读 搭。但是,面对突如其来的悲剧,文件恢复软件来帮 错误时,该应用可复制数据从一个文件到另一个文 忙时可以尽量最小化减小损失。下面 Linux 用户需 件。 知的 5 款文件恢复软件 : #2,Safecopy #1,Ddrescue 主页 : http://safecopy.sourceforge.net/ 主页 : http://www.gnu.org/software/ddrescue/ ddrescue.html TestDisk,也是 Linux 下一款强力文件恢复软件,该 应用可帮你从删除的分区、FAT32 boot 扇区恢复数 据。同时,也可以修复 MFT 镜像、FAT 分区表,恢复 从 FAT/exFAT/NTFS/ext2/ext3/ext4 等文件系统格 式删除的数据文件。 #4,PhotoRec 主 页 :t t p : / / w w w . c g s e c u r i t y . o r g / w i k i / h PhotoRec 该软件最适合恢复图片和多媒体文件,同样可从 Safecopy 可帮助你从 CD、软盘等存储器中提取文 外部存储介质回复文件数据。 件、数据。 022 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 23.
    工具 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tools 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com #5,Mondo Rescue 主页 : http://www.mondorescue.org/ 答读者问 读者 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 NOTRACK iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT 这里的第二条规则,既然是 WEB 服务器,为什么是 FORWARD 链创建规则,而不是在 INPUT 链呢? 作者 守住每一天 回答 : 如果在 PREROUTING 链中创建规则,就需要在 FORWARD 中进行过滤。 该应用遵循 GPL 协议,支持从外部存储介质恢复 数 据, 被 打 包 在 多 个 发 行 版 本 如 RedHat, RHEL, 也 SuSE, SLES, Mandriva, Debian 和 Gentoo 等发行版 本中。 电子杂志推荐: 电子杂志推荐: 恢复毕竟是恢复,提前做好备份才是王道! 《Windows 运维月刊》 《开发月刊》 英文 : 2011 年 8 月 目录 2011 年 9 月 目录 5 Must Have File Recovery Tools For Linux 51CTO 专访微软 MVP 张诚 编程排行 Billboard Users 本期专题 : 验证方法的灵 IIS 专 题 报 道 《2011 年 暑 期 关 原文 : 活应用与设置技巧 于 Java 的那些事》 http://os.51cto.com/art/201108/282953.htm 023 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 24.
    工具 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tools 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com cobbler check 运维自动化之Cobbler系统安装详解 执行完后出现一段信息, 这段信息大意是 : 1, 辑 /etc/cobbler/settings 文 件, 到 server 编 找 文/蚊子 选 项, 改 为 适 当 的 ip 地 址, 实 例 配 置 ip 为 : 修 本 192.168.10.1 SA 们现在都知道运维自动化的重要性,运维自动 cobbler的安装部署配置 2, 辑 /etc/cobbler/settings 文 件, 到 next_ 编 找 化安装方面,早期一般使用人工配置 pxe+dhcp+tftp cobbler安装环境准备 server 选项,修改为适当的 ip 地址,本实例配置 ip 为 : 配 合 kickstart, 在 开 源 工 具 就 多 了, cobbler, 现 如 对于 centos 本身源 ,可根据自己所在地选择离 192.168.10.1 OpenQRM 和 Spacewalk。本文重点介绍 Cobbler。 自 己 近 的 镜 像 源, 如 mirrors.163.com 或 mirrors. 比 3,SELinux 的设置。如果上面已经关闭了 SELinux Cobbler介绍 sohu.com 就不用管了 Cobbler 是 一 个 快 速 网 络 安 装 linux 的 服 务, 且 而 1, 安装 epel 4, 行 cobbler get-loaders, 统 将 自 动 下 载 执 系 在经过调整也可以支持网络安装 windows。Cobbler rpm -Uvh 'http://download.fedoraproject. org/pub/epel/6/i386/epel-release-6-5. loader 程序,完成提示 4 的修复工作。 支持命令行管理,web 界面管理,还提供了 API 接口, noarch.rpm' 5, 辑 /etc/xinetd.d/tftp 文 件, 文 件 中 的 编 将 可以方便二次开发使用。 2, 安装 dhcp 服务 disable 字段的配置由 yes 改为 no 和 Kickstart 不同的是,使用 cobbler 不会因为在局 yum -y install dhcp 3, 其他服务的安装 6, 辑 /etc/xinetd.d/rsync 文 件, 文 件 中 的 编 将 域网中启动了 dhcp 而导致有些机器因为默认从 pxe 额 外 需 要 的 服 务 还 有 tftp,rsync,xinetd,httpd。 disable 字段的配置由 yes 改为 no 启动在重启服务器后加载 tftp 内容导致启动终止。 所以如果安装系统的时候如果这几个包没装上,请手 7, iptables 中将 69, 25151 端口打开。如果 在 80, 常用架构如下图 : 动安装。 仅仅只是在内部环境中使用,建议直接将防火墙关掉 4,关闭 selinux 8, 示 说 debmirror 没 安 装。 如 果 不 是 安 装 提 关闭后最好重启一下, selinux 的设置生效 让 debian 之类的系统,此提示可以忽略。 cobbler安装配置 9, 改 cobbler 用 户 的 默 认 密 码, 以 使 用 如 修 可 1, cobbler 安装 下 命 令 生 成 密 码, 使 用 生 成 后 的 密 码 替 换 /etc/ 并 yum -y install cobbler cobbler/settings 中的密码。生成密码命令 : 2, cobbler 的配置 openssl passwd -1 -salt 'random-phrase- 启动 cobbler here' 'your-password-here' 其中 “random-phrase-here” 为干扰码 # /etc/init.d/cobblerd start 启动 httpd 服务 所有提示全部 fix 之后,执行 # /etc/init.d/httpd start /etc/init.d/cobblerd restart 检查配置, 执行 cobbler的使用 024 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 25.
    工具 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tools 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 配置dhcp服务 task started: 2011-08-11_170706_sync 首先修改 cobbler 配置, cobbler 来管理 dhcp 服 让 task started (id=Sync, time=Thu Aug 11 17:07:06 2011) 务,编辑文件 /etc/cobbler/settings running pre-sync triggers cleaning trees manage_dhcp: 1 removing: /var/www/cobbler/images/centos-6.0-i386 接下来修改 /etc/cobbler/dhcp.template,此文件 removing: /var/lib/tftpboot/pxelinux.cfg/default 是 cobbler 管理 dhcp 的模板 removing: /var/lib/tftpboot/grub/images removing: /var/lib/tftpboot/grub/grub-x86.efi 同步cobbler配置 removing: /var/lib/tftpboot/grub/efidefault 执行 removing: /var/lib/tftpboot/grub/grub-x86_64.efi removing: /var/lib/tftpboot/images/centos-6.0-i386 # cobbler sync removing: /var/lib/tftpboot/s390x/profile_list 会看到如一段提示, 如右侧。 copying bootloaders cobbler 会自动进行初始化工作,移除已经存在的 trying hardlink /var/lib/cobbler/loaders/grub-x86.efi- /var/lib/tftpboot/grub/grub-x86.efi trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi- /var/lib/tftpboot/grub/ 启动项,然后根据模板拷贝 loader 文件。之后再生成 grub-x86_64.efi copying distros pxe 的配置文件,生成 dhcp 的配置文件,最后再重启 copying files for distro: centos-6.0-i386 dhcp 服务。 trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/vmlinuz - /var/ lib/tftpboot/images/centos-6.0-i386/vmlinuz 至此,就可以使用虚拟机来测试 cobbler 安装了。 trying hardlink /var/www/cobbler/ks_mirror/centos-6.0-i386/images/pxeboot/initrd.img - / Cobbler测试安装 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/ 在启动的时候选择 PXE 的模式。 www/cobbler/images/centos-6.0-i386/vmlinuz 然后就能看到图示内容。虚拟机通过 dhcp 获得 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 了 122 段的 ip,然后通过 tftp 获得到 pxe 的启动文件。 copying images generating PXE configuration files rendering DHCP files generating /etc/dhcp/dhcpd.conf cleaning link caches generating PXE menu structure running post-sync triggers running python triggers from /var/lib/cobbler/triggers/sync/post/* running python trigger cobbler.modules.sync_post_restart_services running: dhcpd -t -q received on stdout: received on stderr: running: /etc/rc.d/init.d/dhcpd restart received on stdout: Shutting down dhcpd: [ OK ] Starting dhcpd: [ OK ] (注 : 代码为节选) 025 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 26.
    工具 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Tools 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 安装好的系统如下图所示。 # koan --server=192.168.10.1 --profile=centos-6.0-i386 --replace- self - looking for Cobbler at 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. 以上所有内容虽然是在 kvm 虚拟机上测试的,但 img downloading kernel vmlinuz to /boot/ 完全可以直接使用于生产环境中,不会给现有环境带 Linux系统重装测试 vmlinuz 来任何影响。唯一需要做的就是规划好现有网络。 url=http://192.168.10.1/cobbler/images/ 1,先确定当前 linux 系统中已经安装了 koan 软件。 centos-6.0-i386/vmlinuz 对于很多人担心的生成环境开启 DHCP 服务问题, 对于 koan 的安装可以放到 ks 文件中在安装系统的 - reading URL: http://192.168.10.1/ 我认为不会对现有生产环境产生任何影响,理由有 cobbler/images/centos-6.0-i386/vmlinuz 过程中完成安装操作。执行如下命令检查 - ['/sbin/grubby', '--add-kernel', 二: '/boot/vmlinuz', '--initrd', '/ # rpm -qa|grep koan 1, 没有人会在装好系统后让网卡使用 dhcp 模式, boot/initrd.img', '--args', koan-2.0.11-2.el6.noarch 'ks=http://192.168.10.1/cblr/ 通常都是为网卡配置静态 ip 2, 了 koan 软 件 后 可 以 执 行 如 下 操 作, 看 有 查 svc/op/ks/profile/centos-6.0-i386 2, 从测试过程中看到,就算是服务器默认设置成 cobbler 上的系统版本列表 ksdevice=link kssendmac lang= text ', '--copy-default', '--make-default', 了通过 pxe 启动,而且也顺利的通过 pxe 启动了,但 # koan --server=192.168.10.1 '--title=kick1313675750'] --list=profiles 之后会收到 cobbler 的引导菜单。如果默认没有任何 - reboot to apply changes - looking for Cobbler at # reboot 选择的话, 秒后会使用 local 方式加载, 20 也就是启 http://192.168.10.1/cobbler_api centos-6.0-i386 动硬盘上的系统。 centos-6.0-i386-kvm centos6-vm 红色部分是手工输入的,从其他部分信息可以看 综上所述,cobbler 还是很安全的。 centos-6.0-x86_64 到,koan 帮我们做了很多本该人工操作的内容。 本文有删减,原文 : 这里我们选择 centos-6.0-i386 来重装。可以执 接下来看下重启。 http://os.51cto.com/art/201109/288604.htm 行如下命令。 026 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 27.
    脚本 杂志订阅 : http://os.51cto.com/art/201011/233915.htm Scripts 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 用SHELL脚本来防止SSH和vsftpd暴力破解 果下次排查的某 IP 次数又大于 100, 不在我们的黑名单, 首先检查它在 如果在的话就无视过去 ; 如果不 文/抚琴煮酒 在,就继续添加进 /etc/hosts.deny 文件。 我的 /etc/crontab 文件最后一行为 * */1 * * * root sh /root/hosts_deny.sh 我的一台公网服务器,由于网站采取的是双备份 下: 即每隔 1 小时就重复执行一次这个脚本,这里也 策略,所以开放了 vsftpd 的 21 端口,近来发现许多人 有一个情况要说明下,/var/log/secure 是每隔一个 在尝试暴力破解 vsftpd 和 ssh,我随便看了看 /var/ #! /bin/bash cat /var/log/secure|awk '/Failed/{print 星期轮询一次的,所以我们这里可以根据服务器的具 log/secure 日志, 118.33.110.52=2834 显示如下 : $(NF-3)}'|sort|uniq -c|awk '{print 体情况来配置多少时间执行一次此脚本,暴力破解频 119.145.254.77=37 $2=$1}' /root/black.txt 121.254.179.199=226 DEFINE=100 繁的机器可适当缩小这个周期。 121.88.250.243=35 for i in `cat /root/black.txt` 我的公网机器运行脚本一段时间后,/etc/hosts. 200.29.110.104=168 do 202.78.173.199=250 IP=`echo $i |awk -F= '{print $1}'` deny 文件如下 : 222.221.2.210=373 NUM=`echo $i|awk -F= '{print $2}'` if [ $NUM -gt $DEFINE ]; 这里面除了 119.145.254.77 和 121.88.250.243 then sshd:119.145.254.77 grep $IP /etc/hosts.deny /dev/null vsftpd:119.145.254.77 是正常的外,其它的基本都是恶意 IP。 sshd:222.221.2.210 if [ $? -gt 0 ]; 由 于 我 的 服 务 器 是 置 于 LVS 集 群 后 面, 以 我 所 then vsftpd:222.221.2.210 echo sshd:$IP /etc/hosts.deny sshd:118.218.136.25 原 来 想 用 iptables 的 recent 模 块 解 决 这 个 问 题 的 方 vsftpd:118.218.136.25 echo vsftpd:$IP /etc/hosts.deny 法估计是行不通的。而且,服务器的系统安装的是 fi sshd:118.33.110.52 fi vsftpd:118.33.110.52 CentOS 5.5 x86_64,iptables 还暂时不支持此模块, sshd:123.196.113.11 done 报错如下 : vsftpd:123.196.113.11 sshd:14.140.172.74 iptables: Unknown error vsftpd:14.140.172.74 18446744073709551615 脚本思路如下 : sshd:200.29.110.104 iptables: Unknown error vsftpd:200.29.110.104 18446744073709551615 由 于 /var/log/secure 是 以 星 期 为 轮 询 的, 以 所 sshd:202.102.89.81 而由于机器已经在跑重要的业务, 我又不想去升 我们每次可以查看这个文件,利用 SHELL 脚本统计 vsftpd:202.102.89.81 级内核,免得影响正常的网站运营,所以 iptables 的 sshd:202.78.173.199 出其中访问失败比较频繁的 IP,并定义一个阀值为 vsftpd:202.78.173.199 想法暂时告一段落 ; 后来我又想到用 HostsDeny 的 100,如果大于 100 的话就将其放进 /etc/hosts.deny 方法来解决这个问题,感觉这个方法还是比较繁琐, 文件,阻止其继续访问 vsftpd 和 ssh; 然后将其写进 原文 : 还不如自己手动写脚本来解决这个麻烦,脚本内容如 crontab 计划列表里,每隔一段时间进行一次排查,如 http://os.51cto.com/art/201109/290306.htm 027 51CTO Linux 频道 : http://os.51cto.com/linux/
  • 28.
    招募启事 往期回顾 下期预告 《Linux 运维趋势》的建设需要您的加入! 2010.9, 期, 运维自动化 000 下期主题为 : 您可以通过如下方式参与我们杂志的建 2010.10, 期, 监控与报警 001 服务器调优,敬请期待! 设: 2010.11, 期, 可用性 002 本刊为月刊,预定每月发布日期为 : 1、推荐文章 2010.12, 期, 运维与开发 003 每个月的第二个星期五 无论是您在互联网上看到的好文章,还是 2011.01, 期, 瓶颈分析 004 您可以通过如下方式检查新刊发布 : 您自己总结 / 整理的资料 ; 无论是英文还是中 2011.02, 期, 内网开发环境 005 1、电子邮件订阅 : 文; 无论是入门的还是高端的,都欢迎推荐! 2011.03,006 期, 备份 os.51cto.com/art/201011/233915.htm 您可以直接在技术圈中分享 : 2011.04, 期, 迁移 007 2、RSS 订阅 : http://g.51cto.com/linuxops 2011.05, 期, 双机操作 008 www.51cto.com/php/rss.php?typeid=777 2、投稿 2011.06, 期, Puppet 009 如果您愿意与大家分享您技术经验的热 2011.07,010 期, 日志分析 诚,那么欢迎您的投稿!原创或译文均可,稿 2011.08.011 期, iptables 《Linux 运维趋势》是由 51CTO 系统频道策 件在 51CTO 首发可领取稿酬 :) 更多汇总见《Linux 运维趋势》专题 划、 对 Linux/Unix 系 统 运 维 人 员 的 一 份 电 针 投稿信箱 : yangsai@51cto.com 子杂志,内容从基础的技巧心得、实际操作案 3、推广与意见 例到中、高端的运维技术趋势与理念等均有覆 如果您喜欢我们的杂志,认为这本杂志对 盖。 于您的工作有所帮助,请向您的 Linux 好友、同 《Linux 运维趋势》是开放的非盈利性电子 事们推荐它! 杂志,其中所有内容均收集整理自国内外互联 如果您觉得这份杂志还有什么地方需要改 网(包含 51CTO 系统频道本身的内容)。对于 进或补充,也希望您能够提出您的宝贵意见! 来自国内的内容,编辑都会事先征求原作者的 反馈可至《Linux 运维趋势》新浪微群 : 制作团队 许可(八卦,趣闻 数字栏目例外)。如果您认 http://q.weibo.com/121303 为本杂志的内容侵犯到了您的版权,可发信至 本期责编 : 李晶 或在新浪微博 yangsai@51cto.com 进行投诉。 封面制作 : 魏峰 @51CTO 系统频道 以及热心投稿、帮助审稿的热心网友们