<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>虚写人生[周锋]-服务器架构与运维</title>
	<atom:link href="http://blog.izhoufeng.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.izhoufeng.com</link>
	<description>没有最好，只有更好！</description>
	<lastBuildDate>Fri, 25 Nov 2011 07:33:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>用tilt来做堡垒机</title>
		<link>http://blog.izhoufeng.com/posts/264.html</link>
		<comments>http://blog.izhoufeng.com/posts/264.html#comments</comments>
		<pubDate>Fri, 25 Nov 2011 06:53:13 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[04-系统技术]]></category>
		<category><![CDATA[07-运维与监控]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=264</guid>
		<description><![CDATA[上次测试了一家商用的堡垒机器后，印象特别深刻，发现堡垒机器做行为审计真的是做的极致了，但是价格好贵啊，刚好碰上公司开源节流的时候，项目就给XX掉了！后来很是心痛，这样的事情是否有开源的呢？后来我组的一位同事花了不少时间在研究这个东西，他偶尔发现了一个特别好用的可以替代堡垒机方案的开源软件：TILT (Terminal Interaction Logging Tool)，其官方网站是http://sourceforge.net/projects/tilt/reviews/下边就来讲讲安装和部署： 1.下载源码： wget http://down.hiphp.com/ports/tilt/tilt-0.1.1.gz 2.修改源码: #ifdef TELNET #define EXE &#34;/usr/bin/telnet_bak&#34; #define CHILDNAME &#34;TELNET&#34; #endif #ifdef SSH #define EXE &#34;/usr/bin/ssh_bak&#34; #define CHILDNAME &#34;SSH&#34; #endif #ifdef BASH #define EXE &#34;/bin/bash_bak&#34; #define CHILDNAME &#34;BASH&#34; #endif #ifndef DEBUG #define LOGPATH &#34;/var/log/tilt&#34; #else #define LOGPATH &#34;.&#34; #endif 3.安装： tar -zxvf tilt-0.1.1.gz cd tilt-0.1.1 ./configure --prefix=/usr/local/tilt-0.1.1 make [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/264.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>263.COM开始跳转了</title>
		<link>http://blog.izhoufeng.com/posts/261.html</link>
		<comments>http://blog.izhoufeng.com/posts/261.html#comments</comments>
		<pubDate>Thu, 30 Dec 2010 06:03:35 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[01-web服务器]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=261</guid>
		<description><![CDATA[操作到一半，我觉得还是有必要记录下这个算是历史性的时刻，263.COM从今天起全站将跳转到GANJI.COM了，真是无限感叹啊！做了这么多年，虽然看惯了花开花落，但是这次还是有颇多感慨，不知道收回后的263.COM将以什么样新的面貌再次出现，期待中……]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/261.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>对于大日志包进行分割的N种方法</title>
		<link>http://blog.izhoufeng.com/posts/256.html</link>
		<comments>http://blog.izhoufeng.com/posts/256.html#comments</comments>
		<pubDate>Mon, 01 Nov 2010 05:50:53 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[04-系统技术]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=256</guid>
		<description><![CDATA[对于大日志包进行分割的N种方法 (源自：杨志刚 博客 http://yangzhigang.cublog.cn) 前言： 网站一个主要域名的日志包，解压缩之后有10多个G，当日志分析系统处理此日志包时，需要的分析时间过长，而且如分析过程中出错，要清空数据后再分析，所以需要将日志进行分割成多个日志包，通过多个日志分析系统并发分析，本文主要记录一下我测试的分割过程。 说明： 本文采用一个50M大小的日志文件进行测试。 日志文件名：log.txt.gz。 文件行数：208363 方法1：（split分割） 语法：split [-&#60;行数&#62;][-b &#60;字节&#62;][-C &#60;字节&#62;][-l &#60;行数&#62;][要切割的文件][输出文件名] # gunzip log.txt.gz //一定要先解压，否则分割的文件是不能cat/zcat显示； # wc -l log.txt //计算一个文件的总行数； 208363 log.txt # split -l 120000 log.txt newlog //通过指定行数，将日志分割成两个文件； # du -sh * 50M log.txt 29M newlogaa 22M newlogab # file * //分割后的文件与原文件属性一样 log.txt: ASCII text, with very long lines, [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/256.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux输出重定向小结</title>
		<link>http://blog.izhoufeng.com/posts/253.html</link>
		<comments>http://blog.izhoufeng.com/posts/253.html#comments</comments>
		<pubDate>Mon, 01 Nov 2010 05:40:55 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[07-运维与监控]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=253</guid>
		<description><![CDATA[最近/var空间老是报警，起因是/var/spool/clientmqueue下文件数量太多导致占用空间很大，此空间下存放了大量的crontab运行而发送给root的邮件，可以用以下步骤解决： 1、首先删除此目录下的三天前的文件: find ./ -atime +3 -exec rm {} \; 2、在所有运行的crontab脚本后添加日志重定向 >/dev/null 2>&#038;1 对于LINUX的重定向，转一篇比较好的说明文字： Linux Shell 环境中支持输入输出重定向，用符号来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出，可以用来指定需要重定向的标准输入或输出，比如 2>a.txt 表示将错误信息输出到文件a.txt中。 同时，还可以在这三个标准输入输出之间实现重定向，比如将错误信息重定向到标准输出，可以用 2>&#038;1来实现。 Linux下还有一个特殊的文件/dev/null，它就像一个无底洞，所有重定向到它的信息都会消失得无影无踪。这一点非常有用，当我们不需要回显程序的所有信息时，就可以将输出重定向到/dev/null。 如果想要正常输出和错误信息都不显示，则要把标准输出和标准错误都重定向到/dev/null， 例如： # ls 1&#62;/dev/null 2&#62;/dev/null 还有一种做法是将错误重定向到标准输出，然后再重定向到 /dev/null，例如： # ls &#62;/dev/null 2&#62;&#38;1 注意：此处的顺序不能更改，否则达不到想要的效果，此时先将标准输出重定向到 /dev/null，然后将标准错误重定向到标准输出，由于标准输出已经重定向到了/dev/null，因此标准错误也会重定向到/dev/null，于是一切静悄悄:-)]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/253.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL中SQL优化和架构设计的一些简单想法[转]</title>
		<link>http://blog.izhoufeng.com/posts/249.html</link>
		<comments>http://blog.izhoufeng.com/posts/249.html#comments</comments>
		<pubDate>Tue, 12 Oct 2010 03:17:59 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[02-数据库技术]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=249</guid>
		<description><![CDATA[普通MySQL运行，数据量和访问量不大的话，是足够快的，但是当数据量和访问量剧增的时候，那么就会明显发现MySQL很慢，甚至down掉，那么就要考虑优化我们的MySQL了。 优化无非是从三个角度入手： 第一个是从硬件，增加硬件，增加服务器 第二个就是对我们的MySQL服务器进行优化，增加缓存大小，开多端口，读写分开 第三个就是我们的应用优化，建立索引，优化SQL查询语句，建立缓存等等 我就简单的说说SQL查询语句的优化。因为如果我们Web服务器比数据库服务器多或者性能优良的话，我们完全可以把数据库的压力转嫁到Web服务器上，因为如果单台MySQL，或者 Master/Slave 架构的数据库服务器都负担比较重，那么就可以考虑把MySQL的运算放到Web服务器上去进行。当然了，如果你Web服务器比数据库服务器差，那就把压力放在数据库服务器上吧，呵呵。 如果是把MySQL服务器的压力放在Web服务器上，那么很多运算就需要我们的程序去执行，比如Web程序中全部交给PHP脚本去处理数据。单台MySQL服务器，查询、更新、插入、删除都在一台服务器上的话，访问量一大，你会明显发现锁表现象，当对一个表进行更新删除操作的时候，就会拒绝其他操作，这样就会导致锁表，解决这个问题最简单直接的办法就是拿两台MySQL服务器，一台负责查询（select）操作，另外一台负责更改（update/delete/insert），然后进行同步，这样能够避免锁表，如果服务器更多，那么就更好处理了，可以采用分布式数据库架构和数据的散列存储，下面我们会简单说一下。 一、SQL的优化和注意事项 现在我们假设我们只有一台MySQL服务器，所有的select/update/insert/delete操作都是在这上面进行的，我们同时有三台Web服务器，通过DNS轮巡来访问，那么我们如何进行我们应用程序和SQL的优化。 1. Where条件 在查询中，WHERE条件也是一个比较重要的因素，尽量少并且是合理的where条件是很重要的，在写每一个where条件的时候都要仔细考虑，尽量在多个条件的时候，把会提取尽量少数据量的条件放在前面，这样就会减少后一个where条件的查询时间。 有时候一些where条件会导致索引无效，当使用了Mysql函数的时候，索引将无效，比如：select * from tbl1 where left(name, 4) = &#8216;hylr&#8217;，那么这时候索引无效，还有就是使用LIKE进行搜索匹配的时候，这样的语句索引是无效的：select * from tbl1 where name like &#8216;%xxx%&#8217;，但是这样索引是有效的：select * from tbl1 where name like &#8216;xxx%&#8217;，所以谨慎的写你的SQL是很重要的。 2. 关联查询和子查询 数据库一个很重要的特点是关联查询，LEFT JOIN 和全关联，特别是多个表进行关联，因为每个关联表查询的时候，进行扫描的时候都是一个笛卡尔乘积的数量级，扫描数量很大，如果确实是需要进行关联操作，请给where或者on的条件进行索引。 关联操作也是可能交给应用去操作的，看数据量的大小，如果数据量不是非常大，比如10万条以下，那么就可以交给程序去处理（totododo提出笔误，特此修正），程序分别提取左右两个表的数据，然后进行循环的扫描处理，返回结果，这个过程同样非常耗费Web服务器的资源，那么就需要取决于你愿意把压力放在Web服务器上或者数据库服务器上了。 子查询是在mysql5中支持的功能，比如：select * from tbl1 where id in(select id from tbl1)，那样效率是非常非常低，要尽量避免使用子查询，要是我，绝对不用，呵呵。 3. 一些耗费时间和资源的操作 [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/249.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>万变不离其中的排错方法-&gt;32位系统文件不能过2G</title>
		<link>http://blog.izhoufeng.com/posts/247.html</link>
		<comments>http://blog.izhoufeng.com/posts/247.html#comments</comments>
		<pubDate>Mon, 23 Aug 2010 03:09:13 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[04-系统技术]]></category>
		<category><![CDATA[07-运维与监控]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=247</guid>
		<description><![CDATA[今天周一刚一上班，发现我的CACTI登录后老是502错误，于是登录系统开始排查： 1、我首先看了下系统版本 [root@sdb1 log]# cat /etc/redhat-release Red Hat Enterprise Linux AS release 4 (Nahant Update 5) [root@sdb1 log]# uname -a Linux sdb1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux 2、我看到系统是32位系统，于是想是不是有日志文件超过2G了，于是我把Nginx的日志，FastCGI的日志都清理了一遍，问题依然存在。 3、我把FastCGI和Nginx都重启了一遍，问题也依然存在。 4、没有办法，我把Nginx的的debug日志打开，查看日志错误提示 (104: Connection reset by peer) while reading response header from upstream 5、好熟悉的日志啊，我以前肯定处理过，但是不记得了于是开始GOOGLE，按照网上提示说修改内存大小，修改超时时间，重启FastCGI,问题依然存在。 6、从这个时候起我开始怀疑是不是有人修改了配置，于是开始把Nginx和FastCGI的配置跟正常机器都核对了一遍，没有发现问题。 7、目光终于开始转向到Cacti目录。 du -sh cacti/log [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/247.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下php的mssql扩展安装</title>
		<link>http://blog.izhoufeng.com/posts/237.html</link>
		<comments>http://blog.izhoufeng.com/posts/237.html#comments</comments>
		<pubDate>Wed, 18 Aug 2010 09:02:05 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[01-web服务器]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=237</guid>
		<description><![CDATA[1、下载源码FreeTDS wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz 2、安装FreeTDS tar -zxvf freetds-stable.tgz cd freetds-0.82 ./configure --prefix=/usr/local/webserver/freetds-0.82 --with-tdsver=8.0 --enable-msdblib make make install vi /usr/local/webserver/freetds/etc/freetds.conf 输入以下内容(经过测试本步骤可以忽略)： [global] # TDS protocol version ; tds version = 4.2 &#160; # Whether to write a TDSDUMP file for diagnostic purposes # (setting this to /tmp is insecure on a multi-user system) ; dump file = [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/237.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux下redis安装部署</title>
		<link>http://blog.izhoufeng.com/posts/232.html</link>
		<comments>http://blog.izhoufeng.com/posts/232.html#comments</comments>
		<pubDate>Tue, 17 Aug 2010 09:12:15 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[03-Cache与存储]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=232</guid>
		<description><![CDATA[1、下载源代码 http://code.google.com/p/redis/downloads/list 下载redis-1.2.6.tar.gz 将下载包拷贝到/usr/local/webserver/redis-1.2.6/下 2、安装 tar -zxvf redis-1.2.6.tar.gz ce redis-1.2.6 make 3、调整内存 如果内存情况比较紧张的话，需要设定内核参数： echo 1 &#62; /proc/sys/vm/overcommit_memory 这里说一下这个配置的含义： /proc/sys/vm/overcommit_memory 该文件指定了内核针对内存分配的策略，其值可以是0、1、2。 0，表示内核将检查是否有足够的可用内存供应用进程使用；如果有足够的可用内存，内存申请允许；否则，内存申请失败，并把错误返回给应用进程。 1，表示内核允许分配所有的物理内存，而不管当前的内存状态如何。 2，表示内核允许分配超过所有物理内存和交换空间总和的内存 4、编辑redis.conf daemonize yes #转为守护进程，否则启动时会每隔5秒输出一行监控信息 save 60 1000 #减小改变次数，其实这个可以根据情况进行指定 maxmemory 1024000000 #分配256M内存 5、服务管理 5.1 启动服务 redis-server redis.conf #启动服务 5.2 存储值 redis-cli set name zhoufeng redis-cli get name 5.3 关闭服务 redis-cli shutdown 5.3.1 如果端口变化可以指定端口: [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/232.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Xmanager远程连接RedHat5桌面</title>
		<link>http://blog.izhoufeng.com/posts/229.html</link>
		<comments>http://blog.izhoufeng.com/posts/229.html#comments</comments>
		<pubDate>Thu, 08 Jul 2010 10:07:28 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[07-运维与监控]]></category>
		<category><![CDATA[xmanager]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=229</guid>
		<description><![CDATA[环境要求 1.客户端利用xmanager3.0连接服务器可以看到和本机登录一样的图形界面 2.允许root远程连接登录 3.注意重要一点，REDHAT需要反向访问PC机器的6000-6010端口，请确认这点。 相关配置文件介绍 1./usr/share/gdm/defaults.conf&#8212;- GNOME管理默认的配置文件 2./etc/inittab&#8212;init进程的主配置文件 3./etc/gdm/custom.conf&#8212;GNOME的自定义配置文件 服务器配置 1.改变defaults.conf文件权限,默认是只读 chmod 700 /usr/share/gdm/defaults.conf 2.做如下配置&#8212;编辑/usr/share/gdm/defaults.conf Enable=true DisplaysPerHost=10 Port=177 AllowRoot=true AllowRemoteroot=true AllowRemoteAutoLogin=false 3.做如下配置&#8212;编辑 /etc/gdm/custom.conf [xdmcp] Enable=1 4.做如下配置&#8212;编辑 /etc/inittab(不要修改原来设置,在最后新增一行如下记录) x:5:respawn:/usr/sbin/gdm #此设置经过试验可以不加 5.重新加载GNOME桌面配置 init 3;init 5 总结：还是记录下吧，经过实测是没有问题的，为了以前的记忆差点把GOOGLE给搜烂了。]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/229.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>深入探讨Varnish缓存命中率</title>
		<link>http://blog.izhoufeng.com/posts/219.html</link>
		<comments>http://blog.izhoufeng.com/posts/219.html#comments</comments>
		<pubDate>Wed, 30 Jun 2010 06:11:29 +0000</pubDate>
		<dc:creator>周 锋</dc:creator>
				<category><![CDATA[03-Cache与存储]]></category>

		<guid isPermaLink="false">http://blog.izhoufeng.com/?p=219</guid>
		<description><![CDATA[也许你还在为刚才动态内容获得7336.76 reqs/s的吞吐率感到振奋，等等，理想和现实是有差距的，你要忍受现实的残酷，别忘了，我们压力测试中的动态内容都处于全缓存情况下，也就是每次请求都命中缓存，这在现实中往往是不可能的。 首先，缓存区空间大小是有限的，而我们的站点可能有大量的内容需要被缓存，而不像前边压力测试时只有一个内容。一旦缓存区被装满，那么缓存管理器便会淘汰一些它认为不再需要的缓存内容，比如通过LRU（最近最少使用算法）将使用频率较低的缓存内容淘汰出去，但是，这里判断“不常使用”的标准是不严格的，也许被淘汰的内容就是你将要访问的下一个内容，这便影响了它的命中率。 其次，缓存的过期时间也影响到它的命中率，假如有效期很短，为10秒，那么最少10秒便会有一次无法命中。 还有，有些内容可能根本没有被代理服务器缓存，比如这些内容包含了set-cookie等不可缓存的HTTP头信息，导致反向代理不会缓存它们，并且在浏览器请求它们的时候也不会去缓存区查找。这是影响命中率的一个重要因素，但往往被我们所忽略。 幸运的是，这些问题我们都可以轻松的解决，前提是，我们需要了解反向代理缓存的实时工作状态，比如Varnish便提供了一个命令行的状态监控程序varnishstat，我们打开它，便看到了当前时刻的状态，如下： client_conn 9908723 94.05 Client connections accepted client_drop 0 0.00 Connection dropped, no sess/wrk client_req 16433490 155.99 Client requests received cache_hit 8751732 83.07 Cache hits cache_hitpass 42592 0.40 Cache hits for pass cache_miss 7573389 71.89 Cache misses backend_conn 3889845 36.92 Backend conn. success backend_unhealthy 220 0.00 Backend conn. not attempted [...]]]></description>
		<wfw:commentRss>http://blog.izhoufeng.com/posts/219.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

