Linux运维趋势_第13期_服务器优化
002 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 杂志订阅 : http://os.51cto.com/art/201011/233915.htm 51CTO 系统频道 :http://os.51cto.com 目录 Index 目录 人物·People 003 Limoncelli的系统管理员团队管理32问 交流·Interact 005 Quora使用到的技术 八卦·News 007 红帽收购Gluster Nginx走向商业化 专题·Special 009 Linux 性能及调优指南:了解Linux性能指标 011 小规模低性能低流量网站优化实践 013 详解服务器内存带宽计算和使用情况测量 015 http长连接200万尝试及调优 017 MySQL数据库的优化:单机优化 019 MySQL写入优化 技巧·工具·脚本·DBA 021 应用SELinux中的目标策略限制进程运行 023 MySQL从库集群方案之HAProxy篇 025 Linux上获取本机ip的各种perl写法 027 拼装的艺术:vim之IDE进化实录 出版方 :51CTO 系统频道(北京无忧创想信息技术有限公司) 杂志主编 :杨赛 联系方法 :yangsai@51cto.com 010-68476606(分机 8035) 出版日期 :2011 年 10 月 14 日 每月第 2 个星期五出版 订阅 :http://os.51cto.com/art/201011/233915.htm 003 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 杂志订阅 : http://os.51cto.com/art/201011/233915.htm 51CTO 系统频道 :http://os.51cto.com 人物 People 自测宝典:Limoncelli的系统管理员团队管理32问 的风险:忽略重要请求方面的问题、来自用户的的每个请求都可能打断正 常处理流程的问题、对技术团队的工作内容不了解而无法实施管理的问题、 总体业务趋势无从把握的问题、团队内部成员间不能高效承接任务的问题。 从根本上解决问题乍看起来似乎涉及大量工作内容,但置之不理会必然 会带来更多的麻烦。 Joel Spolsky所创立的“Joel测试:改进编码的十二步法”堪称杰作,其 以十二个问题为引,用看似漫不经心、草率粗略的测试精确评估出了软件团 队的实际工作能力。而我则希望在本文中向大家展示自己为系统管理员所 打造的另一套测试。这里共有32个只需以是或否作答问题。与十二步法 类似,我的测试也相当漫不经心、草率粗略。 这套测试应该会简化对团队进行基本 评价的实施流程。这对团队管理者、企业 领导及团队成员都非常实用。这同样是 一套对于求职者极有帮助的方法:千万别 误上了贼船,通过这一系列问题事先考量 好新雇主的业务水平。最终得分并不重要,真正重要的是应对的态度:不愿 或表示无力改变现状的心态才最最危险、最最需要警惕。 以星号(*)标记的项目是最根本性的内容,它们是我书中不可或缺的基 础思想所在。其它项目当然也不能说不重要,只是对于某些规模较小的企 业来说也许不太适用。 以下就是Limoncelli的测试:有助于提高系统管理员团队工作效率的32 个问题。你准备好答题了吗? 文/Tom Limoncelli 译/核子可乐 “部署一套请求跟踪系统是比较常见、没啥技 术含量的基本做法。” Tom Limoncelli是就职Google的一位系统管理员,运维界知名的系统管 理员,作者与演讲者。他从1987年开始从事系统运维与网络工程师的工作, 在全世界多个有关系统运维与网络安全的大会上进行演讲。2000年之前, Tom一直在AT“ /tmp/rep.txt mysql -urepdb63 -pmylqs9eyex7s -e “show full processlist;“ / tmp/processlist.txt mysql -urepdb63 -pmylqs9eyex7s -e “show slave status\G;“ / tmp/rep.txt iostat=`grep “Slave_IO_Running“ /tmp/rep.txt |awk {print $2} ` sqlstat=`grep “Slave_SQL_Running“ /tmp/rep.txt |awk {print $2} ` result=$(cat /tmp/processlist.txt|wc -l) # echo iostat:$iostat and sqlstat:$sqlstat # if slave_IO_Running and Slave_sql_Running ok,then return 200 code if [ “$result“ -lt “20“ ] then # mysql is fine, return http 200 /bin/echo -e “HTTP/1.1 200 OK\r\n“ else # mysql is down, return http 503 /bin/echo -e “HTTP/1.1 503 Service Unavailable\r\n“ fi 注意:在mysql slave另行建立一个具有process和slave_client权限的 账号。 本文有删节,完整内容见原文: http://os.51cto.com/art/201109/293493.htm 025 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 杂志订阅 : http://os.51cto.com/art/201011/233915.htm 51CTO 系统频道 :http://os.51cto.com 脚本 Scripts Linux上获取本机ip的各种perl写法 大家讨论使用Gearman做分布式处理时,各机需要注册一个独立的job 作为信息反馈,但是为了方便,Gearman::Worker脚本register_function代 码又要通用,于是想到了使用各自的ip地址作为job命名~ 那么怎么在worker脚本里获取本机ip作为func呢? 第一种办法,最简单的,调用shell: $ip = `ifconfig eth0|grep -oE ([0-9]{1,3}\.?){4} |head -n 1`; 注:这里输入是固定的,所以简单的[0-9]{1,3}了,如果是在web程序 等地方验证ip,需要更严谨! 或者 $ip = `ifconfig eth0|awk -F: /inet addr/{split($2,a,“ “);print a[1];exit} `; 好吧,这样显得太不perl了,而且频繁的调用外部shell不太好,第二种: open FH,“ifconfig eth0|“; while(){ last unless /inet addr:((\d{1,3}\.?){4})/; print $1; } 看起来稍微perl了一些,虽然实质跟上面的调用shell和grep法是一样 的。 第三种,更perl一点,纯粹读文件: open FH, ){ next unless /IPADDR\s*=\s*(\S+)/; print $1; } 进一步的,如果不一定rh系,还要去读/etc/issue,确定网络配置文件 到底是/etc/sysconfig/network-script/ifcfg-eth0还是/etc/network/ interfaces还是其他,然后根据不同发行版写不同的处理方法…… 好吧,大家来充分体会CPAN的魅力,去search一下,找到一把 Sys::HostIP、Sys::HostAddr、Net::Inetface等模块。第四种: use Sys::HostAddr; my $interface = Sys::HostAddr-new(ipv = 4 , interface = eth0 ); print $interface-main_ip; 不过进去看看pm文件,汗,这几个模块都是调用ifconfig命令,不过是根 据发行版的不同进行封装而已。 还有办法么?还有,看第五种: perl -MPOSIX -MSocket -e my $host = (uname)[1];print inet_ ntoa(scalar gethostbyname($host)) ; 不过有童鞋说了,这个可能因为hostname的原因,导致获取的都是 127.0.0.1…… 那么最后还有一招。通过strace ifconfig命令可以看到,linux实质是通 过ioctl命令完成的网络接口ip获取。那么,我们也用ioctl就是了! # !/usr/bin/perl use strict; use warnings; 文/三斗室 026 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 杂志订阅 : http://os.51cto.com/art/201011/233915.htm 51CTO 系统频道 :http://os.51cto.com 脚本 Scripts use Socket; require sys/ioctl.ph ; sub get_ip_address($) { my $pack = pack(“a*“, shift); my $socket; socket($socket, AF_INET, SOCK_DGRAM, 0); ioctl($socket, SIOCGIFADDR(), $pack); return inet_ntoa(substr($pack,20,4)); }; print get_ip_address(“eth0“); 这样的好处,就是只调用了核心模块,在分发脚本时,不用连带安装其他 模块。 注:这个其实是根据网上有的一个py的脚本修改的,py版如下: # !/usr/bin/python import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack( 256s , ifname[:15]) )[20:24]) print get_ip_address( eth0 ) 原文:http://chenlinux.com/2011/09/20/get-ip-address-by-perl- on-linux.html 【特别推荐】 51CTO专项调研 Linux桌面发行版生存状况 · 65.9%的Linux桌面用户最初从技术网站和学校了解Linux,另 有27.8%由口口相传得知Linux。可见,Linux相关的推广目前集中 在技术网站与高校,在中小学以及公共领域的推广力度相对较弱 · 62.6%的Linux桌面用户同时也在从事Linux相关的工作,其中 又以Linux运维为主 · Ubuntu是最受欢迎的Linux桌面发行版,有62.1%的受访者正 在使用;50%的Linux用户曾经用过或正在使用1种以上的发行版 · 50%的受访者对目前Linux平台上的软件支持情况表示不满意, 说明软件支持仍是Linux桌面普及的瓶颈 · 28%的Linux用户已购买智能手机、平板等移动设备,50%表示 关注。移动终端的发展对Linux桌面也已经产生冲击 ——更多调研结果,请查阅《51CTO专项调研:Linux桌面发行版 生存状况》 报告下载地址(51CTO下载频道): http://down.51cto.com/data/254493 报告下载地址(微盘): http://vdisk.weibo.com/s/FCTk 报告在线阅读(SlideShare): http://www.slideshare.net/51CTO/51cto-linuxfinal 027 《Linux 运维趋势》投稿信箱 : yangsai@51cto.com 杂志订阅 : http://os.51cto.com/art/201011/233915.htm 51CTO 系统频道 :http://os.51cto.com 工具 Tools 拼装的艺术:vim之IDE进化实录 vim 有一套自己的脚本语言,通过这种脚本语言可以实现与 vim 交互 的,达到功能扩展的目的。一组 vim 脚本就是一个 vim 插件,vim 的很 多功能都是通过其插件实现,在官网上有丰富的插件资源,任何你想得到的 功能,如果 vim 无法直接支持,那一般都有对应的插件为你服务,有需求时 可以去逛逛。 vim 插件目前分为两类:*.vim 和*.vba。前者是传统格式的插件,实 际上就是一个文本文件,通常 someplugin.vim (插件脚本)与someplugin. txt(插件帮助文件)并存在一个打包文件中,解包后将 someplugin.vim 拷 贝到~/.vim/plugin/目录,someplugin.txt 拷贝到~/.vim/doc/目录即 可完成安装,重启 vim 后刚安装的插件就已经生效,但帮助文件需执行 helptags ~/.vim/doc/才能生效。传统格式插件需要解包和两次拷贝才能 完成安装,相对较繁琐,所以后来又出现了*.vba 格式插件,安装更便捷, 只需在shell 中依次执行如下命令即可: vim someplugin.vba :so % :q 有时间,建议看看它们的帮助文档(:h someplugin)。 [-多文档编辑-] 一个 EXCEL 文档可以有多个 SHEET,你可以在不同 SHEET 间来回切 换,同样,编程时也需要类似功能,即,同时打开多个文件,可以自由自在地 在不同代码文件间游历。这种需求,vim 是通过 buffer 来实现的。每打开 一个文件 vim 就对应创建一个 buffer,多个文件就有多个 buffer。 插件名:MiniBufExplorer 操作:打开一个以上文档时,vim 在窗口顶部自动创建 buffer 列表窗 口。光标在任何位置时,CTRL-TAB 正向遍历 buffer, CTRL-SHIFT-TAB 逆向遍历;光标在MiniBufExplorer 窗口内,输入 d 删除光标所在的 buffer 注意:将如下信息加入.vimrc 中: “允许光标在任何位置时用 CTRL-TAB 遍历 buffer let g:miniBufExplMapCTabSwitchBufs=1 编辑单个文档时,不会出现 buffer 列表,如左图所示。 当前编辑的是 hardinfo.c 文件,该 文件中有调用 parameters_init()函数, 但该函数定义在 util.c 文件中,当我 在 parameters_init()上输入 CTRL-] 后,vim 新建 util.c 文件的 buffer 并 自动定位到 parameters_init(),这时, vim 同时在编辑 hardinfo.c 和 util.c 两个文档,可从顶部的 buffer 列表中 查看到。如左图所示。 本文为删节版,完整内容见原文 (PDF下载): http://ishare.iask.sina.com.cn/f/18766458.html 文/yangyang.gnu@gmail.com 招募启事 《Linux运维趋势》的建设需要您的加入! 您可以通过如下方式参与我们杂志的建设: 1、推荐文章 无论是您在互联网上看到的好文章,还是您自己总结/整理的资 料;无论是英文还是中文;无论是入门的还是高端的,都欢迎推荐! 您可以直接在《Linux运维趋势》新浪微群中分享: http://q.weibo.com/121303 2、投稿 如果您愿意与大家分享您技术经验的热诚,那么欢迎您的投稿! 原创或译文均可,稿件在51CTO首发可领取稿酬:) 投稿信箱:yangsai@51cto.com 3、推广与意见 如果您喜欢我们的杂志,认为这本杂志对于您的工作有所帮助,请 向您的Linux好友、同事们推荐它! 如果您觉得这份杂志还有什么地方需要改进或补充,也希望您能 够提出您的宝贵意见! 反馈可至《Linux运维趋势》新浪微群: http://q.weibo.com/121303 或在新浪微博 @51CTO系统频道 本刊发布日期:每个月的第二个星期五 您可以通过如下方式检查新刊发布: 1、电子邮件订阅: http://os.51cto.com/art/201011/233915.htm 2、RSS订阅: http://www.51cto.com/php/rss.php?typeid=777 3、iPad订阅: .coming soon! 本期杂志封面由 钱靓 制作 《Linux运维趋势》是由51CTO系统频道策划、针对Linux/Unix系 统运维人员的一份电子杂志,内容从基础的技巧心得、实际操作案例 到中、高端的运维技术趋势与理念等均有覆盖。 《Linux运维趋势》是开放的非盈利性电子杂志,其中所有内容均收 集整理自国内外互联网(包含51CTO系统频道本身的内容)。对于来 自国内的内容,编辑都会事先征求原作者的许可(八卦,趣闻&数字 栏目例外)。如果您认为本杂志的内容侵犯到了您的版权,可发信至 yangsai@51cto.com进行投诉。