2009年4月18日星期六
thinkpad 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配置中:
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了
设置如下:
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" .
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,找到:
{ 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 下面增加一行
按照 这里 的方法编译通过, 测试功能一切正常.
后记,mod_site_misc module并没有日志功能,为了提供日志,还改写了大量代码.实现过程比主功能(文件hard link)实现复杂多了, 感觉怪怪的.不过日志功能必不可少,也没办法了.
2009年1月26日星期一
2009年1月7日星期三
mysql replication 故障处理一则
***_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从哪个网卡进来,就从哪个网卡回去.
服务器操作系统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使用自己的文件系统一样,不在乎贵不贵,而在乎是否合理运用。每台服务器或存储系统配多少块硬盘,文件块的大小为多少,我们都会做详细测试,以实现更佳的性能配置。