2007年12月17日星期一

mysql状态变量——select%

mysql有很多的状态变量,而且随着版本的升级,状态变量也是越来越来多!
mysql>show status like ''select%';
可以得到我今天过关心的几个关于联表查询的几个状态变量。

Select_full_join
没有使用索引的联表查,如果这个值非0的时候,我们就要检查我们的索引是否合适,特别的针对联表查询。
Select_full_range_join
我不太确定它的含义,大致应该是对引用的表做了一个范围连接。
Select_range
在连接过程对第一张表做范围选择,即使这个值比较大也没有什么问题
Select_range_check
(The number of joins without keys that check for key usage after each row. If this is not 0, you should carefully check the indexes of your tables.)
连接没有使用索引,但却在每一个都去检查时候有可用的索引,如果它不为0,我们就应该检查下我们建立的索引是够恰当了
Select_scan
联表查询中对第一张表进行了全表查询

下面一张图是索引建立有问题的数据库状态

2007年12月11日星期二

mysql 开发中的代码--clone

当开源世界都在使用svn,或者开始转向svn的时候!mysql依旧使用着bk
我不清楚bk有什么好处,但是我知道,我想得到开发中的mysql5.1的源代码,我就必须只用bk
bitkeep上下载bk-clinet,
/bin/sh bk-client2.0.shar
cd bk-client2.0
make

./bkf clone bk://mysql.bkbits.net/mysql-5.1 /home/mysql-5.1

具体帮助可以在bitkeep网站找到
就此得到了mysql5.1开发中的源码,check out的时间有点长:)

同步开发中的代码
/home/bk-client2.0/bkf pull(类似于svn up)

httpd缓存模块mod_cache试用

当我们只有一台web前端或者服务器不够用的时候,但是我们又有比较多类似cms更新不平凡的页面和js,css,图片等静态元素的时候!我们是选择直接套squid还是使用后起的varish或者使用apache的mod_cache模块给我们提供的缓存功能呢!
前些天我尝试使用了apache的mod_cache模块,这个模块里面有mod_disk_cache(硬盘缓存),mod_mem_cache(内存缓存)。
Sample httpd.conf

#
# Sample Cache Configuration
#
LoadModule cache_module modules/mod_cache.so


#LoadModule disk_cache_module modules/mod_disk_cache.so

CacheRoot c:/cacheroot
CacheSize 256
CacheEnable disk /
CacheDirLevels 5
CacheDirLength 3


LoadModule mem_cache_module modules/mod_mem_cache.so

CacheEnable mem /
MCacheSize 4096
MCacheMaxObjectCount 100
MCacheMinObjectSize 1
MCacheMaxObjectSize 2048


配置的添加也是类似手册上的,只是稍作修改。
使用初期,感觉指令蛮多,功能也比较强大(当然和squid比还是欠缺)
CacheDefaultExpire 86400 (默认过期时间设置)
CacheDisable /local_files (不cacheURL在/ocal_files下的)
CacheEnable mem /manual (分内存cache,fd(文件描述符)cache,和硬盘cache)
CacheEnable fd /images
CacheEnable disk /
CacheForceCompletion 80 (2.0的文档里说还没哟实现的指令)
CacheIgnoreCacheControl On (忽略原始页面的对缓存控制的信息,eg.no-cache or no-store)
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On
CacheLastModifiedFactor 0.5
CacheMaxExpire 604800


mod_disk_cache下面的指令
CacheDirLength 4
CacheDirLevels 5
CacheExpiryCheck Off (2.0.59还没有实现)
CacheGcClean 12 /daily_scripts (2.0.59还没有实现)
CacheGcDaily 23:59 (2.0.59还没有实现)
CacheGcInterval 24 (2.0.59还没有实现)
CacheGcMemUsage 16 (2.0.59还没有实现)
CacheGcUnused 12 /local_images (2.0.59还没有实现)
CacheMaxFileSize 64000
CacheMinFileSize 64
CacheRoot c:/cacheroot
CacheSize 5000000
CacheTimeMargin X (2.0.59还没有实现)

mod_mem_cache下面的指令
MCacheMaxObjectCount 13001
MCacheMaxObjectSize 6400000
MCacheMaxStreamingBuffer 65536
MCacheMinObjectSize 10000
MCacheRemovalAlgorithm GDSF
MCacheRemovalAlgorithm LRU
MCacheSize 700000

由于我使用的httpd是2.0.59版本的,所以很多功能都还没有实现,特别是硬盘缓存的时候,有些页面会莫名的白页,而且缓存空间的大小会一直增加下去,没有手册上讲的,当大于你所设置的cache大小后,会慢慢删除过期缓存的现象!但是内存缓存还是很好用的!
希望新版本的cache模块能更好用,至少在小部分范围内能更稳定,至少不出现白页!

squid问题-httpReadReply: Excess data from

2007/12/06 05:03:13| httpReadReply: Excess data from "HEAD http://***.***.com/leexn/categories/45604/"
2007/12/06 05:03:15| httpReadReply: Excess data from "HEAD http://***.***.com/nemomama/entry/96901"
一早起来就发现一台squid报警 ,查看了cache.log,发现不停的报上面的出错信息,从字面上理解是返回的数据过多的意思!我不太清楚具体问题是怎么出来的!但是我曾经在apache和php里面多次设定expire time的时候,也出现过类似的问题,当时请求的方法不是head而是get!
我查看了下请求的url的header,没有多次设置的问题,一大早,正在不知所措的时候,突然发现,squid报fd过少!正想调整下os的fd,这时,我已经连不上服务器了!
最后联系机房,当我一直还在思考出错来源的时。网络好了,我仔细的查看了相关的日志,发现该出错信息不见了!
通过流量和网络连接的相关监控,发现上述的出错信息和网络连通状况有很大的联系!
虽然我现在还不太清楚他们之间 具体的因果关系,但很显然是有关系的!所以以后出现类似的问题,要先测试一下网络状况怎么样。:)
也希望有人能告诉我他们之间具体的因果关系。

2007年11月22日星期四

关于mysql备份的问答——感想

Questions and Answers from the Backup Webinar原文出处
总而言之,言而总之。 A LVM snapshot在备份当中是相当重要和好玩的!

2007年11月16日星期五

系统管理工具-awk(1)

awk是老用老忘记,今天开始系统的做个学习笔记。主要参考A Guided Tour Of Awk
先帖下测试数据吧
66.249.70.76 - - [01/Oct/2007:00:00:00 +0800] "GET /users/show/146659 HTTP/1.1" 200 3550 "-" "Mozilla/5.0
(compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
这是一条来自googlebot的爬虫留下的访问记录。我们把测试数据假设为test.data
那要取出googlebot的访问记录就有以下几种方法
1.grep '+http://www.google.com/bot.html' test.data
2 . awk '/\+http:\/\/www\.google\.com\/bot\.html/'
test.data (关于正则表达式,也需要找时间整理下,这里. 和+都是元字符所以需要转义,而/是因为我们匹配的标志符号使用了/)
所以这里awk和grep实现的功能也是一样的了。
如果我们想得到第七栏的访问地址的话,我们就可以
awk '/+http:\/\/www\.google\.com\/bot\.html/ {print $7}' test.data
如果想知道被googlebot正常访问(header为200)的url
awk '/+http:\/\/www\.google\.com\/bot\.html/ {if ($9=200) print $7}' test.data
如果想知道googlebot从网站上爬走多少流量的
awk 'BEGIN { traffic=0 } /+http:\/\/www\.google\.com\/bot\.html/ {if ($9=200) print $7;traffic+=$10 } END {print traffic}' test.data
今天就写到这里了

2007年11月13日星期二

mysql系统变量--动态系统变量

当你熟悉了mysql之后,你可能会希望能够经常的调节系统变量,来观察那种配置参数是最适合当前的应用和硬件水平。
表格太大了,我不太清楚怎么把他弄上来!反正手册上关于动态系统变量那一章节上面有。回头多瞧两遍。

着重要提出来的是在set global或者set session的时候一定要注意那些是全局的,那些是会话级别的!如果只有是global级别的话。当你修改过该变量后,当前会话中的变量也已经修改了,可以同时使用

mysqladmin extended-status variables;!
来查看。

特别是针对myisam表的优化,关系性能的参数重要参数不外乎
1.key_buffer_size
mysql> show status like 'Key_%';
+------------------------+------------+
| Variable_name | Value |
+------------------------+------------+
| Key_blocks_not_flushed | 0 |
| Key_blocks_unused | 663670 |
| Key_blocks_used | 264171 |
| Key_read_requests | 9478725087 |
| Key_reads | 572252 |
| Key_write_requests | 26654547 |
| Key_writes | 15212514 |
+------------------------+------------+
key_read_requests/key_reads=1656 马虎
key_blocks_unused 663670 稍微有点多了
总的来讲就是key_buffer_size可能稍微大了点,现在没有完全利用上来
2.query_cache_size
mysql> show status like 'Qcache%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| Qcache_free_blocks | 1999 |
| Qcache_free_memory | 8776024 |
| Qcache_hits | 128809199 |
| Qcache_inserts | 200930383 |
| Qcache_lowmem_prunes | 66376219 |
| Qcache_not_cached | 16102972 |
| Qcache_queries_in_cache | 4217 |
| Qcache_total_blocks | 10622 |
+-------------------------+-----------+

同时我们也可以看看到底从运行到现在,mysql执行了多少个select
mysql> show status like'Com_select%';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| Com_select | 217524587 |
+---------------+-----------+
又执行了多少个insert
mysql> show status like'Com_insert';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_insert | 2128506 |
+---------------+---------+
同时又执行了多少个update
mysql> show status like'Com_update';
+---------------+---------+
| Variable_name | Value |
+---------------+---------+
| Com_update | 9940846 |
+---------------+---------+
在这台mysql上面select/(insert+update)接近10.


3.table_cache
mysql> show status like 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables | 635 |
| Opened_tables | 18169 |
+---------------+-------+

4.long_query_time
show variables like 'long_query_time%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 1 |
+-----------------+-------+
先写到这里:)

2007年11月12日星期一

mysql安全--InnoDB CONVERT_SEARCH_MODE_TO_INNOBASE

今天打开milw0rm,看见了一个关于MySQL服务器,InnoDB CONVERT_SEARCH_MODE_TO_INNOBASE函数拒绝服务漏洞,据说对MySQL <=6.0 可能都会哟有影响,但是在我的 2.0.20上面似乎得不到效果。
绿盟上也看到了这个安全警报,mysql官方也有了这个bug的描述。
呆会下个5.1.22测试下。这样在得到alter权限后己可以导致mysql crash,但是还没有patch.
简单攻击测试代码如下

mysql> CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`foo` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected

mysql> SELECT * FROM test WHERE CONTAINS(foo, 'bar');
Empty set

mysql> ALTER TABLE test ADD INDEX (foo(100));
Query OK, 0 rows affected
Records: 0 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM test WHERE CONTAINS(foo, 'bar');
ERROR 2013 : Lost connection to MySQL server during query

2007年11月1日星期四

linux系统命令 之 umask fuser

一直不太清楚umask的作用,今天稍微查了下,留在这里做个记录。
umask
功能:设置权限掩码(决定新建文件的权限)
格式:umask 权限值(超级用户默认为022,普通用户默认为002)
实例:# umask 044
计算公式:目录:777-umask


fuser
功能:查看文件或端口使用者
格式: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
[ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...

实例:fuser -n tcp 80
fuser /opt
下次在详细记录下lsof.............

2007年10月29日星期一

php基本设置之error_reporting

最近麻烦事情真多,心情不太好!
正好今天遇到了一个关于Warning: Trying to destroy uninitialized session的问题,顺便把php.ini里面关于这报错设置的这一段给弄清楚了!
display_errors = Off
默认应该是不显示errors的.
log_errors = On
把出错信息记录到web server的错误日志中.
error_reporting = E_ALL
自己定义错误日志中应该显示什么.
error_reporting 是可以在php文件中自己设置,或者.htaccess中设置的
如:
error_reporting(0);
error_reporting(E_ERROR | E_WARNING | E_PARSE); 等同error_reporting(7)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 等同error_reporting(15)
error_reporting(E_ALL ^ E_NOTICE); 等同error_reporting(6135)
error_reporting(E_ALL); 等同error_reporting(6143)
那么error_reporting到底有多少种形式了
value constant
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
64 E_COMPILE_ERROR
128 E_COMPILE_WARNING
256 E_USER_ERROR
512 E_USER_WARNING
1024 E_USER_NOTICE
6143 E_ALL
2048 E_STRICT
4096 E_RECOVERABLE_ERROR
详细的计算需要查手册,不过这些数字和*nix系统中的权限位是如出一辙的
其实没什么东西,只是记录下!
最后Warning: Trying to destroy uninitialized session 也只是
把session_destroy(); 修改为了 @session_destroy();忽略掉出错信息.

2007年10月14日星期日

10个需要注意的mysql变量

mysql的性能需要我们监控,今天着重介绍十个比较重要的mysql变量.
原文来自http://blogs.techrepublic.com.com/opensource/?p=56,我并不觉得这10个变量都重要的值得去监控,但是也是必须去了解的!等以后我觉得有更重要的变量需要了解的时候,会再写下来的!今天找了好久才找到这篇文章的,本来那天看见就准备抄过来的,呵呵:)
1 Threads_connected
首先需要注意的,想得到这个变量的值不能show variables like 'Threads_connected';而是
show status like 'Threads_connected'(下面的变值也是这样的);
意思:变量的值是表示当前有多少个客户连接该mysql服务器
引申:连接数是否过多,网络时候存在问题!特别是在pconnect的情况下:)
2 Created_tmp_disk_tables
意思:在硬盘上建立的临时表数目
引申:如果这个值比较大的话,那么查询时需要建立临时表(CREATE TEMPORARY TABLE)的操作 就要消耗更多的时间
3 Handler_read_first
意思:读表索引的第一行
引申:如果这个值变化比较大的话,可以认为表索引建立的有问题,全索引的扫描操作比较多
4 Innodb_buffer_pool_wait_free
意思:This variable indicates the number of times MySQL has to wait for memory pages to be flus
引申:If this variable is high, it suggests that MySQL's memory buffer is incorrectly configured for the amount of writes the server is currently performing.
不了解这个:)
5 Key_reads
意思:读文件系统上面的索引的次数
引申:如果这个值太大的话,就需要考虑key cache设置是否正常了
6 Max_used_connections
意思:重起后到现在最大连接数
引申:服务器负载和可能需要调节的连接数
7 Open_tables
意思:当前打开的表的数目
引申:如果这个值很低,table cache很大,则减小table cache的设置是没有问题的,如果这个值很大,并接近了table cache的值,我们就需要加大talbe cache的设置
8 Select_full_join
意思:全连接的查询数目
引申:数值过大,需要建立更多的索引来避免
9 Slow_queries
意思:慢查询的数目
引申:过大的话就要察看慢查询的日志,并且检查sql语句书写是否恰当
10 Uptime
意思:运行时间,单位秒
引申:This value is useful to analyze server uptime, as well as to generate reports on overall system performance. A consistent low value indicates that the server is being frequently restarted, thereby causing frequent interruptions to client service.

总算翻译的大差不差了:)

2007年9月27日星期四

使用telnet浏览网页

最近一直在学习mysql,把其他事情给耽搁了!
重点记一下怎么用telnet来测试网页的一些性质,虽然现在用firebug,curl,wget等等简单易用的工具来测试网页是否被压缩和是否被缓存!但有时还是不能避免的使用telnet这样原始的工具来做一些简单的测试!
其实如果了解rfc2616协议,也就是http协议的话,使用起来就不陌生了!
可是像我们这些习惯使用工具的人来讲,有时候不免会忘记!在这里记一下,毕竟我google了1好一阵也没找到!
先ping 下www.douban.com ip为59.151.41.69 80 (为什么不测试sina,163呢?他们前端有专业的防火墙等设备,直接telnet 上去似乎有问题)
telnet 59.151.41.69 80
Connected to 59.151.41.69 (59.151.41.69).
Escape character is '^]'.
GET / HTTP/1.1
Host: www.douban.com

两下回车就可以返回我们需要的内容! GET 后面的地址一般是index.html 或者index.php等等,可douban的不晓得默认页面用的萨,所以就直接GET /了。
抓douban的头的时候意外的发现X-Mem-Hit by mem-cache-etag,google了下,发现是lighttpd的一个小插件
用telnet基本的读取网页的能力有了,我们在近一步读取压缩过后的网页
在Host: www.doban.com回车后
继续键入Accept-Encoding: compress, gzip 并两下回车,我们就能得到天书(压缩过后的html)。
累了,其他的更过参数可以从http协议中找到!
这样用telnet,就能更好的去了解协议本身了。

2007年9月20日星期四

今天终于遇到kill -9杀不掉的进程

以前只在论坛上看到有人用kill -9 $pid 也杀不掉进程,今天终于被我遇到了。
过程是这样的:
一大早来公司,突然收到系统报警mail,一台2U的hp的服务器负载60,上系统一看!httpd死进程过多! 用apachectl stop想杀掉进程再重起,杀了几次说pid已经不存在,可是apachectl start的时候 报启动错误,80端口被暂用! ps axu|grep httpd发现还是有进程存在!killall httpd 发现无济于事。
随手写个脚本想杀掉进程
for i in ` ps aux|awk '{ print $2 }`
do
echo "pid is $i"
kill -9 $i
done
运行后发现进程还是有,一个都杀不掉!
找了个杀不掉的pid,发现 kill -9 $pid 还真是对这个进程没有任何办法!
最后只有reboot了,系统重启后恢复正常!
实在弄不出个所以然,google了下,有如下解释:
a、该进程处于"Zombie"状态(使用ps命令返回defunct的进程)。此时进程已经释放所有资源,但还未得到其父进程的确认。"Zombie"进程要等到下次重启时才会消失,但它的存在不会影响系统性能。
b、该进程处于"kernel mode"(核心态)且在等待不可获得的资源。处于核心态的进程忽略所有信号处理,因此对于这些一直处于核心态的进程只能通过重启系统实现。进程在AIX 中会处于两种状态,即用户态和核心态。只有处于用户态的进程才可以用“kill”命令将其终止。
如果上面的解释是正确的,那么我遇到的应该是第二种情况了!至于是什么东西引发的这个问题。。。。,暂时还不明了!

2007年8月9日星期四

过期时间设置 expires and max-age (一)

最近对关于http协议的rfc都或多或少的看了些!
随便也看了关于expires vs max-age
关于http/1.1协议的rfc2616上有这么三句话很有意思。
HTTP/1.1 clients and caches MUST treat other invalid date formats, especially including the value "0", as in the past (i.e., "already expired").

To mark a response as "already expired," an origin server sends an Expires date that is equal to the Date header value. (See the rules for expiration calculations in section 13.2.4.)

To mark a response as "never expires," an origin server sends an Expires date approximately one year from the time the response is sent. HTTP/1.1 servers SHOULD NOT send Expires dates more than one year in the future.

The presence of an Expires header field with a date value of some time in the future on a response that otherwise would by default be non-cacheable indicates that the response is cacheable, unless indicated otherwise by a Cache-Control header field (section 14.9).

上面提到什么是过期:expires date ==date header
什么是不过期:expires date > date header
也提到了我们现在通常处理使得 expires date= 0 或者 expires date < date header
在这种非标准的header下面,http/1.1协议是怎么去解释的!
基本上没有设置expires date 就应该默认不能被cache,除非有section 14.9中其他的cache-control.
关于max-age 只想提这么一句话:
If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive

也就是max-age会优先expires!
在过期时间设置 expires and max-age (二)将抛开协议本身,来详细了解下在apache.lighttpd中怎么样去定制一个有比较好的过期时间设置的header

2007年8月8日星期三

服务器时间同步(一)

很多时候由于安装系统时候的不在意,或者服务器本身频率的问题,会导致服务器之间时间的不同步!
时间不同步造成的影响,squid,mysql出现问题!这些都与系统时间有这紧密的关系!
1.squid中cache出现问题
2.mysql中系统时间出现问题
通常解决的办法
同步时间
/usr/bin/rdate -s rdate.darkorb.net
clock 或者 hwclock -w 写入cpu 或硬件里面
问题:clock 和hwclock的区别
用rdate只能治表不能治本
治疗时间问题的根本是: set the system time from the hardware clock,把系统时间写入硬件中!
鸟哥这篇文章可以好好的参考参考
归纳一下别人的方法
linux调整系统时间和时区的方法(redhat 系列)

1) 找到相应的时区文件 /usr/share/zoneinfo/Asia/Shanghai

用这个文件替换当前的/etc/localtime文件。

2) 修改/etc/sysconfig/clock文件,修改为:

ZONE="Asia/Shanghai"
UTC=false
ARC=false (这个不太清楚,但应该是没什么用处的)

3) 同步时间并写入cmos

2007年8月5日星期日

数据库之 b tree

http://www.sci.unich.it/~acciaro/bpiutrees.pdf
http://www.usenix.org/events/usenix99/full_papers/olson/olson.pdf

2007年7月24日星期二

监控之mrtg --- squid

开源的监控方案有很多,nagios,cacti等等!选择mrtg是因为以前的都是使用的mrtg,而且mrtg方面的资料也相对来讲稍微多点!所以先把关于使用mrtg监控服务器的整个方案搞好后,再慢慢转其他的!
参考资料:
1.Chris' MRTG Resources
2.Monitoring Squid
3.Using MRTG to monitor Squid
4.Tobi Oetiker's Projects

第一步,下载从mrtg官方网站下载mrtg
第二步,安装mrtg
第三步, 配置mrtg

2007年7月23日星期一

nfs server under the iptables

一直想把nfs架起来,也做了很多工作,看了很多文档!搞了3-4个小时!发现nfs在iptables下面总是搞不起来,真是很郁闷!
具体原因现在还不时很清楚,但是表现的状况是,如果我停掉iptables,nfs client 就能够挂nfs!一旦把nfs起来,rpcinfo -p nfsserver_ip 就会出现
rpcinfo:无法同 portmapper 交互: RPC:远程系统错误 - 没有到主机的路由
要开的端口111,2049,4000-4003等等,都已经尝试过了!可还是没有搞定!
搞个nfs怎么会这么难搞了,希望3天之类可以搞定!
google 过了,发现这其实是应该常规的问题,很多人都提出来过,但是解决的方法我暂时还没有找到!真的很累,很久没有这样,搞了大半天还没有一个结果的事情了!
打算明天再搜索下,顺便把iptables进一步的搞清楚,实在不行就用tcpdump之类的东西抓下包看看!感觉问题不应该复杂的,可现在就是搞不定!
一个人走路真的很累!:)
server 和 client 都是centos 5.0

2007年7月11日星期三

Source-Navigator 安装


代码阅读的时候需要代码阅读器,Windows 下面有 非开源的Source-Insight,Linux 有开源的Source-Navigator
但在fc6下,安装的时候会出现两个以上的问题,毕竟这个项目在sourceforge上貌似很久没有人去维护了!
因为想进一步了解squid, 昨天捣鼓了好一阵!对我这种已经习惯了yum的人,安装起来还真是费力!
第一步 configure的时候就莫名奇妙的出问题,google了半天,终于在sourceforge该项目的tracker里面找到一个patch
具体的问题描述在这里
补丁打上 就可以configure 了,这里真要谢谢scottt958兄的patch
第二步,configure 完了,make的时候有出错,说不支持"-fwritable-strings",在相应的makefile里面把加了-fwritable-strings的参数注释掉好拉,不过需要注释的还真是蛮多的!
慢慢搞,搞完了就可以make install 了
大功告成了

2007年6月28日星期四

squid 学习笔记 (1)

从第一天进入公司,接触到的就是squid,随着对squid的慢慢熟悉!觉得需要把自己对squid的认识和一些经验写下来!
squid 其实就是一个cache,能加速网络的东西!
A cache hit occurs each time Squid satisfies an HTTP request from its cache. The cache hit ratio, or cache hit rate, is the percentage of all requests satisfied as hits. Web caches typically achieve hit ratios between 30% and 60%. A similar metric, the byte hit ratio, represents the volume of data (i.e., number of bytes) served from the cache.
我稍微有点疑惑的是30% 到 60% 的 The cache hit ratio 算正常的说法是指的什么情况下!
学习squid,可以通过faq 和squid的用户邮件列表!
关于squid了解的越来越多,却发现自己知道的越来越少!
趁今天有空,先把自己几个不知道的东西搞懂吧
1.关于squid中的Cache Digest
2.关于squid中squid 与 snmp的使用 .
估计今天晚上是搞不定了,明天到公司了再去实际操作吧!

2007年6月26日星期二

swap 的疑惑

大的日志文件请不要用vim打开,切记!
不信,你自己vim打开一个日志看看!
替代工具,查看文件的工具请用less more head tail
查找内存使用的工具pmap,pmap_dump,pmap_set
pmap -x [pid]

squid Your cache is running out of filedescriptors

本来以为自己是不会遇到
# ulimit -HSn 65536
# ulimit -n
65536

可最终还是遇到的,修改一下就好啦,重新编译squid2.6-13
太晚了,自己简单记录一下

2007年6月12日星期二

apache 编译出错 之mod_deflate

apache是经常的编译,虽然出错的频率越来越小!可是出错的症状是越来越五花八门了!发现自己不写下来是不行啦!
今天晚上想在某台服务器上加入memcache的php扩展,随便也测试下apache 的worker的处理模式,据说可以更省资源,虽然稳定上可能不如perfork,所以就想尝试下.
可是天不随人,一不小心.make的时候得报
pic -c mod_deflate.c && touch mod_deflate.slo
In file included from /usr/include/zutil.h:16,
from mod_deflate.c:42:
/usr/include/zlib.h:68: redefinition of `struct z_stream_s'
/usr/include/zlib.h:705: conflicting types for `gzwrite'
/usr/local/include/zlib.h:982: previous declaration of `gzwrite'
make[4]: *** [mod_deflate.slo] Error 1
google 一下,发现邮件列表,好东西
有人已经遇到过了
在拿来主义的指导下,细细一瞧!原来是系统本身yum 过一次zlib ,后来又编译过一次(编译的时候没有指定prefix),现在在/usr/include/ 和/usr/local/include/下面各有一个zlib.h
我可怜的系统被搅糊涂拉,随意mv掉了一个!再次make && make install !OK
教训: 可以yum 也可以自己编译,但下次记得指定prefix,要不然有你好受的!
找时间还要继续nfs......:)

2007年6月6日星期三

nfs 学习(一)

最近由于工作需要,需要正经的学习一下nfs! 其实nfs,比较早的时候就已经用过!但当时就照鸟哥的文章随意搞了下!貌似就搞定了,但是nfs复杂的应该是其权限控制!一不小心就会给系统留下不小的安全隐患.当然其通信协议,我也不太清楚。所以可能需要我花的力气还是比较大的。
这是nfs在sourceforge的项目上面有比较多的文档值得我去看看!
随意找了下,整个安装nfs的过程简单来讲就是这样,看得出,安装其实并不复杂的
copy from

11.8 NFS Configuration

NFS是Network File System的缩写,这是一种在不同机器之间共享文件的方法,可以使本地机器象在使用本地硬盘一样使用远程文件系统。LINUX即既可以作为NFS 客户也可以作为NFS服务器,也就是说它可以向其它机器输出文件系统,也可以安装其它机器输出的文件系统。
11.8.1 安装NFS文件系统

使用mount命令安装另一台机器输出的网络文件系统:

mkdir /mnt/local # Only required if /mnt/local doesn't exist
mount bigdog:/mnt/export /mnt/local

在以上命令中,porky是NFS文件服务器的主机名,/mnt/export是porky输出的文件系统, /mnt/local是本机的一个目录,远程文件系统将被安装在它下面。当mount命令运行完后(如果porky敷与了恰当的权限),我们可以通过执行ls/mnt/local命令列出位于porky机器上/mnt/export目录下的文件。
11.8.2 输出网络文件系统

控制网络文件系统输出的配置文件是/etc/exports。它的格式是:

directory hostname(options)

其中(options)是可选的。举个例子:

/mnt/export speedy.redhat.com

将允许主机speedy.redhat.com安装/mnt/export 而

/mnt/export speedy.redhat.com(ro)

则仅仅允许speedy以只读方式安装/mnt/export。

每当您改变了/etc/exports,您需要告诉NFS进程重新检查配置信息。一个简单的方法是停下再启动该服务器进程:

/etc/rc.d/init.d/nfs stop
/etc/rc.d/init.d/nfs start

还有一种方法:

killall -HUP rpc.nfsd rpc.mountd
请查看nfsd(8),mountd(8) 和exports(5)的man 手册以获得详细信息 。另一个好的参考书是由Hal Stern编写,O'Reilly&Associates出版发行的“Managing NFS and NIS Services”

对于nfs,需要抽时间看看nfs howto,配置的过程中也需要了解下Linux下NFS的配置与注意的问题,这些很久前的问题也需要注意下!
最后就需要看看rfc1094,是关于nfs的!
提高版就是了解下gfs,看看gfs和nfs的比较是不是在忽悠人拉
总的学习计划就是这样,希望这周能把nfs搞定个30%-50%!