<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[运维进行时]]></title> 
<link>https://blog.liuts.com/index.php</link> 
<description><![CDATA[互联网运维与架构]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[运维进行时]]></copyright>
<item>
<link>https://blog.liuts.com/post/256/</link>
<title><![CDATA[云原生背景下的运维价值思考与实践]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Mon, 10 Feb 2025 14:12:02 +0000</pubDate> 
<guid>https://blog.liuts.com/post/256/</guid> 
<description>
<![CDATA[ 
	<h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important">前言</span></h3><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">随着公司自研上云战略如火如荼地进行，IEG-增值服务部作为较早一批响应的团队，截止目前自研上云已完成1/3的流量切换，日PV超百亿。切云的服务大量采用了云原生的应用与技术架构，作为公司第一批面临云原生环境的业务运维，深切感受到云原生给运维工作带来的机遇与挑战，运维模式的转型已经迫在眉睫，此篇文章最大的价值在于将我们的转型思路、方法与实践，提供给后面更多面临同样挑战的团队借鉴与参考。下面我将从业务场景、运维转型之道、云端收益等几个方面来跟大家一起来探讨。</span><h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important">&nbsp;</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">一、业务服务场景介绍</span></h3><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">DataMore是IEG增值服务部为游戏项目组提供的一站式智能游戏运营方案平台，基于游戏日志数据，利用实时与离线计算打造数据营销能力，为业务提供以解决运营问题为目标的数据运营服务方案。与传统的游戏运营体系不同，DataMore游戏数据运营平台具有脱离游戏版本，对研发侧依赖小，计算能力与精细化运营能力强的特点，可以为游戏业务带来更低成本、更快速高效的精细化运营，并提供丰富的游戏运营方案。DataMore在各个生命周期，多种游戏品类上沉淀了许多运营方案以及工程化的运营系统，覆盖新进、活跃、流失、留存、付费和传播等多个阶段，包括邀请好友、任务中心、砍价拼团、低活跃干预、流失召回等多种数据运营方案，使得游戏业务可以快捷的找到适合自身游戏阶段、针对特定运营问题的解决方案。部分方案截图：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; visibility: visible; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="font-size: 16px; letter-spacing: 0.5px; color: #3e4753">DataMore在技术架构上采用了微服务设计的理念，采用服务型开发架构，将数据营销服务拆分成独立、通用的服务能力，同时构建了应用和服务中台，能够通过组合这些通用服务快速而轻松的构建专属应用服务。DataMore活动覆盖了互娱几乎所有的游戏，落地场景非常多，每天都有新活动上线，而且周期短，节奏快，活动周期一般只持续一两周，日PV超过200亿，QPS峰值超过20+万，落地场景覆盖王者荣耀、和平精英在内的所有游戏及周边应用（如助手、微信游戏中心等）。</span></p><h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">&nbsp;</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">二、基于云原生环境开发者平台</span></h3><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">相信大家对云原生的概念已经不陌生，但很难精准地去解释云原生具体是个什么东西，原因是云原生没有很确切的定义，且不断在发展演变当中。Pivotal 公司的 Matt Stine 于2013年首次提出云原生（CloudNative）的概念，旨在说明云原生是一种构建和运行应用程序的方法，是一套技术体系和方法论。2015年云原生计算基金会（CNCF），对云原生的定义为：&ldquo;云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中，构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格（Service Mesh）、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段，云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。&rdquo;。目前形成云原生理解上的最大共识概括为4个核心要点：DevOps+持续交付+微服务+容器，即基于这&quot;4件套&quot;构建的应用我们暂且认为就是云原生应用了。同时可以享受到云端极为丰富的PaaS组件，如业务后续使用到的数据库、缓存、中间件、存储、CDN等等，并且具备无缝在不同云厂商间透明迁移的能力。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">为适配云原生环境的数据营销服务的需求，部门推出了奇点（ODP）平台（基于腾讯游戏数据&amp;营销服务能力，以微服务架构为基础，构建的集代码管理、服务开发、运维发布、服务运营为一体的一站式开发运营平台）实现了真正意义上的DevOps服务闭环，贯穿了服务交付的CI、CD、CO环节，得益于公司内外部更多优秀组件的集成，包括TKE、蓝盾、QCI、Envoy等。</span></p><h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">&nbsp;</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">三、云原生运维转型、挑战、目标与实践</span></h3><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">1、云原生运维转型思维</strong></span><br /></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">这几年运维界听到最多的几句话：&ldquo;云计算会淘汰掉运维！整个运维行业可能被干掉！再不转换运维就要丢饭碗&rdquo;，诸如此类。那真相到底是什么？行业有一个共识，即运维工作本身交付的是一种服务，下面举一个可能不太恰当的例子，或者可以帮助大家找到答案。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">云计算时代好比组装一辆汽车，根据客户的需要，通过PaaS能力选择匹配的引擎、车轮、离合器、 悬架、车控制系统等进行拼装。客户不用关心汽车各元部件的实现原理，最终获得是一辆满足自身要求的汽车。光有了汽车是玩不转的。还需要有修路、加油站、交通控制等服务体系，运维就是承担这个角色。相比传统运维，确实是少了自己采购元组与组装的工作。到了后云计算时代（云原生），出现了一个DevOps公司，引入新技术与理念，声称已经将修路、加油站、交通控制等环节都打通了，形成了一体化服务能力，并邀请运维哥一起加入创业。在这个阶段，运维哥出去单干，大概率会翻车。但加入DevOps公司，运维的价值到底还有什么呢？因此，升级与转型是必然的，例如将普通国道升级成高速公路；实现客户在高速路上不停车换轮胎；贴近并理解客户，规划行程中所需的服务来提升客户体验；通过提升智能化水平，连接交通管制，缩短航程，避开损坏路段等等。相信大家心中已经有自己答案了。回到原点的灵魂拷问：&ldquo;云原生背景下，运维不做转型会不会死？&rdquo;，&rdquo;运维要如何快速自救和升级？&ldquo;。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">我的观点：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">1）不会死，但未来整条价值交付链没有你什么事了；</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2）转型SRE是一种选择。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">接下来介绍我们运维体系是如何进行转型升级的，首先我们的转型理论基础来源于DevOps框架，从中抽取出符合现阶段服务场景要求的模型，从文化与技术两大方向反复去实践与论证，也获取了非常好的效果。下图是Gartner于2015年发布的DevOps实践模型，放在2020年的今天来看，确实具有很强的前瞻性，不少观点经过我们的验证是正确的，例如：Feature Teams(特性团队)、Developer Self-Service(开发者自助服务)、Infrastructure as Code(基础设施即代码)、Integrated Tool Chains(集成工具链,CI-CT-CO)、One-Step Build, Test, Deploy(一键程序构建，测试，部署)等等。下面从文化与技术两个层面来剖析：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">&nbsp;1</span><strong style="color: #3e4753; font-size: 16px; letter-spacing: 0.5px; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">）文化层面</strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">以下几点是我们中心内部实行的几个机制，供作参考，因不同团队间存在一定差异，此处不展开说明。</span></p><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">开发与运维成立FT虚拟团队，实现组织上的融合；</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">开发或运维侧的例会、技术分享、事件复盘，FT成员全程参与；</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">项目立项时，运维接口人需要做&ldquo;左移&rdquo;，即提前参与技术架构讨论，有助于运维的问题提前在方案讨论或开发阶段提前暴露，有效做好防范与规避；</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">建立收集各方反馈问题与建议的机制与渠道，有效将好的想法影响至平台下个版本的迭代中，实现持续改进与优化。</span></p></li></ul><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">2）技术层面</strong></span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">下图是个人绘制的传统运维到云原生运维的价值过渡，很明显的一个特性是往更高阶领域去涉足，传统运维投入将大幅度减弱。目标意指将更贴近业务、理解业务、通过数据与AI的能力，提升业务持续服务的能力及用户体验，同时确保整个价值交付链的畅通与高效。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">在云原生背景下，我们对运维体系进行了升级，在原有基础运维能力之上确定了以下几个目标：</span></p><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备服务全链路质量监控覆盖，涵盖数据域与业务域</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备一定智能化的资源动态调度、伸缩机制</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备一定的故障预警、根因分析、问题定位能力</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">服务具备在交付不同阶段（测试、预发布、运营）抵御异常的能力</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备资源高效交付的流程机制与快速上线的能力</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备多云的资源编排与管理的能力</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">具备业务快速上云的机制，确保切换过程的高可用性</span></p></li></ul><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">确定了运维能力升级指导思想：基于运维编排的云原生实例化。广义而言，运维的本质就是多个运营事件的有机串联，来达到质量、效率、成本、安全多维收益，而编排是实现有机串联的有效手段，除了可以沉淀运维经验外，还可以有效实现共享。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important">2、云原生运维转型平台化建设</span></strong></span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">在运维平台化建设方面，我们在构建原云生运维平台能力&ndash;玄图。积极拥抱公司开源协同的机制，通过集成现有优秀平台或组件，如有河图元数据管理平台（CMDB）、蓝鲸标准运维平台、PCG-混沌工程实验平台、蓝鲸服务流程管理平台等等，避免重复性建设，结合我们的服务场景，发挥平台服务效能最大化。思路上借鉴了&ldquo;瑞士军刀&rdquo;，我们通过微服务的架构，将云资产（CMDB）管理作为底座，也就是&ldquo;刀把&rdquo;。再将剪刀、平口刀、开罐器、螺丝起子、镊子等等集成进来，通过定义资源与上层平台的总线协议，将各类平台工具进行组装，犹如瑞士军刀一样，将轻、快、实用、因地制宜发挥到极致。下面将我们的体系能力进行介绍：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.1 云原生资产管理</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">公有云/私有云的各类云资源管理，我们叫做资产管理（所有的资源/应用/数据都在资产范畴）。我们知道，传统的大多数cmdb只能管理服务器信息（如ip地址/机架/机房等），在云原生环境下，我们将面对复杂多变的、新生的应用和场景，随之会产生越来越多的管理配置项，这就要求资产管理能够满足各种需求的扩展和未来业务的变化，例如腾讯云的CLB、CDB、COS、Ckafka等等，没有自定义模型属性的CMDB难以将这些云产品纳入管理范畴。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">在资产管理方案调研的过程中，我们发现资产管理需求与元数据管理十分契合，因此，资产管理，作为河图元数据系统的应用场景落地，通过元数据定义资产管理的模型、属性、组合关系，玄图对元数据的加工、应用实现通用的可灵活调整的业务级资产管理。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">在我们常见的kafka集群资产管理的场景下，通过河图元数据定义相关的集群、主机模型以及属性，定义他们的组合关系，达到资产管理的要求。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">模型代表着一类云资源，模型的属性从各个方面分别描述这一类云资源，模型的属性可以根据场景自由定义和扩展。集群模型，当前的属性包括集群名、cc_set等，主机模型，当前的属性包括ip、类型、区域等，随着业务不断发展变化，我们后续可能会对集群和主机的信息进行不断的扩展，也可能集群下还要管理如CLB等其他类型的云资源信息，采用云资源管理，能很好地适应这种变化。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">遵循MOF元对象设施建设标准规范为基础的云资源管理平台，能自由方便地表示所有模型间的关系，包括组合关系、依赖关系和继承关系。组合关系描述了一种组成关系，代表某个模型由另外的模型组成，依赖关系主要用于管理模型之间的依赖，继承关系则可以用来表示一种父子关系。kafka集群和主机的关系我们就可以用组合关系来表示，集群依赖的业务可以用依赖关系来表示，也可 以定义一个主机模型的父类，再派生出不同的子类代表不同的主机类型，但具有父类公共的属性定义。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">资产管理的数据将直接存储在河图元数据系统中，玄图平台在保留元数据管理灵活自定义的前提下，简化元数据操作管理，适配资产管理的需求，提供高效的查询、检索、变更的能力，以有效管理云资产。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.2 云端一切操作皆可编排</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">云原生环境下，运维面临各种不同的公有云/私有云环境和各种跨云/跨平台的操作，给运维操作管理带来了巨大挑战。因此，我们继续构建云原生环境的编排能力，即运维编排，通过开发、封装可编排的组件和插件，提供灵活、可定制、可管理的模板化运维能力，覆盖运维任务的管理、审批、决策、执行、通知等功能，最终实现自动化、智能化运维。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">我们将运维编排分为三层，即：基础设施层、容器服务层、应用层。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">如上图所示：</span></p><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">云资源编排，编排对象是各类云资源，包括公有云、私有云等，采用terraform来实现多云基础设施的编排，可以覆盖腾讯云、阿里云、AWS、私有云等等。</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">kubernetes编排，编排对象是k8s集群资源，采用Helm/YAML进行编排。</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">作业编排，编排对象主要是主机节点，对应的操作任务编排，调用现有的蓝鲸job作业平台。</span></p></li></ul><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">运维编排三层之间如何串联？我们采用了开源的蓝鲸标准运维作为编排引擎，将不同的三层编排串联，打破从前跨云、跨平台各种割裂的操作界限，提升运维效率，一切皆编排，并能将编排任务沉淀为能力模板传承交接。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">例如上图的场景，我们需要扩容一个现网的TKE业务集群，从基础设施层的资源采买，到容器服务初始化部署，和一些集群特性作业操作等均一站式运维编排完成，操作时长从4小时优化到30分钟内，而且集群再次扩容只需简单修改几个编排参数执行，避免了繁琐重复的操作。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">在玄图平台能力中将通过自助开发可编排的原子（包括操作、接口、算法等），一切操作皆编排。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.3 DataOps助力运维转型</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.3.1 TKE资源动态调度</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />K8S的特性是资源一旦分配给工作负载，就会被独占，即使是空跑状态，其他工作负载也不能复用。一般来说用户申请的资源会远超实际需求，Pod规格和副本数设置很大，或者HPA最小副本数设置很高，并且不会主动去释放资源。这样会导致K8S集群存在大量的空闲资源，集群的总体资源使用率不高。为了解决这个问题，我们需要主动对工作负载做资源动态调度。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">如下图所示，预测模型通过TKE自带的hpa-metrics-server拿到workload当前使用的CPU核数并落地DB，通过API-Server拿到workload当前分配的CPU核数。调度器Scheduler根据预测模型的预测值动态调整workload的副本数。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">动态调度模型使用过去一个时间周期内同一时间点的负载数据拟合得到CPU核数预测值，为了保证资源充足，模型会根据当前实际使用的CPU核数再预留一倍的冗余，并且至少保留一个副本，结合目前已经分配的核数得到最终预估分配核数。最后，调度器根据模型的预估分配核数动态修改workload的副本数，释放空闲资源。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">执行资源动态调度后收益非常明显，集群空闲资源被释放出来，可以承载更多的workload，在总核数为1万核的集群实践，可以释放一半的空闲CPU，集群整体CPU利用率从15%提升到28%。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.3.2 TBDS资源动态调度</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />经过统计我们发现腾讯云TBDS数据仓库集群CPU的总体使用率仅为55%左右。如下图所示，蓝色线是分配的资源，绿色线是使用的资源，大部分应用组资源池，存在空闲时间段，而且相互错峰的情况。我们累计有500+个应用组，抽取几个大应用组统计其繁忙时间段，发现存在明显的错峰情况。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">为了进一步提升资源使用率，需要对资源做动态分配，简单的说，当资源使用少的时候，就少分配些，当资源使用多的使用，就分配多些，分配使用动态调整。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">动态分配算法模型，大体上分两步，第一步，先计算出每个应用组的预估分配核数。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">因为总分配核数一定，所以还需第二步根据预估分配核数的占比情况算实际分配核数。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">预估分配核数怎么算呢？首先，pt0是基线，目前用线性回归来拟合，但拟合的结果会波动很大，所以根据实际的任务要求，根据当前的资源使用核数，给拟合结果设置了下限，又根据应用组总资源池不能过大实际要求，跟拟合值设置了上限。所以，分配模型的特点有动态的上下限，另外，这里给当前的使用值翻倍预估，目的是当任务需要资源时，分配的资源可得到快速增长，从而不会影响任务的执行，特别是大任务。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">执行动态调度后收益非常明显，集群资源利用率从55.4%提升到79.5%。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">从动态分配前后的对比图可以看到，总成本降低了1/3。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">其次是任务执行效率也有提高，经过对4000+个分析计算任务的执行统计，平均执行时间从27.5分钟降低到18.1分钟，执行效率提升52%。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.4 云原生应用监控</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">服务正式上线之后，我们需要掌握其运营状况，比如QPS、成功率、响应延迟、容量负载水位等指标。一般是通过代码埋点输出日志，然后统计日志获得，或者是程序主动上报网管系统获得，不管是哪种方式成本都不低。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">我们需要在TKE集群部署Prometheus主动采集workload负载指标和用户自定义指标，随着集群规模不断扩大，Promethues不支持容灾部署，不支持分布式，单实例容量瓶颈等问题也凸显出来，最后我们放弃了原生的Prometheus，转而使用Thanos（灭霸）实现了分布式、高可用容灾部署和数据长期存储。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">Thanos Query 可以对数据进行聚合与去重，所以可以很轻松实现高可用：相同的 Prometheus 部署多个副本(都附带 Sidecar)，然后 Thanos Query 去所有 Sidecar 查数据，即便有一个 Prometheus 实例挂掉过一段时间，数据聚合与去重后仍然能得到完整数据。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">Thanos支持将数据上传到各种对象存储（比如COS）以供长期保存 (Prometheus TSDB 数据格式)，对于需要长期存储的数据，并且使用频率不那么高，最理想的方式是存进对象存储，不限制容量，价格非常便宜。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">基于Thanos，我们业务平台实现了高并发、海量的数据采集上报和存储。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">首先，因为所有流量都会经过网关，Thanos主动采集网关的这些指标到并将其可视化。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">如下图所示，只要服务接入了业务平台， QPS、耗时、成功率等一目了然，这些指标都无需额外开发即自动获得，对代码0侵入，节省了大量的开发成本。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">同时，业务平台也会使用Thanos主动采集负载指标生成服务容量负载水位视图，包括CPU，内存，流量等，如下图所示。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">如果服务有额外的指标也可以通过平台的自定义指标采集上报到Thanos，并用Grafana绘制图表。接入平台后，服务运行、负载等运营指标全部自动可视化，节省了开发成本，提升了开发和运营效率。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.5 云原生业务全链路跟踪（血缘关系链）</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">随着业务的不断纵深发展，技术服务链条也随之拉长，导致出现异常时定位问题困难，且无法快速评估影响面，因此我们通过构建数据血缘和业务血缘的组合来提升发现问题的能力。<br />数据与业务血缘关系链构建过程，覆盖了数据服务交付的完整生命周期，通过采集每个交付节点的数据流向上下游关系，最终形成一张完整的血缘关系链。在数据交付过程中，主要通过统一血缘上报规范，并与数据开发流程深度集成，做到对数据开发流程无侵入性。在数据服务交付过程中，则主要利用服务网格技术，自动采集微服务之间的服务调用链关系。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">血缘关系构建好后，可以应用于血缘可视化检索、影响面评估、故障回溯、根因分析、评估数据价值等很多方面，还可以结合云原生的其他特性，发挥出更大的作用。如结合云原生应用监控系统，在血缘关系链中叠加压测指标、服务负载等多维度分析，可以为资源容量评估提供准确的依据，也可以分析出调用链上的瓶颈点在哪里，提供为某些非核心服务配置服务降级策略和限频限流策略的依据，避免突发流量影响核心服务体验。<br />如下图所示为一个典型的血缘应用场景，当运营人员收到告警马上可以知晓，故障影响到哪些接口，哪些应用，哪些项目，哪些指标等。通过精准的影响面评估，可以提早与业务侧沟通相应的应急预案。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.6 云原生环境下的混沌工程</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">混沌工程是一种在软件或服务中进行各种试验来验证系统稳定性和健壮性的实验方法。Adrian Cockcroft给出了另一个定义则是：混沌工程是一种确保失败所带来的影响能够被减少的实验。<br />在我们的微服务场景下，相对于单体应用，服务链路更长更复杂，任何一点的异常都可能影响全局服务，如何让业务团队更加了解系统可靠性，对服务更有信心呢？我们需要混沌工程，来进行有预期、有计划的故障模拟，验证业务服务的健壮性，提早发现风险隐患和薄弱之处，并进行修复，避免线上真正故障时手忙脚乱。当然,业务集群上存在大量的服务，没有目的性的随意破坏，&ldquo;爆炸半径&rdquo;失控，将影响整个业务集群，因此混沌工程需要经过精心设计，在可控的环境中进行。<br />目前我们已加入公司内部混沌工程开源协同OTeam，搭建起第一版的混沌工程实验平台，进行实验设计，这里以云服务平台，注入CPU负载实验测试。实验目标，可以包括云服务平台和非云服务。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">实验配置，即设计实验，当前的原子包括cpu、内存、io、状态等，最后监控配置，是可选项，我们直接使用集群本身的监控视图观察。实验设计配置完成后，启动实验，观察相关监控视图。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">这里我们TKE集群中的服务设计了CPU负载注入演习，启动实验后，CPU按预期提升，当CPU持续高负载时，服务正常且触发自动扩容，无请求超时用户无感知，符合预期，加深了团队对系统可靠性的理解和认知。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.7 Devops的持续集成与交付</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">一个稳定运营的运维体系必然有相应的服务持续集成与交付方式与之配套，在云原生体系下我们构建了基于Kubernets/Docker技术工具链的服务CI/CD工作流，同时最大力度支持公司现有CI/CD服务组件，从而实现服务的快速构建、高效集成和部署交付。以下是CI/CD的整体流程图：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="letter-spacing: 0.544px; -webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.7.1 数据营销开发者平台-奇点（ODP）中CI的设计与实践经验</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">1）构建镜像</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">构建镜像是指业务代码打包或者编译打包所需的环境，包括编译工具、编译命令、编译参数等部分，所有的构建任务都是在使用构建镜像的容器内完成的。是业务代码变成制品的必须依赖。构建的镜像主要分为以下两种类型：</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">&middot;公共镜像：奇点针对通用的场景，提供了一系列的公共镜像，如 tlinux、go、php、nodejs等。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">&middot;自定义镜像：某些业务服务构建打包，有特殊的库依赖或者环境依赖，已有的公共镜像满足不了业务需求，此时可以通过提交自定义构建镜像加入到编译环境中选择。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2）CI流水线引擎</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />目前支持公司已有的CI流水线引擎来配置流水线和执行构建任务(如蓝盾、QCI、Orange CI)，也支持业界主流工具(如jenkins、Travis CI、jfrog)，通过&ldquo;模板+参数化&rdquo;的方式满足业务服务编译的需求场景。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">3）CI任务触发方式</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />目前CI任务触发方式支持&ldquo;人工触发模式&rdquo;、&ldquo;自动触发模式&rdquo;、&ldquo;流水线模式&rdquo;、&ldquo;快速发布模式&rdquo;等多种模式。</span></p><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">人工触发模式：使用者可以在奇点的部署列表中选择分支或tag以及构建流水线（奇点支持同一服务配置多条流水线）自动化完成构建、部署。该方式可以灵活操作，如未修改代码时，调整编译命令重新验证可以通过人工触发的方式来完成，如下图所示:</span></p></li></ul><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">自动触发模式：奇点服务创建时，需要关联git地址或者创建全新的git项目，此时会自动注册webhook，监听push事件自动触发流水线构建、部署或者快速发布到测试环境</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">流水线模式 ：跟人工触发一样，会自动发起CI构建任务和自动部署测试环境<br /></span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">快速发布模式：快速发布流程如下图所示，针对非编译型服务，如PHP或者Python等服务，修改某个静态文件或者脚本文件，无需重新执行一遍流水线，将变更的文件下发到容器内对应位置，最快的速度方便开发同学调试和验证.对于编译型的服务，也支持快速发布，前提条件是：编译出的二进制文件必须能在linux上运行(例如golang的服务可在windows下交叉编译为linux可执行程序)，并配置好重启命令即可( 任务发布时会自动打包和下载解压到容器内，并且执行指定的重启命令 )。</span></p></li></ul><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: center; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2.7.2 奇点(ODP)中的CD设计与实践经验</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">1）可运行多种镜像</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">镜像是服务运行所依赖的环境，包括第三方库以及操作系统版本。目前也支持公共运行镜像和业务自定义运行镜像，可以在集成配置页面选择运行镜像</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">2）支持修改/增加系统环境变量</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />服务编译构建时、服务启动时，需要根据当前部署版本来做相应的参数配置或者配置加载，此时需要通过环境变量来标识。奇点中根据用户自定义配置，生成yaml文件时会注入到container中;同时kubernetes自身的部分参数，也以环境变量的方式注入到container中，方便业务程序获取pod自身信息，如POD名称以及当前POD的IP信息等。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">3）支持自定义启动命令</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />支持自定义的业务进程路径、启动参数、启动前置处理等命令集合，为兼容启动参数中的特殊字符，会把启动命令中写入到shell脚本然后执行。另外，启动命令必须确保拉起的进程是常驻进程以及前台模式。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">4）健康检查</span></strong><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br />健康检查对线上业务来说，是保证服务的正常、稳定运行的重要手段。Kubernetes提供了以探针为主的健康检查方式，对于故障服务会被及时自动下线，通过重启服务的方式尝试使服务自动恢复。目前主要支持以下两种方式：</span></p><ul class="list-paddingleft-2" style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px 0px 0px 2.2em; outline: 0px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">Liveness探针：用于判断Container是否处于运行状态，非running状态，kubelet会kill掉Container, 然后根据其设置的restart policy进行相应操作。</span></p></li><li style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">Readness探针: 用于判断服务是否已经ready，对外提供服务，如果检测未通过，服务所在的Pod的IP地址会从服务的endpoints中被移除，不会接受或响应任何请求。</span></p></li></ul><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">此外，奇点中支持用户定义健康检查规则，这样会自动生成对应的Liveness和Readness配置。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">5）服务部署</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">使用CI流水线的方式构建和部署，推荐基于tag来部署（可溯源）。</span></p><h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">&nbsp;</span>四、业务上云收益</span></h3><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">从自研上云开始，我们就确定了云原生的上云方案，经过持续迭代，已经建立了一套比较完整的云原生运维体系，王者荣耀、和平精英等全部游戏的数据运营活动已经All IN 云原生。云原生的效能优势和技术红利不断释放出来，我们实现了低成本、高效率构建支持高并发场景的在线服务，又快又稳的支撑游戏运营活动。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important">1、成本方面</span></strong></span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">腾讯云产品开箱即用，对于一些创新业务想做技术调研非常方便，用完即销毁，成本很低。另外云产品都是免运维自行托管在云端，如TKE的Master和etcd都是托管腾讯云，可以节省人工运维成本，让我们更专注于做核心业务。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9">2、稳定性方面</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">云原生上云后，服务获得了快速扩容、弹性伸缩的能力，抗压能力增强，让我们可以更加从容面对各种突发流量，机器故障后TKE自动迁移Pod让服务获得故障自愈的能力。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">此外，TKE将各类资源定义成描述文件，整个应用环境通过容器的方式统一，避免了环境不一致的风险。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9">3、效率方面</span></strong></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">借助跟云产品的深度集成，方便开发人员完成一站式研发、运维工作。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">从业务需求立项到拉分支开发，再到测试环境功能回归验证，再部署到预发验证及最后上线，整个持续集成可以做到分钟级。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">相较于传统DO分离的运营模式，发布耗时从小时级缩短到分钟级，效率提升数倍。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">日常工作包括扩缩容、单机故障处理、机房裁撤等被降维简化，运维变得更加简单可信赖。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753"><br /></span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #0052d9"><strong style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important">4、赋能业务</span></strong></span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">云上产品非常多，涵盖了计算、存储、大数据等诸多领域，可以节省业务创新带来的技术成本。</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">我们在用的包括TKE、CFS、COS、CKafka、VOD等20多个产品都是直接开箱即用，分钟级交付，极大的方便了业务新需求的调研和上线。</span></p><h3 style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; font-weight: 400; font-size: 16px; max-width: 100%; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; letter-spacing: 0.544px; text-align: justify; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important">&nbsp;</span><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">五、总结</span></h3><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">云原生给运维体系带来的是挑战更是机遇，如何在这波云计算浪潮中，寻找运维的定位与价值，我想是每一位运维人应该思考的问题。本文是个人近几年的所见、所闻、所思做个小结，提出的观点不一定正确，希望能给大家多一个思考的方向，也欢迎批评指正。最后，也将我们的转型思路、方法与实践分享于此，提供给后面更多面临同样挑战的团队借鉴与参考。我们的转型之路还在路上，未来我们将继续扎根业务，深耕云原生环境运维，通过数据、编排、DevOps、AiOps等能力，进一步提升服务水平与用户体验。</span></p><p style="-webkit-tap-highlight-color: transparent; margin: 15px 8px; padding: 0px; outline: 0px; max-width: 100%; clear: both; min-height: 1em; color: rgba(0, 0, 0, 0.9); font-family: &quot;PingFang SC&quot;, system-ui, -apple-system, BlinkMacSystemFont, &quot;Helvetica Neue&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei UI&quot;, &quot;Microsoft YaHei&quot;, Arial, sans-serif; font-size: 17px; letter-spacing: 0.544px; text-align: justify; line-height: 1.75em; box-sizing: border-box !important; overflow-wrap: break-word !important"><span style="-webkit-tap-highlight-color: transparent; margin: 0px; padding: 0px; outline: 0px; max-width: 100%; font-size: 16px; letter-spacing: 0.5px; box-sizing: border-box !important; overflow-wrap: break-word !important; color: #3e4753">作者简介：刘天斯，负责腾讯游戏大数据管理及运维工作，从事互联网技术运营工作近15年，曾荣获&ldquo;华章最有价值作者&rdquo;、&ldquo;中国十大杰出IT博主&rdquo;、&ldquo;WOT十大优秀讲师&rdquo;、&ldquo;OpsWorld金牌讲师&rdquo;、&ldquo;TOP100优秀出品人&rdquo;、 &ldquo;中国数据质量杰出专家奖（2020）&rdquo;、&ldquo;DAMA中国数据治理专家奖（2020）&rdquo;，IEEE与DAMA会员。曾参与国家《数据资产管理实践白皮书》、《数据标准管理白皮书》等多个标准的编写。热衷开源技术的研究，包括大数据资产管理及云原生等领域，擅长大数据治理，数据与业务中台建设、海量运维与规划等工作，曾出版个人著作《python自动化运维：技术与实践》、《循序渐进学Docker》等，个人发明专利10个。</span></p>
]]>
</description>
</item><item>
<link>https://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>https://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-title">引用</div><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-title">引用</div><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-title">引用</div><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-title">引用</div><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-title">引用</div><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-title">引用</div><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="https://blog.liuts.com/attachment.php?fid=311" target="_blank"><img src="https://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="https://blog.liuts.com/attachment.php?fid=312" target="_blank"><img src="https://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-title">引用</div><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-title">引用</div><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="https://blog.liuts.com/attachment.php?fid=313" target="_blank"><img src="https://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="https://blog.liuts.com/attachment.php?fid=314" target="_blank"><img src="https://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="https://blog.liuts.com/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%259D%2587%25E8%25A1%25A1%25E5%2599%25A8/" rel="tag">负载均衡器</a> , <a href="https://blog.liuts.com/tags/%25E7%25A6%2581%25E7%2594%25A8/" rel="tag">禁用</a> , <a href="https://blog.liuts.com/tags/%25E5%2590%25AF%25E7%2594%25A8/" rel="tag">启用</a> , <a href="https://blog.liuts.com/tags/lvs/" rel="tag">lvs</a> , <a href="https://blog.liuts.com/tags/haproxy/" rel="tag">haproxy</a> , <a href="https://blog.liuts.com/tags/f5/" rel="tag">f5</a> , <a href="https://blog.liuts.com/tags/python/" rel="tag">python</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/219/</link>
<title><![CDATA[搭建多节点应用监控平台[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 25 Nov 2010 09:30:19 +0000</pubDate> 
<guid>https://blog.liuts.com/post/219/</guid> 
<description>
<![CDATA[ 
	<strong>一、前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为了更加清晰了解应用的性能、可用性及响应速度等指标，开发了一套支持多节点的监控平台，并提供阀值报警、动态查询及多功能报表等功能。平台采用RRDTOOL+pycurl+Imaging+pyexcelerator+zlib+Django等开源技术开发，现详细对监控平台进行介绍。<br/><strong>二、平台架构图</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=227" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=227" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>三、功能截图</strong><br/>1、添加应用<br/><a href="https://blog.liuts.com/attachment.php?fid=228" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=228" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>2、查询应用<br/><a href="https://blog.liuts.com/attachment.php?fid=232" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=232" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=229" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=229" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=234" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=234" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=235" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=235" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=235" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=235" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=233" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=233" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>3、报表功能<br/><a href="https://blog.liuts.com/attachment.php?fid=231" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=231" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="https://blog.liuts.com/attachment.php?fid=230" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=230" 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/>Tags - <a href="https://blog.liuts.com/tags/%25E5%25BA%2594%25E7%2594%25A8%25E7%259B%2591%25E6%258E%25A7/" rel="tag">应用监控</a> , <a href="https://blog.liuts.com/tags/%25E5%25A4%259A%25E8%258A%2582%25E7%2582%25B9/" rel="tag">多节点</a> , <a href="https://blog.liuts.com/tags/%25E6%258A%25A5%25E8%25A1%25A8/" rel="tag">报表</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/218/</link>
<title><![CDATA[天涯社区高性能数据引擎Memlink正式开源]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sun, 21 Nov 2010 14:26:42 +0000</pubDate> 
<guid>https://blog.liuts.com/post/218/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 14px; line-height: 25px; font-family: Tahoma, Helvetica, SimSun, sans-serif, Hei; border-collapse: collapse" class="Apple-style-span"><h1 style="padding-right: 0px; padding-left: 0px; font-size: 1em; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="color: #000000">Memlink<span style="font-weight: normal" class="Apple-style-span">是天涯社区</span><span style="font-weight: normal" class="Apple-style-span">系</span><span style="font-weight: normal" class="Apple-style-span">统平台部近日推出的开源项目，项目托管地址：</span></span><a href="http://code.google.com/p/memlink/"><span style="color: #000000">http://code.google.com/p/memlink/</span></a><br />为什么会有Memlink?</h1><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于大型论坛服务，比如百度贴吧、天涯论坛，日均发帖量过百万或千万，日均PV过亿，日积月累下来的帖子数量可能几十亿到上百亿。这种超级论坛，其海量存储、海量访问都是一个非常有挑战性的技术难题。</p><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">中 小规模的论坛（Phpwind/discuz）通常使用mysql/sql server作为后端存储，当数据量膨胀时，比如一个版面有百万、千万级别主贴，一个主贴下有数百万回复，此时使用SQL语句select &hellip; order by &hellip; limit &hellip; 进行数据查询和展现，性能可想而知。</p><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">大型论坛中的数据可以抽象为如下三类数据模型：</p><ol style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">Key=&gt;Value结构数据。比如：版面信息、主帖信息、回帖信息等。主贴id对应主贴的信息（标题、发帖时间、作者等等），回帖id对应回贴的信息（回复内容、回复时间、回复者等等）。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">Key=&gt;List结构数据。比如：主贴列表，主贴列表按发表时间或者最后回复时间进行排序；回复列表等等。<br />Key=&gt;List通常有如下特点：</li><ol style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">可排序</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">可动态调整顺序</li></ol><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">其他周边数据（SQL系统/检索系统）。比如：斑竹、会员、友情版面/链接等等，由于数据量较小、逻辑关系较复杂，可以使用sql系统存储；比如帖子检索可以使用检索系统。</li></ol><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对于Key=&gt;Value系统，市面上有较多选择，它们的数据容量大小从数百万到上百亿不等，性能、功能也各有差异，由于讨论KV系统的文章很多，再次不赘述。</p><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">对于Key=&gt;List系统，市面上可选择的余地非常小，加之线上工业级别的一些要求，经对比了一些Key=&gt;List系统（Redis），最终选择开发memlink系统，同时开源出来，也希望为业界同行提供多一种选择，繁荣开源社区。</p><h1 style="padding-right: 0px; padding-left: 0px; font-size: 1em; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" name="Memlink简介" title="Memlink简介"></a>Memlink简介</h1><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Memlink 是一个高性能、持久化、分布式的Key=&gt;List/Queue数据引擎。正如名称中的Memlink所示，所有数据都建构在内存中，保证了系统的 高性能(读性能大约是Redis几倍到十倍)，精简内存（内存消耗大约是Redis的1/4），使用了redo-log技术保证数据的持久化。此 外，Memlink还支持主从复制、读写分离、数据项过滤操作等功能。</p><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">特点：</p><ul style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">内存数据引擎，性能极为高效</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">List中的Node采用块链组织，精简内存，优化查找效率</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Node数据项可定义Mask表，支持多种过滤操作</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">支持redo-log，数据持久化，非Cache模式</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">分布式，主从同步</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">读写分离，写优先处理。</li></ul><h1 style="padding-right: 0px; padding-left: 0px; font-size: 1em; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" name="与Redis区别" title="与Redis区别"></a>与Redis区别</h1><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">Redis同样也提供key=&gt;list 存储功能，Memlink与Redis区别有：</p><ul style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Redis比较消耗内存。每个存储节点，在不支持vm的情况下要额外消耗12字节内存，在支持vm的情况下，每个节点额外消耗24字节内存。对于存储上亿条数据来说，额外消耗的内存太大。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Redis redo-log不够完善。redis提供了两种redo-log机制，机制一：每隔一段时间同步磁盘（此期间重启会丢失部分数据）；机制二：追加log方式，会使log文件越来越膨胀，造成性能不优化（需采用额外命令减小log）。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">主从同步不完善。如果slaver因为某原因丢失了部分同步数据，需要重新完全获取一份主节点的所有数据。在大数据量的情况下，不太合适线上生产的需求。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">网络处理主事件循环只有一个线程，不能很好的利用多核；同时读写没有分离，没有进行写优先处理。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">List中的Node没有mask表，不能进行一些属性过滤。</li></ul><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">Memlink主要对上述特点进行了改进。</p><h1 style="padding-right: 0px; padding-left: 0px; font-size: 1em; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" name="性能测试" title="性能测试"></a>性能测试</h1><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">硬件</p><ul style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">CentOS release 4.6 (Final)</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Kernel 2.6.9-67.0.22.ELsmp 32位</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Memory 4G</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">CPU Intel(R) Xeon(R) CPU E5405 @ 2.00GHz （四核）</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Disk 250G SATA <br /></li></ul><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">客户端</p><ul style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 1em 2em; padding-top: 0px; word-wrap: break-word"><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">10个客户端，并发短连接</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Memlink内部开启4个处理线程。</li><li style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; list-style-type: disc; word-wrap: break-word">Redis只支持单线程模型。结果表格中的hiredis为使用hiredis客户端测试的结果。redis为官方的redis-benchmark测试结果。</li></ul><table border="1" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-collapse: collapse; word-wrap: break-word; empty-cells: show"><tbody><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><img style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word; max-width: 620px" src="http://memlink.googlecode.com/svn/trunk/doc/figures/1.png" border="0" width="95" height="50" /></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">1w</strong></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">10w</strong></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">100w</strong></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><strong style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">1000w</strong></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">insert</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">9665</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">9650</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">10078</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">10183</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">9381</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">9489</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">8993</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">8976</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">9285</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">9290</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">9287</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">8835</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">5623</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">5621</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">5468</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">5306</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range first100</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">17400</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">17504</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">16614</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">17292</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">1695</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">1637</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">1696</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">1586</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">4629</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">4587</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">4504</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">4545</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">2210</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">2286</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1955</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1611</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range first200</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">15786</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">15772</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">15964</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">16180</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">711</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">711</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">719</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">692</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2941</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2949</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2941</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2857</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1444</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1791</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1870</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1402</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range first1000</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3795</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3918</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3703</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3250</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">118</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">115</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">116</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">114</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">761</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">739</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">761</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">735</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">550</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">692</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">620</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">686</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range last100</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">16989</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">16502</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">13118</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">319</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2132</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">240</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">20</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">4385</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">191</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">19</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">80</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">8</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">-</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range last200</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">15915</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">15596</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">12203</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">316</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">743</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">229</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">20</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2941</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">182</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">19</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">94</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">9</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">-</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td rowspan="4" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">range last1000</td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">memlink</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3893</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3641</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">3332</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: red; padding-top: 0px; word-wrap: break-word">299</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">hiredis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">120</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">174</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">19</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">redis</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">756</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">149</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">18</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: green; padding-top: 0px; word-wrap: break-word">2</span></td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">mysql</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">94</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">9</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">1</span></td><td style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: blue; padding-top: 0px; word-wrap: break-word">-</span></td></tr></tbody></table><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">详细性能测试请见<a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" href="http://code.google.com/p/memlink/wiki/Benchmark" target="_blank"><span style="color: #3300ff">Benchmark</span></a></p><h1 style="padding-right: 0px; padding-left: 0px; font-size: 1em; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" name="Client_API" title="Client_API"></a>Client API</h1><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">客户端命令描述：</p><table border="0" style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; border-collapse: collapse; word-wrap: break-word; empty-cells: show"><tbody><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">命令名</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">类型</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">描述</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">dump</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">管理</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">立即复制一份内存数据到磁盘</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">clean</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">管理</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">重排某个key下的列表</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">stat</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">管理</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">统计信息</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">create</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">创建key</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">del</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">删除key下的某个value</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">insert</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">在key下的列表中插入一条</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">update</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">更新key下列表中某value在列表中的位置</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">mask</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">修改某个value的mask信息</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">tag</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">标记删除列表中的某个value或者恢复某个value</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">rmkey</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">写</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">删除一个key，包括它的列表</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">range</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">读</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">获取指定key下的列表中的某个范围的value</td></tr><tr style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word"><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">count</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">读</td><td style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; margin: 0px; padding-top: 5px; word-wrap: break-word; border: #aaaaaa 1px solid">获取指定key下列表的条数</td></tr></tbody></table><p style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px; word-wrap: break-word">详细客户端API请见<a style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; color: #333333; padding-top: 0px; text-decoration: none; word-wrap: break-word" href="http://code.google.com/p/memlink/wiki/ClientAPI" target="_blank"><span style="color: #3300ff">ClientAPI</span></a></p></span><br/>Tags - <a href="https://blog.liuts.com/tags/%25E5%25A4%25A9%25E6%25B6%25AF%25E5%25BC%2580%25E6%25BA%2590/" rel="tag">天涯开源</a> , <a href="https://blog.liuts.com/tags/memlink/" rel="tag">memlink</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/216/</link>
<title><![CDATA[Centos5.4+Nginx-0.8.50+UWSGI-0.9.6.2+Django-1.2.3搭建高性能WEB服务器[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Wed, 13 Oct 2010 12:42:30 +0000</pubDate> 
<guid>https://blog.liuts.com/post/216/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp; 之前一直使用Nginx+Fastcgi来搭建python web服务器，本文介绍Nginx+UWSGI组合来实现。uWSGI 是一个快速的、纯C语言开发的、自维护的、对开发者友好的WSGI服务器，旨在提供专业的 Python web应用发布和开发。它更符合python web的标准协议，速度要比Fastcgi要快、性能更加稳定。<br/><strong>一、安装平台</strong><br/>1、安装pcre<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>cd /home<br/>mkdir -p /home/install/nginx && cd /home/install/nginx<br/>wget http://ftp.exim.llorien.org/pcre/pcre-8.00.tar.gz<br/>tar -zxvf pcre-8.00.tar.gz<br/>cd pcre-8.00<br/>./configure<br/>make && make install<br/>cd ..<br/></div></div><br/>2、安装Nginx<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://nginx.org/download/nginx-0.8.50.tar.gz<br/>tar -zxvf nginx-0.8.50.tar.gz<br/>cd nginx-0.8.50/<br/>./configure --user=nobody --group=nobody --prefix=/usr/local/nginx --with-http_stub_status_module --with-cc-opt='-O3' --with-cpu-opt=opteron<br/>make && make install<br/>cd ..<br/></div></div><br/>3、安装python&Mysql-python<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tgz<br/>tar -zxvf Python-2.5.1.tgz<br/>cd Python-2.5.1<br/>./configure && make && make install<br/>echo "export PATH=&#92;$PATH:/usr/local/bin" >> /etc/profile<br/>source /etc/profile<br/></div></div><br/>4、安装MySql-python<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>cd ../<br/>wget http://downloads.sourceforge.net/project/mysql-python/mysql-python/1.2.2/MySQL-python-1.2.2.tar.gz?r=&ts=1285248455&use_mirror=nchc<br/>cd MySQL-python-1.2.2<br/>python setup.py install<br/></div></div><br/>5、安装Django<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://www.djangoproject.com/download/1.2.3/tarball/<br/>tar -zxvf Django-1.2.3.tar.gz<br/>cd Django-1.2.3<br/>python setup.py install<br/>cd ..<br/></div></div><br/>6、安装uWSGI<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://projects.unbit.it/downloads/uwsgi-0.9.6.2.tar.gz<br/>tar -zxvf uwsgi-0.9.6.2.tar.gz<br/>cd uwsgi-0.9.6.2<br/>make<br/>cp uwsgi /usr/bin<br/></div></div><br/><strong>二、平台配置</strong><br/>1、平台环境说明<br/>&nbsp;&nbsp;1.1、项目位置：/opt/www/Purgesys<br/>&nbsp;&nbsp; 创建项目方法：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>cd /opt/www<br/>django-admin.py startproject Purgesys<br/></div></div><br/>&nbsp;&nbsp;1.2、查看项目(出现以下文件结构说明项目已创建成功)<br/>&nbsp;&nbsp;#tree Purgesys<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>Purgesys<br/>&#124;-- __init__.py<br/>&#124;-- manage.py<br/>&#124;-- settings.py<br/>`-- urls.py<br/></div></div><br/>2、Nginx相关配置<br/>#cd /usr/local/nginx/conf<br/>#vi django_uwsgi.conf<br/><textarea name="code" class="c" rows="15" cols="100">
# Django project
server &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;80;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name purgesys.domain.com;


&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uwsgi_pass&nbsp;&nbsp; 127.0.0.1:9000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp; uwsgi_params;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp;off;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ^~ /static &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; /opt/www/Purgesys;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ^~ /admin/ &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uwsgi_pass&nbsp;&nbsp; 127.0.0.1:9000;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;uwsgi_params;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp; off;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~* ^.+&#92;.(mpg&#124;avi&#124;mp3&#124;swf&#124;zip&#124;tgz&#124;gz&#124;rar&#124;bz2&#124;doc&#124;xls&#124;exe&#124;ppt&#124;txt&#124;tar&#124;mid&#124;midi&#124;wav&#124;rtf&#124;mpeg)$ &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp; /opt/www/Purgesys/static;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access_log&nbsp;&nbsp; off;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;

&#125;
</textarea><br/>*Nginx-0.8.50默认已添加uwsgi输出头支持<br/><span style="color: #FF0000;">include uwsgi_params;</span><br/><br/>#vi nginx.conf<br/>追加子配置文件django_uwsgi.conf<br/><textarea name="code" class="c" rows="15" cols="100">
http&#123;
........
include django_uwsgi.conf;
&#125;
</textarea><br/>3、UWSGI配置<br/>#mkdir -p /home/uwsgi;cd /home/uwsgi<br/>#mkdir -p /opt/www/logs<br/>#echo "" > /opt/www/logs/django.log<br/>#vi uwsgi.xml<br/><textarea name="code" class="xml" rows="15" cols="100">
<uwsgi>
&nbsp;&nbsp;<socket>127.0.0.1:9000</socket>
&nbsp;&nbsp;<listen>200</listen>
&nbsp;&nbsp;<master>true</master>
&nbsp;&nbsp;<pidfile>/usr/local/nginx/uwsgi.pid</pidfile>
&nbsp;&nbsp;<processes>8</processes>
&nbsp;&nbsp;<pythonpath>/opt/www/Purgesys</pythonpath>
&nbsp;&nbsp;<pythonpath>/opt/www/</pythonpath>
&nbsp;&nbsp;<module>django_wsgi</module>
&nbsp;&nbsp;<profiler>true</profiler>
&nbsp;&nbsp;<memory-report>true</memory-report>
&nbsp;&nbsp;<enable-threads>true</enable-threads>
&nbsp;&nbsp;<logdate>true</logdate>
&nbsp;&nbsp;<limit-as>6048</limit-as>
&nbsp;&nbsp;<daemonize>/opt/www/logs/django.log</daemonize>
</uwsgi>
</textarea><br/>4、创建应用模块<br/>cd /opt/www/Purgesys<br/>vi django_wsgi.py<br/><textarea name="code" class="python" rows="15" cols="100">
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'Purgesys.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
</textarea><br/>5、启动服务<br/>#/usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>#/usr/local/nginx/sbin/nginx<br/><br/>6、查看进程<br/>#[liuts@webserver nginx]# ps -ef&#124;grep uwsgi&#124;grep -v grep<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21652&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21653 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21654 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21655 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21656 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21657 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21658 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21659 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/>root&nbsp;&nbsp;&nbsp;&nbsp; 21660 21652&nbsp;&nbsp;0 17:12 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:00 /usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml<br/></div></div><br/>7、监听端口<br/>#[liuts@webserver nginx]# netstat -an&#124;grep 9000<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;127.0.0.1:9000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN<br/></div></div><br/>8、访问测试<br/>输入http://serverip/<br/><a href="https://blog.liuts.com/attachment.php?fid=216" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=216" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>大功告成！<br/><br/>*附uwsgi启动脚本<br/>#cd /home/uwsgi<br/>#vi uwsgiserver.sh<br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/bash
if [ $1 = start ];then
&nbsp;&nbsp;psid=`ps aux&#124;grep "uwsgi"&#124;grep -v "grep"&#124;wc -l`
&nbsp;&nbsp;if [ $psid -gt 2 ];then
&nbsp;&nbsp;&nbsp;&nbsp;echo "uwsgi is running!"
&nbsp;&nbsp;&nbsp;&nbsp;exit 0
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml
&nbsp;&nbsp;fi
&nbsp;&nbsp;echo "Start uwsgi service [OK]"
elif [ $1 = stop ];then
&nbsp;&nbsp;killall -9 uwsgi
&nbsp;&nbsp;echo "Stop uwsgi service [OK]"
elif [ $1 = restart ];then
&nbsp;&nbsp;killall -9 uwsgi
&nbsp;&nbsp;/usr/bin/uwsgi -x /home/uwsgi/uwsgi.xml
&nbsp;&nbsp;echo "Restart uwsgi service [OK]"
else
&nbsp;&nbsp;echo "Usages: sh uwsgiserver.sh [start&#124;stop&#124;restart]"
fi
</textarea><br/>#sh uwsgiserver.sh start<br/>[uWSGI] parsing config file /home/uwsgi/uwsgi.xml<br/>Start uwsgi service [<span style="color: #32CD32;">OK</span>]<br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/python/" rel="tag">python</a> , <a href="https://blog.liuts.com/tags/uwsgi/" rel="tag">uwsgi</a> , <a href="https://blog.liuts.com/tags/nginx/" rel="tag">nginx</a> , <a href="https://blog.liuts.com/tags/django/" rel="tag">django</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/213/</link>
<title><![CDATA[制作python模块安装包[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Tue, 24 Aug 2010 08:32:49 +0000</pubDate> 
<guid>https://blog.liuts.com/post/213/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;python的第三方模块越来越丰富，涉及的领域也非常广，如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录，但此方式不便于管理与维护，存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。<br/><br/><strong>一、编写模块</strong><br/>进入项目目录<br/>#cd /home/pysetup <br/>#vi foo.py<br/><textarea name="code" class="python" rows="15" cols="100">
class MyClass():
&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.blog = "http://blog.liuts.com"

&nbsp;&nbsp;&nbsp;&nbsp;def printblog(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print self.blog

&nbsp;&nbsp;&nbsp;&nbsp;def printBblog(self):
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print self.blog.swapcase()
</textarea><br/><strong>二、编写setup.py</strong><br/>#vi setup.py<br/><textarea name="code" class="python" rows="15" cols="100">
from distutils.core import setup
setup(name='Myblog',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version='1.0',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;description='My Blog Distribution Utilities',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;author='Liu tiansi',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;author_email='liutiansi@gmail.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url='http://blog.liuts.com',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;py_modules=['foo'],
&nbsp;&nbsp;&nbsp;&nbsp; )
</textarea><br/>更多参数说明见表：<br/><a href="https://blog.liuts.com/attachment.php?fid=160" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=160" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>三、setup.py参数说明</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#python setup.py build&nbsp;&nbsp;&nbsp;&nbsp; # 编译<br/>#python setup.py install&nbsp;&nbsp;&nbsp;&nbsp;#安装<br/>#python setup.py sdist&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#生成压缩包(zip/tar.gz)<br/>#python setup.py bdist_wininst&nbsp;&nbsp;#生成NT平台安装包(.exe)<br/>#python setup.py bdist_rpm #生成rpm包<br/></div></div><br/>或者直接"bdist 包格式"，格式如下：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#python setup.py bdist --help-formats <br/>&nbsp;&nbsp;--formats=rpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RPM distribution<br/>&nbsp;&nbsp;--formats=gztar&nbsp;&nbsp;&nbsp;&nbsp;gzip'ed tar file<br/>&nbsp;&nbsp;--formats=bztar&nbsp;&nbsp;&nbsp;&nbsp;bzip2'ed tar file<br/>&nbsp;&nbsp;--formats=ztar&nbsp;&nbsp;&nbsp;&nbsp; compressed tar file<br/>&nbsp;&nbsp;--formats=tar&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tar file<br/>&nbsp;&nbsp;--formats=wininst&nbsp;&nbsp;Windows executable installer<br/>&nbsp;&nbsp;--formats=zip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZIP file<br/></div></div><br/><strong>四、打包</strong><br/>#python setup.py sdist<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>running sdist<br/><span style="color: #FF4500;"><br/>warning: sdist: manifest template 'MANIFEST.in' does not exist (using default file list)<br/>warning: sdist: standard file not found: should have one of README, README.txt<br/></span><br/>writing manifest file 'MANIFEST'<br/>creating Myblog-1.0<br/>making hard links in Myblog-1.0...<br/>hard linking foo.py -> Myblog-1.0<br/>hard linking setup.py -> Myblog-1.0<br/>creating dist<br/>tar -cf dist/Myblog-1.0.tar Myblog-1.0<br/>gzip -f9 dist/Myblog-1.0.tar<br/>removing 'Myblog-1.0' (and everything under it)<br/></div></div><br/>提示两条warning可以忽略，不影响打包，当然一个完善的项目必须有README及MANIFEST.in(项目文件清单)文件。<br/>#ls dist<br/><span style="color: #FF4500;"><br/>Myblog-1.0.tar.gz<br/></span><br/><strong>五、安装</strong><br/>#tar -zxvf Myblog-1.0.tar.gz<br/>#cd Myblog-1.0.tar.gz<br/>#python setup.py install (此命令大家再熟悉不过了)<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>running install<br/>running build<br/>running build_py<br/>creating build/lib.linux-x86_64-2.6<br/>copying foo.py -> build/lib.linux-x86_64-2.6<br/>running install_lib<br/>copying build/lib.linux-x86_64-2.6/foo.py -> /usr/local/lib/python2.6/dist-packages<br/>byte-compiling /usr/local/lib/python2.6/dist-packages/foo.py to foo.pyc<br/>running install_egg_info<br/>Writing /usr/local/lib/python2.6/dist-packages/Myblog-1.0.egg-info<br/></div></div><br/><strong>六、测试</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>>>> from foo import MyClass<br/>>>> app=MyClass()<br/>>>> app.print printblog()<br/>>>> app.printblog()<br/>http://blog.liuts.com<br/>>>> app.printBblog()<br/>HTTP://BLOG.LIUTS.COM<br/>>>><br/></div></div><br/>参考文献：<br/><a href="http://docs.python.org/distutils/setupscript.html" target="_blank">http://docs.python.org/distutils/setupscript.html</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/python/" rel="tag">python</a> , <a href="https://blog.liuts.com/tags/setup.py/" rel="tag">setup.py</a> , <a href="https://blog.liuts.com/tags/%25E5%25AE%2589%25E8%25A3%2585%25E5%258C%2585/" rel="tag">安装包</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/212/</link>
<title><![CDATA[轻松实现源码打包安装[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 20 Aug 2010 06:38:21 +0000</pubDate> 
<guid>https://blog.liuts.com/post/212/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通常我们在Linux/Unix下安装一平台时往往需要十几甚至更多安装包，这些源码包来源于网络、本地硬盘、移动设备。有时碰到网络不畅通或下载地址失效会带来很多麻烦，一个好方法便是将常用的软件包下载到本地硬盘存放。问题是久而久之连自己都不晓得哪些包才是适用的。现用makeself来实现自解压倒安装倒是一个很好的解决方案，下面以制作Func客户端安装包为例。<br/><br/><strong>一、整理软件包</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#cd /home<br/>#mkdir FuncPack1.0<br/>将所需的软件包都往FuncPack1.0目录丢：）<br/>#ls FuncPack1.0<br/><span style="color: #00008B;"><br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;50878 Sep 28&nbsp;&nbsp;2009 certmaster-0.25.tar.gz<br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;249 Oct&nbsp;&nbsp;8&nbsp;&nbsp;2009 certmaster.conf<br/>-rw-r--r-- 1 root root&nbsp;&nbsp; 152871 Sep 28&nbsp;&nbsp;2009 func-0.25.tar.gz<br/>-rw-r--r-- 1 root root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;137 Oct&nbsp;&nbsp;8&nbsp;&nbsp;2009 minion.conf<br/>-rw-r--r-- 1 root root&nbsp;&nbsp; 197981 Sep 28&nbsp;&nbsp;2009 pyOpenSSL-0.9.tar.gz<br/>-rw-r--r-- 1 root root 11060830 May 22&nbsp;&nbsp;2008 Python-2.5.1.tgz<br/></span><br/></div></div><br/><strong>二、编写安装shell</strong><br/>#cd FuncPack1.0<br/>#vi install.sh<br/><textarea name="code" class="c" rows="15" cols="100">
#!/bin/sh
#
# ---------------------------------------------------
# A python&func install shell
# ---------------------------------------------------
# 
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Writed by Liu&nbsp;&nbsp;tiansi
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Mail:liutiansi@gmail.com
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Blog:http://blog.liuts.com
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QQ groups:106651547
# ---------------------------------------------------


_pwd=$(pwd)
cd $_pwd/FuncPack1.0

echo "==================*install python2.5*============================"
/bin/tar -zxvf Python-2.5.1.tgz
cd Python-2.5.1
./configure && make && make install
echo "export PATH=&#92;$PATH:/usr/local/bin" >> /etc/profile
source /etc/profile
cd ..

echo "=================*install Func/certmaster/pyOpenSSL*================="

/bin/tar -zxvf pyOpenSSL-0.9.tar.gz
cd pyOpenSSL-0.9
/usr/local/bin/python setup.py install
cd ..

/bin/tar -zxvf certmaster-0.25.tar.gz
cd certmaster-0.25
/usr/local/bin/python setup.py install
cd ..

/bin/tar -zxvf func-0.25.tar.gz
cd func-0.25
/usr/local/bin/python setup.py install
cd ..

/bin/ln -s /usr/local/bin/certmaster /usr/bin/certmaster
/bin/ln -s /usr/local/bin/funcd /usr/bin/funcd

/bin/sed -i 's/'`hostname`'//g' /etc/hosts

/bin/rm -rf /etc/certmaster/certmaster.conf
/bin/rm -rf /etc/certmaster/minion.conf
/bin/cp certmaster.conf /etc/certmaster
/bin/cp minion.conf&nbsp;&nbsp;/etc/certmaster

/bin/sed -i -e '/^listen_port/&#123; s/51234/1999/; &#125;' /etc/func/minion.conf
/bin/sed -i -e "/^minion_name/&#123; s@=@= `hostname`@; &#125;" /etc/func/minion.conf

/sbin/chkconfig --level 345 certmaster on
/sbin/service certmaster start

/sbin/chkconfig --level 345 funcd on
/sbin/service funcd start

echo "Install over!"
</textarea><br/>#chmod +x install.sh<br/><br/><strong>三、打包</strong><br/>#cd /home<br/>#wget http://megastep.org/makeself/makeself-2.1.5.run<br/>#chmod +x makeself-2.1.5.run<br/>#./makeself-2.1.5.run<br/>#cd makeself-2.1.5<br/>开始打包!<br/><strong><span style="color: #DC143C;">#./makeself.sh&nbsp;&nbsp;--notemp ../FuncPack1.0/ FuncPack1.0.bin "system start install ..." ./install.sh</span></strong><br/>运行结果：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>Header is 402 lines long<br/><br/>About to compress 11280 KB of data...<br/>Adding files to archive named "FuncPack1.0.bin"...<br/>./<br/>./func-0.25.tar.gz<br/>./Python-2.5.1.tgz<br/>./pyOpenSSL-0.9.tar.gz<br/>./install.sh<br/>./minion.conf<br/>./certmaster.conf<br/>./certmaster-0.25.tar.gz<br/>CRC: 853861468<br/>MD5: 14463177b627f0e85f3591e88fb02b1d<br/><br/>Self-extractible archive "FuncPack1.0.bin" successfully created.<br/></div></div><br/><span style="color: #008000;"><br/>命令说明：<br/>1、--notemp 不生成临时目录，在当前目录下创建一新的目录(推荐)<br/>2、../FuncPack1.0/ 打包的源目录<br/>3、FuncPack1.0.bin 生成自运行解压文件<br/>4、"system start install ..." 安装提示信息<br/>5、./install.sh 解压后所要执行的安装脚本<br/>6、CRC、MD5(防止被篡改)<br/></span><br/>更多说明见官方<a href="http://megastep.org/makeself/" target="_blank">http://megastep.org/makeself/</a><br/><br/><strong>四、运行包</strong><br/>1、将生成的FuncPack1.0.bin文件scp到其它主机<br/>2、运行FuncPack1.0.bin即可<br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/%25E6%2589%2593%25E5%258C%2585/" rel="tag">打包</a> , <a href="https://blog.liuts.com/tags/makeself/" rel="tag">makeself</a> , <a href="https://blog.liuts.com/tags/%25E8%2587%25AA%25E8%25A7%25A3%25E5%258E%258B/" rel="tag">自解压</a> , <a href="https://blog.liuts.com/tags/%25E5%25AE%2589%25E8%25A3%2585/" rel="tag">安装</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/211/</link>
<title><![CDATA[无痛之ext3升ext4[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Fri, 06 Aug 2010 09:56:48 +0000</pubDate> 
<guid>https://blog.liuts.com/post/211/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一台文件存储服务器单目录下子目录已经突破31998数限制，造成无法继续创建子目录，服务器系统环境为CentOS5.4 内核版本为2.6.18。解决方案只能是升级到ext4文件系统，首先到<a href="https://ext4.wiki.kernel.org/index.php/Ext4_Howto" target="_blank">https://ext4.wiki.kernel.org/index.php/Ext4_Howto</a>查了一下资料，文中的第一句便是“Ext4 was released as a functionally complete and stable filesystem in Linux 2.6.28”。难道只能升级内核一条路了吗？当然不是：）呵呵，下面总结本人实施/www分区从ext3升级至ext4步骤供大家参考。<br/><br/><strong>一、升级前状态</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>[root@USER-SERVER ~]# df<br/>Filesystem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1K-blocks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used Available Use% Mounted on<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20315844&nbsp;&nbsp; 2342008&nbsp;&nbsp;16925196&nbsp;&nbsp;13% /<br/><span style="color: #FF0000;">/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;129863460&nbsp;&nbsp;&nbsp;&nbsp;192192 122968152&nbsp;&nbsp; 1% /www</span><br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 194442&nbsp;&nbsp;&nbsp;&nbsp; 17798&nbsp;&nbsp;&nbsp;&nbsp;166605&nbsp;&nbsp;10% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1029680&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 1029680&nbsp;&nbsp; 0% /dev/shm<br/></div></div><br/>无任何信息返回，说明/dev/sda5的ext4特征没有激活<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>[root@USER-SERVER ~]# tune2fs -l /dev/sda5 &#124; grep extent<br/>[root@USER-SERVER ~]# <br/></div></div><br/><strong>安装所需包</strong><br/>源码安装：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>wget http://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-1.41.12.tar.gz<br/>tar zxvf e2fsprogs-1.41.12.tar.gz; cd e2fsprogs-1.41.12<br/>./configure<br/>make;make install<br/></div></div><br/>RPM安装：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>yum -y install e2fsprogs<br/></div></div><br/><br/><strong>二、制作引导镜像</strong><br/>查找并加载相应的模块，如只需ext4支持，可将--with=ext3去掉<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>[root@USER-SERVER boot]# mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old<br/>[root@USER-SERVER boot]# mkinitrd -v --with=ext4 --with=ext3 /boot/initrd-`uname -r`.img `uname -r`<br/>Creating initramfs<br/>Looking for deps of module ehci-hcd<br/>Looking for deps of module ohci-hcd<br/>Looking for deps of module uhci-hcd<br/>Looking for deps of module ext3: jbd <br/>Looking for deps of module jbd<br/>Found root device sda2 for LABEL=/<br/>Looking for driver for device sda2<br/>Looking for deps of module pci:v00008086d00002680sv000017AAsd00006B7Cbc01sc01i8f: scsi_mod libata ata_piix <br/>Looking for deps of module scsi_mod<br/>Looking for deps of module sd_mod: scsi_mod <br/>Looking for deps of module libata: scsi_mod <br/>Looking for deps of module ata_piix: scsi_mod libata <br/>Looking for driver for device sda3<br/>Looking for deps of module pci:v00008086d00002680sv000017AAsd00006B7Cbc01sc01i8f: scsi_mod libata ata_piix <br/>Looking for deps of module usb-storage: scsi_mod <br/>Looking for deps of module ide-disk<br/>Looking for deps of module dm-mem-cache<br/>Looking for deps of module dm-region_hash: dm-mod dm-log <br/>Looking for deps of module dm-mod<br/>Looking for deps of module dm-log: dm-mod <br/>Looking for deps of module dm-message<br/>Looking for deps of module dm-raid45: dm-message dm-mod dm-mem-cache dm-log dm-region_hash <br/>Looking for deps of module ext4: crc16 jbd2 <br/>Looking for deps of module crc16<br/>Looking for deps of module jbd2<br/>Using modules:&nbsp;&nbsp;/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ehci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ohci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/uhci-hcd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd/jbd.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext3/ext3.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/scsi_mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/sd_mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/libata.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/ata_piix.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/storage/usb-storage.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mem-cache.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mod.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-log.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-region_hash.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-message.ko /lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-raid45.ko /lib/modules/2.6.18-164.15.1.el5/kernel/lib/crc16.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd2/jbd2.ko /lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext4/ext4.ko<br/>/sbin/nash -> /tmp/initrd.qO3680/bin/nash<br/>/sbin/insmod.static -> /tmp/initrd.qO3680/bin/insmod<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ehci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ehci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/ohci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ohci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/host/uhci-hcd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/uhci-hcd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd/jbd.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/jbd.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext3/ext3.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ext3.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/scsi_mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/scsi_mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/scsi/sd_mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/sd_mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/libata.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/libata.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/ata/ata_piix.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ata_piix.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/usb/storage/usb-storage.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/usb-storage.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mem-cache.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-mem-cache.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-mod.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-mod.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-log.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-log.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-region_hash.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-region_hash.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-message.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-message.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/drivers/md/dm-raid45.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/dm-raid45.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/lib/crc16.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/crc16.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/jbd2/jbd2.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/jbd2.ko' [elf64-x86-64]<br/>copy from `/lib/modules/2.6.18-164.15.1.el5/kernel/fs/ext4/ext4.ko' [elf64-x86-64] to `/tmp/initrd.qO3680/lib/ext4.ko' [elf64-x86-64]<br/>/sbin/dmraid.static -> /tmp/initrd.qO3680/bin/dmraid<br/>/sbin/kpartx.static -> /tmp/initrd.qO3680/bin/kpartx<br/>Adding module ehci-hcd<br/>Adding module ohci-hcd<br/>Adding module uhci-hcd<br/>Adding module jbd<br/>Adding module ext3<br/>Adding module scsi_mod<br/>Adding module sd_mod<br/>Adding module libata<br/>Adding module ata_piix<br/>Adding module usb-storage<br/>Adding module dm-mem-cache<br/>Adding module dm-mod<br/>Adding module dm-log<br/>Adding module dm-region_hash<br/>Adding module dm-message<br/>Adding module dm-raid45<br/>Adding module crc16<br/>Adding module jbd2<br/><span style="color: #FF0000;">Adding module ext4</span><br/></div></div><br/><br/>重启<br/>[root@USER-SERVER ~]# reboot<br/><br/><strong>三、格式转换</strong><br/>[root@USER-SERVER ~]# umount&nbsp;&nbsp;/dev/sda5<br/>[root@USER-SERVER ~]# tune2fs -O has_journal,extents,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize /dev/sda5<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>tune2fs 1.41.12 (17-May-2010)<br/>Please run e2fsck on the filesystem.<br/></div></div><br/><br/><strong>四、修改转换文件系统错误并挂载</strong><br/>[root@USER-SERVER ~]# e2fsck -fDC0 /dev/sda5 -y<br/>[root@USER-SERVER ~]# mount -t ext4 /dev/sda5 /www<br/><br/><strong>五、修改文件系统信息<span style="color: #FF0000;">(重要！否则重启后会还原为ext3)</span></strong><br/>将<br/>LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>修改为<br/>LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>[root@USER-SERVER ~]# vi /etc/fstab<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>oot@USER-SERVER ~]# vi /etc/fstab<br/>LABEL=/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 1<br/><span style="color: #FF0000;">LABEL=/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2</span><br/>LABEL=/boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 2<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/shm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>devpts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/dev/pts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;devpts&nbsp;&nbsp;gid=5,mode=620&nbsp;&nbsp;0 0<br/>sysfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /sys&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysfs&nbsp;&nbsp; defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/proc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/>LABEL=SWAP-sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;&nbsp;&nbsp;&nbsp;defaults&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 0<br/></div></div><br/><br/><strong>六、升级后状态</strong><br/>ext4的特征全激活了：）<br/>#[root@USER-SERVER ~]# tune2fs -l /dev/sda5 &#124; grep extent<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>Filesystem features:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has_journal resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize<br/></div></div><br/>[root@USER-SERVER ~]# df -T<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>Filesystem&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp; 1K-blocks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Used Available Use% Mounted on<br/>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;20315844&nbsp;&nbsp; 2310764&nbsp;&nbsp;16956440&nbsp;&nbsp;12% /<br/>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp; ext3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;194442&nbsp;&nbsp;&nbsp;&nbsp; 20563&nbsp;&nbsp;&nbsp;&nbsp;163840&nbsp;&nbsp;12% /boot<br/>tmpfs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpfs&nbsp;&nbsp;&nbsp;&nbsp; 1029672&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 1029672&nbsp;&nbsp; 0% /dev/shm<br/><span style="color: #FF0000;">/dev/sda5&nbsp;&nbsp;&nbsp;&nbsp; ext4&nbsp;&nbsp; 129863460&nbsp;&nbsp;&nbsp;&nbsp;192192 122968152&nbsp;&nbsp; 1% /www</span><br/></div></div><br/><br/>参考文献<br/><a href="http://fedorasolved.org/Members/rasker/converting-an-ext3-root-partition-to-ext4-in-fedora-10" target="_blank">http://fedorasolved.org/Members/rasker/converting-an-ext3-root-partition-to-ext4-in-fedora-10</a><br/><a href="http://kernelnewbies.org/Ext4#head-3891522e0601162aab24c73c1f148a1e28c6a9d4" target="_blank">http://kernelnewbies.org/Ext4#head-3891522e0601162aab24c73c1f148a1e28c6a9d4</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/ext4/" rel="tag">ext4</a> , <a href="https://blog.liuts.com/tags/%25E5%258D%2587%25E7%25BA%25A7/" rel="tag">升级</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/209/</link>
<title><![CDATA[LAMP+logzilla2.9.9+syslog-ng实现集中日志管理(第二版)[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Sat, 24 Jul 2010 06:28:52 +0000</pubDate> 
<guid>https://blog.liuts.com/post/209/</guid> 
<description>
<![CDATA[ 
	<strong>一、前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么要引入第二版？由于<a href="http://blog.liuts.com/post/207/" target="_blank">第一版</a>是基于Logzilla3.0，作者在Logzilla3.0以后做了licensed限制，可以从作者回复邮件的内容得到证实[图1]。因此需要定期去更新license.txt来达到延长使用期限的目的，个人感觉比较麻烦，同时还有主机及日志数的限制，这也是整理第二版的原因，当然，你也可以通过以下途径获取免费、无限制的licensed，见<a href="http://forum.logzilla.info/index.php?topic=214.0" target="_blank">How to get a free, unlimited, license of LogZilla</a>。但这不是本文所要讨论的话题：），第二版中本人采用logzilla2.9.9版来搭建一个免费、无限制的日志集中管理平台，功能上与3.0差异不大，好了，废话少说，我们开始吧！<br/><div align=center>[图1]</div><br/><a href="https://blog.liuts.com/attachment.php?fid=143" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=143" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>平台截图</strong><br/><a href="https://blog.liuts.com/attachment.php?fid=141" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=141" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="https://blog.liuts.com/attachment.php?fid=142" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=142" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>二、平台初始化</strong><br/>部署LAMP平台(略)<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#yum install libdbi* libnet<br/>#cpan Date::Calc Text::LevenshteinXS String::CRC32<br/>#cpan -i Digest::SHA1<br/>#cpan -i Net::MySQL<br/></div></div><br/><strong>三、下载相关包</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#cd /home/install<br/>#mkdir logzilla;cd logzilla<br/>#wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz<br/>#wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.3/setups/rhel-5-i386/syslog-ng-3.0.3-1.rhel5.i386.rpm<br/></div></div><br/><strong>四、开始安装</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/># cp eventlog_0.2.9.tar.gz /usr/src/redhat/SOURCES/<br/># tar zxvf&nbsp;&nbsp;eventlog_0.2.9.tar.gz<br/># cd eventlog-0.2.9/<br/># rpmbuild --ba eventlog.spec.bb<br/># cd /usr/src/redhat/RPMS/x86_64<br/># rpm -Uvh libevtlog*<br/><br/>#cd /home/install/logzilla<br/>#rpm -Uvh syslog-ng-3.0.3-1.rhel5.i386.rpm<br/></div></div><br/><strong>五、安装logzilla</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#cd /www/webroot/<br/>#wget http://php-syslog-ng.googlecode.com/files/logzilla_v2.9.9o.tgz<br/>#tar xzvf logzilla_v2.9.9o.tgz<br/>#mkdir -p /var/log/logzilla<br/></div></div><br/><strong>六、配置Mysql</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/># mysql -u<username> -p<password><br/>mysql> SELECT @@event_scheduler;<br/>+-------------------+<br/>&#124; @@event_scheduler &#124;<br/>+-------------------+<br/>&#124; OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;<br/>+-------------------+<br/>1 row in set (0.00 sec)<br/></div></div><br/><br/><span style="color: #FF0000;">低于Mysql5.1版本会提示如下，如不打算升级到logzilla3.0，没有关系，可以略过此步骤。</span><br/>mysql> SELECT @@event_scheduler;<br/>ERROR 1193 (HY000): Unknown system variable 'event_scheduler'<br/><br/>激活event_scheduler<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>mysql> SET GLOBAL event_scheduler = 1; <br/>Query OK, 0 rows affected (0.00 sec)<br/><br/>mysql> SELECT @@event_scheduler;<br/>+-------------------+<br/>&#124; @@event_scheduler &#124;<br/>+-------------------+<br/>&#124; ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;<br/>+-------------------+<br/>1 row in set (0.00 sec)<br/><br/>mysql> quit;<br/></div></div><br/><strong>七、修改Syslog-ng配置</strong><br/>#vi /opt/syslog-ng/etc/syslog-ng.conf<br/><textarea name="code" class="c" rows="15" cols="100">
@version: 3.0
source s_local &#123;
internal();
unix-stream("/dev/log");
file("/proc/kmsg" program_override("kernel: "));
&#125;;
source s_local &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;udp(ip(0.0.0.0) port(514));
&#125;;

# destinations
destination d_messages &#123; file("/var/log/messages"); &#125;;


###########################################################################################
# Clay's LogZilla config below
###########################################################################################
# Last updated on 2010-06-15
###########################################################################################
options &#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long_hostnames(off);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# doesn't actually help on Solaris, log(3) truncates at 1024 chars
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_msg_size(8192);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# buffer just a little for performance
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# sync(1); <- Deprecated - use flush_lines() instead
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flush_lines(1);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# memory is cheap, buffer messages unable to write (like to loghost)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_fifo_size(16384);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Hosts we don't want syslog from
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#bad_hostname("^(ctld.&#124;cmd&#124;tmd&#124;last)$");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The time to wait before a dead connection is reestablished (seconds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_reopen(10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Use DNS so that our good names are used, not hostnames
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_dns(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dns_cache(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Use the whole DNS name
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_fqdn(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keep_hostname(yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain_hostnames(no);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Read permission for everyone
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perm(0644);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# The default action of syslog-ng 1.6.0 is to log a STATS line
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# to the file every 10 minutes.&nbsp;&nbsp;That's pretty ugly after a while.
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# Change it to every 12 hours so you get a nice daily update of
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# # how many messages syslog-ng missed (0).
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# stats(43200);
&#125;;

destination d_logzilla &#123;
&nbsp;&nbsp; program("/www/webroot/php-syslog-ng/scripts/db_insert.pl"
&nbsp;&nbsp; template("$HOST&#92;t$FACILITY&#92;t$PRIORITY&#92;t$LEVEL&#92;t$TAG&#92;t$YEAR-$MONTH-$DAY&#92;t$HOUR:$MIN:$SEC&#92;t$PROGRAM&#92;t$MSG&#92;n")
&nbsp;&nbsp; template_escape(yes)
&nbsp;&nbsp; );
&#125;;

# Tell syslog-ng to log to our new destination 
log &#123;
&nbsp;&nbsp; source(s_local);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destination(d_logzilla);
&#125;;
</textarea><br/><strong>八、修改apache配置</strong><br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
<VirtualHost *:80>
&nbsp;&nbsp;&nbsp;&nbsp;ServerAdmin liutiansi@gmail.com
&nbsp;&nbsp;&nbsp;&nbsp;DocumentRoot /www/webroot/php-syslog-ng/html/
&nbsp;&nbsp;&nbsp;&nbsp;ServerName syslog.com.cn
&nbsp;&nbsp;&nbsp;&nbsp;ErrorLog logs/syslog.com.cn-error_log
&nbsp;&nbsp;&nbsp;&nbsp;CustomLog logs/syslog.com.cn-access_log common
# LogZilla
Alias /logs "/www/webroot/php-syslog-ng/html/"
<Directory "/www/webroot/php-syslog-ng/html/">
&nbsp;&nbsp;&nbsp;&nbsp;Options Indexes MultiViews FollowSymLinks
&nbsp;&nbsp;&nbsp;&nbsp;AllowOverride All
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Order allow,deny
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Allow from all
</Directory>
</VirtualHost>
</textarea><br/>重启apache服务：/etc/init.d/apache2 restart<br/><br/><strong>九、修改php.ini</strong><br/>Vi /usr/local/php/lib/php.ini<br/><textarea name="code" class="c" rows="15" cols="100">
memory_limit = 128M
max_execution_time = 300
/etc/init.d/apache2 restart
</textarea><br/><strong>十、配置日志分隔</strong><br/>cp /www/webroot/php-syslog-ng/scripts/contrib/system_configs/logrotate.d /etc/logrotate.d/logzilla<br/><br/><strong>十一、添加作业</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>@daily /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/logrotate.php >> /var/log/php-syslog-ng/logrotate.log<br/>@daily /usr/bin/find /www/webroot/php-syslog-ng/html/jpcache/ -atime 1 -exec rm -f '&#123;&#125;' ';'<br/>0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/local/php/bin/php /www/webroot/php-syslog-ng/scripts/reloadcache.php >> /var/log/php-syslog-ng/reloadcache.log<br/></div></div><br/><strong>十二、开始平台安装</strong><br/># /etc/init.d/syslog-ng restart<br/>http://192.168.0.100/logs/来进行安装<br/>步骤如下：<br/><a href="http://nms.gdd.net/images/thumb/f/f7/Install001_pre-install-checklist.png/593px-Install001_pre-install-checklist.png" target="_blank"><img src="http://nms.gdd.net/images/thumb/f/f7/Install001_pre-install-checklist.png/593px-Install001_pre-install-checklist.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/1/16/Install002.png" target="_blank"><img src="http://nms.gdd.net/images/1/16/Install002.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/thumb/d/d9/Install003.png/509px-Install003.png" target="_blank"><img src="http://nms.gdd.net/images/thumb/d/d9/Install003.png/509px-Install003.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/6/6b/Install004.png" target="_blank"><img src="http://nms.gdd.net/images/6/6b/Install004.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/2/29/Install005.png" target="_blank"><img src="http://nms.gdd.net/images/2/29/Install005.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/4/4c/Install006.png" target="_blank"><img src="http://nms.gdd.net/images/4/4c/Install006.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/5/53/Install007.png" target="_blank"><img src="http://nms.gdd.net/images/5/53/Install007.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/a/ae/Install009.png" target="_blank"><img src="http://nms.gdd.net/images/a/ae/Install009.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://nms.gdd.net/images/0/05/Install010.png" target="_blank"><img src="http://nms.gdd.net/images/0/05/Install010.png" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong>十三、替换脚本路径</strong><br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>cd /www/wewroot/php-syslog-ng/scripts<br/>./fixpaths.sh<br/></div></div><br/>或者直接用sed来修改<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>#sed -i -e "&#123; s@/path_to_logzilla@/www/webroot/php-syslog-ng@&#125;" *.*<br/></div></div><br/>＃/etc/init.d/syslog-ng restart<br/><br/><strong>十四、客户端配置</strong><br/>在最后添加以下，其中syslog.admin.com.cn为主机域名，也可以直接用IP代替。<br/>#vi /etc/syslog.conf<br/>*.emerg;*.err;*.warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @syslog.admin.com.cn<br/>#/etc/init.d/syslog restart<br/><br/>测试：logger -p local4.err "This is a local.err test message."<br/><br/><strong>十五、后续问题</strong><br/><strong><span style="color: #8B0000;">问题一</span>、点击[Graph]时会提示“JpGraph Error Font file </strong>"/usr/share/fonts/truetype/msttcorefonts/verdana.ttf" is not readable or does not exist.”<br/>解决方法：<br/>mkdir -p /usr/share/fonts/truetype/msttcorefonts/<br/>上传windows XP/2003/vista/下的字体文件verdana.ttf到/usr/share/fonts/truetype/msttcorefonts/即可。<br/><br/><strong><span style="color: #8B0000;">问题二</span>、logs表无数据，运行/www/webroot/php-syslog-ng/scripts/contrib/dbgen/dbgen.pl</strong><br/>提示：Cannot determine peer address at /usr/lib/perl5/site_perl/5.8.5/Net/MySQL.pm line 277 <br/><br/>解决方法：<br/>1、是logzilla2.9.9安装时一个bug，新建的mysql的syslogadmin、sysloguser用户权限没有成功赋予，手工添加上就OK了，感谢【杭州】FIGO提供的故障案例。<br/>2、如第1步不成功，尝试修改/www/webroot/php-syslog-ng/html/config/config.php文件mysql主机地址localhost为127.0.0.1。<br/><br/><strong><span style="color: #8B0000;">问题三</span>、搜索缓存图表只显示两天的数据，最近三天没有数据？</strong><br/>解决方法：<br/>由于search_cache表采用的是MEMORY存储引擎，有大小的限制，修改一下/etc/my.cnf，在[MYSQLD]添加：<br/>tmp_table_size=1G<br/>max_heap_table_size = 1G<br/>再重启mysql就可以了。<br/>效果图：<br/><a href="https://blog.liuts.com/attachment.php?fid=144" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=144" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><strong><span style="color: #8B0000;">问题四</span>、不能显示日志当中带有"<"、">"的问题，如思科系统的日志。</strong><br/>感谢[常州]老高提供的故障案例。<br/>解决方法：<br/>在tailresult.php和regularresult.php中查找<br/><textarea name="code" class="php" rows="15" cols="100">
if (CISCO_TAG_PARSE ) 
&nbsp;&nbsp; &#123;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$row['msg'] = preg_replace('/&#92;s:/', ':', $row['msg']);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$row['msg'] = preg_replace('/.*(%.*?:.*)/', '$1', $row['msg']);
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
</textarea><br/>在里面添加<br/><textarea name="code" class="php" rows="15" cols="100">
 $row['msg'] = preg_replace('/</', ' ', $row['msg']); 
 $row['msg'] = preg_replace('/>/', ' ', $row['msg']); 
</textarea><br/>即可。<br/><br/><strong><span style="color: #8B0000;">问题五</span>、客户端日志无法入库。</strong><br/>感谢[北京]永远飞扬提供的故障案例。<br/>系统环境：<br/>CentOS release 5.5 (Final) i386 2.6.18-194.el5<br/>LAMP （系统rpm默认安装）<br/>Mysql：5.0.77<br/>Php：PHP 5.1.6<br/>Apache：2.2.3<br/><br/>原因：<br/>perl for mysql驱动异常，直接采用bin/mysql+insert sql语句入库。<br/><br/>解决方法：<br/>#vi /opt/syslog-ng/etc/syslog-ng.conf<br/><textarea name="code" class="c" rows="15" cols="100">
@version: 3.0
#Default configuration file for syslog-ng.
#
# For a description of syslog-ng configuration file directives, please read
# the syslog-ng Administrator?ˉs guide at:
#
# http://www.balabit.com/dl/html/syslog-ng-admin-guide_en.html/bk01-toc.html
#
options &#123;
# Number of syslog lines stored in memory before being written to files
flush_lines (1); 
log_fifo_size (2048);
create_dirs (yes);
perm (0640);
dir_perm (0750);
keep_hostname (yes);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;time_reopen (10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log_fifo_size (1024);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;long_hostnames (off);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_dns (no);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use_fqdn (no);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; owner(root);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group(root);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; perm(0640);
&#125;; 
source s_network_1 &#123;
udp(ip(0.0.0.0) port(514));
&#125;;
destination d_network_1 &#123;
file("/var/log/syslog-ng/network/$YEAR.$MONTH.$DAY/$HOST/$FACILITY.log");
&#125;;
# Define the destination "d_network_1B" log directory
destination d_network_1B &#123;
file ("/var/log/syslog-ng/network/all/network.log");
&#125;;
log &#123;
source(s_network_1);
destination(d_network_1);
&#125;;
log &#123;
source(s_network_1);
destination(d_network_1B);
&#125;;
destination d_logzilla &#123;
program("/var/www/html/php-syslog-ng/scripts/db_insert.pl" 
template("$HOST&#92;t$FACILITY&#92;t$PRIORITY&#92;t$LEVEL&#92;t$TAG&#92;t$YEAR-$MONTH-$DAY&#92;t$HOUR:$MIN:$SEC&#92;t$PROGRAM&#92;t$MSG&#92;n"));
&#125;;#
log &#123;
source(s_network_1);
destination(d_logzilla);
&#125;;
source localhost_all &#123;
internal();
unix-stream("/dev/log");
file("/proc/kmsg" program_override("kernel"));
&#125;;
destination localhostlog &#123;
file ("/var/log/syslog-ng/$HOST/$YEAR-$MONTH/$DAY" create_dirs(yes));
&#125;;
log &#123;
source(localhost_all);
destination(localhostlog);
&#125;;
destination local_logzilla &#123;
program("/var/www/html/php-syslog-ng/scripts/db_insert.pl" 
template("$HOST&#92;t$FACILITY&#92;t$PRIORITY&#92;t$LEVEL&#92;t$TAG&#92;t$YEAR-$MONTH-$DAY&#92;t$HOUR:$MIN:$SEC&#92;t$PROGRAM&#92;t$MSG&#92;n"));
&#125;;
destination d_mysql &#123;
&nbsp;&nbsp;&nbsp;&nbsp;program("/usr/bin/mysql -usyslogadmin -psyslogadmin syslog"
&nbsp;&nbsp;&nbsp;&nbsp;template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg, seq)
&nbsp;&nbsp;&nbsp;&nbsp;VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG', '$SEQ' );&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;template-escape(yes));
&nbsp;&nbsp;&nbsp;&nbsp;&#125;;
log &#123;
source(localhost_all);
destination(local_logzilla);
&#125;;

</textarea><br/><span style="color: #FF0000;">*注：</span>配置中的相关参数需根据个人实际环境进行修改。<br/><br/><br/>全世界都在找logzilla_v2.9.9o.tgz包，打包线上的包放上来（修复原先一些小bug）<br/><a href="attachment.php?fid=340">点击这里下载文件</a><br/><br/>参考文献：<a href="http://nms.gdd.net/index.php/LogZilla_Installation_Guide" target="_blank">http://nms.gdd.net/index.php/LogZilla_Installation_Guide</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/logzilla/" rel="tag">logzilla</a> , <a href="https://blog.liuts.com/tags/syslog/" rel="tag">syslog</a> , <a href="https://blog.liuts.com/tags/syslog-ng/" rel="tag">syslog-ng</a> , <a href="https://blog.liuts.com/tags/%25E6%2597%25A5%25E5%25BF%2597/" rel="tag">日志</a>
]]>
</description>
</item><item>
<link>https://blog.liuts.com/post/207/</link>
<title><![CDATA[LAMP+logzilla+sphinx+syslog-ng实现集中日志管理(第一版)[原创]]]></title> 
<author>刘天斯 &lt;liutiansi@gmail.com&gt;</author>
<category><![CDATA[Linux]]></category>
<pubDate>Thu, 22 Jul 2010 09:32:23 +0000</pubDate> 
<guid>https://blog.liuts.com/post/207/</guid> 
<description>
<![CDATA[ 
	<strong>一、前言</strong><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前查看系统日志比较被动，遇到系统不正常或故障时才会主动去检查服务器系统日志，这样一来不能及时了解系统的运行情况，因此部署Logzilla+sphine+syslog-ng来弥补这不足。以下为安装、部署平台详细步骤。(Logzilla是什么新东西？其实前身就是php-syslog-ng，引用作者的话“Php-syslog-ng is now known as LogZilla. Same owner, better code :-)”)<br/><br/><strong>二、平台初始化</strong><br/>#yum install libdbi* libnet<br/>#cpan Date::Calc Text::LevenshteinXS String::CRC32<br/><br/><strong>三、下载相关包</strong><br/>#cd /home/install<br/>#mkdir logzilla;cd logzilla<br/>#wget http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz<br/>#wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.0.3/setups/rhel-5-i386/syslog-ng-3.0.3-1.rhel5.i386.rpm<br/><br/><strong>四、开始安装</strong><br/># cp eventlog_0.2.9.tar.gz /usr/src/redhat/SOURCES/<br/># tar zxvf&nbsp;&nbsp;eventlog_0.2.9.tar.gz<br/># cd eventlog-0.2.9/<br/># rpmbuild --ba eventlog.spec.bb<br/># cd /usr/src/redhat/RPMS/x86_64<br/># rpm -Uvh libevtlog*<br/><br/>#cd /home/install/logzilla<br/>#rpm -Uvh syslog-ng-3.0.3-1.rhel5.i386.rpm<br/><br/><strong>五、安装logzilla</strong><br/>#cd /www/webroot/<br/>#wget http://php-syslog-ng.googlecode.com/files/logzilla_3.0.85.tgz<br/>#tar -zxvf logzilla_3.0.85.tgz<br/>#cd logzilla/scripts<br/>#./install.pl<br/>(根据实际情况来回应就OK了)<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>===================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogZilla Installation<br/><br/>====================<br/><br/>Enter the MySQL root username [root]: <br/>Enter the password for root [mysql]: <br/>Database to install to [syslog]: <br/>Database table to install to [logs]: <br/>Enter the name of the MySQL server [127.0.0.1]: <br/>Enter the port of the MySQL server [3306]: <br/>Enter the name to create as the owner of the logs database [syslogadmin]: <br/>Enter the password for the syslogadmin user [syslogadmin]: <br/>Enter the name to create as the WEBSITE owner [admin]: <br/>Enter the password for admin [admin]: <br/>Enter your email address [cdukes@cdukes.com]: <br/>Enter a name for your website [The home of LogZilla]: <br/>Enter the base url for your site (include trailing slash) [/logs/]: /<br/>Where should log files be stored? [/var/log/logzilla]: <br/>How long should I keep old logs? (in days) [30]: <br/>========================================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path Updates<br/><br/>========================================<br/><br/>Getting ready to replace paths in all files with "/www/webroot/logzilla"<br/>Ok to continue? [y]: <br/>Updating file paths<br/>Modifying ../scripts/db_insert.pl<br/>Modifying ../scripts/contrib/system_configs/logzilla.crontab<br/>Modifying ../scripts/contrib/system_configs/syslog-ng.conf<br/>Modifying ../scripts/contrib/system_configs/logzilla.apache<br/>Modifying ../sphinx/indexer.sh<br/>Modifying ../sphinx/sphinx.conf<br/>Updating log paths<br/>Modifying ../scripts/contrib/system_configs/logzilla.crontab<br/>Modifying ../scripts/contrib/system_configs/logzilla.logrotate<br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Database Installation<br/><br/>====================<br/><br/>All data will be installed into the syslog database<br/>Ok to continue? [y]: <br/><br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Config.php generation<br/><br/>====================<br/><br/><br/>Generating /www/webroot/logzilla/html/config/config.php<br/>Ok to continue? [y]: <br/><br/><br/>====================<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System files<br/><br/>====================<br/><br/>Adding LogZilla logrotate.d file to /etc/logrotate.d<br/>Ok to continue? [y]: <br/>Where is your syslog-ng.conf file located? [/etc/syslog-ng/syslog-ng.conf]: /opt/syslog-ng/etc/syslog-ng.conf<br/>Adding syslog-ng configuration to /opt/syslog-ng/etc/syslog-ng.conf<br/>Ok to continue? [y]: <br/>Found 1 sources<br/>Which source definition would you like to use? [s_all]: <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogZilla installation complete...<br/>Note: you may need to enable the MySQL Event Scheduler in your /etc/my.cnf file.<br/>Please visit http://forum.logzilla.info/index.php/topic,71.0.html for more information.<br/><br/>Also, please visit http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0#UDP_Buffers to learn how to increase your UDP buffer size (otherwise you may drop messages).<br/><br/>Please run /etc/init.d/syslog-ng restart<br/></div></div><br/><br/><strong>六、安装 Sphinx</strong><br/>#cd logzilla/sphinx/src<br/>#tar xzvf sphinx-0.9.9.tar.gz<br/><br/>#cd sphinx-0.9.9<br/>#./configure --prefix `pwd`/../..<br/>#make && make install<br/><br/>#cd /www/webroot/logzilla/sphinx<br/>#vi sphinx.conf<br/>#!/usr/bin/php 替换成实际php的位置，如#!/usr/local/php/bin/php<br/>#./indexer.sh full<br/>#bin/searchd<br/><br/>提示：<br/>ERROR: index 'idx_logs': sql_query_pre[0]: Column 'max_id' cannot be null (DSN=mysql://syslogadmin:***@127.0.0.1:3306/syslog).<br/>如果看到该信息，属正常，因为现在还没有数据:)<br/><br/>添加作业：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>30 0 1 * */www/webroot/logzilla/sphinx/indexer.sh full >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/>*/5 * * * */www/webroot/logzilla/sphinx/indexer.sh delta >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/>0 0 * * */www/webroot/logzilla/sphinx/indexer.sh merge >>/www/webroot/logzilla/sphinx/log/sphinx_indexer.log 2>&1<br/></div></div><br/><br/>添加rc.local<br/>#vi /etc/rc.local<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>/www/webroot/logzilla/sphinx/bin/searchd -c /www/webroot/logzilla/sphinx/sphinx.conf<br/></div></div><br/><br/><strong>七、配置Mysql</strong><br/><textarea name="code" class="sql" rows="15" cols="100">
# mysql -u<username> -p<password>
mysql> SELECT @@event_scheduler;
+-------------------+
&#124; @@event_scheduler &#124;
+-------------------+
&#124; OFF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#124;
+-------------------+
1 row in set (0.00 sec)
</textarea><br/>激活event_scheduler<br/><textarea name="code" class="sql" rows="15" cols="100">
mysql> SET GLOBAL event_scheduler = 1; 
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@event_scheduler;
+-------------------+
&#124; @@event_scheduler &#124;
+-------------------+
&#124; ON&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#124;
+-------------------+
1 row in set (0.00 sec)
mysql> quit;
</textarea><br/><br/><strong>八、修改Syslog-ng配置</strong><br/><br/>v#i /opt/syslog-ng/etc/syslog-ng.conf<br/>(略)<br/><br/><strong>九、修改apache配置</strong><br/>#vi httpd.conf<br/><textarea name="code" class="c" rows="15" cols="100">
# LogZilla
&nbsp;&nbsp; Alias /logs "/www/webroot/logzilla/html/"
&nbsp;&nbsp; <Directory "/www/webroot/logzilla/html/">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Options Indexes MultiViews FollowSymLinks
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AllowOverride All
&nbsp;&nbsp; Order allow,deny
&nbsp;&nbsp; Allow from all
&nbsp;&nbsp; </Directory>
</textarea><br/>重启apache服务：/etc/init.d/apache2 restart<br/><br/><strong>十、IONCube授权</strong><br/>http://127.0.0.1/logs/login.php<br/><a href="https://blog.liuts.com/attachment.php?fid=137" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=137" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>下载源码包ioncube_loaders_lin_x86-64.tar.gz<br/><br/>#mkdir -p /usr/local/ioncube<br/>#tar -zxvf ioncube_loaders_lin_x86-64.tar.gz<br/>#cd ioncube<br/>#cp * /usr/local/ioncube/<br/>#vi /usr/local/php/lib/php.ini<br/>zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.2.so<br/><br/>#/etc/init.d/apache2 restart<br/><br/><strong>十一、安装完毕</strong><br/>http://127.0.0.1/logs/login.php<br/>根据install.pl配置的管理员帐号密码进行登录。<br/>1、MainPage<br/><a href="https://blog.liuts.com/attachment.php?fid=138" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=138" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>2、StatPage<br/><a href="https://blog.liuts.com/attachment.php?fid=139" target="_blank"><img src="https://blog.liuts.com/attachment.php?fid=139" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><strong>十二、客户端配置</strong><br/>#vi /etc/syslog.conf<br/>在最后添加以下，其中syslog.admin.com.cn为主机域名，也可以直接用IP代替。<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content"><br/>*.emerg;*.err;*.warning&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @syslog.admin.com.cn<br/></div></div><br/>#/etc/init.d/syslog restart<br/><br/>测试：logger -p local4.err "This is a local.err test message."<br/><br/>参考文献：<br/><a href="http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0" target="_blank">http://nms.gdd.net/index.php/Install_Guide_for_LogZilla_v3.0</a><br/><br/>如大家有什么疑问或感兴趣的话题可以通过weibo与我交流：<a href="http://t.qq.com/yorkoliu" target="_blank">http://t.qq.com/yorkoliu</a><br/>Tags - <a href="https://blog.liuts.com/tags/lamp/" rel="tag">lamp</a> , <a href="https://blog.liuts.com/tags/logzilla/" rel="tag">logzilla</a> , <a href="https://blog.liuts.com/tags/sphinx/" rel="tag">sphinx</a> , <a href="https://blog.liuts.com/tags/syslog-ng/" rel="tag">syslog-ng</a>
]]>
</description>
</item>
</channel>
</rss>