The Mirages

樱桃沟夹事

在现在的网站架构中经常会前端是LVS,中间是NGINX,后端才是真实服务器。在这种情况下,在用我之前的重定向维护方法就会比较麻烦。因为几乎所有域名都是都是指向在LVS上,而有时候wap和pc都会指向同一个lvs的虚拟IP。这个时候就需要结合iptables和nginx来做根据域名的重定向维护页面了。首先需要让LVS把NGINX服务器IP转向到新的NGINX服务器IP,也可以是同一IP,这样2个NGINX需要跑在不同的端口上。在本例中,正常的NGINX跑在80端口,而维护页面的NGINX在81端口上。
下面正式开工了。

首先在iptables中加入nat转向,目的是为了让测试人员和开发人员能够正常访问网站进行测试和调整,而普通用户只能看到静态维护页面。
下面的Iptables内容中1.1.1.1是我公司的出口ip,而2.2.2.2是网站的公网IP,10.2.2.2是网站的内网IP。为什么要把公网用户转到内网IP是为了不在防火墙上开放新的公网开放端口。而eth2就是网站的公网出口

 # Generated by iptables-save v1.3.5 on Fri Mar 26 12:59:51 2010 *nat :PREROUTING ACCEPT \[131:18361\] :POSTROUTING ACCEPT \[14:1169\] :OUTPUT ACCEPT \[14:1169\] #公司自己的访问转向到80口 -A PREROUTING -s 1.1.1.0/24 -i eth2 -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2:80 #其它访问转向到81口 -A PREROUTING -s 0.0.0.0/0 -i eth2 -p tcp --dport 80 -j DNAT --to-destination 10.2.2.2:81 -A POSTROUTING -s 0.0.0.0/0 -p tcp --dport 81 -d 10.2.2.2/32 -j SNAT --to-source 2.2.2.2 -A POSTROUTING -s 0.0.0.0/0 -p tcp --dport 80 -d 10.2.2.2/32 -j SNAT --to-source 2.2.2.2 -A POSTROUTING -o eth2 -j MASQUERADE COMMIT 

修改/etc/sysctl.conf中的net.ipv4.ip_forward = 1,这一步是为了让内核支持转发。
执行

 sysctl -p /etc/sysctl.conf 

下面就是nginx登场了。新建一个新的nginx_81.conf文件。这样就能区分原来的。下面是这个nginx_81.conf的主要内容。其实主要就是其中的rewrite规则。由于我们域名所有所有wap域名都是m.abc.com, bb.m.abc.com这样形式。所以就只区分了wap和pc两种。但是为了防止有些pc域名如farm.abc.com存在,所以写了3条if规则。本来想用rewrite来进行重定性,但是一直写不好,不是这个有了问题就是出那个问题,还是直接用error_page来更直接一点。

阅读全文 »

前言:如果对于IT硬件产品不熟悉还是只把中关村当做IT产品展示厅来看,只看不买,看完了直接上新蛋,京东(虽然服务不怎么样)上买吧。
中关村的水太深肯定不是一天两天了。但是之前虽然经常去,可大多时候时候只是去走走看看,没有跟这些人直接交战过,不过今天算是领教了。
今天陪老婆去买台笔记本,机器之前已经在网上看好了,一个是HP的4411S,具体配置信息也都写好了,以及价格也都参考好了。另外两个一个是富士通的L1010和LH530。没有办法,因为老婆不喜欢联想,华硕,ACER,三星,SONY。又要红色的,可以挑选的余地真的很小。
这就进村了,先看了HP的机器,结果一看发现这做工实在不怎么样,又因为现在HP的蟑螂门事件,所以就迅速放弃HP了。可这富士通的经销商的实在太少了。最后碰到一家叫齐宏时代的经销商是代理富士通的。看了两款机器,一个是L1010,一个LH530。2个机器都在那边看了,最终老婆要买L1010的白色款。在之前网上查到的资料是白色,T4400,1G内存,320G硬盘,DVD-RW一个不差。
说说买的过程吧,JS把我们带到鼎好1211室,这里算是他们公司的总部了吧。先是拿样机来,JS立刻让小弟下楼去拿来。看着还行,于是开始谈价格,可实在是谈不拢,于是就走了。还没出门多久估计是他们的经理(一个胖子)来说问问我们具体什么价格,我们报上了自己的价格,但是这个还是比较合理的价格,比京东和新蛋少200的一个数字。应该还是比较合理的。胖子答应了,于是就直接进去验机了,先让胖子把机器拿出来,先检查下箱子有没有拆封过,然后胖子说一定要交钱才能拆,那行吧,交就交吧,可一定要发票,这个可是之前说好的。于是一边交钱一边验机。机箱序列号,机器序列号,配件箱子序列号一致。但是接下来出问题了,开机经常无缘无故关机,难道机器硬件有问题? 于是接上电池再开机,结果就好了。估计JS在插座上做手脚了,手动给断了。JS看到我接上电池了,马上跑来说不行,这样对电池寿命不好。于是JS说我帮你装软件吧,由于之前知道有些JS会在移动硬盘里弄点病毒让机器故意死机,所以我坚决不让JS给我装软件。验完机后直接拿好发票走人,结果回去路上发现发票单位不是齐宏时代,而且没有写清楚机器型号,看来JS是故意的。算是百密一疏啊。回家立刻上富士通官方网站注册保修。希望机器别出问题。
回来总结下,必须先看到机器,看好配置才能交钱。其次验机过程必须不能让JS碰你机器,有时候必须装上电池验机。发票必须写清楚机器型号,发票章必须是看到的这个公司的。还有齐宏时代是一个奸商,但算不上骗子还。
2010-04-11
Best regards
Timo Seven

twitter: https://twitter.com/zauc ######也请翻墙浏览####################
UNIX System Admin & MySQL DBA

虽然虚拟机中安装有gentoo-amd64位版本,但是一直非常少用,很多时候都是当python编译器使用的,这次为了测试下mysql2种不同引擎处理大数据量的能力,所以想通过emerge来安装下mysql,我本以为跟freebsd的ports应该完全一样。结果碰到很多问题。

1
time emerge --search mysql

这里要说明下这里–search是用来查找名字包含mysql的软件包。如果你想查找包名以及软件描述中包含有mysql关键字的就要用–searchdesc

1
time emerge -avt dev-db/mysql-community

我想应该可以很顺利的安装上,之前也没太注意后面标准的[Masked]
结果安装就出现了如下问题
于是就放狗进行搜索,结果大部分都是说由于这个版本在这个平台上还不是很稳定,所以不能被安装。可mysql5.1怎么可能在amd64平台上还是不稳定版本呢? 但是按照网上的处理方式进行解决一下,处理方式如下:

1
2
3
4
5
echo "=dev-db/mysql-community ~amd64" >> /etc/portage/package.keywords
```
我也这样进行处理了,可安装时候还是会出现这个报错。想来想去还是得自己搞定,仔细看看上面的错误,发现了“(obsolete, move to dev-db/mysql)”这句。所以就用
```bash
time emerge -avt dev-db/mysql
阅读全文 »

这是问句,因为我也不知道如何彻底解决!
统计数据的准确性是需要产品,开发,BI,运行之间互相沟通的。
现在出现的问题经常会发现几个统计数据之间不一致。这种原因我自己也检讨过。首先由于网站程序一直在变更,比如之前加入了一个退会功能,结果把有些ID的数据全部给删除了。那由于统计时间不同导致用户数据都不一样。
第二个问题是有些不同程序的逻辑不一致,比如login和游戏记录用户登陆的算法居然还不一致,我想怎么会游戏登陆人数居然比登陆网站的人还多。但是如果要更改就会导致网站中很多程序都要更改,更改还需要进行测试。但是统计的测试跟普通的功能测试和性能都不一样,你必须考虑到各种各样的情况导致数据记录的不一致。
第三个问题是数据源不一致,有些开发喜欢打日志,有些喜欢记录数据库。无论是日志和数据库记录都会涉及到最终数据合并的问题。但是有时候还是会发现数据会存在个位数的差异。
所以要保证统计结果的一致性,首先我们要保证数据源的一致性,这个就需要搭建好数据仓库,然后所有的统计数据都从这里来进行获取,这样就从源头上规避了数据源不同导致的统计结果不一致。搭建数据仓库的另外一个意义是不会程序在数据库中删除数据也导致的不同时间统计导致最终结果不一致。
逻辑上的问题分为2种。一种是网站程序的逻辑,这个开发和BI,运营之间必须要确定好。其次是统计脚本的逻辑,这个前面忘记说了,统计脚本的逻辑则需要BI和运营之间要协调好。比如你要计算网站登陆率,那分母一般网站的注册人数,而如果这个网站有激活步骤的话,那分母是否要变成激活人数?
现在最主要的工作就是如何建立合理的数据仓库。而运营的需求是要知道这个用户从哪个广告或者网站注册进来,之后又是从网站哪个入口进入到网站,以及进来之后每一步的操作,以及所有的用户个人资料。由于要详细到每个人,所以这个数据仓库肯定就会非常大了,如何建库建表真是个问题,而且MySQL还缺乏那么多分析函数,由于现在还在搭建阶段,真想放到postgresql8.4中。
2010-04-09
Best regards
Timo Seven

twitter: https://twitter.com/zauc ######也请翻墙浏览####################
UNIX System Admin & MySQL DBA

今天KFC上了各大网站的头条。原因是因为它刚出的秒杀活动居然停止了。它为了推广它的KFC优惠网,推出了秒杀活动了,可现在由于去兑换的人太多,居然自己停止了。我想估计
根据今天早上北京卫视的暗访北京KFC的镜头,里面店员的原话是这样的“今天下午一开始来的2个顾客我们都给兑换了,而第三位客户来的时候我们刚接到总部通知,说这些兑换券是假的,不予兑换。”从这里可以看到,KFC确实有这个活动,而当天肯定也是可以兑换的,不然为什么这家店可以兑换,这跟KFC官方说的这个活动还未推出明显是有矛盾的。而KFC所谓已经报警更是恶人先告状。所以这个公司根本没有诚信,我保证我以后再也不吃KFC的任何东西,也不会吃百胜旗下的任何东西,比如必胜客,东方既白。
但是中国人大多有健忘,过了这个阵子,很多肯定都忘记了。就好比现在丰田对于中国消费者的态度,跟对美国消费者态度差太远了,不管别人怎么样,反正我是肯定不会买丰田旗下任何品牌的车,无论是普通丰田还是高端的我现在根本买不起的雷克萨斯,都给见鬼去吧。
不光是国外品牌,而国内品牌像出了三聚氰胺时间的蒙牛和伊利,可现在大家还是吃的很多,超市的货架上还是摆满了这2个品牌的产品。远不像那个时候牛根生整天哭天喊地啊,说要救救民族企业,可蒙牛真是民族企业吗?
不管其它人怎样,反正我自己现在每天公司发的酸奶(蒙牛和伊利),我是都给人家了,要是人家不要那只好是扔了。而我自己去超市买都是三元或者光明的。
还有各种绯闻的明星,比如抛妻弃女的孙楠,可真不明白为什么还有那么多电视台请他? 为了收视率? 可这种人会有好的人品?看的就恶心啊恶心。我不知道电视台现在收视率至上,为了更好的卖广告?
今天说了点跟技术无关的事情了,希望能保持好每日一篇。 最好还是技术上的东西,或者学习英文的内容。我不是愤青,但是我记得哪些人对我不好,哪些人对我好。
2010-04-07

Mysql innodb performance optimization

Mysql innodb存储引擎的性能优化

本文翻译自http://www.mysqlperformanceblog.com/files/presentations/UC2007-Innodb-Performance-Optimization.pdf

这里只是我对这个PDF文件进行了翻译,由于本人刚从事mysql DBA一职,所以很多东西自己并不能很好的翻译出来,其中对于硬件部分翻译的应该还行,但是关于数据库方面的翻译的不好,大家就看看吧,翻译本文只是想更 清楚的了解mysql 优化上的一些基本原则,而国内对于这个没有完整的资料。本文的作者Heikki Tuuri是InnoDB的创始人,在翻译过程中同样获得了Peter Zaitsev的帮助,他是《High Performance MySQL》一书的作者。

作者: Heikki Tuuri

Email: pz@mysqlperformanceblog.com

阅读全文 »

京东已经不是3年前那个京东了,记得那时候还叫jdshop,现在的售后服务实在是跟以前没法比了。最近买了键盘保护膜真是受了一肚子的气。要不是别人给的京东卡,要不谁来京东啊,amazon和新蛋都比京东好多了。丈母娘要定个计步器,可居然缺货1个月以上了。我靠,你耍人呢? 你要没有直接说绝版就行了。


先是定了一个纳米键盘保护膜,结果每次都给送来TPU的,纳米的58元,而TPU得是38元。来来回回居然送了4次还给送错,真是佩服京东啊,是不是我以后定个笔记本包你们给我送台笔记本过来呢? 京东的仓库管理和配货以及送货流程怎么跟其他B2C公司来比啊。

送这个就算了,那我就定这个吧,可我26号订货的时候还有TPU的,结果到我今天想提货了,却提示我没有货了。我靠,你的后台系统太烂了吧。

部门一个项目要上LVS,之前我是没有真正做过LVS,只做过FREEBSD的HA,那真是费了很大劲,每次还必须自己手动编译内核来支持CARP,每次都得这样加上

 # To make an SMP kernel, the next line is needed options SMP # Symmetric MultiProcessor Kernel # increase max allowable process virtual memory size options DFLDSIZ="(128\*1024\*1024)" options MAXDSIZ="(1024\*1024\*1024)" options MAXSSIZ="(1024\*1024\*1024)" options DEVICE_POLLING options HZ=1000 ##CARP options ALTQ options ALTQ_CBQ device pf #device pflog #device pfsync device carp options AUDIT 

而现在用的Linux的LVS已经从2.4需要手动编译,而现在2.6内核直接就内核支持了,真是方便太多了,但是没有实际操作过。这次就出现问题了。由于nagios和lvs在一台机器上,问题出现了,居然虚拟IP需要配置在lo口上,真是奇怪了,为什么要配置在lo上而不是eth0上。
nagios要安装nrpe来跟nagios进行通信,另外一台LVS没有问题,直接telnet 192.168.1.3 5666也没有问题,可以通过相关命令获得系统信息。而这台LVS居然不能telnet 192.168.1.2 5666直接就给退出了。奇怪了,配置都是一样啊。都是允许1.2进行访问的呀。界面上显示的可以是nrpe ssl握手出错,于是想估计是ssl的问题,可重装下也还是一样。这就奇怪了。
后来用netstat -rn看了下本地路由也没有问题,实在是没辙了.

于是就看看log里都是记录着什么,结果发现居然全部都是外网IP的访问拒绝信息,可路由信息里没有显示啊,而且就算通过traceroute也是本地啊。想来想去还是lo造成的,而且log里记录的还都是LVS的虚拟ip,于是就在Nrpe加入了虚拟IP的可访问权限,这下一试就通过了,同时snmpd.conf也加入了虚拟IP,这下终于OK了,明天可得看看Linux的路由策略到底是怎么走的。奇了怪了。
今天看了下了iptables,感觉iptables也会导致这样的问题存在。但是如果是iptables的问题的话,那telnet到内网其它机器就也会有问题的,是否也会走公网端口呢?

本文参考了ibm press的《Linux 服务器性能调整》,这本书全面介绍了性能调整的方方面面,但是把很多无用的显示信息放到正文中,这样很不爽

vmstat是在xnix我们常用的性能监控工具。常用的命令有vmstat 5 5,这个表示每5秒统计一次,共统计5次。

[root@ns ~]# vmstat 5 5
procs ———–memory———- —swap– —–io—- –system– —–cpu——
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
0  0 1968768  83276 206644 965036    0    0    96   296    1    0 25  0 73  2  0
0  0 1968768  83276 206644 965036    0    0     0    10 1021  760  0  0 100  0  0
0  0 1968768  83284 206644 965036    0    0     0     3 1030  725  2  1 98  0  0
0  0 1968768  83276 206644 965036    0    0     0    22 1048  790  0  0 100  0  0
1  0 1968768  82268 206644 965048    0    0     0   190 1054  842  0  0 99  0  0

前面一个5表示间隔多少秒,后面一个5表示统计几次。

第一列是procs,这个提供了生成报告时正在运行的进程数目(r)以及被阻塞的进程数目(b)。这2个值通常是越低越好,越低说明cpu空闲度高。
第二列是memory,这个提供了换出内存(swpd),空闲内存(free), I/O数据结构的缓冲区的缓存大小(buff),以及从磁盘读取文件的内存缓存(cache)的大小,单位都是KB。swpd的取值反映了kswapd的活动情况。
第三列是swap部分,这里提供了从磁盘上换入的内存容量(si)以及换出到磁盘上内存量(so),单位为KB/s。so反映了当数据被换出到交换分区时kswapd的活动情况,而si则反映了当页面被换回到物理内存时发生页面错误的情况。这两个值在系统内存够大或者负载较轻的情况下应该都为0.
第四列是io部分,这个部分反映了从设备读入块数(bi)以及写出到设备上的块数(bo),单位为KB/s,当I/O操作特别频繁的时候要特别注意这2个值的变化。
第五列是system部分,显示了每秒钟的中断数目(in)和上下文切换数目(cs)。中断和上下文切换是每个程序都肯定存在的,所以必须要 有所前后文比对才能确定是否系统出了问题,程序有问题肯定会导致频繁的中断和上下文切换,这样非常消耗系统资源。
第六列是cpu部分,这里提供了用户(us),系统(sy),真正空闲(id)以及等待I/O完成(wa)在CPU总时间中所站的百分比,若wa值过大,则应该检查I/O子系统。
而在linux2.6.11后还会多出(st)列,这个表示虚拟线程占有cpu。现在还不知道这个值具体有什么作用,是不是只有在装了KVM或者XEN的情况下才有用呢?

0%