NetBSD 上安装和配置 Nginx+PHP+FastCGI+MySQL

NetBSD 支持 n 种硬件架构,是地球上支持最多体系的系统;OpenBSD 来自 NetBSD,自称是地球上最安全的系统;FreeBSD 和 NetBSD 一样来自原始的 4.4 BSD-lite,但是 FreeBSD 现在主要支持 i386,在 PC 体系上 FreeBSD 比 NetBSD/OpenBSD 好很多,性能也最好。这三种 BSD 各有特点,和不同的 Linux 发行版一样每个系统都有很多粉丝,当然使用 FreeBSD 的人最多。VPSee 的一台老掉牙的 IBM ThinkPad 就在跑 FreeBSD,嗯,现在这台机器还在工作呢。虽然 NetBSD 的性能在 i386 上没有 FreeBSD 那么好,但是它的稳定性是非常的赞,Benchmarking BSD and Linux 这篇测试的作者说:

Please note that NetBSD was the only BSD that never crashed or panicked on me, so it gets favourable treatment for that.

我们上周五发布了 NetBSD VPS,我们鼓励用户自己动手安装 Nginx+PHP+FastCGI+MySQL 和熟悉 NetBSD 环境,这篇文章在我们的 NetBSD VPS 上搭建:

下载 pkgsrc

The NetBSD Packages Collection (pkgsrc) 是 NetBSD 下的基于源码的软件包管理系统,不同于 Debian/Ubuntu 上的 apt-get,pkgsrc 是基于源代码的方式管理软件包的,有点像 Gentoo 里面的 emerge 系统。pkgsrc 有三个分支,HEAD、pkgsrc-yyyyQqq 和 pkgsrc-wip,前两个是 pkgsrc 项目组的正式分支。我们在这里使用 pkgsrc-yyyyQqq(季度分支),下载和解压 pkgsrc 并放到合适的目录:

# ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2010Q2/pkgsrc-2010Q2.tar.bz2
# tar jxvf pkgsrc-2010Q2.tar.bz2
# mv pkgsrc /usr/

安装 Nginx+PHP+FastCGI+MySQL

编译和安装 PHP,注意编译 PHP 的时候需要加上 fastcgi 说明,这样 PHP 编译才会把 FastCGI 部分编译进去:

# vi /etc/mk.conf
PKG_OPTIONS.php = fastcgi

# cd /usr/pkgsrc/lang/php5
# make install clean clean-depends

配置 PHP:

# /usr/pkg/etc/php.ini
cgi.fix_pathinfo=1

编译和安装 FastCGI:

# cd /usr/pkgsrc/www/spawn-fcgi/
# make install clean clean-depends

编译和安装 Nginx:

# cd /usr/pkgsrc/www/nginx
# make install clean clean-depends

配置 Nginx:

# cp /usr/pkg/share/examples/rc.d/nginx /etc/rc.d/
# vi /usr/pkg/etc/nginx/nginx.conf
location / {
            root   share/examples/nginx/html;
            index  index.html index.htm index.php;
        }

...

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/pkg/share/examples/nginx/html$f
astcgi_script_name;
            include        /usr/pkg/etc/nginx/fastcgi_params;
        }

把 Nginx 加到启动文件以便启动系统时自动启动:

# vi /etc/rc.conf 
nginx=YES

编译和安装 MySQL:

# cd /usr/pkgsrc/databases/php-mysql
# make install clean clean-depends

# cd /usr/pkgsrc/databases/mysql5-server
# make install clean clean-depends

配置 PHP 以便加载 MySQL 动态连接库:

# vi /usr/pkg/etc/php.ini
extension=mysql.so

把 MySQL 加到启动文件以便启动系统时自动启动:

# cp /usr/pkg/share/examples/rc.d/mysqld /etc/rc.d/

# vi /etc/rc.conf 
mysqld=YES

启动 FastCGI:

# /usr/pkg/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/pkg/libexec/cgi-bin/php
spawn-fcgi: child spawned successfully: PID: 18554

启动 Nginx:

# /etc/rc.d/nginx start
Starting nginx.

启动 MySQL 和设置 root 密码:

# /etc/rc.d/mysqld start

# /usr/pkg/bin/mysqladmin -u root -p password 'new-password'

测试

写一个 phpinfo() 文件放在 nginx 目录下,然后打开浏览器测试是否能正确访问 php 文件:

# vi /usr/pkg/share/examples/nginx/html/index.php


http://www.vpsee.com/index.php

NetBSD,欢迎你

经过一个多星期的测试,NetBSD 正式成为我们支持的操作系统之一,到目前为止我们的 VPS 已经支持包括 CentOS, Debian, Ubuntu, Gentoo, Arch Linux, Fedora, OpenSUSE, Slackware 在内的8种最流行的 Linux 发行版和1种 BSD 发行版。不熟悉 BSD 历史的朋友可以看看错综复杂的 Unix 家谱。对于每一种操作系统和我们制作的 Xen domU 模版,我们都做了严格的测试。前段时间我们在1台双 CPU 四核的 8GB SUN Fire V20z 服务器上测试了32个 128/256MB FreeBSD VPS 的混合,每个 VPS 上跑不同的应用和压力工具,测试结果不理想,有多个 FreeBSD VPS 无响应,但没有造成服务器主机的 crash. 目前理论和实验都显示 FreeBSD/Xen 组合还不够稳定,离应用到生产环境还有一段距离。

作为能在 Xen PV 上稳定运行的唯一 BSD 系统,NetBSD 表现的非常优秀,喜欢 Gentoo, Arch 风格的 Linux 玩家应该也会对纯 Unix 血统、干净的 BSD 系统感兴趣。VPSee 已经把 vpsee.com 的备份站点移植到了我们拉斯维加斯机房的的 NetBSD VPS 上,默认安装完 NetBSD + Nginx + MySQL + PHP(NNMP)并启动后,在没有任何优化的情况下内存消耗仅为 42MB:

netbsd vps

NetBSD 的使用方式、各个命令和命令的参数用法都和 Linux 有很大差异,比如 NetBSD 上面的工具都是 BSD 的那一套,Linux 上的很多工具都是 GNU 那套,虽然做的事情是一样的,做事方式差不多,但是这些细小的差别让人刚开始使用的时候觉得不方便。比如在 BSD 下看内存使用情况没有 free 工具:

$ sysctl -a | grep -i memory
kern.memory_protection = 1
proc.curproc.rlimit.memoryuse.soft = 121909248
proc.curproc.rlimit.memoryuse.hard = 121909248
proc.curproc.rlimit.memorylocked.soft = 40636416
proc.curproc.rlimit.memorylocked.hard = 121909248
proc.curproc.rlimit.vmemoryuse.soft = unlimited
proc.curproc.rlimit.vmemoryuse.hard = unlimited

NetBSD 上的 top 和 Linux 上的 top 在参数的解释上也有所不同。所以,我们仅推荐此系统给非常有经验并肯自己钻研的 Unix/Linux 用户。我们提供的 NetBSD 版本是 5.0.1,NetBSD 相关资料比较少,为了给大家提供方便和更快入手,我们还制作了一个 NNMP 版本,NNMP 版本是一个已经装好 Nginx/MySQL/PHP 工具包的 NetBSD 版本,用户直接把博客/网站放上去就可以用了。学习是一个实践的过程,我们还是推荐新手使用最小化的版本,然后通过看书、查资料、自己动手熟悉 NetBSD 环境。

不打扰别人

我们一直以我们拥有优秀的客户群而骄傲,遗憾的是前天我们收到数据中心消息,报告了我们网段的一位客户进行黑客活动的详细信息,这位客户大量使用 SSH 扫描、猜测密码和企图非法登录其他服务器,我们前天没有联系上这位客户暂时关闭了这位客户的 VPS. 昨天和客户沟通后客户怀疑是密码太简单被黑所致,我们重装了客户的 VPS(以防黑客事先在原 VPS 上装木马)并开通了客户的 VPS,昨天晚上再次收到来自我们的数据中心、哥伦比亚大学和美国海军等安全机构的报告,并详细记录了我们某个 VPS 扫描的开始时间、结束时间、过程、方式等。我们被迫再次关闭此客户的 VPS. 以下是美国海军安全部门发来的邮件(哥伦比亚大学、多家跨国公司网络安全部门发来的详细报告这里省略):

xenserver

我们在 FAQ 中曾经强调过我们的服务器在美国,不能违法美国法律。按照美国联邦和相关州的法律,盗取电子邮件账号、用户信息、侵犯电子隐私、破坏网络、传播盗版,侵犯版权、利用计算机进行欺诈等都是严重的违法行为。我们的客户可能还没有意识到这点,我们在这里再强调一下,很多人认为西方很民主,美国是个自由的国家,这句话没错,但是 “自由” 的意思没有理解对,西方社会指的自由是法制下的自由、是不干扰别人的自由、不是为所欲为,美国是一个法制国家,不是一个 “自由” 的国家。

举几个例子来说明西方的不 “自由”,公共场合大声说话?不行;公共场合随意抽烟?不行;乱穿马路?不行;海边游泳?不行,必须到有指示牌的海滩;钓鱼?要有执照,小鱼要放回去;钓龙虾?不能超过一定数量。下雪不扫?不行;自家院子长草不剪?不行;在自家院里砍树?不行;不是国外保护私有财产吗,想随意更改自己房子的结构?不行,要批准;在自家后院挖个游泳池?不行,要批准;凌晨吵闹?不行;随地吐痰丢东西?不行;开车超速?不行;闯红灯?不行;不等行人就抢道?不行;盗版?不行;提供盗版下载?不行;抄袭文章、博客?不行;剽窃别人作品?不行;体罚自己小孩?不行;不接送小孩?不行;带狗狗去海滩散步?要看指示牌;不带狗狗出去散步?不行。⋯⋯,你说自由不?

同时,由于我们 vpsee.com 上的客户都是中国客户,所以我们也要求客户必须遵守中国当地的法律。简单的说就是,做自己的事、不打扰别人,用 Google 的话说叫做 “不作恶”。

由于这位客户刚好使用我们 VPS 一个星期,我们将收取1/4月的服务费,退还3/4的服务费,并且立即终止服务。因为这是第一次发生在我们的 VPS 上,所以我们没有相关的条款来拒绝退款,据我们所知其他服务商对待黑客行为都是深恶痛绝、毫不留情、绝无退款的。所以我们更新了 FAQ 页面,增加了相关内容,防止下次有类似情况发生。

注:黑客原指热心于计算机技术、拥有高超编程能力、精通电脑、网络、操作系统、密码、算法的计算机专家,类似于 Ken Thompso, Linus Torvalds, Richard Stallman 的人物。现在媒体把黑客一词娱乐化、贬义化了,指那些使用各类工具对电脑和网络搞破坏的人。

vpsDC:$6.95 256MB OpenVZ VPS

vpsdc

vpsDC 是家英国 VPS 服务商。和前段时间介绍的 $5.95 512MB, $4.8 512MB 相比,这家的 VPS 是这段时间价格最正常的 VPS 了,50GB 的流量也给的很实在,没有一点企图超售的意思在里面。有些用户喜欢拿配置说事,什么16核、50GB硬盘、1TB 流量啊,还喜欢拿 unixbench 到处测 ^^,所以一些刚入道的服务商为了吸引客户也拿 500GB, 1TB 出来唬人。这家的价格和配置都给的很实在,查了一下 LowEndBox 和 WHT 发现这家后台老板 Suhali 同时还拥有我们比较熟悉的:HostGD, HighVPS, VPSWow, ConnectSwitch 等。他们的数据中心在 Chicago,服务器租用的是 Sharktech 的设备,同在 Chicago 比较有名的还有 Ubiquity Servers. 这个域名注册都3年多了,不知道什么时候被 Suhali 拿到的,网站还非常简陋,没有什么信息,依然像 one man 工作室。VPS 配置如下:

256MB RAM
512MB Burst
10GB 硬盘
50GB 流量
1个 IP
6.95美元

没有服务器配置信息。

监测 Linux 进程的实时 IO 情况

作为系统管理员和 VPS 服务商,经常会碰到服务器或者 VPS 磁盘 IO 繁忙的时候,VPSee 通常都会用一些工具来检测,其中一个常用的工具就是自己写的 iotop 脚本,可以很方便看到哪个进程在频繁 IO. 上周五收到一位网友的邮件和留言,问到这篇文章:如何查看进程 IO 读写情况?里的 WRITE 为什么会出现是 0 的情况,这是个好问题,VPSee 在这里好好解释一下。首先看看我们怎么样才能实时监测不同进程的 IO 活动状况。

block_dump

Linux 内核里提供了一个 block_dump 参数用来把 block 读写(WRITE/READ)状况 dump 到日志里,这样可以通过 dmesg 命令来查看,具体操作步骤是:

# sysctl vm.block_dump=1
or
# echo 1 > /proc/sys/vm/block_dump

然后就可以通过 dmesg 就可以观察到各个进程 IO 活动的状况了:

# dmesg -c
kjournald(542): WRITE block 222528 on dm-0
kjournald(542): WRITE block 222552 on dm-0
bash(18498): dirtied inode 5892488 (ld-linux-x86-64.so.2) on dm-0
bash(18498): dirtied inode 5892482 (ld-2.5.so) on dm-0
dmesg(18498): dirtied inode 11262038 (ld.so.cache) on dm-0
dmesg(18498): dirtied inode 5892496 (libc.so.6) on dm-0
dmesg(18498): dirtied inode 5892489 (libc-2.5.so) on dm-0

问题

一位细心的网友提到这样一个问题:为什么会有 WRITE block 0 的情况出现呢?VPSee 跟踪了一段时间,发现确实有 WRITE 0 的情况出现,比如:

# dmesg -c
...
pdflush(23123): WRITE block 0 on sdb1
pdflush(23123): WRITE block 16 on sdb1
pdflush(23123): WRITE block 104 on sdb1
pdflush(23123): WRITE block 40884480 on sdb1
...

答案

原来我们把 WRITE block 0,WRITE block 16, WRITE block 104 这里面包含的数字理解错了,这些数字不是代表写了多少 blocks,是代表写到哪个 block,为了寻找真相,VPSee 追到 Linux 2.6.18 内核代码里,在 ll_rw_blk.c 里找到了答案:

$ vi linux-2.6.18/block/ll_rw_blk.c

void submit_bio(int rw, struct bio *bio)
{
        int count = bio_sectors(bio);

        BIO_BUG_ON(!bio->bi_size);
        BIO_BUG_ON(!bio->bi_io_vec);
        bio->bi_rw |= rw;
        if (rw & WRITE)
                count_vm_events(PGPGOUT, count);
        else
                count_vm_events(PGPGIN, count);

        if (unlikely(block_dump)) {
                char b[BDEVNAME_SIZE];
                printk(KERN_DEBUG "%s(%d): %s block %Lu on %s\n",
                        current->comm, current->pid,
                        (rw & WRITE) ? "WRITE" : "READ",
                        (unsigned long long)bio->bi_sector,
                        bdevname(bio->bi_bdev,b));
        }

        generic_make_request(bio);
}

很明显从上面代码可以看出 WRITE block 0 on sdb1,这里的 0 是 bio->bi_sector,是写到哪个 sector,不是 WRITE 了多少 blocks 的意思。还有,如果 block 设备被分成多个区的话,这个 bi_sector(sector number)是从这个分区开始计数,比如 block 0 on sdb1 就是 sdb1 分区上的第0个 sector 开始。

Linux 下用 smartd 监测硬盘状况

和处理器、内存比较,硬盘是服务器上最慢的子系统、是最容易出现性能瓶颈的地方,也是最脆弱的部分。因为硬盘离处理器距离最远而且访问硬盘要涉及到一些机械操作,比如转轴、寻轨等,而机械是容易出故障的。作为 VPS 服务商和系统管理员来说,最害怕的就是硬盘出毛病,所以监测硬盘的健康状况、提前预警是件很重要的事情。我们 PC 服务器上差不多1.5年都会有硬盘坏掉,坏掉前一点征兆都没有,SUN 服务器上的情况要好得到,很多 SATA/SCSI 硬盘运行了5年都没问题,看样子品牌服务器还是贵得有理由的。VPSee 前段时间看过 Google 发表的一篇论文:Failure Trends in a Large Disk Drive Population 也证实了我们的经历,结论是所有坏掉的硬盘中只有60%可以被 S.M.A.R.T. 检测到,也就是说 S.M.A.R.T. 的测试结果只有60%是正确的,所以我们还不能完全依赖 S.M.A.R.T. 的监测结果。

目前市面上所有的硬盘都具有 S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) 特性,smartmontools 就是利用这一特性监测硬盘的软件包,包含 smartctl 和 smartd 两个程序,前者是前台命令行工具、后者是后台运行程序,smartmontools 不是 Linux 的专利,也支持 BSD, Solaris 等系统。

安装 smartmontools

在 CentOS 5.x 下安装:

# yum install kernel-utils

在 CentOS 6.x/Fedora 下安装:

# yum install smartmontools

在 Debian/Ubuntu 下安装:

# apt-get install smartmontools

使用 smartmontools

在使用 smartmontools 测试之前先检查一下硬盘是否具有 SMART 特性:

# smartctl -i /dev/sda

=== START OF INFORMATION SECTION ===
Device Model:     SEAGATE ST32500NSSUN250G 0741B58YP8
Serial Number:    5QE58YP8
Firmware Version: 3.AZK
User Capacity:    250,056,000,000 bytes
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   7
ATA Standard is:  Exact ATA specification draft version not indicated
Local Time is:    Thu Jul 22 22:39:07 2010 SAST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

如果上面 SMART support 是 Disabled 状态的话,需要开启 SMART 的支持:

# smartctl -s on /dev/sda

=== START OF ENABLE/DISABLE COMMANDS SECTION ===
SMART Enabled.

检查硬盘状况,如果下面的结果不是 PASSED 的话你需要立刻警觉起来,马上备份所有数据,硬盘随时都可能出问题(不过值得注意的是就算结果是 PASSED 并不意味着硬盘100%就安全,PASS 不能代表没问题,没 PASS 代表一定有问题):

# smartctl -H /dev/sda

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

做个快速自检:

# smartctl -t short /dev/sda

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Thu Jul 22 22:51:00 2010

Use smartctl -X to abort test.

执行上面的自检命令后等待一段时间,可以通过下面命令来看进度和结果:

# smartctl -l selftest /dev/sda

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed without error       00%     20949         -
# 2  Short offline       Completed without error       00%     20947         -

要做长时间自检的话(很耗时,建议放在凌晨时间段做):

# smartctl -t long /dev/sda

查看出错日志:

# smartctl -l error /dev/sda

=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged

配置 smartmontools

在 CentOS/Fedora 下:

# vi /etc/smartd.conf
# /etc/init.d/smartd restart

在 Debian/Ubuntu 下:

# vi /etc/default/smartmontools
# vi /etc/smartd.conf
# /etc/init.d/smartmontools restart

可以通过修改以上的 smartmontools 的配置文件来定期对硬盘做健康检查,就像给人定期体检一样,体检过了并不代表就没病(很多疾病用体检的设备都查不到),所以这也符合 Google 的硬盘报告所说的情况,所有坏掉的硬盘中只有60%可以被 S.M.A.R.T. 检测到(所有生病的人中只有60%能在体检的时候发现)。

Nixcom:$5.95 512MB OpenVZ VPS

nixcom

Nixcom 是一家加拿大 VPS 服务商,部分服务器在 Montreal,主要的服务器/数据中心在美国的 Chicago. 打开他们家的网站有点熟悉的感觉,好像以前在哪见过,看了 LowEndBox 上的评论才知道这是一款叫做 HostBlue 的付费的网站模版,由 Payton Designs 设计,被很多 hosting 服务商使用,据说要49美金呢。这款模版被作者重复卖了很多次,加上很方便和 WHMCS 集成,就很容易被买家看中。Payton Designs 还设计了很多其他的 hosting 服务商的网站,比如:FazeWire, HostaVPS, LiquidManaged, InvioHosting 等。据说 Nixcom 是2007年开始做 VPS 业务的,可是他们网站上依然什么东西都没有,连一些基本介绍都没有,唯一能八卦一下的就是他们的网站模版了。在 WHT 上这款原价19.99美元的 VPS 打折后只要5.95美元,不知道这个打折是怎么打的,让人晕倒的是他们居然在 WHT 评论里很自豪的说 “no raid on”,昏,没有 RAID?? Are you serious?! 他们的这款 VPS 配置如下:

512MB RAM
1GB Burst
30GB 硬盘
1000GB 流量
2个 IP
5.95美元

服务器硬件配置信息:

xeon 3 ghz 4gb ram & q6600 2.4 ghz 4gb ram no raid on these.

在 ArchLinux VPS 上编译内核

昨天我们有位 ArchLinux 用户遇到一个 OpenVPN 的问题,在他的 VPS 上安装和配置好 OpenVPN 后可以从自己电脑连上 VPN,但是不能用 VPN 出去(访问外部网站),VPSee 和用户一起排错发现配置 OpenVPN 时候忘了用 iptable 做 SNAT 或 MASQUERADE,进一步运行 iptables 报错,内核缺少 iptables 模块:

# iptables -t nat -A POSTROUTING -s 1.1.1.1 -j SNAT --to-source 2.2.2.2
can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

找到问题就好办了,解决的办法也很容易,下载内核代码、配置 iptable 内核选项、重新编译内核。(本文已经发给客户,我们的客户可以按照这里的步骤自己编译和替换内核,如果怕麻烦的话也可以找我们要已经编译好的内核。我们争取对我们的客户遇到的问题都能写出文章和流程来帮助理解和解决,这样不但我们自己客户受益,对其他 VPS 用户也有所帮助。)

安装必要工具

编译内核需要一些工具,比如 gcc 编译器什么的:

# pacman -S make gcc patch xmlto docbook-xsl

有一点要注意的就是不是每个内核都可以在 Xen 上运行的,因为是半虚拟化所以必须使用针对 Xen 的 Linux 内核版本,还好,ArchLinux 已经为我们准备好了官方的 Xen 版本内核:

# wget http://aur.archlinux.org/packages/kernel26-xen/kernel26-xen.tar.gz
# tar -xf kernel26-xen.tar.gz
# cd kernel26-xen

修改 kernel26-xen/PKGBUILD 文件,去掉下面这行的注释:

# vi PKGBUILD
pkgname=('kernel26-xen' 'kernel26-xen-headers') # Build kernel with a different name

编译和安装内核

如果打开 kernel26-xen/config 文件就会发现内核已经是为 Xen 配置好的,并且 iptable 相关选项已经是 m 状态(以内核模块的方式运行),如果不放心的话可以再次检查 CONFIG_IP_NF_IPTABLES=m 和 CONFIG_NF_NAT=m 等选项看看是否已经是 m 或 y 状态。在 ArchLinux 下编译和安装内核:

# makepkg --asroot
...
==> Creating package...
  -> Generating .PKGINFO file...
  -> Compressing package...
==> Finished making: kernel26-xen 2.6.34.1-1 (Mon Jul 19 15:15:05 EDT 2010)

# pacman -U kernel26-xen-2.6.34.1-1-i686.pkg.tar.xz
# pacman -U kernel26-xen-headers-2.6.34.1-1-i686.pkg.tar.xz

配置 grub 以启动新内核:

# vi /boot/grub/menu.lst
...
timeout 5
default 0

title Xen for ArchLinux (VPSee)
root (hd0,0)
kernel /boot/vmlinuz26-xen root=/dev/xvda1 ro console=/dev/xvc0
initrd /boot/kernel26-xen.img
...

测试

重启系统后检查和测试新装的 Linux 内核是否有了 iptables 内核模块并安装 iptables 用户端工具:

# uname -r
2.6.34-xen

# modprobe ip_tables

# lsmod
Module                  Size  Used by
ip_tables               9099  0 
x_tables               10364  1 ip_tables
evdev                   6810  0 
pcspkr                  1383  0 
rtc_core               11631  0 
rtc_lib                 1454  1 rtc_core
ext3                  108916  1 
jbd                    35426  1 ext3
mbcache                 4250  1 ext3

# pacman -Syy iptables

Linux 多核下绑定进程到不同 CPU(CPU Affinity)

上个星期介绍了在 Linux 多核下如何绑定硬件中断到不同 CPU,其实也可以用类似的做法把进程手动分配到特定的 CPU 上,平时在 Linux 上运行的各种进程都是由 Linux 内核统一分配和管理的,由进程调度算法来决定哪个进程可以开始使用 CPU、哪个进程需要睡眠或等待、哪个进程运行在哪个 CPU 上等。如果你对操作系统的内核和进程调度程序感兴趣的话,不妨看看那本经典的 Operating Systems Design and Implementation(Linus Torvalds 就是看了这本书受到启发写出了 Linux),从简单的 Minix 入手,hack 内核是件很有意思的事情,VPSee 以前修改过 Minix 内核的进程调度,学到了内核方面的很多东西。另外推荐一本课外读物:Just for Fun,Linus Torvalds 写的一本自传。

Linux 给我们提供了方便的工具用来手动分配进程到不同的 CPU 上(CPU Affinity),这样我们可以按照服务器和应用的特性来安排特定的进程到特定的 CPU 上,比如 Oracle 要消耗大量 CPU 和 I/O 资源,如果我们能分配 Oracle 进程到某个或多个 CPU 上并由这些 CPU 专门处理 Oracle 的话会毫无疑问的提高应用程序的响应和性能。还有一些特殊情况是必须绑定应用程序到某个 CPU 上的,比如某个软件的授权是单 CPU 的,如果想运行在多 CPU 机器上的话就必须限制这个软件到某一个 CPU 上。

安装 schedutils

在 CentOS/Fedora 下安装 schedutils:

# yum install schedutils

在 Debian/Ubuntu 下安装 schedutils:

# apt-get install schedutils

如果正在使用 CentOS/Fedora/Debian/Ubuntu 的最新版本的话,schedutils/util-linux 这个软件包可能已经装上了。

计算 CPU Affinity 和计算 SMP IRQ Affinity 差不多:

0x00000001    (CPU0)
0x00000002    (CPU1)
0x00000003    (CPU0+CPU1)
0x00000004    (CPU2)
...

使用 schedutils

如果想设置进程号(PID)为 12212 的进程到 CPU0 上的话:

# taskset 0x00000001 -p 12212

GigeVPS:$9.95 512MB OpenVZ VPS

gigevps

GigeVPS 的老板 Jacob Wall 是一个高中生,他们刚刚收购了 HostLatch,HostLatch 前段时间连续打折很疯狂,现在看来他们的商业模式好像不是卖 VPS,而是靠低价吸引客户然后卖客户?这是不是传说中的 “人口贩子”?据说 HostLatch 老板 Adam 卖 HostLatch 是为了能有时间照顾他的另一个 VPS 生意:VPSLatch. 从 WHT 上来看,GigeVPS 的那个高中生老板在 hosting 行业混了很长时间了,他还有另一个 hosting 业务:GrandiosHost(现在被重定向到另一网站)。高中生做 hosting 不用太惊讶,美国学生学业不多,不用像我们那样面临高考,多数人都会在假期选择打工或做点什么,估计 WHT 上刚出炉的一些低价 VPS 服务商一半都是高中生创建的,是的,hosting 门槛低,不用大学计算机系科班出身高中生就可以做,当然要做好又是另外一回事情了,不过做不好也没关系可以学习 HostLatch 卖客户:)GigeVPS 的服务器租用的是 HostDime 的设备,数据中心在 Orlando, FL,他们的这款 VPS 正在打折中,使用这个连接购买只要6.95美元每月,他们使用 SolusVM 控制面板。VPS 配置如下:

Bronze Silver
384MB RAM 512MB RAM
20GB 硬盘 30GB 硬盘
200GB 流量 300GB 流量
1 IP 1 IP
5.95美元 9.95美元

服务器硬件配置信息:

Intel Xeon X3440 @ 2.53 GHz, 8 GB RAM, 500 GB (x4) hard drives in RAID10 configuration, 100mbit