<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>http://blog.liuts.com/index.php</link> 
<description><![CDATA[热衷于开源技术，一起学习，共同进步。]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>http://blog.liuts.com/post/235/</link>
<title><![CDATA[[专访]从12306说起 如何构建高并发高性能网站]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Fri, 10 Feb 2012 01:47:40 +0000</pubDate> 
<guid>http://blog.liuts.com/post/235/</guid> 
<description>
<![CDATA[ 
	　　【IT168 专稿】2012年的春运潮造就了中国铁路客户服务中心12306网络购票系统一夜蹿红，从传统购票方式到电子商务，2012年1月1日开通的12306网络购票系统成为了铁道部改革的重要一步。<br/>　　但是随着12306系统的上线，各种关于12306系统的抱怨声也层出不穷，不少人抱怨网上订票系统十分“龟速” 网络运行奇慢，网页不时“崩溃”，平均刷新500次才能购到一张票，而且订票过程十分繁琐，从用户注册到支付成功，要13道“工序”，让人晕头转向等等。<br/>　　本来为了让每个归家的人更方便地买到火车票，而12306网上订票系统这个号称斥数千万元巨资建立的电商的表现却难以让人信服，并引发了一些讨论和思考，应该如何建设类似12306网上订票系统这种大型高并发高性能网站呢?IT168记者采访了腾讯架构平台部刘天斯，对于大型高并发高性能网站的建设和优化，他给出了自己的建议。<br/><br/>　　<strong>12306订票网站存在哪些需求特点和挑战？</strong><br/>　　12306订票网站具有分时段、分区域、高并发等特点，如何确保在高峰时段正常提供服务是一个非常大的挑战，放眼春运期间网上订票系统，表现为页面访问延时大、登录异常、支付失败等问题。这其中存在一定客观因素，也不排除对流量预估不准确、架构设计不合理等情况。官方公布日均PV达10亿，在高峰时段有千万PV的访问量，应对如此高的流量需要从带宽、服务器、网络、应用及业务逻辑等进行优化。<br/><br/>　　<strong>国内的大型网站还包括淘宝、京东、新浪等，12306的访问模式和淘宝、京东存在哪些异同？</strong><br/>　　相同点都可以理解成电子商务网站，无论是业务逻辑还是应用特点都非常相似，唯一的差别是12306的流量因时段、区域更为集中，有人说像淘宝、京东搞促销，比如”秒杀”。但”秒杀”的对象往往比较固定，后端可以通过缓存机制或静态化来缓解数据库I/O压力，而12306需要每隔10分钟更新票务信息，同时还要保持与集团其它业务系统对接，这点处理起来更为棘手。<br/><br/>　　<strong>淘宝、TMall、京东也曾经遭遇宕机事件，这些宕机事件和12306网站崩溃有何异同？</strong><br/>　　此类宕机事件原因都是相似的，无非是宽带吃紧或服务器性能出现瓶颈(应用故障、高I/O或业务逻辑异常等)。差异点只有体现在业务层面上，促销活动可以推迟或重新组织，但12306订票系统不行。反之，12306有其它辅助的补救、缓解方案，如电话预定、代售点等，传统的电子商务平台则没有。<br/><br/>　　<strong>12306订票网站在哪些方面可能存在问题？在以上谈到的问题上是否都有一些相应的优化建议呢？</strong><br/>　　个人认为更有价值是体现在数据分析上，如得到宽带数据、用户流量、区域分布、请求特点、应用瓶颈点、服务器的性能指标等等，这些数据对优化、改良现有架构非常有帮助。抛开宽带因素，以下是对12306平台系统架构的几点建议：<br/><br/>　　一、前端优化<br/>　　具体参考：yahoo前端优化34条规则，针对12306平台，个人建议在没有多运营商链路接入(如BGP)的情况下继续使用CDN进行加速。动、静态应用分离，静态业务使用非12306.cn域名可以减少无用cookie带来的流量。任何一个小细节在高并发下都会被无限放大(截止目前发现平台还是以dynamic.12306.cn域名做静态引用)。查询页面的结果是通过Ajax异步返回填充iframe框架来实现，这对动态CDN加速是一个挑战，因为CDN节点并没有真正缓存页面中主要加速的内容。另外提高验证码的复杂度及多样性，可以缓解刷票机给平台带来的压力。<br/><br/>　　二、运用缓存<br/>　　缓存最大的好处是减少后端数据存储的I/O压力，从一个普通用户订票轨迹来看，查询读往往是入库写的好几倍，如何减少数据库的读I/O对提高平台的整体性能至关重要，比较流行的缓存技术有针对页面及数据级，页面级缓存有varnish、squid等，如使用CDN，页面级的缓存可以不用考虑，重点将精力放在数据级的缓存规划上，技术方面可以用Nosql来实现，比较成熟的Nosql有memcached、redis、mongodb等。可以根据班次、出发与目的地ID组合或出发日期进行hash分区，这样可以很好地提高缓存命中率，减少后端数据库的压力。<br/><br/>　　三、代理层<br/>　　引入代理层的目的是拆分业务，目前平台绝大部分功能都共用一组WEB服务器(从域名及URI结构猜测，不一定准确)来对外提供服务，比如登录、注册、车票查询、余票查询、列车时刻表查询、正晚点查询、订单管理等等，只要其中一个功能模块出现堵塞，影响必定是全局性的。一个好的方法是优化、规范各业务URI，在代理层实现业务的划分，可用的技术有Haproxy、Nginx等，如将/otsweb/regitNote/映射到注册组WEB服务器，/otsweb/AppQuery/映射到查询组WEB服务器，/otsweb/Pay/映射到支付组WEB服务器等等，如此一来，当查询业务出现延时堵塞时不会影响到用户支付。<br/><br/>　　四、数据库层<br/>　　之前接触过一些政府行业的业务，数据库服务器往往都使用一台高端的硬件，比如小型机，在互联网行业，尤其是类似于12306订票系统，这往往是最致命的，理由很简单，在大流量并发下处理能力再强的服务器也吐不出数据，因为受网络I/O、磁盘I/O、业务逻辑等方面的限制，所以必须将数据打散，方案有进行读写分离、分区、分片。主从模式可以很好实现读写分离，大部分数据库都支持这点，除此之外还建议使用分区模式，分区策略可以根据业务特点进行，按地域进行分区是一个好主意，因为每个区域都是一个大分区，还可以从业务层面对它做二级甚至三级的"扩展分区"。需要在细化拆分与运营成本上做好平衡。另外I/O密集的点尽量使用SSD代替。<br/><br/>　　五、负载均衡层<br/>　　保障一个业务平台的高可用性，采用负载均衡策略必不可少，即使是提供给CDN的源服务器。目前有商用的F5、NetScaler、Radware等，也有开源的LVS，看成本的投入来选择，此处不详细展开讨论。<br/><br/>　　六、业务层<br/>　　此次12306网站瘫痪事件，业务层面有无优化的空间?12306网站平台是铁道集团在互联网上对外服务的窗口，与电话订票、代售点都是平级的，后端肯定还关联着很多复杂的业务系统，在没有对整个集团业务系统做扩容的前提下(短期内估计不能实现)，可以将网站业务平台剥离出来，当然，完全剥离也不太实际，至少可以延长同步、一致性校验的时间。时间的长短随班次的发车时间成正比，因为大部分的用户都是提前一周以上就着手预定车票。<br/><br/>　　<strong>从百万级、到千万级并发PV的网站，在构架和部署方面会存在哪些差异?</strong><br/>　　百万PV到千万是一个级别的提升，设计得再好的架构也很难一步到位，也是随着业务的高速增长，不断积累经验、优化、改良的过程。12306的流量达到千万PV 级，但平台的支撑能力远远没有达到预期。<br/><br/>　　<strong>一个大型的高并发高性能网站架构需要从哪些层面去考虑?服务器/存储部署方面需要注意哪些问题?哪些技术能够保证整体系统的高并发与高性能?</strong><br/>　　设计一个大型高并发网站的架构，首先必须以了解业务特点作为出发点,架构的目的是支撑业务，需要考虑互联互通、负载均衡、网络、开发、缓存、存储、数据库等层面，这些层面看似一个整体，任何一个环节出问题都可能导致整个网站崩溃，所以一个高可用、高并发的平台还少不了监控、开发、运维等角色通力协作。<br/><br/>　　<strong>部署大型的高并发高性能网站架构需要注意哪些问题?存在哪些挑战?高峰期和低谷期的资源和投入如何平衡?</strong><br/>　　部署大型的高并发高性能网站架构需要注意整体的扩展性与健壮性，解决未来海量数据的存储与处理、密集的数据I/O、互联互通、应用的不断迭代、重构以及缓存机制等问题，对于考验一个成功的架构提出了更高的要求，也是未来面临最大的挑战。对于平衡高峰期和低谷期的资源投入，我想云计算的伸缩性更适合解决该问题。<br/><br/>　　<strong>有人建议使用云计算平台(类似于Amazon之类的)来搭建这类网站，以便提高资源利用率节省成本，您是如何看待的?</strong><br/>　　云计算是未来一个趋势，优点不多说，它具有动态伸缩、灵活性强等特点，可以让资源利用最大化，可以更好节约成本，非常适用于12306平台。<br/><br/>　　<strong>虚拟化(不局限于服务器虚拟化，也可以包括网络虚拟化等)在这类型大型高并发网站建设过程中可以起到什么作用?</strong><br/>　　虚拟化是云计算的基石，可以降低企业运营成本，提高资源利用率，个人建议将一些运算量及I/O要求不高的业务迁移到虚拟化，比如web、缓存、代理、中间件服务等应用。在低流量时段可以销毁节点，使物理实体机处于低功耗状态下运行，绿色环保，高峰来临时可以迅速部署上线来提供服务。<br/><br/><table width="550" cellpadding="0" cellspacing="0"> <tr> <td><fieldset style="width:200" align="center"> <legend><strong>人物简介</strong></legend> <p align="left"><a href="http://image20.it168.com/201202_0x0/941/5e2ac5435d78ba4d.png" target="_blank"><img src="http://image20.it168.com/201202_0x0/941/5e2ac5435d78ba4d.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>▲刘天斯，目前就职于腾讯-架构平台部，曾就职于天涯社区，担任架构师/系统管理员，热衷开源技术的研究，包括系统架构、运维开发、负载均衡、缓存技术、数据库、分布式存储及云计算机等领域，擅长大规模集群的运维工作。关注互联网技术发展动向。</fieldset></td></tr></table><br/>原文：<a href="http://server.it168.com/a2012/0208/1309/000001309060_all.shtml" target="_blank">http://server.it168.com/a2012/0208/1309/000001309060_all.shtml</a><br/>Tags - <a href="http://blog.liuts.com/tags/12306/" rel="tag">12306</a> , <a href="http://blog.liuts.com/tags/%25E6%259E%25B6%25E6%259E%2584/" rel="tag">架构</a> , <a href="http://blog.liuts.com/tags/%25E5%25BB%25BA%25E8%25AE%25AE/" rel="tag">建议</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/234/</link>
<title><![CDATA[一例千万级pv高性能高并发网站架构[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Architecture]]></category>
<pubDate>Sun, 18 Dec 2011 04:25:10 +0000</pubDate> 
<guid>http://blog.liuts.com/post/234/</guid> 
<description>
<![CDATA[ 
	<span style="text-align: left; widows: 2; text-transform: none; background-color: #fafbfc; text-indent: 0px; font-family: song, Verdana; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; font-size-adjust: none; font-stretch: normal; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; widows: 2; text-transform: none; background-color: #fafbfc; text-indent: 0px; font-family: song, Verdana; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; font-size-adjust: none; font-stretch: normal; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; widows: 2; text-transform: none; background-color: #fafbfc; text-indent: 0px; font-family: song, Verdana; white-space: normal; orphans: 2; letter-spacing: normal; color: #000000; word-spacing: 0px; font-size-adjust: none; font-stretch: normal; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 受CU管理员的邀请参考&ldquo;<a href="http://bbs.chinaunix.net/thread-3626937-1-1.html" target="_blank" title="千万级pv高性能高并发网站架构与设计交流探讨帖">千万级pv高性能高并发网站架构与设计交流探讨帖</a>&rdquo;主题的交流，发表了一案例与大家分享。</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个支撑千万级PV的网站是非常考验一个架构是否成熟、健壮(本文不涉及软件架构的层面，有兴趣也可以讨论)。现抛出一个系统层面的架构，不保证是最优的方案，但也许适合你。理由是再优秀的架构都不具备通用性，需要根据每种应用特点针对性来设计。希望起到抛砖引玉的作用，大家多多参与，发表意见。</span><br /><a href="http://life.chinaunix.net/bbsfile/month_1112/1112160026f44ccae50af9bd58.png" target="_blank" title="点击放大"></a><img style="width: 1149px; height: 799px" class="insertimage" src="attachment.php?fid=333" border="0" width="1235" height="833" /><br /><div align="center"><strong>(点击放大)</strong></div><br />架构说明：<br />1）架构中直接引入软件名称的模块，是个人推荐使用的，如Haproxy、Hadoop等；<br />2）关于全局负载均衡，看成本投入情况，可以使用商业的产品，如F5-GTM，开源方案便是自搭智能DNS；<br />3）本地负载均衡方案，可以考虑F5-LTM或成熟的开源解决方案LVS；<br />4）代理层为什么推荐大家使用Haproxy？Haproxy是一个非常优秀的反向代理软件，十分高效、稳定。国内top 10的互联网公司都有在使用；<br />5）缓存层可以使用Squid或Varnish，个人更倾向Varnish。配置灵活、运行稳定，提供非常便利的管理接口。为啥在缓存层前面加一层代理？优点非常多，列举如下：<br /><ul class="litype_1" style="padding-bottom: 0px; line-height: normal; margin: 0px 0px 0px 14px; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px"><li style="padding-bottom: 0px; line-height: normal; list-style-type: decimal; margin: 0px 0px 0px 2em; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px">根据应用配置URI路由规则，集中热点来提高后端缓存的命中率；</li><li style="padding-bottom: 0px; line-height: normal; list-style-type: decimal; margin: 0px 0px 0px 2em; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px">轻松划分网站频道、版块，更好对应用进步组织、规划；</li><li style="padding-bottom: 0px; line-height: normal; list-style-type: decimal; margin: 0px 0px 0px 2em; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px">对URI进行一般性安全过滤，抵御注入攻击；</li><li style="padding-bottom: 0px; line-height: normal; list-style-type: decimal; margin: 0px 0px 0px 2em; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px">弹性调配硬件资源，应对突发事件产生大流量；</li><li style="padding-bottom: 0px; line-height: normal; list-style-type: decimal; margin: 0px 0px 0px 2em; padding-left: 0px; padding-right: 0px; word-wrap: break-word; padding-top: 0px">可回收宝贵的公网IP资源；</li></ul><br />6）应用层开源技术方案非常多且成熟，在此不详细描述；<br />7）数据库层主流开源解决方案Mysql是首选，主从复制（一主对多从）是目前比较靠谱的模式；<br />8）关于Nosql，应用场景不多说，可参考&ldquo;<a style="line-height: normal; word-wrap: break-word; color: #000000; text-decoration: none" href="post/194/" target="_blank">给部门做的Mongodb技术交流PPT</a>&rdquo;文章，redis、memcached等作为热点数据存储、数据库缓存都非常理想；<br />9）内网DNS扮演的角色非常重要，一定要消灭code中出现的内网IP地址，很大程度减少因IP变更、服务器故障而修改源码的情况，同时也便于维护；<br />10）内网LB适用在内部WEB接口、多台数据库Slave、多台Nosql Slave、公共服务等应用的负载均衡，可以使用LVS、Haproxy来实现，可用性要求不高的应用可行直接使用Localhost DNS轮询；<br />11）hadoop适合海量数据的存储与处理，如做网站日志分析、用户数据挖掘等；<br />12）管理集群，平台的核心，运维的阵地；<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上粗略介绍了架构的几个组成部分，如大家有对哪块有疑问或感兴趣都可以展开来讨论，也可以通过weibo与我交流：<a style="line-height: normal; word-wrap: break-word; color: #000000; text-decoration: none" href="http://t.qq.com/yorkoliu" target="_blank" title="http://t.qq.com/yorkoliu">http://t.qq.com/yorkoliu</a></span><br/>Tags - <a href="http://blog.liuts.com/tags/%25E6%259E%25B6%25E6%259E%2584/" rel="tag">架构</a> , <a href="http://blog.liuts.com/tags/%25E6%259E%25B6%25E6%259E%2584%25E8%25AE%25BE%25E8%25AE%25A1/" rel="tag">架构设计</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/233/</link>
<title><![CDATA[祝贺《构建高可用Linux服务器》卓越网和互动网上架]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 15 Nov 2011 06:37:02 +0000</pubDate> 
<guid>http://blog.liuts.com/post/233/</guid> 
<description>
<![CDATA[ 
	<a href="http://blog.liuts.com/attachment.php?fid=332" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=332" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=331" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=331" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>书名：构建高可用Linux服务器<br/>ISBN：9787111359423 <br/>作者：余洪春<br/>定价：79.00元<br/>出版时间：2011年10月<br/>出版社：机械工业出版社 订书页面<br/><br/><br/><strong>编辑推荐：</strong><br/>基于实际生产环境，从Linux虚拟化、集群、服务器故障诊断与排除、系统安全性等多角度阐述构建高可用Linux服务器的最佳实践<br/>资深Linux/Unix系统管理专家兼架构师多年一线工作经验结晶，51CTO和ChinaUnix等知名社区联袂推荐<br/><br/><strong>内容简介：</strong><br/>资深Linux/Unix系统管理专家兼架构师多年一线工作经验结晶，51CTO和ChinaUnix等知名社区联袂推荐。结合实际生产环境，从Linux虚拟化、集群、服务器故障诊断与排除、系统安全性等多角度阐述构建高可用Linux服务器的最佳实践。本书实践性非常强，包含大量企业级的应用案例及相应的解决方案，读者可以直接用这些方案解决在实际工作中遇到的问题。<br/>全书一共10章。第1章以作者的项目实践为基础，以RHEL和Centos为平台，有针对性地讲解了构建高性能Linux服务器的应该掌握的核心知识，包括硬件、网络配置、日志管理、性能优化、监控等重要内容；第2章十分详尽地讲解了FreeBSD8.1在企业中的部署与应用，这是目前第一手关于FreeBSD8.1的宝贵资料；第3章讲解了Linux服务器的虚拟化，主要包括VMware和XEN两大虚拟机在Windows Server 2003和Centos系统下的使用方法和工作原理，同时还介绍了Citrix XenServer的使用方法；第4章探讨了生产环境下各种棘手的服务器故障的诊断与排除方法；第5章介绍了生产环境下的SHELL脚本，这些脚本都经过实践验证，读者可以直接在实际工作中使用；第6章首先讲解了构建高可用Linux集群的理论知识，然后以作者的实际项目为例详细演示了构建高可用Linux集群环境的方法（附有项目施工图）；最后还探讨了MySQL数据库性能优化方面的话题；第7章以理论与案例相结合的方式讲解了VPN在企业中的部署与应用，包括VPN技术的分类和选择、IPsec VPN的不足和OpenVPN的应用范畴、OpenVPN的部署案例和部署时的注意事项；第8章全面讲解了Linux防火墙及系统安全方面的内容，其中iptables相关的知识是重点，讲解非常详细，很多脚本都可以直接使用；第9章介绍了构建免费开源的企业级邮件系统的完整过程，这也来自于作者在实际工作中的实践；第10章针对系统管理员的学习、工作以及职业规划给出了一些宝贵的建议，对新人尤为有帮助。<br/><br/><strong>作者简介：</strong><br/>余洪春（网名“抚琴煮酒”）&nbsp;&nbsp;<br/>资深项目实施工程师、高级Linux/Unix系统管理员，从事CDN系统和电子商务网站的管理和运维7年多，在FreeBSD、VPN、SHELL脚本、Linux服务器虚拟化、高可用Linux集群建设、Linux服务器故障诊断与排除、Linux系统安全等方面有十分深入的研究，在大量的一线实践中积累了丰富的经验。资深系统架构师，精通负载均衡高可用技术，擅长证券类和电子商务类网站的架构。51CTO和ChinaUnix等知名社区的特邀专家，51CTO系统、安全、网络频道的专栏作家，ChinaUnix论坛“集群和高可用版”版主，在社区内发表了大量技术文章，深受网友欢迎。<br/>51CTO博客：http://andrewyu.blog.51cto.com/<br/>ChinaUnix博客：http://blogold.chinaunix.net/u4/123104/<br/><br/><strong>专家推荐：</strong><br/>如何构建高可用的Linux服务器，这是很多Linux系统管理员和运维人员都感兴趣的话题，这也是他们努力学习的方向之一。本书作者在该领域浸淫多年，在大量的一线生产环境中积累了丰富的经验和最佳实践。难能可贵的是，他将这些宝贵的知识系统地梳理后总结在了这本书中，旨在与所有同行分享。如果你是一位Linux系统管理员，或运维工程师，或项目实施工程师，只要你细心研读本书的内容并跟随书中的大量案例去实践，相信一定会受益匪浅。——刘天斯 腾讯系统架构师<br/><br/>在IT领域，好书很多，烂书也不少，毫无疑问，本书是一本好书。建议大家用最强悍的执行力来学习本书中的案例，用最细腻的心思去揣摩每个案例背后的原理。如果你能吃透这本书，你就能在短短几个月的时间内将作者几年来积累的知识和经验化为己有，从而在短时间内使自己的技能发生质的飞跃。——曹亚孟 合力金软运维经理&nbsp;&nbsp;<br/>本书的内容全部来自于企业的实际生产环境，非常注重实践性和实用性，书中的所有案例都可以供大家在解决实际问题时参考和借鉴。本书从Linux服务器的虚拟化、生产环境下服务器的故障诊断与排除、生产环境下的SHELL脚本、高可用Linux集群建设、VPN在企业中的部署应用、Linux防火墙等多个方面阐述了构建高可用Linux服务器的方法与最佳实践。强烈推荐！——崔晓辉 大众网高级系统管理员 <br/><br/>本书作者从事Linux运维相关的工作已达7年之久，不仅主导过多个Linux集群相关项目，而且还从事过Linux教学方面的工作，积累了相当丰富的经验。利用工作之余，他把自己多年来积累的实践经验整理到了这本书中，可谓是精华中的精华！本书结合来自一线生产环境的真实案例讲解了Linux集群、Xen虚拟化、iptables的企业级应用和系统安全相关的内容，同时还包括一些常见问题和故障的排除方法。本书尤其适合那些已经有2~3年Linux服务器管理与运维经验的读者，相信本书能在工作中助你们一臂之力。——候心刚 巨人网络运维中心运维部经理<br/><br/>51CTO与酒哥的缘分开始于2010年51CTO举办的“十大杰出IT博客大赛”，大赛结束后，酒哥的博客正式落户51CTO，他凭借多年的系统运维经验和热衷于与人分享的精神，很快就在博客频道“显山露水”，成为了51CTO的博客之星和专家博客，深受读者欢迎。正所谓“抚琴觅知音，煮酒论英雄”，如果你是一位系统运维人员，强烈推荐你仔细研读这本书，它是酒哥多年工作经验的结晶，包含大量来自实际生产环境的案例和最佳实践，一定会让你大有收获。——51CTO（www.51cto.com） 中国领先的IT技术网站<br/><br/>酒哥是ChinaUnix论坛“集群和高可用”技术版块的明星版主，在Linux服务器的管理和运维方面积累了丰富的经验，热衷于分享，深受社区网友欢迎。酒哥的这本书最大的特点就是实践性强，所有内容都是酒哥在一线生产环境中工作经验的结晶，非常实用。如果掌握了本书的内容，不仅掌握了构建高可用Linux服务器的核心知识，而且能将书中的很多项目案例的解决方案用于解决实际工作中遇到的问题。强烈推荐！——ChinaUnix（www.chinaunix.net） 全球最大的Linux/Unix应用与开发者社区<br/><br/>推荐序一：<br/>我与“抚琴煮酒”的缘分是从他的一篇博客文章开始的。<br/>同大多数做运维的兄弟一样，我平时的工作比较忙，所以很少去网上看技术文章。此外，网上的文章鱼龙混杂，好的技术文章实在难得一见。突然有一天，我的一位学生将“我们的网站压力究竟在哪里？”这篇文章的地址发给了我，并告诉我这篇文章写得很好。于是我忙里偷闲打开看了一下，而且连续看了两遍。在这篇博文中，作者没有使用华丽的辞藻，也没有讲那些不切实际的高深得让读者云里雾里的技术，而是在用最简单朴实的能让每个读者都能懂的语言描绘一个基于生产环境的千万级规模的网站系统的架构情况。看完这篇文章后，我的第一感觉就是又将认识一位真正做运维的同行和知己。紧接着，我把这篇文章转给了我的几百个学生，并开始写评论，结果一不小心写得太长，无法当作评论发表，最后只好贺了一篇博文“如何才能做到网站高并发访问？”就这样，我和“抚琴煮酒”相识了。<br/>我和“抚琴煮酒”主要通过博客和QQ沟通。虽然我们相识只有短短的几个月，但我们聊天的信息量几乎比普通朋友3到5年的信息量还要大。在与作者交流的过程中，我发现作者对运维技术有着特殊的执着和热爱，他的心血之作在字里行间透漏着自己多年来在点滴的工作中汇集的经验和智慧。有时候，我会对书中的部分内容有些疑问，即便是午夜，他也会给我这样的答复：“做技术要认真，我现在就测试，一会给你答复”。<br/>“养儿方知父母恩”，同样，只有写过书的人才知道写书的不易。运维工程师是一个很特殊的职业，它要求我们必须有比程序员和DBA更广的知识面，比如系统、开发、网络、数据库等方面的知识都要求掌握。也因为此，国内运维方面的优秀专著屈指可数。在我多年的系统运维培训生涯中，我也仅仅只把鸟哥的书介绍给了我的学生。不是因为鸟哥的书写得有多么高深，辞藻有多么华丽，而是因为鸟哥的书确实更通俗易懂，不但把简单的技术写得有血有肉，而且做到了使复杂的技术深入浅出，让初学者能够迅速掌握。<br/>很幸运的是，“抚琴煮酒”的书也具有这方面的特质。更难得的是，他的书与时俱进，不但讲了鸟哥的书中没有讲的大量基础内容，而且还以实战案例为载体将自己近几年在各企业中常用的负载均衡高可用架构图文并茂地呈现给了广大的读者，并对相关的技术进行了合理的延伸和扩展，比如keepalive+drbd+nfs存储的高可用架构。<br/>纵观全书，它就是若干相对很完整的千万级PV规模网站的系统架构解决方案的集锦，这些都是作者多年工作经验的结晶。对于战斗在运维一线的兄弟们来说，本书的出版可谓是他们之福。由于运维技术的特殊性，以及写作时间和作者经历等方面的原因，这本书也不可能做到面面俱到，更不可能做到没有瑕疵，只希望大家从此书中找到自己需要的内容，这些内容不仅仅只有技术，还有作者多年如一日的勤奋努力和对技术的热情与执着，写作本书的过程中对技术细节认真负责的态度，以及乐于助人的分享精神等，这些也许比技术本身更宝贵，更重要。<br/>看一本好书，交一个知己，一生足矣。<br/>老男孩，老男孩Linux实战运维培训中心总裁<br/><br/>推荐序二：<br/>每天的运维工作中都会遇到各种各样的系统问题，比如：<br/>我们如何才能利用已经掌握的SHELL相关的知识更好地、自动地完成任务呢？<br/>对于公司而言，我们如何能保证在部分服务器出现故障的情况下业务不会被中断呢？<br/>面对服务器资源有限的现实情况，我们又该如何充分利用有限资源来满足业务的需求呢？<br/>对于服务器安全，我们又能采取哪些措施呢？<br/>……<br/>有经验的朋友可能都知道，这些问题都是在日常的运维工作中会经常遇到的。这些问题该如何解决？你是不是也经常被这些问题困扰？本书会给你想要的答案。本书针对诸如此类的问题进行了详细地探讨，不是理论的，也不是说教的，而是建立在余洪春先生7年的实践经验上的，都是经过实际生产环境所验证的。<br/>本书是余洪春先生在系统运维领域多年工作、实践和探索的结晶。他根据自己的经验，由浅入深地讲述了运维中所面临的种种困难和挑战，从基础的SHELL脚本、故障处理，到企业级Linux集群应用、虚拟化技术，以及系统安全方面的配置和规划等，面面俱到。如果你所在的生产环境存在的问题与本书中描述的问题类似，便可以直接用书中的解决方案去解决你的实际问题，这些解决方案都是在实际生产环境中被使用和验证过的。所以，无论你是初级的系统管理员，还是资深的运维工程师，在仔细研读本书后，都会有所收获的。<br/>刘晗昭，昆仑万维高级架构师<br/><br/>推荐序三：<br/>2011年8月面对迅猛增长的访问量，作为系统运维人员，我们如何才能保证网站的高并发、高可用、高性能、可扩展性和安全性？这些话题应该是每一位运维人员都关注的，余洪春先生的这本书结合实际的生产环境详细地探讨了这些方面的话题。<br/>经常在51CTO上看到余洪春先生发表相关的文章，文章的内容给我的最大感觉就是实用，基本上都是从一线生产环境中总结出来的经验，实践性和可读性都非常强。尤为值得一提的是，在51CTO举办的“世博IT魔方”活动中，余洪春先生设计了一个用“Nginx+Keepalived”实现的在线票务系统，当时得到了大家的一致好评，此后，关注他的人越来越多。<br/>因为工作的需要，我一直在研究Web集群，我和余洪春先生在51CTO上成为了好友，并且经常在线上与他讨论一些集群方面的问题，LVS+Keeplived、Nginx+Keepalived、HAproxy等高可用的解决方案都是我们讨论的焦点。他在多年的项目实施经历中积累了丰富的经验，他与朋友合作运营的网站“一拍网”便是基于LVS+Keeplived+Nginx+Tomcat7架构的，目前该网站正稳定运行中。该网站的相关配置也收录到了书中，可以供那些关注Web集群的从业人员、爱好者们借鉴，从而让自己少走弯路。<br/>在此，我极力推荐本书，书中包含大量来自一线生产环境的实际案例，毫无保留地与大家分享了如何构建高可用的Linux服务器的经验和心得，实在是难得。希望有更多的同道中人和即将从事系统运维和管理的朋友都能从本书中受益。<br/>胡安伟，金游数码运维主管<br/><br/><strong>前言：</strong><br/>我的系统管理员之路<br/>2002年我初识Linux，那会儿刚毕业，在一家大型国营公司值守Winodws Server 2000服务器，当时“震荡波”和“冲击波”这两种病毒很是倡狂，没有打补丁的机器无一幸免。我所值守的服务器也未能例外，虽然我们在防毒方面投入了大量的精力和金钱（当时购买的都是正版Winodws 2000系统和正版瑞星杀毒软件）。有一次去朋友公司（省太平洋寿险下面的一个分支机构）参观，我发现他们的服务器和终端系统都很奇怪，一问才知道是BSD系统，因为运行机制不一样，所以Windows下的病毒丝毫影响不了它们，而且这些服务器很稳定，基本上不宕机。当时很是羡慕，心想要是哪一天我们的服务器也要换成BSD系统，这样“冲击波”和“震荡波”就奈何不了我们，而且也不会蓝屏，那该多好啊。<br/>后来有幸到北京一家大型广告公司上班，公司所用服务器基本上都是Centos和FreeBSD，内部用的文件服务器是Samba，Web服务器是Apache和Nginx，公司的NAT路由器是iptables，核心业务是CDN系统，几乎全部装的都是Cenotos5.1 x86_64，仅有一台装的是Windows Server 2003，供程序员开发.NET程序之用。公司的这套CDN系统要负责处理所有的流量，即使在高峰期并发量特别大的时候，网站也非常稳定。<br/>我当时也对Linux产生了浓厚的兴趣，尝试改掉自己多年使用Windows的习惯，换成了纯字符操作，并且尝试用SHELL完成自动化工作，用vim+sed处理文档。后来，我发现自己越来越喜欢Linux了。公司有一台vsftpd服务器，3年没有重启了，这很让我吃惊，所以多次与人聊起。后来我又得知一位朋友所在的公司有一台很老的RH8服务器，因为负责的是公司的核心业务，已经9年没有重启了，当时更加感到震撼，这更加坚定了我要学好Linux的决心。<br/>在做项目实施工程师期间，有些客户的核心网站的并发量并不是太大，但比较重要，所以他们都要求部署Linux集群，有时指定要部署LVS或HAProxy。在项目实施的过程中，我发现LVS/HAProxy的负载均衡确实非常强大，可以与硬件级的F5负载均衡器的能力相媲美。很快我就被Linux集群这门艺术迷住了，我自己曾研究了Nginx+Keepalived这种负载均衡高可用架构，并且在许多项目中成功实施，客户反映效果也不错。<br/>现阶段我的工作主要是维护“一拍网”和另外一个大型电子商务网站，相对于CDN系统而言，它没有节点冗余，所以对Linux集群技术的要求更高。我负责的网站基本都做了双机高HA，LVS+Keepalived和Nginx+Keepalived，还有DRBD+Heartbeat及MySQL的replication复制。另外，由于电子商务网站涉及钱的问题，所以对安全性的要求也很高，我们平时都会从网络安全（硬件防火墙）、系统安全、代码安全和数据库安全这些方面着手，尽力避免一切影响网站安全的行为。工作虽然辛苦，但看着自己架构的网站顺利稳定地运行，心里还是很有成就感的，这也是我的工作动力的主要源泉。<br/><br/>写作本书的目的<br/>从事系统管理和系统集成方面的工作已有七八年了，在工作期间，我曾经担任了一段时间的红帽RHCE讲师，到东北大学等高校推广红帽Linux及FreeBSD等开源系统。在教学过程中我发现，很多学生在进入企业后都无法胜任自己的工作，更谈不上正确地规划自己的职业道路了。一方面因为企业的生产环境具有一定的复杂性；另一方面市场上入门书居多，缺乏能真正指导读者解决实际问题的书籍。例如，很多书都只是通过VMware ESXI或XenServer虚拟出了VM系统，对于线上环境，根本没有涉及并发、PV和数据库压力等相关话题。<br/>之所以写这本书，一方面是想对自己这些年的工作经验和心得进行一次系统地梳理和总结；另一方面是想将自己的经验分享给大家，希望能帮助大家少走弯路。通过本书中的项目实践（包括Linux集群、OpenVPN、邮件系统和iptables防火墙）和线上环境的SHELL脚本，大家能迅速进入工作状态。书中专门用了一个章节来向大家介绍目前应用得比较多的FreeBSD8.1 x86_64系统（市场上目前无相关书籍介绍）。书中所提供的SHELL脚本和iptables脚本均来自于线上的生产服务器，大家均可以直接拿来用。关于Linux集群的项目实践，大家也可以根据实际项目的需求直接采用，以此来设计自己公司的网站架构。<br/>希望大家能通过本书掌握Linux的精髓，轻松而愉快地工作，从而提高自己的技术水平，这是我非常希望看到的，这也是我写此书的初衷。<br/><br/>读者对象<br/>本书适合以下几类读者：<br/>系统管理理员和系统工程师<br/>网络管理员和企业网管<br/>项目实施工程师<br/>开发人员<br/>计算机相关专业的学生<br/><br/>如何阅读本书<br/>本书的内容是对实际工作经验的总结，涉及大量的知识点和专业术语，建议经验还不是很丰富的读者先了解第1章第2章的内容，这两章比较基础，如果大家在学习过程中根据这两章的讲解进行操作，定会达到事半功倍的效果。<br/>系统管理员和系统工程师们则可以重点关注第3章的（Linux服务器虚拟化）、第6章（Linux集群）及第8章（iptables防火墙及系统安全）的内容，这些都与我们的日常工作息息相关，建议大家多花些精力和时间，抱着一切从线上环境去考虑的态度去学习。<br/>对于网络管理员和企业网管来说，如果基础不是太扎实，建议先学习第1章的内容，然后将重点放在第7章（VPN在企业中的部署应用）和第8章上。<br/>对于项目实施工程师而言，由于大多数都是从事系统集成相关工作的，因此建议顺序学习全书的内容，重心可以放在本书的第6章上面。<br/>对于开发人员来说，由于其只需对系统有一个大概的了解，重点可以放在第1章、第2章和第5章（生产环境下的SHELL脚本）上。<br/>大家可以根据自己的职业发展和工作需要选择不同的阅读顺序和侧重点，同时也可以对其他相关的知识点有一定的了解。<br/><br/>致谢<br/>感谢我的家人，尤其是我的妈妈和妻子，她们在生活上对我无微不至的照顾，让我更有精力和动力去工作和创作。<br/>感谢东北大学信息技术学院的付冲教授，感谢您在我人生最穷困潦倒的时候伸出援手。<br/>感谢北京总公司的技术总监唐老师，他对iptables防火墙相关的内容提出了许多指导性的建议，并且在CDN系统维护方面教会了我许多。<br/>感谢老男孩前辈在网站架构设计方面给出的指导性意见，您的经验和专业知识让我受益匪浅。<br/>感谢和我一起从事系统运维工作的朋友：曹亚孟、胡安伟和崔晓辉。曹亚孟为本书中与Linux虚拟化相关的内容提供了宝贵的资料，这是他几年来从事XEN虚拟化工作的经验总结；胡安伟为本书提供了许多精美的插图，并就Linux集群相关的内容提出了许多宝贵的意见；崔晓辉为本书提供了大量的线上SHELL脚本。另外，还要对我的同事ritto表示衷心的感谢！<br/>感谢51cto.com的编辑们，尤其是赵克衡、杨赛、王文文、张浩和邵程程，正是有了你们的信任和帮助，此书才得以问世。<br/>感谢Linux高级群中的深夜的蚊子、结冰的西瓜和无语、jack、狠希耐、REAL97等朋友，感谢你们对我的支持，没有你们的相伴，我能否坚持到今天，可能还是个未知数。<br/>感谢我的朋友三宝，感谢他这么多年来对我的信任和支持，在我苦闷的时候陪我聊天。<br/>感谢在工作和生活中给予过我帮助的所有人，感谢你们，正是因为有了你们，才有了本书的问世。<br/><br/>关于勘误<br/>尽管我花了大量时间和精力去核对书中的文字、代码和图片，但因为时间仓促和水平有限，书中仍难免会有一些错误和纰漏，如果大家发现问题，恳请反馈给我，相关信息可发到我的邮箱yuhongchun027@gmail.com。尽管我无法保证每一个问题都会有正确的答案，但我肯定会努力回答和并且指出一个正确的方向。<br/>如果大家对本书有任何疑问或想与我探讨Linux技术，可以访问我的个人博客，地址为：http://andrewyu.blog.51cto.com，我的微博地址为：http://weibo.com/yuhongchun027。另外，我在51cto.com和ChinaUnix社区的ID均为“抚琴煮酒”，大家也可以直接通过此ID在社区中与我在线交流。<br/>余洪春（抚琴煮酒）<br/>2011年8月<br/><br/><strong>目录：</strong><br/>推荐序一<br/>推荐序二<br/>推荐序三<br/>前言<br/>第1章　Linux服务器构建基础/1<br/>1.1　Linux服务器的安装方法/2<br/>1.1.1　光盘安装Centos5.5 x86_64/2<br/>1.1.2　使用PXE+DHCP+Apache+KickStart无人值守安装RHEL/12<br/>1.1.3　Linux的其他安装方法/17<br/>1.2　全面了解Linux服务器/18<br/>1.2.1　查看Linux服务器的CPU详细情况/18<br/>1.2.2　查看Linux服务器的内存使用情况/19<br/>1.2.3　查看Linux服务器的硬盘使用情况/20<br/>1.2.4　查看Linux系统的平均负载/24<br/>1.2.5　查看Linux系统的其他参数/25<br/>1.3　Linux服务器的网络配置/28<br/>1.3.1　配置Linux服务器的网络/28<br/>1.3.2　查看Linux服务器的网络连接/31<br/>1.3.3　查看Linux服务器的进程/39<br/>1.3.4　在Centos5.5、FreeBSD8.1及Windows下添加静态路由/43<br/>1.4　Linux服务器的日志管理/45<br/>1.4.1　系统日志syslog.conf的配置详解/46<br/>1.4.2　Linux下的日志维护技巧/47<br/>1.4.3　用shell脚本分析Nginx日志/51<br/>1.5　Linux服务器的优化/53<br/>1.5.1　根据服务器应用来选购服务器/54<br/>1.5.2　Centos5.5最小化安装后的优化/58<br/>1.5.3　优化Linux下的内核TCP参数以提高系统性能/63<br/>1.5.4　生产服务器应尽量选择编译安装软件包/65<br/>1.6　用开源工具Nagios监控Linux服务器/66<br/>1.6.1　Centos5.5下的监控工具简介/66<br/>1.6.2　Nagios应该监控的服务器基础选项/67<br/>1.6.3　Nagios监控Windows 2003时应注意的事项/67<br/>1.6.4　用Nagios监控Nginx脚本/68<br/>1.6.5　Nagios使用心得/74<br/>1.7　项目实施中应该注意的事项/75<br/>1.8　小结/77<br/>第2章　FreeBSD8.1在企业中的部署应用/78<br/>2.1　最小化安装FreeBSD8.1/79<br/>2.2　最小化安装FreeBSD8.1后的升级优化部署/90<br/>2.2.1　最小化安装FreeBSD8.1服务器后建议做的事/90<br/>2.2.2　系统管理员应该知道的FreeBSD8.1的一些事项/95<br/>2.2.3　在FreeBSD8.1下高效地安装和卸载软件/99<br/>2.2.4　查看FreeBSD8.1的硬件配置/100<br/>2.3　在FreeBSD8.1下部署jail虚拟机/103<br/>2.3.1　FreeBSD8.1下的jail概述/103<br/>2.3.2　FreeBSD8.1下安装jail的详细步骤/104<br/>2.3.3　FreeBSD8.1下jail的管理/105<br/>2.3.4　通过ezjail来创建和管理jail虚拟机/106<br/>2.3.5　jail在生产环境下的注意事项/109<br/>2.4　在FreeBSD8.1下搭建版本控制服务器/109<br/>2.4.1　版本控制软件的概念/109<br/>2.4.2　在FreeBSD8.1下搭建CVS服务器/109<br/>2.4.3　在FreeBSD8.1下搭建SVN服务器/113<br/>2.4.4　在FreeBSD8.1下搭建Git服务器/117<br/>2.5　在FreeBSD8.1下搭建Samba文件服务器/121<br/>2.5.1　Samba概述/121<br/>2.5.2　在FreeBSD8.1下安装配置Samba3.4/121<br/>2.5.3　Samba的详细语法配置/122<br/>2.5.4　Samba在工作中的总结/124<br/>2.5.5　Linux下的高级权限文件控制/125<br/>2.5.6　Samba在企业开发环境中的常用案例之一/127<br/>2.5.7　Samba在企业开发环境中的应用案例之二/128<br/>2.6　在FreeBSD8.1下配置NFS文件服务器/131<br/>2.7　在FreeBSD8.1与Centos5.5下搭建rsync服务器/134<br/>2.7.1　rsync的概念/134<br/>2.7.2　在Centos5.5下配置rsync服务器/134<br/>2.7.3　在FreeBSD8.1下配置rsync服务器/138<br/>2.7.4　rsync+Inotify实现数据的实时同步更新/140<br/>2.8　在FreeBSD8.1下搭建vsftpd服务器/143<br/>2.8.1　vsftpd服务器的特点/143<br/>2.8.2　vsftpd的运行模式/144<br/>2.8.3　vsftpd的数据连接模式/144<br/>2.8.4　vsftpd到底安全在哪里/145<br/>2.8.5　在FreeBSD8.1下配置vsftpd服务器/146<br/>2.8.6　用vsftpd作Linux/Unix之间的异地备份/147<br/>2.9　在FreeBSD8.1和Centos5.5下搭建PHP和Java应用环境/149<br/>2.9.1　在FreeBSD8.1下搭建FAMP环境/149<br/>2.9.2　在生产环境下配置LNMP环境/152<br/>2.9.3　在Centos5.5下搭建Java运行环境/172<br/>2.10　小结/176<br/>第3章　Linux服务器虚拟化/177<br/>3.1　在Windows Server 2003下安装VMware GSX Server/178<br/>3.2　用Windows 2003+VMware Server搭建64位系统测试环境/181<br/>3.3　在Centos5.6 x86_64下安装Xen虚拟机/183<br/>3.3.1　XEN在Centos5.6 x86_64下的安装步骤/183<br/>3.3.2　XEN虚拟机的优势/185<br/>3.4　XEN在生产环境下的应用/185<br/>3.4.1　XEN虚拟化的基本概念/185<br/>3.4.2　在Centos5.5下安装XEN虚拟机/187<br/>3.4.3　安装第一台虚拟机(模板机)/189<br/>3.4.4　XEN寄宿服务器的管理/191<br/>3.4.5　XEN在生产环境下的应用/194<br/>3.5　Citrix XenServer5.6虚拟机试用手记/196<br/>3.6　小结/202<br/>第4章　生产环境下服务器的故障诊断与排除/203<br/>4.1　快速排障的重要性和必要性/204<br/>4.2　安装系统时容易发生的错误描述与处理方法/204<br/>4.2.1　忘记了Centos5.5的root密码怎么办/204<br/>4.2.2　正确重设root密码/206<br/>4.2.3　安装FreeBSD8.1时不要设置/boot分区/207<br/>4.2.4　Centos5.5的Grub引导程序出错/207<br/>4.2.5　安装Centos5.5时忘了关闭iptables和SELinux/208<br/>4.2.6　如何解决Putty或PieTTY的乱码问题/209<br/>4.2.7　安装双系统时不小心删除了Grub所在的分区/209<br/>4.3　网络配置时容易发生的错误描述与处理方法/211<br/>4.3.1　安装Centos5.5时忘了激活网卡/211<br/>4.3.2 　Centos5.5网卡文件备份的正确方法/212<br/>4.3.3　解决远程桌面超出最大连接数的问题/213<br/>4.3.4　在Centos5.5下如何正确配置网关/214<br/>4.3.5　VMware的机器应该如何配置自动对时/214<br/>4.3.6　防火墙初始化的注意事项/215<br/>4.4　系统维护时的注意事项/215<br/>4.4.1　尽量源码安装，谨慎操作yum/215<br/>4.4.2　服务器硬件改动进入了Emergency模式/216<br/>4.4.3　如何以普通用户的身份编辑无权限的文件/216<br/>4.4.4　在Linux下配置最大文件打开数的方法/216<br/>4.4.5　在Crontab下运行PHP程序的正确方法/218<br/>4.4.6　在Crontab下正确防止脚本运行冲突/218<br/>4.5　紧急处理线上服务器故障的办法/219<br/>4.5.1　更改Administrator密码导致计划任务无法执行/219<br/>4.5.2　FreeBSD8.1下的sudoer文件意外损坏/219<br/>4.5.3　Centos5.5的root密码被恶意篡改/219<br/>4.5.4　bash损坏该如何正确处理/220<br/>4.5.5　正确操作nohup让程序始终在后台运行/221<br/>4.5.6　负载均衡器出现故障/221<br/>4.6　检查机房应注意的位置和细节问题/221<br/>4.7　系统维护时应注意的非技术因素/222<br/>4.8　小结/222<br/>第5章　生产环境下的SHELL脚本/223<br/>5.1　Vim的基础用法及进阶心得/224<br/>5.2　Sed的基础用法及实用举例/228<br/>5.2.1　Sed的基础语法格式/228<br/>5.2.2　Sed的用法举例说明/230<br/>5.3　基础正则表达式/235<br/>5.4　Linux下强大的查找命令find/240<br/>5.5　汇总Linux/Unix下的bash快捷键/248<br/>5.6　生产环境下的SHELL脚本分类/249<br/>5.6.1　生产环境下的SHELL脚本备份类/250<br/>5.6.2　生产环境下的开发类SHELL脚本/257<br/>5.6.3　生产环境下的统计类SHELL脚本/259<br/>5.6.4　生产环境下的监控类SHELL脚本/262<br/>5.6.5　生产环境下的自动化类SHELL脚本/265<br/>5.6.6　生产环境下的安全类SHELL脚本/269<br/>5.7　小结/272<br/>第6章　构建高可用的Linux集群/273<br/>6.1　负载均衡高可用的核心概念和常用软件/274<br/>6.1.1　什么是负载均衡高可用/274<br/>6.1.2　以F5 BIG-IP作为负载均衡器/275<br/>6.1.3　以LVS作为负载均衡器/275<br/>6.1.4　以Nginx作为负载均衡器/281<br/>6.1.5　以HAProxy作为负载均衡器/281<br/>6.1.6　高可用软件Keepalived/283<br/>6.1.7　高可用软件Heartbeat/283<br/>6.1.8　高可用块设备DRBD/284<br/>6.2　负载均衡中的名词解释/285<br/>6.2.1　什么是Session/285<br/>6.2.2　什么是Session共享及实现的方法/285<br/>6.2.3　什么是会话保持/286<br/>6.3　负载均衡器的会话保持机制/287<br/>6.3.1　F5 Big-IP的会话保持机制/287<br/>6.3.2　LVS的会话保持机制/288<br/>6.4　Linux集群的项目案例分享/299<br/>6.4.1　项目案例一：用Nginx+Keepalived实现在线票务系统/299<br/>6.4.2　项目案例二：企业级Web负载均衡高可用之Nginx+Keepalived/302<br/>6.4.3　项目案例四：用LVS+Keepalived构建高可用JSP集群/313<br/>6.4.4　项目案例五：生产环境下的高可用NFS文件服务器/322<br/>6.4.5　项目案例六：HAProxy双机高可用方案之HAProxy+Heartbeat/331<br/>6.5　项目实践中Linux集群的总结和思考/336<br/>6.6　网站架构应关注和研究的方向/338<br/>6.7　MySQL数据库的优化/339<br/>6.7.1　服务器物理硬件的优化/339<br/>6.7.2　MySQL应该采用编译安装的方法/340<br/>6.7.3　MySQL配置文件的优化/340<br/>6.7.4　MySQL上线后根据status状态进行适当优化/346<br/>6.7.5　MySQL数据库的可扩展性架构方案/352<br/>6.7.6　MySQL数据库的Replication高可用架构/352<br/>6.7.7　MySQL Cluster集群配置方案/354<br/>6.7.8　生产环境下的MySQL数据库主从Replication同步/360<br/>6.7.9　可扩展性设计之数据切分/368<br/>6.8　生产环境下的MySQL数据库备份/369<br/>6.9　部分项目施工图纸/372<br/>6.10　小结/374<br/>第7章　VPN在企业中的部署应用/375<br/>7.1　流行的VPN技术及其分类/376<br/>7.2　如何选择自己需要的VPN/378<br/>7.3　IPSec VPN的不足/378<br/>7.4　OpenVPN的应用范畴/379<br/>7.5　经典企业VPN部署案例/379<br/>7.5.1　案例一：在Centos5.5 x86_64下单网卡配置PPTPD服务器/379<br/>7.5.2　案例二：在Centos5.5 x86_64下路由模式配置OpenVPN服务器/386<br/>7.5.3　案例三：在FreeBSD8 x86_64下网桥模式配置OpenVPN服务器/396<br/>7.6　部署OpenVPN服务器的注意事项/402<br/>7.6.1　OpenVPN如何注销用户/402<br/>7.6.2　OpenVPN服务器的安全问题/403<br/>7.6.3　OpenVPN服务器的负载均衡/404<br/>7.7　小结/404<br/>第8章　Linux防火墙及系统安全篇/405<br/>8.1　基础网络知识/406<br/>8.1.1　OSI网络参考模型/406<br/>8.1.2　TCP/IP三次握手/四次挥手的过程详解/407<br/>8.1.3　其他基础网络知识/409<br/>8.2　Linux防火墙的概念/409<br/>8.3　Linux防火墙在企业中的作用/410<br/>8.4　Linux防火墙的语法/410<br/>8.5　iptables的基础知识/414<br/>8.5.1　iptables的状态state/414<br/>8.5.2　iptables的Conntrack记录/416<br/>8.5.3　关于iptables模块的说明/416<br/>8.5.4　iptables防火墙初始化的注意事项/416<br/>8.5.5　如何保存运行中的iptables规则/417<br/>8.6　如何流程化编写iptables脚本/418<br/>8.7　学习iptables应该掌握的工具/420<br/>8.7.1　命令行的抓包工具TCPDump/420<br/>8.7.2　图形化抓包工具Wireshark/421<br/>8.7.3　强大的命令行扫描工具Nmap/424<br/>8.7.4　安全工具hping/426<br/>8.8　iptables的简单脚本学习/428<br/>8.8.1　普通的Web主机防护脚本/429<br/>8.8.2　如何让别人ping不到自己而自己能ping通别人/430<br/>8.8.3　建立安全的vsftpd服务器/432<br/>8.9　线上生产服务器的iptables脚本/436<br/>8.9.1　安全的主机iptables防火墙脚本/437<br/>8.9.2　自动分析黑名单及白名单的iptables脚本/439<br/>8.9.3　利用recent模块限制同一IP的连接数/441<br/>8.9.4　利用DenyHosts工具和脚本来防止SSH暴力破解/444<br/>8.9.5　将iptables作为企业的NAT路由器/448<br/>8.9.6　如何使用工具精确地监控NAT路由器/451<br/>8.10　TCP_wrappers应用级防火墙的介绍和应用/458<br/>8.11　工作中的Linux防火墙总结/460<br/>8.12　Linux系统自身的安全防护/461<br/>8.12.1　SELinux简介/461<br/>8.12.2　SELinux的相关设置/461<br/>8.13　Linux系统安全相关的工具/462<br/>8.13.1　Rootkit检测工具Chkrootkit/462<br/>8.13.2　文件系统完整性检查工具Tripwire/464<br/>8.13.3　防恶意扫描软件PortSentry/470<br/>8.14　Linux服务器基础防护篇/474<br/>8.15　如何防止入侵/475<br/>8.16　小结/476<br/>第9章　如何构建开源免费的企业级邮件系统/477<br/>9.1　DNS服务器的架设/478<br/>9.1.1　邮件服务器与DNS的关系/478<br/>9.1.2　如何架设内部DNS服务器/480<br/>9.1.3　如何以源码方式安装公网DNS服务器/487<br/>9.1.4　维护DNS服务器应该注意的事项/494<br/>9.2　电子邮件的传输过程/496<br/>9.3　如何搭建开发邮件服务器/498<br/>9.3.1　搭建Sendmail+Dovecot邮件系统/498<br/>9.3.2　搭建Postfix+Dovecot邮件系统/501<br/>9.4　搭建iRedmail企业级邮件服务器/504<br/>9.4.1　iRedmail企业级邮件服务器的介绍/504<br/>9.4.2　在Centos5.2 x86_64上安装iRedmail0.4.0/505<br/>9.4.3　Postfix本身的防垃圾功能/508<br/>9.4.4　iRedmail0.4.0特有的防垃圾技术/513<br/>9.4.5　iRedmail0.4.0是如何利用ClamAV防病毒的/517<br/>9.4.6　iRedmail0.4.0邮件服务器的网络安全/517<br/>9.4.7　iRedmail0.4.0邮件服务器系统的监控/520<br/>9.4.8　iRedmail0.4.0的系统文件备份/522<br/>9.4.9　iRedmail0.4.0的MySQL数据库备份方案/526<br/>9.4.10　维护iRedmail0.4.0邮件服务器的一些注意事项/532<br/>9.5　小结/533<br/>第10章　系统管理员在企业中的职业定位及发展方向/534<br/>10.1　系统管理员的概念和工作职责/535<br/>10.2　系统管理员应该熟悉的系统/536<br/>10.3　系统管理员应该熟悉的工具/540<br/>10.4　Linux的学习及进阶之路/544<br/>10.5　系统管理员应该如何工作/547<br/>10.6　给Linux/Unix新人的建议/549<br/>10.7　系统管理员之企业生存守则/550<br/>10.8　小结/553<br/>附录A　Xmanager 3.0企业版实用技巧集锦/554<br/>附录B　使用Screen管理远程会话/564<br/>附录C　自动化部署管理工具Puppet/566<br/>附录D　漫谈CDN系统运维与电子商务运维/572 <br/><br/><strong>预定地址：</strong><br/>中国互动出版网 <a href="http//product.china-pub.com/198674" target="_blank">http//product.china-pub.com/198674</a><br/>卓越网 <a href="http://www.amazon.cn/mp/dp/B005YWYFU0/" target="_blank">http://www.amazon.cn/mp/dp/B005YWYFU0/</a><br/>京东网 <a href="http://book.360buy.com/10867194.html" target="_blank">http://book.360buy.com/10867194.html</a><br/>当当网 <a href="http://product.dangdang.com/product.aspx?product_id=22528364&ref=search-1-pub" target="_blank">http://product.dangdang.com/product.aspx?product_id=22528364&ref=search-1-pub</a><br/>Tags - <a href="http://blog.liuts.com/tags/%25E6%259E%2584%25E5%25BB%25BA%25E9%25AB%2598%25E5%258F%25AF%25E7%2594%25A8linux%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">构建高可用linux服务器</a> , <a href="http://blog.liuts.com/tags/linux/" rel="tag">linux</a> , <a href="http://blog.liuts.com/tags/%25E4%25B9%25A6%25E7%25B1%258D/" rel="tag">书籍</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/231/</link>
<title><![CDATA[RedBridge: Redis for HTTP API[推荐]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sat, 22 Oct 2011 14:28:32 +0000</pubDate> 
<guid>http://blog.liuts.com/post/231/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RedBridge 是一款基于redis 的 HTTP API。 使用LUA 直接跟redis 交互。(类似数据库的存储过程) 高效的实现复杂的业务逻辑。<br/>项目网址：<a href="http://code.google.com/p/redbridge/" target="_blank">http://code.google.com/p/redbridge/</a><br/>使用环境：Linux 2.6<br/>软件作者：七夜(李锦星)<br/><br/>RedBridge 具有以下特征：<br/>1. 使用C+epoll 编写的Web Server,支持HTTP GET操作<br/>2. 连接池,连接句柄复用，提高跟redis连接效率<br/>3. 部分类库使用Redis的代码,更加的稳定<br/>4. 使用LUA直接调用Redis命令，实现一次性数据交互实现 复杂的业务逻辑。不需要多次数据交互<br/>5. 服务模型采用单进程，双线程模式<br/>6. 配置文件采用Lua 语法, 容易读取和书写<br/>7. RedBridge发布前，还没有类似的开源项目<br/><br/>安装文档(以下安装文档由暗黑提供)<br/><br/>lua: <a href="http://www.lua.org/download.html" target="_blank">http://www.lua.org/download.html</a><br/>tcmalloc: <a href="http://code.google.com/p/google-perftools/" target="_blank">http://code.google.com/p/google-perftools/</a><br/>redis 需要这个带script的版本才行&nbsp;&nbsp;<a href="http://code.google.com/p/redis/downloads/detail?name=redis-2.2.111-scripting.tar.gz&can=2&q=" target="_blank">http://code.google.com/p/redis/downloads/detail?name=redis-2.2.111-scripting.tar.gz&can=2&q=</a><br/>redis 内部执行lua代码的 官方blog文章: <a href="http://antirez.com/post/redis-and-scripting.html" target="_blank">http://antirez.com/post/redis-and-scripting.html</a><br/> <br/>1、下载支持LUA 版本的redis<br/>tar redis-2.2.111-scripting.tar.gz<br/>cd&nbsp;&nbsp;redis-2.2.111-scripting/src<br/>make&nbsp;&nbsp;<br/>make install&nbsp;&nbsp;<br/>redis-server&nbsp;&nbsp;/usr/local/src/redis-2.2.111-scripting/redis.conf&nbsp;&nbsp;&nbsp;&nbsp;redis 默认配置文件<br/>redis-server&nbsp;&nbsp;/usr/local/redis/redis.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动redis<br/><br/>2、LUA 安装 <br/>tar -zxvf lua-5.1.4.tar.gz<br/>cd lua-5.1.4<br/>make&nbsp;&nbsp; 提示：<br/>Please do<br/>make PLATFORM<br/>where PLATFORM is one of these:<br/>aix ansi bsd freebsd generic linux macosx mingw posix solaris<br/>See INSTALL for complete instructions.<br/>如果系统平台名称是否在支持的列表中，如果存在则继续运行 make PLATFORM 如果不存在 直接运行 make&nbsp;&nbsp;generic.<br/>make generic<br/>make install <br/>测试LUA 安装是否成功<br/>shell > lua&nbsp;&nbsp;<br/>print ('aaa')<br/>aaa&nbsp;&nbsp;则表示成功。<br/><br/>3、安装&nbsp;&nbsp;google-perftools<br/>tar -zxvf google-perftools-1.8.3.tar.gz <br/> cd&nbsp;&nbsp;google-perftools-1.8.3<br/> ./configure&nbsp;&nbsp;prefixx=/usr/local/google-perftools/<br/>make&nbsp;&nbsp; <br/>make&nbsp;&nbsp;install<br/> <br/>4. 安装RedBridge<br/>./configure --prefix=RedBridge安装目录 --tcmalloc=google-perftools安装目录 --lua=lua安装目录<br/>make<br/>make install<br/><br/>如果没报错的话,就安装成功了<br/>安装后目录<br/>.<br/>├── script(lua 代码 放此处)<br/>│&nbsp;&nbsp; └── read.lua (lua示例代码)<br/>├── redbridge<br/>├── RedBridge.lua (配置文件)<br/><br/><strong>程序启动流程</strong><br/>1. redbridge 解析 RedBridge.lua 配置文件<br/>2. 把lua代码文件 加载到内存HashTable<br/>3. 初始化连接池, 建立数条跟后端redis的连接<br/> <br/><strong>用户访问流程</strong><br/><a href="http://www.cellphp.com/attachment/red.png" target="_blank"><img src="http://www.cellphp.com/attachment/red.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>案例分享</strong><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之前就职于一家精准广告投放公司。是和各个门户网站合作投放广告，所以每天的访问量也很大。原先广告投放核心是采用<br/>Apache module方式，定期从mysql重载广告素材，投放条件等数据。<br/>这个投放核心存在以下问题<br/>1. 需要再apache module 写大量的业务逻辑 C代码(比如根据页面关键词、IP等条件进行广告投放).&nbsp;&nbsp;使C代码更加的复杂。如果缺少完整的文档。别人很难接手维护<br/>2. 投放核心 需要定期从MySQL重载数据。 <br/>3. 代码结构不清晰。维护不容易<br/>4. 因为业务需要,经常需要修改修改业务逻辑。所以要反复编译、部署、测试。比较麻烦<br/><br/><strong>采用RedBridge 新架构后带来的好处</strong><br/><br/>1. 业务逻辑和核心代码区分开来。使代码结构更加清晰<br/>2. 因为业务逻辑使用lua来实现，使用不会C的开发人员也可以轻松修改lua代码 来改变业务逻辑<br/>3. 广告数据和定向条件 都存储在redis的不同数据类型中。后台更新数据的时候，直接由PHP把数据加载到redis中去。不用定期重载mysql的数据<br/> <br/><strong>关于性能</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据热心网友"暗黑"实际测试,&nbsp;&nbsp;比nginx+php和nodejs方式高。 内存占用和CPU资源占用，都比较低<br/> <br/><strong>总结</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和agentzh的Redis2NginxModule 还是有区别的。 Redis2NginxModule执行的是原始redis命令。RedBridge 是能用lua直接调用redis命令，实现复杂的业务逻辑，只用一次交互就行。<br/>Tags - <a href="http://blog.liuts.com/tags/redis/" rel="tag">redis</a> , <a href="http://blog.liuts.com/tags/redbridge/" rel="tag">redbridge</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/230/</link>
<title><![CDATA[告别天涯，加盟腾讯]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Thu, 01 Sep 2011 10:05:45 +0000</pubDate> 
<guid>http://blog.liuts.com/post/230/</guid> 
<description>
<![CDATA[ 
	逝去6年激情燃烧的岁月，去迎接更大的挑战。<br/>Tags - <a href="http://blog.liuts.com/tags/%25E7%25A6%25BB%25E8%2581%258C/" rel="tag">离职</a> , <a href="http://blog.liuts.com/tags/%25E5%25A4%25A9%25E6%25B6%25AF/" rel="tag">天涯</a> , <a href="http://blog.liuts.com/tags/%25E8%2585%25BE%25E8%25AE%25AF/" rel="tag">腾讯</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/229/</link>
<title><![CDATA[童真[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Mon, 18 Jul 2011 15:40:56 +0000</pubDate> 
<guid>http://blog.liuts.com/post/229/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;"><span style="font-family: 微软雅黑;"><strong><br/><span style="color: #32CD32;">这个盛夏迎来你的480天<br/>烈日炎炎，你给我们的小家带来一阵阵清凉<br/>你成长的一点一滴都是我们热议的话题<br/>你的发呆、欢笑、闹闹、好奇、大叫都那么轻易引起关注<br/>每天你学会说不同的话<br/>每天你在你的世界里都是那么的忙，搬玩具、拆家具、丢衣服、玩弄碗筷、戏水、摔手机... ...</span><br/><br/><span style="color: #F4A460;">每天带着疲惫的身躯回家，听到你响亮而清晰的一声-爸爸、妈妈<br/>身上的疲惫仿佛已经烟消云散，袭来的是一股股暖流<br/>同时，更多的还有责任<br/>愿幸福、健康、快乐永远伴随你</span><br/></span><br/></span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=317" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=317" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=318" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=318" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=319" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=319" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=320" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=320" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=321" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=321" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=322" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=322" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=323" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=323" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=324" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=324" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=325" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=325" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=326" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=326" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=329" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=329" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=327" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=327" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=328" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=328" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://blog.liuts.com/tags/%25E5%25AE%259D%25E5%25AE%259D%25E3%2580%2580%25E5%2586%2599%25E7%259C%259F/" rel="tag">宝宝　写真</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/227/</link>
<title><![CDATA[常见负载均衡器禁(启)用成员汇总[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 09 May 2011 14:11:15 +0000</pubDate> 
<guid>http://blog.liuts.com/post/227/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在我们日常运维工作中，经常会碰到负载均衡器后端应用代码更新、临时剔除后端服务器、排查一主机应用故障等，往往我们会选择比较粗鲁的做法，直接停止或重启应用服务，让负载均衡器探测服务不可用将其剔除。这样带来的坏处是用户与服务器已经建立的连接会被中止，开发人员无法对已经停止服务的主机进行调试。现介绍一种较为温柔的做法，即通过禁用/启用成员的方式来达到目的。本文针对目前最为流行的负载均衡器逐一进行介绍。包括LVS、Haproxy、F5在命令行模式下的实现(方便与其它管理平台对接，实现自动化维护)。当然，Haproxy与F5都提供了人性化管理界面，不过只依赖手工来进行操作。<br/><br/><strong><span style="font-size: 18px;">一、LVS负载均衡器</span></strong><br/><strong>原理</strong><br/>使用LVS自带的管理工具来实现。<br/><br/><strong>环境说明</strong><br/>Disable VIP:192.168.100.11:80<br/>Disable REAL SERVER:192.168.100.78<br/><br/><strong>实施步骤</strong><br/>1、初始状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/>&nbsp;&nbsp;-> 192.168.100.78:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;438<br/></div></div><br/>2、禁用成员<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -d -t 192.168.100.11:80 -r 192.168.100.78</span></strong><br/><br/>3、当前状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/></div></div><br/>4、启用成员<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]#ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.78</span></strong><br/><br/>5、当前状态<br/><strong><span style="color: #008080;">[devuser@lvsserver ~]# ipvsadm -Ln</span></strong><br/><div class="quote"><div class="quote-content"><br/>IP Virtual Server version 1.2.1 (size=4096)<br/>Prot LocalAddress:Port Scheduler Flags<br/>&nbsp;&nbsp;-> RemoteAddress:Port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Forward Weight ActiveConn InActConn<br/>TCP&nbsp;&nbsp;192.168.100.11:80 rr persistent 60<br/>&nbsp;&nbsp;-> 192.168.100.74:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;462&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;464&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;-> 192.168.100.75:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;-> 192.168.100.76:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;431&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;400<br/>&nbsp;&nbsp;-> 192.168.100.77:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;432<br/>&nbsp;&nbsp;-> 192.168.100.78:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Route&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;435&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;438<br/></div></div><br/><br/><span style="font-size: 18px;"><strong>二、Haproxy负载均衡器</strong></span><br/><strong>原理</strong><br/>使用Haproxy的socket admin通道来实现。<br/><br/><strong>环境说明</strong><br/>Disable backend:test.tianya.cn<br/>Disable REAL SERVER:192.168.100.78<br/><br/><strong>实施步骤</strong><br/>1、修改haproxy.cfg配置<br/><strong><span style="color: #008080;">#vi /usr/local/haproxy/etc/haproxy.cfg</span></strong><br/>在global域添加socket admin支持并重启Haproxy服务<br/><div class="quote"><div class="quote-content"><br/>global<br/>... ...<br/>&nbsp;&nbsp; stats socket /usr/local/haproxy/HaproxySocket level admin<br/>... ...<br/></div></div><strong><span style="color: #008080;">#service haproxy restart</span></strong><br/><br/>2、安装socat(在任意的两个socket管道之间建立一个通道，在该通道中交换两端的数据。)<br/><div class="quote"><div class="quote-content"><br/>wget http://www.dest-unreach.org/socat/download/socat-2.0.0-b3.tar.gz<br/>./configure --disable-fips<br/>make;make install<br/></div></div><br/>注：disable OpenSSL FIPS support&nbsp;&nbsp;"--disable-fips"，在没有安装fips包的情况下make时会提示：<br/><div class="quote"><div class="quote-content"><br/>FIPSLD_CC=gcc fipsld -O -D_GNU_SOURCE&nbsp;&nbsp;-Wall -Wno-parentheses -DHAVE_CONFIG_H -I.&nbsp;&nbsp;-I.&nbsp;&nbsp; -c -o socat.o socat.c<br/>/bin/sh: fipsld: command not found<br/>make: *** [socat.o] Error 127<br/></div></div><br/><br/>3、禁用成员<br/><strong><span style="color: #008080;">#echo "disable server test.tianya.cn/192.168.100.78" &#124; socat stdio /usr/local/haproxy/HaproxySocket</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=311" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=311" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>4、启用成员<br/><strong><span style="color: #008080;">#echo "enable server test.tianya.cn/192.168.100.78" &#124; socat stdio /usr/local/haproxy/HaproxySocket</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=312" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=312" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><strong>三、F5-LTM负载均衡器</strong></span><br/><strong>原理</strong><br/>使用F5-iControl开发包Pycontrol对F5设备进行管理。<br/><br/><strong>环境说明</strong><br/>Disable POOL:test.tianya.cn<br/>Disable SERVER:192.168.100.42:80 192.168.100.43:80 192.168.100.44:80<br/><br/><strong>实施步骤</strong><br/>1、部署运行环境<br/><strong><span style="color: #008080;">#mkdir -p /home/install;cd /home/install</span></strong><br/>安装python环境(略)，要求py2.5或以上。<br/>1.1、安装SUDS模块<br/><div class="quote"><div class="quote-content"><br/>#wget https://fedorahosted.org/releases/s/u/suds/python-suds-0.3.8.tar.gz<br/>#tar xvfz python-suds-0.3.8.tar.gz<br/>#cd python-suds-0.3.8<br/>#python setup.py install<br/></div></div><br/>1.2、安装PYCONTROL模块<br/><div class="quote"><div class="quote-content"><br/>#wget http://trungale.net/pycontrol.tar.gz<br/>#tar xvfz pycontrol.tar.gz<br/>#cd trunk<br/>#python setup.py install<br/></div></div><br/>1.3、校验安装结果<br/>#python<br/><textarea name="code" class="python" rows="15" cols="100">
>>> import suds
>>> import pycontrol.pycontrol as pc
>>> suds.__version__
'0.4'
>>> suds.__build__
'GA R699-20100913'
>>> pc.__version__
'2.0.1'
>>> pc.__build__
'r83'
>>>
</textarea><br/>2、编写LB_member.py代码<br/><textarea name="code" class="python" rows="15" cols="100">
# -*- coding: utf-8 -*-
"""
----------------------------------------------------------------------------
 Disable/Enable F5-LTM POOL member 
 Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LB_member.py
 Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Liu tian si 
 Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; liutiansi@gamil.com
 Created:&nbsp;&nbsp;&nbsp;&nbsp; 2011/05/08
 Version:&nbsp;&nbsp;&nbsp;&nbsp; 1.0
 Blog:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://blog.liuts.com
 Copyright:&nbsp;&nbsp; (c) 2011
----------------------------------------------------------------------------
"""

import sys
import time
import string
import pycontrol.pycontrol as pc

"""
----------------------------------------------------------------------------
 F5-LTM Disable/Enable Pool member Class
----------------------------------------------------------------------------
__init__() -Initialization F5-BIG object
set_pool_member() -Initialization pool and member object
member_factory() -Create a pool member object (Common.IPPortDefinition)
session_state_factory() -Create a session state object (LocalLB.PoolMember.MemberSessionState)
disable_member() -Disable menber methods
enable_member() -Enable menber methods
----------------------------------------------------------------------------
"""

class F5_LB_menber():

&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self,_hostname,_username,_password):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b = pc.BIGIP(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hostname = _hostname,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username = _username,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password = _password,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fromurl = True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wsdls = ['LocalLB.PoolMember'])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sstate_seq = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionStateSequence')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;def set_pool_member(self,pool,members):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.POOL=pool
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.members=members
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sstate_seq.item = self.session_state_factory()

&nbsp;&nbsp;&nbsp;&nbsp;def member_factory(self, member):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ip,port = member.split(':')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem = self.b.LocalLB.PoolMember.typefactory.create('Common.IPPortDefinition')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem.address = ip
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pmem.port = int(port)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return pmem


&nbsp;&nbsp;&nbsp;&nbsp;def session_state_factory(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states = []
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.members:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sstate = self.b.LocalLB.PoolMember.typefactory.create('LocalLB.PoolMember.MemberSessionState')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sstate.member = self.member_factory(x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states.append(sstate)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return session_states

&nbsp;&nbsp;&nbsp;&nbsp;def disable_member(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.sstate_seq.item:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.session_state = 'STATE_DISABLED'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[self.POOL], session_states = [self.sstate_seq])
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except Exception, e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print e

&nbsp;&nbsp;&nbsp;&nbsp;def enable_member(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for x in self.sstate_seq.item:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.session_state = 'STATE_ENABLED'
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.b.LocalLB.PoolMember.set_session_enabled_state(pool_names = [self.POOL],
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session_states = [self.sstate_seq])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except Exception, e:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print e

if __name__ == "__main__":
&nbsp;&nbsp;&nbsp;&nbsp;if len(sys.argv) < 4:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "Usage %s POOL MEMBER:port[,member1:80,member2:80,member3:80] enable&#124;disable" % sys.argv[0]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "Examples: python LB_member.py app.domain.com 192.168.0.10:80,192.168.0.11:80,192.168.0.12:80 disable"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()

&nbsp;&nbsp;&nbsp;&nbsp;#F5 administrator info
&nbsp;&nbsp;&nbsp;&nbsp;hostname="192.168.100.2"
&nbsp;&nbsp;&nbsp;&nbsp;username="adminuser"
&nbsp;&nbsp;&nbsp;&nbsp;password="adminpass"

&nbsp;&nbsp;&nbsp;&nbsp;App=F5_LB_menber(hostname,username,password)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;#init F5 pool and member
&nbsp;&nbsp;&nbsp;&nbsp;CommandParameters = sys.argv[1:]
&nbsp;&nbsp;&nbsp;&nbsp;pool=CommandParameters[0]
&nbsp;&nbsp;&nbsp;&nbsp;members=string.split(CommandParameters[1],',')
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;App.set_pool_member(pool,members)
&nbsp;&nbsp;&nbsp;&nbsp;if CommandParameters[2]=="enable":
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;App.enable_member()
&nbsp;&nbsp;&nbsp;&nbsp;elif CommandParameters[2]=="disable":
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;App.disable_member()
&nbsp;&nbsp;&nbsp;&nbsp;else:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "opt parameters error!"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()
</textarea><br/><br/>3、源码分析：<br/> 3.1、创建一个池成员对象，将用户传入的成员列表转成规范的pool成员，见member_factory()方法;<br/> 3.2、创建一个会话状态对象，追加成员对象到会话状态当中，见session_state_factory()方法;<br/> 3.3、创建一个队列，将会话状态对象添加到队列子项中，同时修改所处状态，见__init__()、set_pool_member()、disable_member()/enable_member()方法。<br/><br/>4、禁用成员<br/><strong><span style="color: #008080;">#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 disable</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=313" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=313" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>5、启用成员<br/><strong><span style="color: #008080;">#python LB_member.py test.tianya.cn 192.168.100.42:80,192.168.100.43:80,192.168.100.44:80 enable</span></strong><br/><a href="http://blog.liuts.com/attachment.php?fid=314" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=314" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/><br/><strong>参考文章</strong><br/><a href="http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare" target="_blank">http://devcentral.f5.com/wiki/default.aspx/iControl.CodeShare</a><br/>Tags - <a href="http://blog.liuts.com/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%259D%2587%25E8%25A1%25A1%25E5%2599%25A8/" rel="tag">负载均衡器</a> , <a href="http://blog.liuts.com/tags/%25E7%25A6%2581%25E7%2594%25A8/" rel="tag">禁用</a> , <a href="http://blog.liuts.com/tags/%25E5%2590%25AF%25E7%2594%25A8/" rel="tag">启用</a> , <a href="http://blog.liuts.com/tags/lvs/" rel="tag">lvs</a> , <a href="http://blog.liuts.com/tags/haproxy/" rel="tag">haproxy</a> , <a href="http://blog.liuts.com/tags/f5/" rel="tag">f5</a> , <a href="http://blog.liuts.com/tags/python/" rel="tag">python</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/226/</link>
<title><![CDATA[技能大赛评委记[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Tue, 26 Apr 2011 15:17:00 +0000</pubDate> 
<guid>http://blog.liuts.com/post/226/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 受邀担任2011年海南省高职高专职业技能大赛“华汉” 杯网页设计与制作技能竞赛评委，此次竞赛有来自海南各高职院校的16支代表队48名选手参加，算是规格比较高的赛事。整理了大赛点滴与大家分享。<br/><br/><strong>一、大赛宗旨</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基于“发展网络文化，建立和谐校园”的宗旨，构建一个校园社交网站。目的是提供学生一个展示自我的平台，缓解学习和生活压力，帮助学生扩大社交网络圈子，为发展海南高校的校园文化做出贡献。<br/><br/><strong>二、大赛要求</strong><br/>1. 网站提供学生登录、注册的功能。<br/>2. 网页能动态提供校园新闻、网站公告、交友信息等内容的链接，用户可点击链接查看详情。（相关操作数据由组委会提供）<br/>3. 网页提供学生个人主页、博客或微博等内容的链接。<br/>4. 主页风格不限，但必须体现合理的布局和色彩搭配。<br/>5. 恰当使用页面设计及动画、视频设计等技术，充实页面内容。<br/>6. 原则上不提供图像和动画素材，若有需要须自行处理。<br/><br/><strong>三、大赛留影</strong><br/><a href="http://blog.liuts.com/attachment.php?fid=300" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=300" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --评委聘书--<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=299" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=299" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --在开幕式现场--<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=303" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=303" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --学生比赛现场--<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=304" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=304" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --开幕式现场1--<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=301" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=301" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --开幕式现场2--<br/><br/><a href="http://blog.liuts.com/attachment.php?fid=302" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=302" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --开幕式现场3--<br/><strong>四、大赛有感</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此次竞赛对选手的开发平台没有限制，从结果来看，70%的院校学生选择了ASP及.NET等微软技术平台，这是一个很不正常的现象。同时也从中反映了当前院校对计算机课程内容的选择。赛后与一学院教授进行了交谈，了解到大概情况如下：<br/>1、师资力量相对薄弱，大部分教师只熟悉微软技术；<br/>2、教育职能部门没有积极推动其它课程的引入；<br/>3、学校与企业交流不够密切；<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 个人认为学生在大学期间学的知识不要太单一，应该是多元化的，这样学生的知识面才会扩大，方能满足社会对计算机不同领域人才的需求。<br/>Tags - <a href="http://blog.liuts.com/tags/%25E5%25A4%25A7%25E8%25B5%259B/" rel="tag">大赛</a> , <a href="http://blog.liuts.com/tags/%25E8%25AF%2584%25E5%25A7%2594/" rel="tag">评委</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/225/</link>
<title><![CDATA[51CTO专访记录[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Tue, 29 Mar 2011 08:36:15 +0000</pubDate> 
<guid>http://blog.liuts.com/post/225/</guid> 
<description>
<![CDATA[ 
	采访人： 51CTO 李晶<br/>采访嘉宾：天涯社区 刘天斯<br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：首先，能否简单的介绍一下您在运维领域的经历？比如什么时候进入这行，现在主要负责哪方面的工作等等。</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：03年毕业后在一家网络公司从事开发兼美工设计的工作，一次偶然的机会接触到了Linux，从一开始的系统安装到各类常用应用平台的搭建。一步一步从一个程序员到运维工程师的转变。2005年加入天涯，正式成为一名运维工程师。目前主要负责的工作有应用平台的上线、部署、监控、调优、事件处理、应急预案等，涉及的领域有架构设计与优化、运维开发、负载均衡、缓存应用、数据库、分布式存储等。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：您在天涯社区做系统管理员的这段时间内遇到的最大困难是什么？您最难忘或最高兴的事是什么？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：如何协调各部门与运维的关系，不要再当炮灰了。最高兴的是部门定期聚餐，喝喝小酒，聊聊人生，畅所欲言。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：您对开源是如何理解的？天涯社区在过去两年间陆续开源了包含LVS管理系统、Varnish缓存推送平台、高性能数据引擎memlink等好几个项目，业内的同行们都十分关注，您认为这个对整个产业带来了哪些好处？身为一个天涯的运维，您认为这个过程对您自己的价值在哪里？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：开源就是分享，让更多的人受益的同时自己也在提高。经常看到很多朋友都在做监控平台、运维工具。事实上功能都是惊人的相似，大家都在做同样重复的工作，为什么不能其中一个人开源出来大家一起来使用、完善。对整个行业来讲这块的投入成本都会降低，对个体来讲也是资源的整合。如果形成良性的循环，行业的生态环境将有很大程度的改善。本人热衷于开源技术，同样也愿意为开源贡献自己一分微薄之力，希望更多的人能支持开源、参考开源。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：天涯社区在过去数年间逐渐从Windows平台全面转移到开源架构，很多朋友对天涯的这个转型过程很感兴趣，网上现在也有不少相关的资料。对于这个过程，您有哪些觉得特别好的资料想推荐给大家的吗？您自己在这个过程中有哪些心得？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：这个过程是漫长的，是一个快速发展壮大的互联网公司的必经之路。转型之前需考虑资源的投入、人才的储备。下一步便是相关技术及经验的积累，这方面的资源互联网上已经很丰富了。个人建议从前端应用、负载均衡、缓存层开始着手，理由是不仅不会给应用逻辑产生很大的干扰，同时还会给整个平台带来高可用性，保证在转型过程中平稳过渡。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：作为《2010年度十大杰出IT博客》之一，能否简单介绍一下您开博的经历？一直坚持记录博客，是有什么动力在驱动自己吗？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：开始写博客的目的只是单纯当成笔记本来用，后来慢慢变成交流沟通的平台，收到很多网友的评论、邮件。当中有很多是非常好的建议，比如文章“LAMP+logzilla2.9.9+syslog-ng实现集中日志管理(第二版)”，共收到5位网友提供后续问题案例，自己也从中得到学习。因分享而快乐，因快乐所以坚持。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：您现在最关注哪方面的技术？您自己是如何学习并掌握新技术的？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：我现在关注的技术是云计算，思考如何构建一个高效的私有云。学习方法大家都会有自己的一套，工作期间每天安排出2个小时的学习时间就很不错了。掌握一门新技术是很不容易的，“边学边练”的方法在每个阶段都是适用的。当然，除了兴趣以外还需要有一定的毅力。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>51CTO：最后，您认为在未来两年内，大型网站的系统管理员(或想成为大型网站系统管理员的同行们)最需要关注哪些方向？</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;刘天斯：是云计算，它除了给我们降低运营成本，还提供了更加弹性的资源分配，可伸缩的处理能力，满足大量的数据存储与计算，最终提高企业竟争力，这些都是未来几年我们所需要的。<br/><br/><strong>51CTO报道地址</strong><br/>天涯社区运维刘天斯：因分享而快乐 因快乐所以坚持<br/><a href="http://os.51cto.com/art/201103/251458.htm" target="_blank">http://os.51cto.com/art/201103/251458.htm</a><br/><br/><strong>51CTO电子杂志《Linux运维趋势》第7期发布</strong>-【人物】<br/><a href="http://os.51cto.com/os/linuxops/pdf/51CTO_linuxops_issue7.pdf" target="_blank">http://os.51cto.com/os/linuxops/pdf/51CTO_linuxops_issue7.pdf</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="http://blog.liuts.com/tags/%25E4%25B8%2593%25E8%25AE%25BF/" rel="tag">专访</a> , <a href="http://blog.liuts.com/tags/51cto/" rel="tag">51cto</a> , <a href="http://blog.liuts.com/tags/%25E5%2588%2598%25E5%25A4%25A9%25E6%2596%25AF/" rel="tag">刘天斯</a>
]]>
</description>
</item><item>
<link>http://blog.liuts.com/post/224/</link>
<title><![CDATA[彤彤一周岁记]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[My Life]]></category>
<pubDate>Thu, 24 Mar 2011 14:40:51 +0000</pubDate> 
<guid>http://blog.liuts.com/post/224/</guid> 
<description>
<![CDATA[ 
	<span style="color: #008000;"><strong><span style="font-size: 18px;">《一 周 岁 记》</span></strong></span><br/><strong>一岁的你</strong>，头发总是翘翘的。<br/><strong>一岁的你</strong>，出了八颗牙牙。<br/><strong>一岁的你</strong>，喜欢叨着奶嘴睡觉。<br/><strong>一岁的你</strong>，喜欢做鬼脸。<br/><strong>一岁的你</strong>，喜欢研究自己的小手，看完手心又看手背。然后再放嘴里添一添。<br/><strong>一岁的你</strong>，我伸出手跟你说“握握手”，你总立马伸出你那稚嫩的小手握住我的手上下摆动。<br/><strong>一岁的你</strong>，喜欢撕纸，撕一片一片的，然后扔得满地都是。<br/><strong>一岁的你</strong>，第一次带去公园，第一次看到草坪，立马挣脱我去拔草，再往嘴里塞，如果常带去你，我想草都被你拔光了。<br/><strong>一岁的你</strong>，我说跳舞，你马上举起双手在那里挥来挥去。<br/><strong>一岁的你</strong>，总喜欢拍拍手，然后兴奋的笑。<br/><strong>一岁的你</strong>，在我告诉你这不能做时，你就是嘟起嘴。“呀，呀，呀”的向我抗议。<br/><strong>一岁的你</strong>，力气非常大，喜欢跟我抢东西，我总抢不过你。<br/><strong>一岁的你</strong>，洗澡的时候爱玩水，拍打着水，溅得满屋子像发洪水。<br/><strong>一岁的你</strong>，因为感冒帮你省鼻水，你就照着样用手捂住鼻子用力呼气把鼻水呼出来。<br/><strong>一岁的你</strong>，让你亲亲我的时候，你会把嘴嘟得老高，然后贴在我脸上再呼一下气。<br/><strong>一岁的你</strong>，在床上玩耍时，总喜欢把玩具往床下丢，再探头看看（好像在测测床的高度），然后就倒退下床，当我示意你到床上来，你又会自己爬上床。<br/><strong>一岁的你</strong>，看大人吃饭，给你喂一口，吃完后就“啊~”的叫嚷，好像说吃完了，再给我来一口。<br/><strong>一岁的你</strong>，特别喜欢吃肉肉，给你吃肉肉的时候，心情就特别的好，还不停的自己拍拍手，还会干笑几声。<br/><strong>一岁的你</strong>，见到姐姐时，总大声的喊：姐姐啊，姐姐啊。<br/><strong>一岁的你</strong>，喜欢说“拖鞋、拖鞋”。<br/><strong>一岁的你</strong>，看李小龙电影时，李小龙经典的“阿打，阿打”，你突然兴奋的站起来大喊“阿打，阿打”。<br/><strong>一岁的你</strong>，学什么都快。虽然爸爸不常带你，可你超爱爸爸。妈妈打爸爸的腿说，“打，打，打”，以为你会跟着打爸爸的，你却爬过来打妈妈的腿说：“打，打，打”。把爸爸乐坏了。<br/><strong>一岁的你</strong>，有一点点叛逆，告诉你不能做的事，你就偏要做。<br/><strong>一岁的你</strong>，吃药时，你不哭也不闹，不管如何逗你，始终双唇紧闭，因为你知道，闭上嘴巴才是最安全的。<br/><strong>一岁的你</strong>，抓到什么都往嘴里塞，好像世界上的东西都是能吃的，全是美食。<br/><strong>一岁的你</strong>，很惹人疼爱，你即乖又灵巧；即调皮又可爱。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-----作者：爸爸 妈妈 (2010-03-21)<br/><br/><br/><span style="color: #FF1493;"><strong><span style="font-size: 18px;">周岁留影</span></strong></span><br/><a href="http://blog.liuts.com/attachment.php?fid=297" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=297" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---乖乖的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=298" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=298" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---温柔的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=292" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=292" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---学会立正的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=293" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=293" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---爱搞怪的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=294" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=294" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---学会思考的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=295" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=295" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---读美食书的我---</strong><br/><br/><br/><a href="http://blog.liuts.com/attachment.php?fid=296" target="_blank"><img src="http://blog.liuts.com/attachment.php?fid=296" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>---调皮的我---</strong><br/>Tags - <a href="http://blog.liuts.com/tags/%25E4%25BA%25B2%25E5%25AD%2590/" rel="tag">亲子</a> , <a href="http://blog.liuts.com/tags/%25E4%25B8%2580%25E5%2591%25A8%25E5%25B2%2581/" rel="tag">一周岁</a>
]]>
</description>
</item>
</channel>
</rss>
