.
..
...
那好吧,我就来一篇重量级的..这篇就叫做
《手把手让你实现开源企业级web高并发解决方案》
(lvs+heartbeat+varnish+nginx+eAccelerator
+memcached)
本来想起个比较风趣点的标题,可想来思去,还是走常规路线,做一系列的手把手吧。
这样一来,便于我的老朋友们识别,也让我对这篇文章的粒度把我有个定位。
本篇博文主要介绍利用开源的解决方案,来为企业搭建web高并发服务器架构花了一个多小时,画了张图片,希望能先帮你理解整个架构,之后我在一一介绍.linux的大型架构其实是一点点小架构拼接起来的,笔者从各个应用开始配置,最后在完全整合起来,以实现效果。
- # Director配置
- ifconfig eth0 172.16.100.10/16
- ifconfig eth0:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
- route add -host 172.16.100.1 dev eth0:0
- echo 1 > /proc/sys/net/ipv4/ip_forward
- # varnish服务器修改内核参数来禁止响应对VIP的ARP广播请求
- echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
- echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
- echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
- echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
- # 配置VIP
- ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255 up
- # 凡是到172.16.100.1主机的一律使用lo:0响应
- route add -host 172.16.100.1 dev lo:0
- # 在Director上配置Ipvs,笔者虚拟机有限,只演示单台配置
- ipvsadm -A -t 172.16.100.1:80 -s wlc
- ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11 -g -w 2
- ipvsadm -Ln
- vim /etc/hosts
- 10.10.10.1 node1.heartbeat.com node1
- 10.10.10.2 node2.heartbeat.com node2
- #用于实现两台director节点间域名解析,此操作node1、node2相同
- vim /etc/sysconfig/network
- #设置主机名
- hostname node1.heartbeat.com
- #修改主机名使之立即生效,node2也同样修改为node2.heartbeat.com
- ssh-keygen -t rsa
- #生成密钥
- ssh-copy-id -i .ssh/id_rsa.pub root@node2.heartbeat.com
- #将公钥复制给node2
- ssh node2 -- ifconfig
- #执行命令测试,此时应该显示node2的ip信息
- yum localinstall -y --nogpgcheck ./*
- #安装此目录中的所有rpm包
- cd /usr/share/doc/heartbeat-2.1.4
- cp authkeys /etc/ha.d/
- cp haresources /etc/ha.d/
- cp ha.cf /etc/ha.d/
- #拷贝heartbeat所需配置文件到指定目录下
- vim /etc/ha.d/ha.cf
- bcast eth1
- #定义心跳信息从那一块网卡传输
- node node1.heartbeat.com
- node node2.heartbeat.com
- #添加这两行,用于指明心跳信号传输范围
- vim /etc/ha.d/authkeys
- auth 2
- 2 sha1 [键入随机数]
- chmod 400 authkeys
- #保存退出并修改权限400
- vim /etc/ha.d/haresource
- node1.heartbeat.com 172.16.100.1/24/eth0/172.16.0.255 ldirectord::ldirectord.cf httpd
- #末行添加主节点域名,vip资源,广播地址,ldirectord资源,以及用户提供显示错误页面的httpd资源
- /usr/lib/heartbeat/ha_propagate
- #脚本用来同步ha.cf和authkeys文件到node2
- scp haresources node2:/etc/ha.d/
- #复制haresource到nod2
- cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ldirectord.cf
- #复制ldirector的配置文件
- checktimeout=5
- #当DR收不到realserver的回应,设定几秒后判定realserver当机或挂掉了,预设5秒。
- checkinterval=3
- #查询间隔,每个几秒侦测一次realserver
- autoreload=yes
- #配置文件发生改变是否自动重读
- quiescent=yes
- #静态链接,yes:表示侦测realserver宕机,将其权值至零(如果开启了persistent参数不要用yes);no:表示侦测到宕机realserver,随即将其对应条目从ipvsadm中删除。
- virtual=172.16.100.1:80
- real=172.16.100.11:80 gate 4
- fallback=127.0.0.1:80 gate #realserver全部失败,vip指向本机80端口。
- service=http
- request="test.html" #用于健康检测的url,realserver的相对路径为var/www/html目录
- receive="ok" #用于健康检测的url包含的关键字
- scheduler=wlc
- #persistent=600
- #持久链接:表示600s之内同意ip将访问同一台realserver
- protocol=tcp
- checktype=negotiate
- #检查类型:negotiate,表示DR发送请求,realserver恢复特定字符串才表示服务正常;connect,表示DR能够连线realserver即正常。
- checkport=80
- service heartbeat start
- ssh node2 -- 'service heartbeat start'
- #启动两节点heartbeat服务
|
- tar zxvf libiconv-1.13.1.tar.gz
- cd libiconv-1.13.1/
- ./configure --prefix=/usr/local
- make
- make install
- cd ../
- tar zxvf libmcrypt-2.5.8.tar.gz
- cd libmcrypt-2.5.8/
- ./configure
- make
- make install
- /sbin/ldconfig
- cd libltdl/
- ./configure --enable-ltdl-install
- make
- make install
- cd ../../
- tar zxvf mhash-0.9.9.9.tar.gz
- cd mhash-0.9.9.9/
- ./configure
- make
- make install
- cd ../
- ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
- ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
- ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
- ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
- ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
- ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
- ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
- ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
- ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
- ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
- tar zxvf mcrypt-2.6.8.tar.gz
- cd mcrypt-2.6.8/
- /sbin/ldconfig
- ./configure
- make
- make install
- cd ../
cd php-5.3.6
./configure --prefix=/usr/local/php-fcgi --enable-fpm --with-config-file-path=/usr/local/php-fcgi/etc --enable-zend-multibyte --with-libxml-dir=/usr/local/libxml2 --with-gd --with-jpeg-dir --with-png-dir --with-bz2 --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-curl --with-mhash --with-openssl --enable-bcmath --with-mcrypt=/usr/local/libmcrypt --enable-sysvsem --enable-inline-optimization --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-debug --disable-ipv6
make
make install
cp php.ini-production /usr/local/php-fcgi/etc/php.ini
mkdir /usr/local/php-fcgi/ext