网站服务器集群构建之:网站需求分析篇

作者:Amteam.org
2008/9/18 23:02:00
本文关键字: 存储 磁带 VTL

本文章主要讲解大型网站构建,全部采用开源软件和开源的操作系统,构架采用 LAMP (Linux+Apache+Mysql+Php)模式实现。

大型网站集群构建之: 需求分析篇
大型网站集群构建之:DNS配置篇
大型网站集群构建之:共享session讨论篇
大型网站集群构建之:负载均衡篇

一、大型网站的服务器集群构建思路

(这里讲解的是高可用集群,暂不涉及科学计算集群)

1、由于这次介绍的重点是大型网站构架,因为内容太多,所以在这里我要把主要部分划分成几个模块来作介绍,可能不适合你的实际情况,但希望能起到抛砖引玉的作用。

2、所谓大型网站主要的特点是访问量大,既然是海量访问,那么带宽就一定要大,而且在中国的网络环境中单单靠一家也难保访问的快速、稳定,所以我们这里选择三家网络运营商,也许你的环境更复杂,需要的更多,我们这里就暂时以三家为例,我们现在分别使用,网通,电信,其他线路,3条线路。为了能让访问达到最佳效果,这里使用linux-bind 中的view技术+iptables+iproute2来解决,这就是我要介绍的第一个模块,解决线路问题的模块,当然如果你很有钱,可以去购买F5的 3DNS和LINK-CONTROL.

3、web集群,这个相对简单一点,主要分两步解决这个问题,第一提高单台服务器的吞吐能力,第二使用多台服务器共同为一个需求服务,这里采用apache+lvs+rsync解决,当然有钱购买硬件也可以轻松实现这个功能,例如F5的BIGIP+SAN,这就是我说的第二个模块,web服务器模块。

4、数据库集群,这个是比较头疼的一个问题,我们先分析一下,数据库的基本功能有4个,分别是增、删、查、改、对这四个功能在分一下类,其中增、删、改,是写操作,查是读操作,首先你要确定的是你要做的数据库集群是那个需求比较多,这里我所做的是读非常多的数据库,那么写非常多的数据库将在这个帖子后面继续讨论,这里就需要程序的开发人员区分不同操作来访问不同的机器来完成。这里使用mysql+replication+lvs来解决查询大的问题,这就是第3个模块。

5、为了解决以上问题中出现的单点故障给网络带来的问题,这里使用ucarp和heartbeat来解决以上所有单点故障的问题。本文中介绍的很多软件功能上有很多重复,实际操作中你可能仅仅需要使用其中的几个或部分功能,这里尽可能的多使用只是为了让大家方便对比,并根据自己的喜好选择软件。

6、安装,这么大量的流量必须有大量的机器来保证,如何快速准确的安装好每一台机器。

7、监控维护,这里讨论如何监控维护一个集群。

8、这篇文章是我个人的学习笔记,本系列中的全部代码均来自实际生产运行的服务器,完全实地配置运行,并非实验脚本。


二、集群组织的系统安装过程

1、服务器系统采用CentOS5.1_X86_64,之所以采用64位系统是因为,在32为系统中内存大于3.2G的时候要使用内核的PAE模式,这样在大内存的时候就需要内核经常变动地址位来保证内存的访问与使用,这样对服务器的性能肯定会有影响,所以采用64为系统。
2、安装最好采用kickstart,保证系统安装的一致性有利于维护和排错。

3、创建安装服务器。

第一步,建立kickstart安装文件:可以用linux自带的system-config-kickstart来创建也可以手工编辑,这里给出我的kickstart文件。

ks.cfg
#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --disabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang zh_CN
# Installation logging level
logging --level=info
# Use network installation
url --url=ftp://192.168.0.240/setup/centos5.1x86_64
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on --hostname=web.800hr.com
# Reboot after installation
reboot
#Root password
rootpw --iscrypted $1$VVFNki27$xxgyze1ry.iNwEURMjA6F.
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai
# Install OS instead of upgrade
install
# Disk partitioning information
part /boot --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=256
part / --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=10240
part /usr --asprimary --bytes-per-inode=4096 --fstype="ext3" --size=20480
part /tmp --bytes-per-inode=4096 --fstype="ext3" --size=4096
part /var --bytes-per-inode=4096 --fstype="ext3" --grow --size=1
%pre

%post
#!/bin/sh
i386file="
alsa-lib-1.0.14-1.rc4.el5.i386
apr-1.2.7-11.i386
apr-util-1.2.7-6.i386
aspell-0.60.3-7.1.i386
audiofile-0.2.6-5.i386
audit-libs-1.5.5-7.el5.i386
beecrypt-4.1.2-10.1.1.i386
boost-1.33.1-10.el5.i386
boost-devel-1.33.1-10.el5.i386
coolkey-1.1.0-5.el5.i386
coolkey-devel-1.1.0-5.el5.i386
cracklib-2.8.9-3.3.i386
cryptsetup-luks-1.0.3-2.2.el5.i386
curl-7.15.5-2.el5.i386
curl-devel-7.15.5-2.el5.i386
cyrus-sasl-devel-2.1.22-4.i386
cyrus-sasl-lib-2.1.22-4.i386
cyrus-sasl-plain-2.1.22-4.i386
db4-4.3.29-9.fc6.i386
db4-devel-4.3.29-9.fc6.i386
dbus-1.0.0-6.el5.i386
dbus-devel-1.0.0-6.el5.i386
device-mapper-1.02.20-1.el5.i386
e2fsprogs-libs-1.39-10.el5.i386
elfutils-libelf-0.125-3.el5.i386
esound-0.2.36-3.i386
expat-1.95.8-8.2.1.i386
expat-devel-1.95.8-8.2.1.i386
fontconfig-2.4.1-6.el5.i386
freetype-2.2.1-19.el5.i386
freetype-devel-2.2.1-19.el5.i386
gd-2.0.33-9.3.fc6.i386
gdbm-1.8.0-26.2.1.i386
gdbm-devel-1.8.0-26.2.1.i386
gd-devel-2.0.33-9.3.fc6.i386
gettext-0.14.6-4.el5.i386
gmp-4.1.4-10.el5.i386
gmp-devel-4.1.4-10.el5.i386
gpm-1.20.1-74.1.i386
gpm-devel-1.20.1-74.1.i386
hesiod-3.1.0-8.i386
hesiod-devel-3.1.0-8.i386
krb5-devel-1.6.1-17.el5.i386
krb5-libs-1.6.1-17.el5.i386
kudzu-devel-1.2.57.1.15-1.el5.centos.i386
lcms-1.15-1.2.2.i386
libacl-2.2.39-2.1.el5.i386
libacl-devel-2.2.39-2.1.el5.i386
libaio-0.3.106-3.2.i386
libattr-2.4.32-1.1.i386
libattr-devel-2.4.32-1.1.i386
libcap-1.10-26.i386
libcap-devel-1.10-26.i386
libdrm-2.0.2-1.1.i386
libdrm-devel-2.0.2-1.1.i386
libfontenc-1.0.2-2.2.el5.i386
libgcrypt-1.2.3-1.i386
libgpg-error-1.4-2.i386
libICE-1.0.1-2.1.i386
libICE-devel-1.0.1-2.1.i386
libicu-3.6-5.11.i386
libidn-0.6.5-1.1.i386
libjpeg-6b-37.i386
libjpeg-devel-6b-37.i386
libmng-1.0.9-5.1.i386
libmng-devel-1.0.9-5.1.i386
libogg-1.1.3-3.el5.i386
libogg-devel-1.1.3-3.el5.i386
libpng-1.2.10-7.0.2.i386
libpng-devel-1.2.10-7.0.2.i386
libselinux-1.33.4-4.el5.i386
libselinux-devel-1.33.4-4.el5.i386
libsepol-1.15.2-1.el5.i386
libSM-1.0.1-3.1.i386
libSM-devel-1.0.1-3.1.i386
libtermcap-2.0.8-46.1.i386
libtermcap-devel-2.0.8-46.1.i386
libtiff-3.8.2-7.el5.i386
libtiff-devel-3.8.2-7.el5.i386
libuser-0.54.7-2.el5.2.i386
libuser-devel-0.54.7-2.el5.2.i386
libutempter-1.1.4-3.fc6.i386
libvorbis-1.1.2-3.el5.0.i386
libvorbis-devel-1.1.2-3.el5.0.i386
libX11-1.0.3-8.0.1.el5.i386
libX11-devel-1.0.3-8.0.1.el5.i386
libXau-1.0.1-3.1.i386
libXau-devel-1.0.1-3.1.i386
libXaw-1.0.2-8.1.i386
libXaw-devel-1.0.2-8.1.i386
libXcomposite-0.3-5.1.i386
libXcomposite-devel-0.3-5.1.i386
libXcursor-1.1.7-1.1.i386
libXcursor-devel-1.1.7-1.1.i386
libXdamage-1.0.3-2.1.i386
libXdamage-devel-1.0.3-2.1.i386
libXdmcp-1.0.1-2.1.i386
libXdmcp-devel-1.0.1-2.1.i386
libXevie-1.0.1-3.1.i386
libXevie-devel-1.0.1-3.1.i386
libXext-1.0.1-2.1.i386
libXext-devel-1.0.1-2.1.i386
libXfixes-4.0.1-2.1.i386
libXfixes-devel-4.0.1-2.1.i386
libXfont-1.2.2-1.0.2.el5.i386
libXfontcache-1.0.2-3.1.i386
libXfontcache-devel-1.0.2-3.1.i386
libXfont-devel-1.2.2-1.0.2.el5.i386
libXft-2.1.10-1.1.i386
libXft-devel-2.1.10-1.1.i386
libXi-1.0.1-3.1.i386
libxml2-2.6.26-2.1.2.i386
libxml2-devel-2.6.26-2.1.2.i386
libXmu-1.0.2-5.i386
libXmu-devel-1.0.2-5.i386
libXpm-3.5.5-3.i386
libXrandr-1.1.1-3.1.i386
libXrandr-devel-1.1.1-3.1.i386
libXrender-0.9.1-3.1.i386
libXrender-devel-0.9.1-3.1.i386
libXres-1.0.1-3.1.i386
libXres-devel-1.0.1-3.1.i386
libXScrnSaver-1.1.0-3.1.i386
libXScrnSaver-devel-1.1.0-3.1.i386
libxslt-1.1.17-2.i386
libXt-1.0.2-3.1.fc6.i386
libXt-devel-1.0.2-3.1.fc6.i386
libXTrap-1.0.0-3.1.i386
libXTrap-devel-1.0.0-3.1.i386
libXtst-1.0.1-3.1.i386
libXtst-devel-1.0.1-3.1.i386
libXv-1.0.1-4.1.i386
libXvMC-1.0.2-2.1.i386
libXvMC-devel-1.0.2-2.1.i386
libXxf86dga-1.0.1-3.1.i386
libXxf86dga-devel-1.0.1-3.1.i386
libXxf86misc-1.0.1-3.1.i386
libXxf86misc-devel-1.0.1-3.1.i386
libXxf86vm-1.0.1-3.1.i386
libXxf86vm-devel-1.0.1-3.1.i386
lockdev-1.0.1-10.i386
lockdev-devel-1.0.1-10.i386
mesa-libGL-6.5.1-7.5.el5.i386
mesa-libGL-devel-6.5.1-7.5.el5.i386
mkinitrd-5.1.19.6-19.i386
ncurses-5.5-24.20060715.i386
ncurses-devel-5.5-24.20060715.i386
neon-0.25.5-5.1.i386
netpbm-10.35-6.fc6.i386
netpbm-devel-10.35-6.fc6.i386
net-snmp-libs-5.3.1-19.el5.i386
newt-0.52.2-9.i386
newt-devel-0.52.2-9.i386
nspr-4.6.5-3.el5.i386
nss-3.11.7-1.3.el5.centos.i386
nss_db-2.2-35.1.i386
nss_ldap-253-5.el5.i386
numactl-0.9.8-2.el5.i386
openldap-2.3.27-8.i386
openldap-devel-2.3.27-8.i386
openssl-0.9.8b-8.3.el5_0.2.i686
openssl-devel-0.9.8b-8.3.el5_0.2.i386
pam-0.99.6.2-3.26.el5.i386
pam_ccreds-3-5.i386
pam-devel-0.99.6.2-3.26.el5.i386
pam_krb5-2.2.14-1.i386
pam_passwdqc-1.0.2-1.2.2.i386
pam_pkcs11-0.5.3-23.i386
pam_smb-1.1.7-7.2.1.i386
parted-1.8.1-12.el5.i386
pciutils-devel-2.2.3-4.i386
pcsc-lite-devel-1.3.1-7.i386
pcsc-lite-libs-1.3.1-7.i386
popt-1.10.2-47.el5.i386
postgresql-libs-8.1.9-1.el5.i386
python-devel-2.4.3-19.el5.i386
readline-5.1-1.1.i386
readline-devel-5.1-1.1.i386
rpm-devel-4.4.2-47.el5.i386
rpm-libs-4.4.2-47.el5.i386
SDL-1.2.10-8.el5.i386
SDL-devel-1.2.10-8.el5.i386
slang-2.0.6-4.el5.i386
slang-devel-2.0.6-4.el5.i386
sqlite-3.3.6-2.i386
subversion-1.4.2-2.el5.i386
tcp_wrappers-7.6-40.4.el5.i386
valgrind-3.2.1-6.el5.i386
Xaw3d-1.5E-10.1.i386
Xaw3d-devel-1.5E-10.1.i386
xdelta-1.1.3-20.i386
xmlsec1-1.2.9-8.1.i386
xmlsec1-devel-1.2.9-8.1.i386
xorg-x11-xtrans-devel-1.0.1-1.1.fc6.i386"
service1="
acpid
anacron
arptables_jf
atd
auditd
autofs
cpuspeed
crond
gpm
kudzu
haldaemon
iptables
irqbalance
messagebus
microcode_ctl
netfs
network
readahead_early
readahead_later
restorecond
sshd
syslog
sysstat
xinetd"
service2="
amd
arpwatch
avahi-daemon
avahi-dnsconfd
conman
dhcdbd
ip6tables
ipmi
irda
iscsi
iscsid
kdump
lm_sensors
mcstrans
mdmonitor
mdmpd
named
netplugd
NetworkManager
NetworkManagerDispatcher
nfs
nfslock
nscd
ntpd
oddjobd
pcscd
portmap
postfix
psacct
rdisc
rpcgssd
rpcidmapd
rpcsvcgssd
saslauthd
smartd
smb
snmpd
snmptrapd
vsftpd
winbind
wpa_supplicant
xfs
ypbind
yum-updatesd"
rpm --importftp://192.168.0.240/setup/centos5.1x86_64/RPM-GPG-KEY-CentOS-5
rpm -iftp://192.168.0.240/setup/centos5.1x86_64/CentOS/ntp-4.2.2p1-7.el5.x86_64.rpm
rpm -iftp://192.168.0.240/setup/centos5.1x86_64/CentOS/dialog-1.0.20051107-1.2.2.x86_64.rpm
rpm -iftp://192.168.0.240/setup/centos5.1x86_64/CentOS/giflib-4.1.3-7.1.el5.1.x86_64.rpm
rpm -iftp://192.168.0.240/setup/centos5.1x86_64/CentOS/giflib-devel-4.1.3-7.1.el5.1.x86_64.rpm
rpm -iftp://192.168.0.240/setup/centos5.1x86_64/CentOS/giflib-utils-4.1.3-7.1.el5.1.x86_64.rpm
for I in $i386file
do
rpm -e --nodeps $I
done
for I in $service1
do
chkconfig --level 3 $I on
done
for I in $service2
do
chkconfig --level 3 $I off
done
:>/etc/issue.net
:>/etc/issue
ntpdate 192.168.0.209 && clock -w
cat >/etc/sysconfig/network< NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=web.800hr.com
EOF
cat >/etc/hosts< # Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost web web.800hr.com
EOF
cat >/etc/sysconfig/static-routes< any net 192.168.254.0 netmask 255.255.255.0 gw 192.168.0.253
EOF
cat >/etc/cron.daily/ntptime< #!/bin/sh

PATH=\$PATH:/sbin:/usr/sbin

ntpdate 192.168.0.209 && clock -w
EOF
chmod 755 /etc/cron.daily/ntptime
cat >/etc/sysconfig/i18n< LANG="zh_CN"
SYSFONT="latarcyrheb-sun16"
EOF
cat >>/etc/modprobe.conf< alias net-pf-10 off
alias ipv6 off
EOF
cat >/etc/rc.d/my-shell.sh< #!/bin/sh

export PATH=\$PATH
INITTY=/dev/tty[1-8]

for tty in \$INITTY; do
setleds -L -D +num <\$tty
done
EOF
echo '/etc/rc.d/my-shell.sh' >>/etc/rc.d/rc.local
chmod 755 /etc/rc.d/my-shell.sh

%packages
@core
kernel
system-config-securitylevel-tui
@base
@dialup
@system-tools
@text-internet
@editors
@ftp-server
@smb-server
@dns-server
@mail-server
@legacy-network-server
@legacy-software-support
@development-tools
@development-libs
@legacy-software-development
@x-software-development
@chinese-support
aide
-bluez-utils
bridge-utils
convmv
keyutils
keyutils-libs
unifdef
-firstboot-tui
-redhat-lsb
-cups
-ibmasm
iscsi-initiator-utils
kexec-tools
-sendmail
-logwatch
-mailx
star
x86info
-wireless-tools
nasm
-isdn4k-utils
statserial
-rusers
-rwho
telnet-server
-cyrus-sasl
-dovecot
postfix
-sendmail
-sendmail-cf
-spamassassin
am-utils
arptables_jf
arpwatch
audit
avahi-tools
-bluez-hcidump
-bluez-gnome
gnutls-utils
iptraf
lslk
lsscsi
net-snmp-utils
nmap-frontend
sysstat
uucp
-cadaver
-fetchmail
lynx
-slrn
接下来我们创建一个用于安装的数据源,我们下载CentOS5.1 的DVD文件。
mount -t iso9660 -r -o loop CentOS5.1xxxx.iso /mnt/cdrom
cp -a /mnt/cdrom /var/ftp/setup

这样只要在配置一个ftp或http、nfs之类的服务,让这能远程访问就可以了。然后配置一个apache,默认安装就可以,拷贝我们刚才创建的ks.cfg文件到他的htdocs下面。数据源这里就是用ftp吧,不会配置没关系,放到默认的路径下就可以了 /var/ftp
现在我们应该可以通过光盘引导,然后输入命令来使用网络自动安装了。

linux ks=http://server_ip/ks.cfg
下一步是添加安装服务器对pxe的支持。
1、创建dhcp服务器,并测试可以分配ip地址。
2、dhcpd.conf配置文件中几个关键部分说明如下:host q10{…}定义了笔记本Q10网卡的MAC地址与IP地址的对应关系,表明DHCP Server为Q10分配一个固定的IP:192.168.0.22;filename ""指定bootstrap的文件名;netx-server指定TFTP Server的地址。其它的配置请读者参考DHCP Server的手册。
dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.252.0 {

# --- default gateway
option routers 192.168.0.253;
option subnet-mask 255.255.252.0;

option nis-domain "800hr.co";
option domain-name "800hr.co";
option domain-name-servers 192.168.0.160;

# option time-offset -18000; # Eastern Standard Time
option ntp-servers 192.168.0.209;

range dynamic-bootp 192.168.1.250 192.168.3.254;
default-lease-time 21600;
max-lease-time 43200;
filename "/setup/pxelinux.0";
next-server 192.168.0.240;

} #END

创建tftp服务器。添加可引导内核。
1、在启动tftpd的时候要使用-s 指定一个虚拟的根目录。
tftp主要修改两处就可以,这里就不给出配置文件了。
/etc/xinetd.d/tftpd 中的
server_args = -u username -s /tftpboot
disable = no

2、拷贝光盘上pxeboot下面的文件到所刚才所指定的虚拟根目录里面去。
3、拷贝/usr/lib/syslinux/pxelinux.0 pexlinux.0到虚拟根目录下。
4、配置引导文件 在虚拟根目录的 pxelinux.cfg/default文件。
default
default linux ks=http://192.168.0.240/ks.cfg
prompt 1
timeout 30
label linux
kernel vmlinuz
append initrd=initrd.img

启动tftp,dhcp,httpd,ftp服务,这会你已经可以按F12直接安装系统了。怎么样现在估计你应该1小时安装50台机器的系统应该没什么问题了,现在系统已经安装完成了,而且已经关闭了不必要的服务,剩下的就是根据需要安装相应的软件并配置服务了。
这里说明一个技巧,在这里你的default配置的是安装的,等你的集群装好了,那天不小心又按到了F12咋办,那不是很麻烦吗,你可以把default文件的第一行改成
default linux rescue ks=http://192.168.0.240/ks.cfg
这样以后就不会重新安装了,而会进入修复模式,看看维护是不是也很方便。

【相关文章】

【责任编辑: 布丁TEL:(010)68476606】


责编:
vsharing 微信扫一扫实时了解行业动态
portalart 微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
最新专题
IT系统一体化时代来了

2009年Oracle 用Exadata服务器告诉企业,数据中心的IT服务一体化解决方案才是大势所趋,而当前企业对大数据处理的..

高性能计算——企业未来发展的必备..

“天河二号”问鼎最新全球超级计算机500强,更新的Linpack值让世界认识到了“中国速度”。但超算不能只停留于追求..

    畅享
    首页
    返回
    顶部
    ×
    畅享IT
      信息化规划
      IT总包
      供应商选型
      IT监理
      开发维护外包
      评估维权
    客服电话
    400-698-9918
    Baidu
    map