生命之中的最大错误在于:终日担心犯错误。— 爱尔伯特·哈伯德 (Elbert Hubbard 1856-1915),《笔记》
分页: 1/210 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]

利用rinted转接服务

[ 2008/05/16 22:42 | by hqlulu ]
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。

使用iptables 很容易将TCP 和UDP 端口从防火墙转发到内部主机上。但是如果您需要将流量从专用地址转发到甚至不在您当前网络上的机器上,又该怎么办呢?可尝试另一个应用层端口转发程序,如rinetd。

这些代码有点古老,但很短小、高效,对于解决这种问题来说是非常完美的。

下载地址: http://www.boutell.com/rinetd/

解压后,make && make install 就可以了

程序路径 /usr/local/sbin/rinetd
需要配置文件 /etc/rinetd.conf

配置文件格式很简单:

[Source Address] [Source Port] [Destination Address] [Destination Port]
在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是
主机名或IP 地址,IP 地址0.0.0.0 将rinetd 绑定到任何可用的本地IP
地址上:

0.0.0.0 8080 www.aslibra.com 80
0.0.0.0 3306 192.168.1.77 3306
0.0.0.0 88 127.0.0.1 80


直接运行程序就可以了看到占用端口服务了。

上面是把访问本机的8080端口的服务都迁移到www.aslibra.com的机器上,把访问本地的数据库的转移到192.168.1.77上,把访问本地88端口的指向80端口服务。

可是阿权发现这个只是做了个代理的功能,比如最后一条得到的访问者IP:
REMOTE_ADDR  192.168.1.77  

也就是没法获取到用户ip,这个比较可惜,但是对于IP访问的服务做迁移还是不错的,比如数据库服务,可以在保留很多程序的连接方式不变的情况下,直接切换数据库,也就是在主数据库出问题了,可以立刻用这种方法转换到备份数据库。

所以,服务器主备模式的情况还是可以备一个的,这样保证准时切换,可以做shell程序判断端口服务是否正常,如果实在不正常或者无法服务,就自动切换到备份的,多方便呀~

引用
当你的服务器要重新编号或物理位置变化而改变IP地址时你就能切实感受到这个工具的好处了,因为服务看上去就像保留在原始IP 地址(即便它们实际上完全是来自其他网络)上。如果仅仅是绑定大于1024的端口,那么rinetd就不需要以root账户来运行。这种小工具很值得放在身边,以便随时调用TCP 端口间接寻址。

Tags:

地震的救援的感动

[ 2008/05/14 23:30 | by hqlulu ]
发生这么重大的地震,实在让人很震惊,晚上看电视台播放的是一批一批的救援赶赴灾区,北京队上海队广东队什么的,感觉像一场比赛一般,跟时间比赛,分赴不同的地方,从水路陆路天空,有不同地方进入灾区,实在让自己有点心酸,一个可怜的IT程序员,一个虽然不是大到捐献几百万的公司,但大家都在关心灾区状况,但也只能关心一下,自己并不是一个医生也不是一个兵。

只是心里还牵挂着这一切,心里对生命的脆弱有感叹一下。昨晚看《铿锵三人行》,听他们在聊,也说生命之脆弱,身价即使百万千万的人,在灾区里,大家都只是在想着生命是否可以延续。大自然的惩罚也好,人类对环境的如何不好都好,今年似乎都是这么的心酸。

看到上海的一些新闻,报道的都是上海的救援是怎么样的,感动的同时,也在问,为什么非得有那么多的发布会和启动仪式,我们是否可以在更快的时间处理呢?

apache的压缩和防盗链

[ 2008/05/13 21:43 | by hqlulu ]
最近做apache优化,希望跟大家分享一下阿权的心得。

点击在新窗口中浏览此图片

1 apache可以用redirect方式,把图片定义到别的服务器

RedirectMatch /aslibra_pic/(.*)     http://1.2.3.4/www.aslibra.com/pic/$1

#request http://www.aslibra.com/aslibra_pic/abc.jpg
#send to http://1.2.3.4/www.aslibra.com/pic/abc.jpg


如上图第一个红色框所示,流量变化就是图片切换的结果
图片交给另外的服务器处理会更加好,不用redirect更好,直接就引用

2 apache的deflate选项需要打开

############# gzip ############

<Location />
  SetOutputFilter DEFLATE
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|swf|exe|ico)$ no-gzip dont-vary
  Header append Vary User-Agent env=!dont-vary
</Location>

## www.aslibra.com ##


以上其实是apache手册的代码,大家可以参考第一个图片的第二个红色框,可以减少大概四分之一的流量,虽然会对服务器cpu有一点提高,但是还是值得的。

3 apache的expire要打开

详情参考 《最近的Apache安装参数

4 apache的防盗链的重要性

点击在新窗口中浏览此图片

如果你不是做相册服务公司,比如flickr或者yupoo之类的,那一般还是得做防盗链,如上图所示,机器都跑到100M带宽,把服务器带宽都用完了,很是可恶,特别是哪些所谓的网盟,一下子就可以带来巨大的访问量,自己可就亏了。

<VirtualHost *:80>
   DocumentRoot /Data/webapps/www.aslibra.com
   ServerName www.aslibra.com
   #可以记录日志查看哪些来源使用了图片,这里可能还记录了网页
   #CustomLog "|/Data/apps/cronolog/sbin/cronolog /Data/logs/%Y/%m/%d/show.%m%d%H" combined env=!local_referal

   SetEnvIf Referer "^http://(.*).aslibra.com/" local_referal
   SetEnvIf Referer "^$" local_referal
   <Directory /Data/webapps/www.aslibra.com/pic>
     Order Deny,Allow
     Deny from all
     Allow from env=local_referal
   </Directory>
</VirtualHost>

Tags:

0512:北京感觉到地震

[ 2008/05/12 20:21 | by hqlulu ]
点击在新窗口中浏览此图片

下午时分,我感觉有点晕的时候,小民大叫:“应该是地震了!”哎呦,忽然地震,怎么就没有预报呢?看了一下阳台的晾衣杆,的确上面的衣架在晃动了,发现的确不对,也明显感觉到左右晃动了,真的是地震。曾经也感觉到地震,是在办公室里面感到动了一下,这次地震很明显,真的是左右晃动,还好,我们是8楼,不算高,顶楼的肯定都能够把人个晃一边去,看来住房也得考虑楼层的高度,太高了晃的太厉害,可能被最先甩出去 ^_^

我们全体撤离,走楼梯下去了。高一点的楼其实风吹就能够晃动,我们在楼梯间也能够感觉到还在晃。我们是最先冲出楼房的,然后陆陆续续就有人出来了,有点穿着睡衣就这么出来了,一个舒服的午觉就这么被破坏了。

有人调侃说“这地震不算什么,小日本都是整天在地震下过的”。
有人下来就说“我家那吊灯都左右晃着弄碎了”
看来高的楼层就是厉害。。。

今晚会有余震么?

关于mysql_pconnect

[ 2008/05/11 11:41 | by hqlulu ]
阿权的一个数据库有很多进程都是sleep的,这个是openads的网站,管理的是网页的广告,估计有200个,多的时候会更多些,我也在想这个情况到底是否正常呢?

mysql_pconnect()中的p,就是单词persistent(永久的)的首字母。要理解是否正常,那就得看看 mysql_pconnect 是如何工作的了,看看官方文档:

引用
resource mysql_pconnect ([ string $server [, string $username [, string $password [, int $client_flags ]]]] )
Establishes a persistent connection to a MySQL server.

mysql_pconnect() acts very much like mysql_connect() with two major differences.

First, when connecting, the function would first try to find a (persistent) link that's already open with the same host, username and password. If one is found, an identifier for it will be returned instead of opening a new connection.

Second, the connection to the SQL server will not be closed when the execution of the script ends. Instead, the link will remain open for future use (mysql_close() will not close links established by mysql_pconnect()).

This type of link is therefore called 'persistent'.


也就是说,会建立一个对数据库的连接,会先查找是否还有空闲的同样host、username、password的连接,没有就新建一个,否则就用这个空闲的连接。

这么理解应该挺好知道为什么会有一些进程是sleep的,就是说之前并发请求有100个,那就会有100个持续连接建立了,并且把连接保存在连接池中,如果连接有效时间过了,连接会自动完结了吧,这样可能就在访问压力低的时候sleep的进程变少了。

如果连接数可以足够,pconnect是不错的选择,mysql启动参数里面可以设定最大连接数的(参考《Mysql的启动参数 》http://www.aslibra.com/blog/read.php?1037),参考一下:

max_connect_errors=100000
max_connections=1024
wait_timeout=600


所以空闲进程多是不怕的,就担心影响别的应用,如果连接数足够,那还是用pconnect比connect方式要好

引用
pconnect的优点是速度,重用一个现有的连接几乎不花费时间。
缺点是效率。因为服务器(比如apache)可以使用任意一个进程迎接新的页面请求,
所以一段时间之后,可能每个进程都存了一个或几个连接,而且不同进程之间连接不能共享。
最坏的情况是其他进程保持着大量空闲连接,而某个进程却因为数据库连接数达到上限却无法取得连接

Tags:
分页: 1/210 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]