nginx单一端口域名转发

对于后端是同一端口多域名转发的nginx proxy。在nginx中的默认proxy是只能对后面real server做端口转发的,而不能做域名转发。
这个是因为默认

proxy_set_header Host $proxy_host; 

这样就等于前端输入域名后到nginx这里直接转换成IP进行转发了。
于是我们需要修改proxy_set_header的参数

proxy_set_header Host $http_host;

例如下面一个举例。下面这个例子中backend1权重为5,其他默认为1,最大失效次数3次,如果30秒内没有响应就认为是失效了。

        upstream lb  {
		server backend1.test.com weight=5;
		server backend2.test.com:8080 max_fails=3  fail_timeout=30s;
		server unix:/tmp/test3;

        }

        server {
                listen 80;
                server_name  lb.test.com;
                location  /     {
                proxy_store off;
                proxy_redirect  off;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $http_host;
                proxy_pass http://lb;
                }
        }
Advertisements

记录一次数据恢复过程

本周由于机器迁移,结果一台迁移后发现很多服务不能正常启动,用户登录也是login后会快速的logout。第一反应是文件系统损坏了。
但是首要任务还是要进入系统,于是我使劲的回忆着以前是否有相同的现象发生过,突然想起来以前在madhouse的时候一台内网freebsd机器也出现过类似的问题。那次文件的问题是tcsh出现了问题,后来改成sh后进入系统后重新安装了tcsh就好了,但是至于是什么原因,应该是就是文件系统在重启的时候给损坏了。
于是这次我想用同样的方式来进行,但是进入单用户模式后更改root的shell在登录发现还是同样的情况。那看来估计是硬盘损坏了,于是用了Livecd上的磁盘检测工具进行检测,但是时间太长就放弃了。
这个服务器不能启动对于内网测试来说是重大的打击,上面所有静态文件和数据库都在上面呢,还有邮件和dns服务呢。没有办法,没有任何备份,于是只能一点点从公网上进行恢复下来,这个几乎花了我一天多的时间全都在整这个事情。那块硬盘就交给专业数据恢复公司进行恢复了。本来说好当天就可以的,结果给我弄了2天还没好,于是一狠心就要回来自己弄了。
要说这些专业数据恢复公司也就只能恢复恢复windows下的数据,而对于Linux下的分区基本也算是新手。
星期五一早硬盘回来了,网上搜索了会。
首先是把硬盘挂在到一个Linux系统,我自己是UBUNTU,所以直接挂上启动机器就行。这个时候要注意硬盘的启动顺序,这个在新的BIOS里都可以自己设定,但是一些老的机器的BIOS可能都得靠硬盘跳线来完成启动顺序的选择了,具体可以参考硬盘上的说明。
进入系统后先不要进行mount,我们先用fsck对分区进行扫描修复。

fsck -y /dev/sdb1

这里的sdb1就是我那块坏掉的硬盘的根分区。如果你不能确定的话直接用

fdisk -l 

来进行查看就行了。
接着就进行一次模拟分区

mkfs.ext3 -n /dev/sda1 

切记一定要加上-n这个参数,这个表示模式分区,而不是真实的。
接着就把这个硬盘mount到系统中现有的一个目录下

mount -o sb=131072 /dev/sda1 /mnt/redhat 

这样就把这个根分区下的东西全部找到了。也可以对它进行修改操作。
这个还只是第一步呢对于我来说,由于数据库是innodb的,所以直接拷贝数据库文件是无法把数据倒出来的,当时想唯一的办法只能先装个mysql-server,然后根据ibdata进入到数据库中,然后用mysqldump把数据库全部倒出。可这个数据库安装半天,把数据目录一指向原来的数据库目录就是起不来。这样折腾来折腾去弄了半天没有任何进展,这些可愁坏我了。突然看到数据库的bin-log还是全部保留的。
于是就启动起来mysql后,通过bin-log来进行恢复数据。具体方法为

mysqlbinlog bing-log.0000001 | mysql -uroot -p 

网站稳定性高于一切

关于办网站的,稳定性是高于一切的标准。无法保存好客户的数据那是天大的罪孽。
我在05年曾经在一个叫blogcup的网站上写BLOG,经常写,所以回复和文章都挺多的,结果有一天突然跟我说这个网站挂了,关闭了,于是我的那些BLOG也就打水漂了。从此我就再也不在小网站上留下数据了,blog也就搬迁到wordpress.com上了,虽然老是需要翻墙,虽然这样看的人就少了,但是至少我的数据很安全。wordpress.com有 7个loadbalance以及每个loadbalance后面那么realserver,这样我的数据等于保留了几十份了起码。
fanfou是国内一家模仿twitter的网站,是王兴开的,六四事件的时候挂了一段时间,那至少也显示正在维护中。可现在倒好,直接该页无法显示了。看来我上面那些数据估计是找不回来了。难道还真要我最后搬迁到twitter上去吗? 中国真的最终目的是建立一个中华局域网吗? 那样看来是真的要逼大家都去移民了。fanfou挂了,还好国内还有一个网站叫jiwai的,那就继续凑合着用吧。等哪天最终迁移到twitter吧。还好当初在fanfou上开通了fanfou到twitter,现在jiwai上也开通了jiwai到twitter的功能。
我可不想我的那么多数据毁于一旦。

如何让urchin继续免费试用

urchin免费试用才1个月。过期了我的urchin,难道就不用了? 难道就真去买了序列号了?
这urchin是装在我们自己的服务器上的,难道就真没办法免费继续试用了? 于是找了下urchin的安装目录,楞是没找到相关的注册信息,那就一定是保存在数据库中的了。把数据库到处后搜索了下那个序列号,还真给找到了。

那就需要重新安装下urchin,安装方法之前已经有说过了,很容易的。这次安装主要是为了重新申请serial code而进行的。所以要选择不同的安装目录和启动端口。 这样安装完成后就按正常申请到试用序列号。通过数据库我们可以可以看到下列条目。主要内容是ucgl_serial:和ucgl_license: 这2行(经囚囚网首席DBA刘大牛提醒)。然后把这2行通过update在原来的urchin数据库中,那原来的urchin数据库就可以继续免费试用1个月了。不过最后还是得说记得操作前都做好备份,无论是urchin目录还是urchin数据库。

mysql> select * from uglobals\G
*************************** 1. row ***************************
                            usgl_id: 1
                         utgl_mtime: 2009-07-07 15:50:00
                          ucgl_name: Global Settings
                       ucgl_version: 6501
                        ucgl_serial: M7KAC3E7Z6VZS4JC1WDML3A7
                       ucgl_license: ATS5C1EZPKV5PX0EGKVNHB0HFHV20EXSL4B2X6VM44N43N2W7CBSJX7HGRWB5Y3ZTY8U6TE7

HPC服务器要点

最近听了一次马路遥朋友的讲座,他的主题就是HPC,以下内容就是根据他的讲座整理而成的。
因为涉及到高可用计算,所以服务器与服务器之间的连接速度是很重要的。是选择千兆还是万兆还是infiniband,个人感觉还是选择万兆吧。毕竟延迟小是明摆着的事情。
服务器系统的安装也是一个问题,如何迅速的安装系统呢? 用kickstart?可这个只能redhat系统下使用啊。马兄说了他使用的主要是SystemImage,和syncbased这2种方式。
如果用kickstart来安装系统,那要是每个机器需要修改的配置不同的话那可以用php/cgi的方式自定义各种ks.cfg
如何选择合适的系统,马兄由于习惯redhat的系统所以选择了centos,但是其实一些新的发行版还是真是不错,比如gentoo和ubuntu这2个,首先是内核新,其次是文件系统可选择余地大。
对于HPC来说选择一个合适的软件来进行任务管理和分配系统资源是很重要的,主要有以下几种
1 SGC: sun出品,稳定性优秀
2 openPBS,Torque 这个稳定性稍差点
3 L$F, 这个是商业软件,应该稳定性也非常优秀。

而对于这样一个庞大的系统和服务器集群做好监控是非常重要的,监控软件主要有以下几种:
1 ganglia
2 cacti
3 nagios
个人是最喜欢最后一种,客户端可供自定义的多。而前面2种就是基于snmp协议的,在内网中使用还是非常不错的选择。

管理软件,所谓的管理软件其实就是可以一次操作需要的服务器
1 pdsh 这个是多服务器管理
2 mussh 这个可以允许本地脚本在远程执行,这个应该是个不错的功能。不知道远程跟本地是通过什么进行连接的
3 cssh 这个是基于图形界面的,就好象在一个界面中开多个终端一样。这个曾经在redhat中使用过,可以自定义各种组和成员。
但是我觉得windows一些客户端也能完成上面的工作,比如xshell这样的工具,这样也可以自定义组和成员,也能一次操作对多个服务器进行生效。

既然是集群那时间同步是非常重要的,所以还要建立ntp服务器。

集群中所有服务器的认证也是非常头疼的,还好我们有NIS和openLDAP.
NIS我曾经在公司内部使用过,感觉需要在客户端上要修改挺多东西,而且不同Linux发行版本还修改的不同。openLDAP还没用过,但是听说非常好用,而且还不光能做服务器登录的认证还能做email认证等等。

在集群中不光有计算的服务器,还必须要有文件服务器,这个选择就很重要了
1 NFS: 常用,但是性能不怎么样,特别是client超过10个以上更是不行,同时不能支持对文件同时进行修改。于是衍生出了clusterFS, 这个就非常多了。
2 FressNAS: 基于FreeBSD操作系统的
3 openFilter: 基于Linux系统的
4 sun Lustre: 可以进行400台机器同时读写,这个太牛了。。。。
5 Redhat GFS: 这个不怎么好用,后面还得跟上SAN存储才行,这样成本就大了,除非你用netbsd实现SAN
6 PVFS/PVFS2