2009年4月18日星期六

thinkpad on screen display 修复

系统重装后, on screen display 居然坏了, 调节音量和屏幕亮度没有屏显很不习惯.

google了一下解决办法, 记录如下:

1、首先你要保证你的按键是可行的,也就是说你的键盘热键驱动装好了!
2、右键——属性——设置——On screen display 里把那个勾勾上,填上数据,你会发现size选项填了没用!
3、进注册表HKEY_CURRENT_USER\Software\IBM\TPHOTKEY\OnScreenDisplay把size改为00 00 10 10
4、重起机子就会发现进度条又回来啦!
出现这种得原因是安装了新版本的On screen display造成的,也可以改回原来的驱动!

2009年3月31日星期二

nginx基于域名的rewrite实现

工作中需要将一台server从lighttpd环境迁移到nginx上.
遇到一个问题,原来lighttpd.conf配置中:

$HTTP["host"] =~ "^([^.]+)\.test\.com" {
server.document-root = "/docroot"
url.rewrite = ( "^/$" => "/index.php?username=%1")
}

访问 http://abc.test.com/ rewrite 到 http://abc.test.com/index.php?username=abc

nginx 配置没有lighttpd灵活,rewrite 只能对url中path部分操作.

查看nginx 文档 发现,新版本已经内置了变量可以直接读取host了
设置如下:

http {
servername *.test.com;
...

if ($http_host ~* "^(.+)\.test\.com") {
set $user $1;
rewrite ^/$ /index.php?username=$user last;
}

...
}

搞定,收工!

后话: 根据文档 $host 和 $http_host 应该是等价的,但是开始的时候我用$host不成功,不知道为什么,没时间研究下去了,有人看看源码告诉我结果吧,嘿嘿.

2009年3月16日星期一

proftpd开发module 小记

工作中遇到一个需求,通过ftp server实现文件hard link.

首先想到的是找找有没有已经提供这个功能的ftp server,google了一圈,找不到.

自己动手,丰衣足食,既然找不到那就自己写吧.

服务器上面正在使用的是proftpd, 接下来要做的就是开发一个module来实现hark link了

以前没写过,先找开发资料看看吧.

再次google 一下 "proftpd develop", 找到http://www.castaglia.org/proftpd/

资料挺多的,要看好一会了了.

顺藤摸瓜 又找到这里 "On the FTP commands supported" .

SYMLINK
Used to create a symbolic link (a.k.a. a symlink) from the source path (src) to the destination path (dest).
Example:

SITE SYMLINK src dest
Supported by the mod_site_misc module.

OMG ,原来proftpd支持symbol link!! hard link实现近在咫尺了.

在proftpd source 目录 ,contrib/mod_site_misc.c 里面顺利找到 具体代码实现函数 site_misc_symlink
copy and modify增加一个函数 site_misc_link, 除了一些提示,日志信息修改(SYMLINK 改成 LINK)之外,就只需把最后做symlink 的调用改成 link调用.

略读了一下mod_site_misc.c 代码,发现跟apache module结构极其相似, 由此猜测增加一个命令实现函数,需要在某处钩子加上我新增的函数. search site_misc_symlink,找到:

static cmdtable site_misc_cmdtab[] = {
{ CMD, C_SITE, G_WRITE, site_misc_mkdir, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_rmdir, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_symlink, FALSE, FALSE, CL_MISC },
{ CMD, C_SITE, G_WRITE, site_misc_utime, FALSE, FALSE, CL_MISC },
{ 0, NULL }
}

site_misc_symlink 下面增加一行

{ CMD, C_SITE, G_WRITE, site_misc_link, FALSE, FALSE, CL_MISC },

按照 这里 的方法编译通过, 测试功能一切正常.

后记,mod_site_misc module并没有日志功能,为了提供日志,还改写了大量代码.实现过程比主功能(文件hard link)实现复杂多了, 感觉怪怪的.不过日志功能必不可少,也没办法了.

2009年1月26日星期一

过新年,洗键盘

网上淘回来的二手小茶轴键盘,转眼已经用了1年多了..

机械键盘就是好,手感依然没有变化,只是已经脏得不成样子了.
本来想换个HHKB用一下,无奈囊中羞涩..只好继续让这个发光发热了.

新年新气象,给它洗个澡吧
先上一张洗澡前照片:



把所有键帽拔下来,浸到清水里面:


以下是本次清洗大行动的强力武器, 纳米科技海绵,效果真不是盖的..感谢妈妈友情提供,哈哈.


经过一个多小时的搏斗,换水N次(N=1)之后,终于洗干净啦~~

晾干之后就可以装回去啦,在此之前,郑重感谢本人生活秘书老婆大人伸出援助之手,独立承担了清洁键盘主体的工作,希望再接再厉,来年承包整个键盘的清洗,咔咔.

是不是象新的一样? yeah~!

2009年1月7日星期三

mysql replication 故障处理一则

今早收到报警邮件,来至一台mysql slave

***_db : Slave io may not running.

 

 登陆到那台服务器上查看

mysql> show slave status\G

的确看到

Slave_IO_Running: No

 

不解,遂继续查看mysql slave 的error log

090107 11:57:41 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
090107 11:57:41 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log
090107 11:57:41 [Note] Slave I/O thread exiting, read up to log '***-bin.000147', position 660737192

 

slave 去读取binary log,但是超出了master 上实际log的大小, 奇怪,我再登陆到master上查看


-rw-rw----  1 mysql mysql  660726317 Jan  7 08:04 ***-bin.000147
-rw-rw----  1 mysql mysql    7791850 Jan  7 08:54 ***-bin.000148
-rw-rw----  1 mysql mysql   19955513 Jan  7 11:59 ***-bin.000149

明白了,***-bin.000147 只有660726317  bytes,但是slave 要读取的是第660737192个byte, 当然失败了.估计是master 曾经出错重启了,丢失了部分的binary log.


接下来是如何处理, 安全可靠的办法当然是重新copy一份master数据到slave上,初始化一遍,从头开始.
在数据完整性要求不是这么强的前提下,可以用另外一个方法.
强制slave读取下一个log文件

mysql> CHANGE MASTER TO MASTER_LOG_FILE = '***-bin.000148' , MASTER_LOG_POS = 0;
mysql> slave start;

 
搞定!

2008年12月28日星期日

电信网通互联互通问题

由于电信和网通之间互联互通的问题,很多人选择双线路机房,所谓双线路机房就是拥有两条出口,一条电信一条网通。最近在一个双线路机房测试一台服务器,打算作为论坛的数据库服务器使用,服务器操作系统为Linux。计划配置为双IP,单域名,使得浏览者通过电信和网通两条线路都能正常访问服务器,而且各走各的,互不影响。在配置网络的时候遇到了问题,由于Linux默认只有一个网关,在网络上查询了很久,找到一个解决方案,因此整理了一下。感谢原文作者jac003ke



这个解决方案主要依赖一个技术: 策略路由.




策略性路由

  策略性是指对于IP包的路由是以网络管理员根据需要定下的一些策略为主要依据进行路由的。例如我们可以有这样的策略:“所有来直自网A的包,选择X路径;其他选择Y路径”,或者是“所有TOS为A的包选择路径F;其他选者路径K”。

  Cisco 的网络操作系统 (Cisco IOS) 从11.0开始就采用新的策略性路由机制。而Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了多路由表以及规则的概念。








于是,我们需要定义一个策略, ip从哪个网卡进来,就从哪个网卡回去.







服务器操作系统RedHat linux as4,设置两张路由表



1. vi /etc/iproute2/rt_tables,增加网通和电信两个路由表
251 tel #电信路由表
252 cnc #网通路由表

2. 给网卡绑定两个地址用于电信和网通两个线路
ip addr add 192.168.0.2/24 dev eth0 #网通
ip addr add 10.0.0.2/24 dev eth1 #电信

3、分别设置电信和网通的路由表


l 增加设置策略路由函数


cat >> /etc/sysconfig/network-scripts/network-functions






policy_route() {
IP=/sbin/ip
IF1=eth1
IP1_NET=`$IP addr show $IF1 | grep 'inet ' | grep "global $IF1$" |awk '{print $2}'`
[ -n "$IP1_NET" ] || return 1;
IP1=`echo "$IP1_NET" | cut -d/ -f 1`
GW1=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$IF1 | cut -d= -f 2`

IF2=eth0
IP2_NET=`$IP addr show $IF2 | grep 'inet ' | grep "global $IF2$" | awk '{print $2}'`
[ -n "$IP2_NET" ] || return 1;
IP2=`echo "$IP2_NET" | cut -d/ -f 1`
GW2=`grep GATEWAY /etc/sysconfig/network-scripts/ifcfg-$IF2 | cut -d= -f 2`

NETWORK1=`ipcalc -n $IP1_NET|cut -d= -f2`
NETWORK2=`ipcalc -n $IP2_NET|cut -d= -f2`

echo "dev:$IF1 ip:$IP1_NET net:$NETWORK1 gateway:$GW1"
echo "dev:$IF2 ip:$IP2_NET net:$NETWORK2 gateway:$GW2"
echo

echo "setting route via table cnc"
$IP route replace $NETWORK1 dev $IF1 via $IP1 table cnc
$IP route replace default dev $IF1 via $GW1 table cnc
echo "setting route via table tel"
$IP route replace $NETWORK2 dev $IF2 via $IP2 table tel
$IP route replace default dev $IF2 via $GW2 table tel

echo "setting default gateway"
$IP route replace default via $GW1

echo "setting ip rule"
$IP rule del from $IP1
$IP rule add from $IP1 table cnc
$IP rule del from $IP2
$IP rule add from $IP2 table tel
}



以上script作用是,分别 获取两个网卡的ip, netmask, gateway. 然后定义一个电信的路由表,一个网通的路由表.最后一步非常重要, 配置从哪里进来就哪里回去的策略路由.



l 修改 /etc/sysconfig/network-scripts/ifup-post, 使其在网卡启动时自动执行策略路由函数


以下粗体字部分为新增


#add route policy


policy_route



# Notify programs that have requested notification


do_netreport



l 设置电信部分固定路由


由于本机设置缺省网关为网通网关, 部分需要主动向外的电信访问要设置固定路由.


cat >> /etc/sysconfig/network-scripts/route-eth0


61.143.210.0/24 dev eth0 via $GW2


202.96.128.0/24 dev eth0 via $GW2


60.190.167.0/24 dev eth0 via $GW2


61.143.224.0/24 dev eth0 via $GW2


125.90.204.0/24 dev eth0 via $GW2


59.32.232.0/24 dev eth0 via $GW2


218.71.140.0/24 dev eth0 via $GW2







l 最后确保新增/修改过 文件有可执行属性


chmod +x /etc/sysconfig/network-scripts/*




















以上步骤都完成之后就可以重启网络( /etc/init.d/network restart ) ,当然了,reboot也是可以的.呵呵




2008年12月18日星期四

[转]优酷网视频存储架构

仅供参考.我就不发表什么意见了,大家来讨论下..
运维的同学都要看看.


视频分享网站总会面对这样两个问题:视频资源能否吸引网民以及视频浏览是否顺畅?中国互联网协会互联网数据中心发布的《2008上半年视频网站数据》显示,2008年上半年,优酷网月度总访问时长突破1.1亿小时,通过与全行业的浏览时长比对,优酷网占据的时长份额已超过50%。Gomez中国网站用户体验排行榜显示,2008 年7月1日到2008年7月31日,优酷网的平均响应时间是2.78秒。

1.1亿小时与2.78秒,正是这两个长短对比鲜明的数据,充分体现出优酷网“快者为王”的经营理念。近日,记者独家采访了优酷网CTO姚键,试图从技术方面揭密优酷网的快字诀。

一切为了性能

“2007年,优酷网的用户访问量提升了25倍。”姚键说起这个增长仍显激动,“硬件设备同样有相应的增加。”据记者了解,目前优酷网有近千万个视频资源,以每段视频20MB来计算,大约占据200TB的存储空间。优酷网采用服务器直连式存储(DAS)架构,即一台服务器只连接一台存储阵列。姚键透露,优酷网目前有数千台服务器。

优酷网的服务器主要来自戴尔,还有一部分来自惠普。优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主。如上图所示,优酷网将PowerEdge 1950作为Web服务器和流媒体服务器,分别服务于页面系统与视频系统。另外,还有一些服务器作为转码服务器,将用户上传的视频进行解码和再编码,最后做成统一的FLV格式。在存储层面,优酷网主要利用戴尔MD1000+ PowerEdge 860的组合,两者以DAS的方式相连,作为一个存储单元。

在回答记者提出的为何没使用网络存储,如SAN等架构时,姚键表示:“用户访问量持续成倍增长,对系统的性能、成本和可扩展性都造成了很大压力。采用DAS存储可以更好地满足对性能的需要。如果采用SAN存储,不仅成本增加会十分明显,而且在系统变得日益庞大时,性能也会出现瓶颈。”

“为了提高用户的访问速度,我们想了很多办法。”姚键表示,“我们甚至都不用RAID。不采用RAID技术,可以节省很大的存储空间,同时减少成本,而且能够提供更好的I/O性能。”据悉,目前优酷网的存储系统利用率都在90%以上。不用 RAID是否会给视频数据的安全带来不良后果?姚键表示:“由于优酷网采用了自建的内容分发网络(CDN)技术,所有视频在不同的城市都有副本,所以不用担心数据的安全性。即使某地的一段视频发生了损坏,用户也可由实时的调度系统引导至其他CDN站点进行视频浏览。在优酷网的内容分发网络中,局部失效不影响整体访问,实际上比存储网络的安全性更高。”

更大范围内的分级存储

自建的调度系统是优酷网实现快速访问体验的核心。优酷网将所有的服务器和存储设备分布在全国20多个CDN站点中,方便当地用户就近访问,以获得更快的视频体验。

不像其他应用可提前计划,互联网访问具有很大的不可预知性,很难预测什么视频在哪段时间的访问会突然增加。因此,实时有效的调度系统就显得非常关键。在网民访问优酷网的视频时,调度系统会根据该视频原本发布所在的位置、用户IP地址等信息安排网民就近访问,并会参考该站点的设备是否出现损坏、该地区是否是访问热点等因素,以便使用户的浏览速度达到最快。正是有了高效的调度系统,优酷网才可以将 90%以上的带宽都提供给用户,而其他CDN系统提供给用户的带宽通常只有70%~80%。

“优酷网所有的视频在一周之内会被用户访问一遍。”姚键说,“因此,优酷网的数据区分在线、离线的意义不大,更不用像其他行业那样要把部分历史数据进行归档处理。”事实上,优酷网对视频信息也会区别对待,只是区分的标准在于访问热度。访问频率高的视频会根据访问用户地址在各CDN站点间重新分布,并且会存放在SAS硬盘上,而冷门视频则会存放在速率稍慢的SATA硬盘上。

用户连线

优酷网CTO姚键

技术是互联网的生命。由于设备急速增加,我们非常在意系统的成本、性能与可扩展性。我们没有使用最先进、最贵的系统,就像Google使用自己的文件系统一样,不在乎贵不贵,而在乎是否合理运用。每台服务器或存储系统配多少块硬盘,文件块的大小为多少,我们都会做详细测试,以实现更佳的性能配置。