Posted by zuzhihui in Linux技术 on 2008/05/27 with No Comments
昨天晚上就已经安装调试成功了,目前只能在CentOS 5 VPS上安装。
我们已经建立了两个安装了Lxadmin的VPS,邀请了两个客户进行试用。如果您想体验一下Lxadmin,请邮件联系我们 support@rashost.com 我们会开通免费试用的。
Posted by zuzhihui in Linux技术 on 2008/05/25 with No Comments
这两天,我们的一台Xen VPS Host主机的的硬盘也“地震”了。这台主机上有两块硬盘坏了。但是由于做了RAID,数据一点没有丢失。这次事故使部分客户的VPS中断了,尤其是一些做新闻的客户,比如 汶川地震网等,我们深表歉意,我们会尽力杜绝此类事件的发生。
这台VPS Host一共三块硬盘,前两块做了RAID1,上面安装了操作系统,放着所有VPS数据。第三块硬盘没有做RAID,用来备份数据。昨天晚上,我收到主机上SMARTD发来的邮件报告第二块硬盘检测失败。这时第一块硬盘很正常,所以系统还是没有受到影响。但是这时候由于没有了RAID,系统就处于不安全的状态,因为如果第一块硬盘再坏了,系统就不能在线运行,只能从第三块硬盘手工恢复数据了。为了消除这个状态,我们把第三块硬盘的数据清理了一下,然后把第三块硬盘加入RAID。这样虽然没有了备份空间,但系统稳定了。
下午大概三点的时候第三块硬盘也坏了(第三块和第二块是一起购买的)。我们立即派人联系服务器经销商,取了两块新的服务器硬盘,赶赴IDC。在只有一块硬盘的情况下,系统也是在线的。关键是这时候系统由于需要重启了,而重启失败了。后来发现启动失败的原因是由于/etc/fstab文件中有第三块硬盘的分区,这个分区的文件系统检查标志是打开了的,所以启动过程要检查这个分区,发现错误后就不继续了,要输入root密码才能进入一个shell。如果不是这个启动失败,断线时间能缩短一些。
在IDC换了硬盘后,系统能够正常访问了。由于RAID重构是在后台进行的,所以系统的IO在重构过程中比较繁忙,VPS中应该能感觉到。
经过这次事件,总结了几点经验教训:
目前国内有VPS市场服务名声不好(google关键字 “vps 服务差 OR 骗子公司 OR 垃圾” 可以看到),而我们一定要对客户负责,真诚。不管在价格方面还是服务方面都对客户透明,对所有人统一标价,服务不到的地方要反省而不是欺骗或者隐瞒。我以前在国外某VPS公司的一段兼职经验让我看到国外多数VPS公司的服务还是比较真诚的,我们确实应该好好学习。
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
使用soft raid的一个好处就是和硬件无关。当硬件完蛋的时候你只能找一样的硬件来读数据,而软件的话完全就挂在
一个新的LINUX系统上就OK。如果不是RAID5,那么实际上作RAID1的话性能应该不用太担心,毕竟有8个逻辑CPU…
可以做这么一个方案:
系统主板上两个同样的硬盘,安装redhat enterprise linux 4.2,安装的时候将两个硬盘的分区改为一致,并都设置为
SOFTWARE RAID1。然后继续安装。
那么安装完毕后,完全可能出现系统不能启动,或者grub可以进行第一步启动,但是找不到/分区或者核心的问题,那么
就要采取如下的方法来解决这个问题了,原文出处:
http://www.redhat.com.cn/kbase/6046.php
现象:
如果你在软件RAID上安装了一个操作系统,系统会无法引导或者只能从其中的一个硬盘引导。而不是所需要的硬盘冗余,即可以从任意一个硬盘引导。
你最好多少能够熟悉一些硬盘寻址和分区的知识和一些基本的Linux引导信息。还需要能够熟练的使用vi来编辑一些配置文件。
解决方法:
因为存储设备的差异非常大,安装程序(Anaconda)可能不能正确设置每一个引导驱动器的主引导记录(MBR)。MBR使用硬盘前512个字节的一部分,位于分区表之后。它包含引导加载Linux所需的自举程序的代码。
如果磁盘没有包含GRUB,系统将不能从第二个硬盘启动,第二种可能是GRUB被安装到了另一个磁盘的MBR上去了,第三种可能,如果机器没有正确 的关闭,则MBR中的GRUB信息可能会在同步的时候被空字节所代替。确认是否以上的可能性,可以手工的重新安装GRUB.可以在一个正在运行的机器或者 启动到救援模式下,
如果在救援模式下,使用chroot改变当前root到/mnt/sysimage,切换到GRUB目录/boot/grub. 编辑文件device.map. 设置要安装GRUB的磁盘和设备。如果你的软件RAID是基于两个IDE硬盘hda和hdc,这个文件可以设置如下:
# this device map was generated by anaconda (fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/hdc
请注意,上文中的设备指的是整个设备(hdx)而非一个分区。 假设你的/boot分区是硬盘上的第一个分区,GRUB会把他们认成(hd0,0)和(hd1,0)。确认grub.conf中的设置是否和上述一致。同 样你需要创建一个备份的启动项去启动这个系统:如下例:
# grub.conf generated by anaconda # # Note that you do not have to rerun grub after making changes to this file # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=LABEL=/ # initrd /initrd-version.img #boot=/dev/hda1 default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu #Boot from /boot partition, /dev/hda1 title Red Hat Enterprise Linux Disk A (version) root (hd0,0) kernel /vmlinuz-version ro root=LABEL=/ initrd /initrd-version.img #Boot from /boot partition, /dev/hdc1 title Red Hat Enterprise Linux Disk C (version) root (hd1,0) kernel /vmlinuz-version ro root=LABEL=/ initrd /initrd-version.img
最后,使用grub命令,并在grub SHELL中手动的安装GRUB到每个设备的MBR.你可以使用GRUBroot命令和setup命令来实现上述操作。现把包含/boot的分区传递给 root命令。然后使用setup命令把GRUB MBR的代码写入需要引导的设备。操作步骤如下:
# /sbin/grub GNU GRUB version 0.xx (640K lower / xxxxK upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1 15 p (hd0,0)/grub/stage2 /grub/grub .conf"... succeeded Done. grub> root (hd0,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd0) Checking if "/boot/grub/stage1" exists... no Checking if "/grub/stage1" exists... yes Checking if "/grub/stage2" exists... yes Checking if "/grub/e2fs_stage1_5" exists... yes Running "embed /grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded. succeeded Running "install /grub/stage1 (hd0) (hd0)1 15 p (hd0,0)/grub/stage2 /grub/grub .conf"... succeeded Done. grub> quit
在上述例子中,在两块硬盘上都已经安装成功,我们可以返回安装程序或者是正常运行的系统。重新启动系统确认系统是否能够引导。还需要模拟SoftRAID中的一个硬盘失败的情况下,系统可以从另一快硬盘引导而且数据可以恢复。
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
最近一个客户要求在他的Ubuntu 8.04 VPS上安装一个高性能的web服务器nginx,下面是我的安装记录。 由于Ubuntu 804已经包含了nginx,所以根本不要编译,安装超简单! 在VPS上修改/etc/apt/sources.list文件内容为:
deb http://ubuntu.cn99.com/ubuntu hardy main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu hardy-security main restricted universe multiverse
deb http://ubuntu.cn99.com/ubuntu hardy-updates main restricted universe multiverse
然后运行:
apt-get update
apt-get install nginx
即可完成安装 启动nginx:
/etc/init.d/nginx start
然后就可以访问了,http://58.30.17.160/ , 一切正常!如果不能访问,先不要继续,看看是什么原因,解决之后再继续。 下面配置php和mysql。 安装php和MySQL:
apt-get install php5-cli php5-cgi mysql-server-5.0 php5-mysql
我们需要/usr/bin/spawn-fcgi这个文件,而它是属于lighttpd这个包里面的,所以我们安装lighttpd然后把它设置为开机不启动:
apt-get install lighttpd #我们只要/usr/bin/spawn-fcgi
rcconf #去掉lighttpd开机自启动
修改nginx的配置文件:/etc/nginx/sites-available/default 修改 server_name 58.30.17.154; 修改index的一行修改为: index index.php index.html index.htm; 去掉下面部分的注释:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
重新启动nginx:
/etc/init.d/nginx stop
/etc/init.d/nginx start
启动fastcgi php:
spawn-fcgi -a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi
为了让php-cgi开机自启动:
cd /etc/init.d
cp nginx php-cgi
vim php-cgi 替换nginx为php-cgi 并修改相应部分为:
DAEMON=/usr/bin/spawn-fcgi
DAEMON_OPTS="-a 127.0.0.1 -p 9000 -C 10 -u www-data -f /usr/bin/php-cgi"
...
stop)
echo -n "Stopping $DESC: "
pkill -9 php-cgi
echo "$NAME."
然后运行rcconf设置php-cgi为开机自启动 在/var/www/nginx-default/目录下创建一个文件:
echo '< ?phpinfo();?>' > /var/www/nginx-default/index.php
然后浏览器访问nginx就可以看到一切正常了
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
在程序出错的时候,会产生core文件,这个core文件有利于debug程序为什么产生错误。
在Linux系统中,缺省是不允许产生core文件的。要想运行产生core文件,需要修改/etc/security/limits.conf 然后重新启动即可:
需要在/etc/security/limits.conf中添加:
* soft core 20480
* hard core 40960
即可
以上方法在瑞豪开源VPS(包括CentOS,Debian,Ubuntu)上测试通过
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
Zend Optimizer是由PHP核心引擎“Zend”创建者Zend技术公司所开的免费PHP优化软件。据Zend公司透露使用这个软件某些情况下至少可以提高性能30%以上。今天我在安装了Ubuntu Hardy的VPS上配置了最新的ZendOp。过程记录如下:
按照正常流程,在官方网站下载Zend Optimizer是需要注册用户登录之后才能下载的。下载一次后发现其实匿名用户也能下载,用下面这个URL即可:
http://downloads.zend.com/optimizer/3.3.3/ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
在安装Zend Optimizer之前需要先把apache,php安装好:
apt-get install libapache2-mod-php
然后在/var/www/下创建index.php,仅包含一行php代码phpinfo();
然后用浏览器访问VPS,在首页里面搜索不到Zend Optimizer的字样.安装完成后应该能够搜索到Zend Optimizer才对。
tar zxf ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz
cd ZendOptimizer-3.3.3-linux-glibc23-i386
./install.sh
然后安装程序会询问几个路径,一个个回答即可完成安装。
安装完成,重启apache,然后再访问首页,应该能搜索到Zend Optimizer的字样,说明安装成功了,接下来就可以开始测试性能了。
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
AWStats是在一个很流行的基于Perl的WEB日志分析工具。本文讲述在Debian4下怎么安装配置awstats。
Debian4自带有awstats,安装只需执行:
apt-get install awstats
然后输入以下命令重新启动apache
/etc/init.d/apache2 force-reload
然后通过浏览器访问:http://rashost.com/cgi-bin/awstats.pl 发现有出错信息,说明awstats已经安装了,perl cgi也工作了,只是awstats还没有配置,所以报错了。
在/etc/awstats/awstats.conf文件中修改:
LogFile="/var/log/apache2/access.log"
LogType=W
LogFormat=1
SiteDomain="rashost.com"
HostAliases="rashost.com localhost 127.0.0.1"
然后再次访问,awstats的界面出来了,但是没有数据。
awstats靠cron定期分析apache日志,在文件/etc/cron.d/awstats中我们能找出数据处理的脚本,但在debian下,这个脚本是有点问题的,我们需要手工修改脚本中的日志文件的文件名为:/var/log/apache2/access.log
现在手工运行一下awstats的数据分析脚本:
chmod og r /var/log/apache2/access.log*
/usr/lib/cgi-bin/awstats.pl -config=awstats -update
然后再次浏览器访问,数据就出来了。还有没有出来的是图标,我们需要在apache的配置文件
/etc/apache2/sites-available/default
中加入:
Alias /awstats-icon/ "/usr/share/awstats/icon/"
<directory "/usr/share/awstats/icon/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
重启apache,完整的内容就出来了。
剩下的唯一问题就是控制不让别人随便访问awstats,还是在
/etc/apache2/sites-available/default
文件中修改:
<directory "/usr/lib/cgi-bin">
AllowOverride None
Options ExecCGI -MultiViews SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AuthType Basic
AuthName "RasHost CGI"
AuthBasicProvider file
AuthUserFile /etc/apache2/password
Require user admin
然后在/etc/apache2目录下执行:
htpasswd -c password admin
给admin用户一个密码即可
最后的完善
为了让awstats能够显示出IP来自什么地方,我们还需要安装一些东西:
apt-get install libgeoip-dev liburi-perl
wget http://www.maxmind.com/download/geoip/api/c/GeoIP-1.4.4.tar.gz
tar zxf GeoIP-1.4.4.tar.gz
./configure --prefix=/usr
make
make install
perl -MCPAN -e 'install "Geo::IP"'
perl -MCPAN -e 'install "Geo::IP::PurePerl"'
安装以上perl需要gcc等编译工具
cd /usr/share/awstats
wget http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
wget http://www.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity_20080501.zip
gunzip GeoIP.dat.gz
unzip GeoLiteCity_20080501.zip
mv GeoLiteCity_20080501 GeoLiteCity
vim /etc/swstats/swstats.conf
LoadPlugin="decodeutfkeys"
LoadPlugin="geoip GEOIP_STANDARD /usr/share/awstats/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/share/awstats/GeoIPCity.dat"
重启apache就可以了
Posted by zuzhihui in Linux技术 on 2008/05/24 with No Comments
如今,虚拟化技术正是IT业界的热门话题。虚拟化技术能使多个操作系统在一台物理服务器上同时运行,这种虚拟化对操作系统来说是透明的。虚拟化技术能够给企业减少维护成本和硬件成本。在IBM,英特尔,SUN,惠普,戴尔等硬件厂商和VMware等软件厂商的大力支持下,虚拟技术已经成为企业的成熟的解决方案。
Xen是一种著名的开放源代码的虚拟化技术,它基于Linux平台。由于Xen采用半虚拟化的技术,也就是说操作系统要经过一点修改才能在Xen上运行,所以Xen的性能要优于其他虚拟化技术。Xen由XenSource公司负责开发,后来Citrix公司在2007年8月以5亿美元收购了XenSource公司。IBM,SUN,英特尔,惠普等硬件厂商都在自己的硬件上对Xen提供了很好的支持。RedHat,Novell等 Linux操作系统厂商也都在自己的操作系统上集成了开源的Xen软件。
在国际IDC市场上,由于Xen稳定,高性能,低成本的特点,基于Xen的VPS主机产品选择非常丰富。而目前国内市场上的VPS主机产品几乎全部都是基于商业软件的。这些商业软件比Xen成本高,性能不如Xen。瑞豪开源VPS 是国内唯一的基于Xen的VPS主机产品。瑞豪开源VPS提供多种Linux操作系统选择,VPS空间全部存储在RAID1上,能够有效防止数据丢失。瑞豪开源采用具有VT技术的英特尔至强CPU,从而也能提供Windows 2003等操作系统。
低成本,高性能的Xen进入国内VPS市场,定会加剧VPS市场竞争,降低VPS价格,从而为用户带来最大利益。
Posted by zuzhihui in Linux技术 on 2008/05/18 with No Comments
在Java开发的网站中,经常会出现在URL中包含有jsessionid,用来记录session。这是因为如果浏览器不支持cookie,JSP容器通过在URL中包含jsessionid来达到session的效果。
这样做对搜索引擎来说有点问题,Google等记录的url中也会包含jsessionid,很不利于网站的SEO优化。为了从url中去掉jsessionid,我搜索了很长时间,无论搜索什么关键字:tomcat,jsp,struts2, url rewriting等,都没有非常简单简单的方法。
我最后采用了这个解决方案 。简单的说,就是增加一个Filter,在这个filter中去掉jsessionid。
Posted by zuzhihui in Linux技术 on 2008/05/17 with No Comments
今天去攒了一个台式机,主板的型号是技嘉G31M-S2L。回家后组装硬件的过程还比较顺利。
安装的第一个操作系统是CentOS Linux 5.1,装完之后才发现网卡没有找到。CentOS自带的有r8169内核驱动模块,但该模块根本不起作用。
然后按照第二个操作系统:Ubuntu Hardy。ubuntu还是比较强的,能够很好识别出网卡来。然后在unbutu下上网,找相关的资料,发现很多网友都碰到类似问题,网络上有很文章都是讲这个的,大多数都是说到realtek的官方网站下载驱动编译安装即可。然而事实并非如此,估计是因为官方网站上的驱动早已经升级,和以前大家碰到的不一样了。
然后编译安装,结果还是不行!然后继续到网络上找资料,没有发现任何线索。
接下来我到realtek的FTP上去浏览了一番,发现ftp://202.65.194.211/cn/nic/ 下面有个r8138的驱动:
ftp://202.65.194.211/cn/nic/r8168-8.006.00.tar.bz2
下载下来,编译安装,哈哈,终于识别出来了!
在Linux下lspci命令识别出来的网卡型号是:
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
看来这个和8169还是有区别的!ubuntu下驱动名字是r8169确实误导了我。
近期评论