Archive for 2009年9月18日


做互联网网站,最头疼的事情之一就是电信和网通的互联互不通了,为了能够让北方网通和南方电信用户都可以快速的访问网站,解决办法就是托管到双线机房。双线机房有两类,一类是通过BGP技术实现互联互通,服务器只需要一个网卡一个IP地址就可以了,由机房进行路由的智能判断,选择合适的路由访问,这样对于网站来说是很方便的,比方说上海移动的怒江机房,上海地面通的自建机房,科技网的机房,但BGP机房一般带宽都比较少,流量高一些的话可能就没有办法了。另外一种就是双线双IP的机房,带宽可能更高一些,但是路由配置极其复杂,比方说上海电信的市北机房。

因为和谐的原因,JavaEye网站服务器最近被迫从原来的移动怒江双线机房当中搬了出去,由托管商推荐到了上海市北双线机房,市北双线机房实际上是电信机房,但是从天津网通拉了2G专线过来,因此服务器需要至少两个网卡,一个网卡接电信网关,一个网卡接网通网关,来实现互联互通。如果多台服务器的话,还需要第3个网卡组建内网进行内网通讯。

对于双线双IP的服务器来说,要解决两个问题:

一、你的网站用户究竟走那个IP来访问你的服务器
二、你的网站内容究竟走那个IP返回给用户

对于第1个问题,可以使用智能DNS解析来解决,即DNS服务器判断用户所在IP地址,如果用户是电信接入,就把服务器的电信IP解析给他;如果用户是网通接入,就把服务器的网通IP解析给他。

智能DNS可以自己基于开源的DNS软件来定制,不过国内有一个很好的免费智能DNS服务器提供商:DNSPod,推荐使用DNSPod的服务。他就可以实现上述的智能DNS解析。

对于第2个问题,则需要在服务器上面配置路由规则,来决定究竟如何处理数据的返回路径问题。

1、填写静态路由表

因为服务器有两个IP,分别在不同的网段,你使用电信IP的网关做路由,那么网通的IP地址用户压根就访问不到,反之亦然。目前流行的解决办法,就是使用电信网关做默认的路由,然后自己手工填写所有网通IP地址段的路由规则。这个办法可以Google搜索到一大把,不展开了。

这种办法的缺点是添加规则太多太麻烦,而且难免挂一漏万,如果你漏了一些网段,那这些网段的用户就访问不了你的网站了。况且网段地址的分布总是在不断变化的,你还必须定期更新路由表。

2、根据用户访问进来的路径设定动态路由

就是说如果用户是通过电信IP地址访问过来的话,那么使用电信网关做路由,返回内容走电信网关;如果用户通过网通IP地址访问过来的话,那么使用网通网关做路由,返回内容走网通的网关,这样就不必那么麻烦的维护路由表了。以JavaEye网站服务器为例,具体配置方法如下:

JavaEye网站服务器电信IP:114.80.66.199,电信网关:114.80.66.1
JavaEye网站服务器网通IP:60.29.231.190,网通网关:60.29.231.1

1) 默认网关使用电信网关作为路由

在Linux上面配置默认网关,如果是RedHat,应该是在/etc/sysconfig/network文件里面添加一行:GATEWAY=114.80.66.1,如果是SuSE,应该是在/etc/sysconfig/network/routes里面添加一行:default 114.80.66.1 – – 或者可以直接使用YaST2来配置。

2)添加路由表

修改/etc/iproute2/rt_tables,添加内容:

252 tel 电信路由表
251 cnc 网通路由表

然后手工添加路由规则,在Console里面执行如下命令:

#添加原路返回路由
ip route flush table tel
ip route add default via 114.80.66.1 dev eth0 src 114.80.66.199 table tel
ip rule add from 114.80.66.199 table tel

ip route flush table cnc
ip route add default via 60.29.231.1 dev eth1 src 60.29.231.190 table cnc
ip rule add from 60.29.231.190 table cnc

即让从电信IP过来的请求按照电信路由返回,从网通IP过来的请求从网通路由返回。这样就搞定了,是不是很简单?这个办法是bobo同学提供的,感谢他。

3) 把路由规则写入启动脚本

如果服务器重启,或者网络服务重启,上述的路由规则就失效了,所以你需要把上面这段命令写入系统启动脚本和网络启动脚本

如果是RedHat,系统启动脚本是/etc/rc.d/rc.local
如果是SuSE,可以自己写一个启动脚本,链接到S99上,比方说/etc/init.d/rc.local

如果是RedHat,网络启动脚本是/etc/rc.d/init.d/network
如果是SuSE,网络启动脚本是/etc/init.d/network

(一)硬件准备

一台HP ProLiant DL160 G5服务器、一台个人电脑(windows)、一个4G闪存(fat32格式)

(二)制作引导U盘

网络上有许多制作Linux引导U盘的文章,但真正能用的少之又少,期间尝试多个办法,均以失败告终。下面将直接阐述最可行,也是最简单的方法。

下载U盘boot工具,共三个文件,已经打包,下载地址:http://www.filesavr.com/u-boot

解压syslinux-3.73.tar.gz文件,然后进入syslinux-3.73目录下的win32文件夹

syslinux.exe -m -a x: x为U盘盘符

命令完成后就已经在U盘中建立了一个可引导文件,当然,这是隐藏的。

在u盘中建立此文件syslinux.cfg(用记事本或写字板编辑,注意,先在控制面板-文件夹选项中选择显示后缀名) ,并在里面加入

default vmlinuz

append initrd=initrd.gz

再将u-boot包中的vmlinuz,initrd.gz转移到U盘中。

最后从http://cdimage.debian.org/debian-cd/5.0.3/i386/iso-cd/下载debian-503-i386-CD-1.iso 镜像并转移到U盘里。

至此,U盘引导盘制作完成。

(三)安装debian

将U盘插入,启动服务器,bios默认从U盘启动,因此在这里我无需设置。

进入字符安装界面,根据提示操作,到检测磁盘的那一步拔掉U盘,待分区完成后再插上,回头按Esc重新选择挂载ISO镜像,安装基本系统,安装grub,安装debian完成,拔掉U盘重启服务器。

在重启完成后,经过一个蓝色选择debian模式的界面,直接提示找不到root错误-root (hd1,0)。

不用慌张,接着按Esc退回debian模式选择界面,按c,这是修复grub的界面,移到root (hd1,0)上,按e编辑root,改成

root (hd0,0)

回车,最后按b启动,启动正常。

进入系统,登陆,附件,终端

su 输入root密码后就可以行使root权限

vim /boot/grub/menu.lst

拉到最下面,找到前面没有“#”前缀的

root (hd0,1)

改为

root (hd0,0)

至此安装debian完成。

(四)配置源

安装好之后,发现apt-get install任何软件都失败,查看源配置文件,问题在于只有一个基础源,并没有任何软件源。直接google:debian 源。根据自己网络先随便选择一个,然后再终端输入

apt-get install apt-spy

如果源没有问题,安装完成后即可使用apt-spy。

cp /etc/apt/sources.list /etc/apt/sources.list.bak 备份源

apt-spy -d lenny -a Asia 搜索亚洲境内最快源

扫描生成/etc/apt/sources.list.d/apt-spy.list文件,这个其实就可以作为sources.list文件用了。

cp /etc/apt/sources.list.d/apt-spy.list /etc/apt/sources.list 覆盖掉原有的sources.list文件

(五)快速搭建环境

终端输入:apt-get install lighttpd php5-cgi php5-mysql mysql-server php5-gd phpmyadmin

之后按照我这篇文章的方法配置lighttpd,地址:http://youling.wordpress.com.cn/debian-lighttpd-php-mysql.html

vsftpd按照这里的资料根据自己的需求配置,地址:http://wiki.ubuntu.org.cn/Vsftpd服务安装设置

如果需要外网访问phpmyadmin,输入如下命令建立软连接:

ln -s /usr/share/phpmyadmin/ /var/www/ root权限模式下才行

最后是ssh安装配置。

apt-get install openssh-server

配置SSH

vim /etc/ssh/sshd_config

这里有相关资料,按自己需求配置,地址:http://www.diybl.com/course/6_system/linux/Linuxjs/20090903/173704.html

至此,服务器配置完成。

(六)测试工作

使用ftp软件上传一个探针到web根目录。

访问http://127.0.0.1查看最终结果。

zend或者其他php加速器可以自己安装,很简单,这里就不再累述。

提示:如果修改某一服务的配置文件,使用 /etc/init.d/服务名 resart即可完成重启,比如:/etc/init.d/ssh resart