|
一、大型网站的服务器集群构建思路
(这里讲解的是高可用集群,暂不涉及科学计算集群)
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 --import
ftp://192.168.0.240/setup/centos5.1x86_64/RPM-GPG-KEY-CentOS-5
rpm -i
ftp://192.168.0.240/setup/centos ... p1-7.el5.x86_64.rpm
rpm -i
ftp://192.168.0.240/setup/centos ... 07-1.2.2.x86_64.rpm
rpm -i
ftp://192.168.0.240/setup/centos ... .1.el5.1.x86_64.rpm
rpm -i
ftp://192.168.0.240/setup/centos ... .1.el5.1.x86_64.rpm
rpm -i
ftp://192.168.0.240/setup/centos ... .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/etc/hosts/etc/sysconfig/static-routes/etc/cron.daily/ntptime/etc/sysconfig/i18n>/etc/modprobe.conf/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 |
|