開源企業(yè)級web高并發(fā)解決方案
開源企業(yè)級web 高并發(fā)解決方案主要介紹利用開源的解決方案,來為企業(yè)搭建web 高并發(fā)服務(wù)器架構(gòu)花了一個多小時,畫了張圖片,希望能先幫你理解整個架構(gòu),之后我在一一介紹.linux 的大型架構(gòu)其實是一點
開源企業(yè)級web 高并發(fā)解決方案
主要介紹利用開源的解決方案,來為企業(yè)搭建web 高并發(fā)服務(wù)器架構(gòu)花了一個多小時,畫了張圖片,希望能先幫你理解整個架構(gòu),之后我在一一介紹.linux 的大型架構(gòu)其實是一點點小架構(gòu)拼接起來的,筆者從各個應(yīng)用開始配置,最后在完全整合起來,以實現(xiàn)效果。

筆者所使用的環(huán)境為RHEL5.4 內(nèi)核版本2.6.18 實現(xiàn)過程在虛擬機中,所用到的安裝包為DVD 光盤自帶rpm 包
裝過 Development Libraries Development Tools 包組
筆者所使用的環(huán)境為RHEL5.4 內(nèi)核版本2.6.18 實現(xiàn)過程在虛擬機中,所用到的安裝包為DVD 光盤自帶rpm 包
裝過 Development Libraries Development Tools 包組
筆者虛擬機有限,只演示單邊varnish 配置
一、配置前端LVS 負載均衡
筆者選用LVS 的DR 模型來實現(xiàn)集群架構(gòu),如果對DR 模型不太了了解的朋友建議先去看看相關(guān)資料。
本模型實例圖為:
,
現(xiàn)在director

上安裝ipvsadm ,筆者yum 配置指向有集群源所以直接用yum 安裝。 yum install ipvsadm
下面是Director 配置:
DIP 配置在接口上 172.16.100.10
VIP 配置在接口別名上:172.16.100.1
varnish 服務(wù)器配置:RIP 配置在接口上:172.16.100.11 ;VIP 配置在lo 別名上
如果你要用到下面的heartbeat 的ldirectord 來實現(xiàn)資源轉(zhuǎn)換,則下面的#Director配置不用配置
1. # Director配置
2. ifconfig eth0 172.16.100.10/16
3. ifconfig eth0:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.25
5.255.255 up
4. route add -host 172.16.100.1 dev eth0:0
,5. echo 1 > /proc/sys/net/ipv4/ip_forward
1. # varnish服務(wù)器修改內(nèi)核參數(shù)來禁止響應(yīng)對VIP 的ARP 廣播請求
2. echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
3. echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
4. echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
5. echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
1. # 配置VIP
2. ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.
255.255 up
3. # 凡是到172.16.100.1主機的一律使用lo:0響應(yīng)
4. route add -host 172.16.100.1 dev lo:0
1. # 在Director 上配置Ipvs ,筆者虛擬機有限,只演示單臺配置
2. ipvsadm -A -t 172.16.100.1:80 -s wlc
3. ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11 -g -w 2
4. ipvsadm -Ln
至此,前端lvs 負載均衡基本實現(xiàn),下面配置高可用集群 二、heartbeat 高可用集群

本應(yīng)用模型圖:
,高可用則是當主服務(wù)器出現(xiàn)故障,備用服務(wù)器會在最短時間內(nèi)代替其地位,并且保證服務(wù)不間斷。
簡單說明:從服務(wù)器和主服務(wù)器要有相同配置,才能在故障遷移時讓無界感受不到,從而保證服務(wù)不間斷運行。在你的兩臺機器(一臺 作為主節(jié)點,另一臺為從節(jié)點) 上運行
heartbeat, 并配置好相關(guān)的選項,最重要的是lvs 資源一定要配置進去。那么開始時主節(jié)點提供lvs 服務(wù),一旦主節(jié)點崩潰,那么從節(jié)點立即接管lvs 服務(wù)。
SO:
director 主服務(wù)器和從服務(wù)器都有兩塊網(wǎng)卡,一塊eth0是和后面varnish 服務(wù)器通信,另一塊eth1是彼此之間監(jiān)聽心跳信息和故障遷移是資源轉(zhuǎn)移。筆者用的eth0是172.16.100.0網(wǎng)段 vip為172.16.100.1 監(jiān)聽心跳為eth1網(wǎng)卡,主從的IP 分別為10.10.10.1(node1) 和10.10.10.2(node2)
修改上面模型圖兩臺主從服務(wù)器的信息
1. vim /etc/hosts
2. 10.10.10.1 node1.heartbeat.com node1
3. 10.10.10.2 node2.heartbeat.com node2
4. #用于實現(xiàn)兩臺director 節(jié)點間域名解析,此操作node1、node2相同
1. vim /etc/sysconfig/network
2. #設(shè)置主機名
3. hostname node1.heartbeat.com
4. #修改主機名使之立即生效,node2也同樣修改為node2.heartbeat.com
為了安全起見,node1和node2的通信需要加密進行
1.
2.
3.
4.
5.
6. ssh-keygen -t rsa #生成密鑰 ssh-copy-id -i .ssh/id_rsa.pub root@node2.heartbeat.com #將公鑰復(fù)制給node2 ssh node2 -- ifconfig #執(zhí)行命令測試,此時應(yīng)該顯示node2的ip 信息
,準備工作完成,下面開始安裝heartbeat 和ldirectord
所需要的安裝包為
本人直接用yum 來實現(xiàn),能自動解決依賴關(guān)系 ,node1和node2都需要安裝
1. yum localinstall -y --nogpgcheck ./* 2. #安裝此目錄中的所有rpm 包
安裝后配置:
1. cd /usr/share/doc/heartbeat-2.1.4
2. cp authkeys /etc/ha.d/
3. cp haresources /etc/ha.d/
4. cp ha.cf /etc/ha.d/
5. #拷貝heartbeat 所需配置文件到指定目錄下
1. vim /etc/ha.d/ha.cf
2. bcast eth1
3. #定義心跳信息從那一塊網(wǎng)卡傳輸
4. node node1.heartbeat.com
5. node node2.heartbeat.com
6. #添加這兩行,用于指明心跳信號傳輸范圍
7. vim /etc/ha.d/authkeys
8. auth 2
9. 2 sha1 [鍵入隨機數(shù)]
10. chmod 400 authkeys
11. #保存退出并修改權(quán)限400
12. vim /etc/ha.d/haresource
13. node1.heartbeat.com 172.16.100.1/24/eth0/172.16.0.255 ldir
ectord::ldirectord.cf httpd
14. #末行添加主節(jié)點域名,vip 資源,廣播地址,ldirectord 資源,以及用戶提供顯示錯誤
頁面的httpd 資源
同步配置文件到node2
1. /usr/lib/heartbeat/ha_propagate
2. #腳本用來同步ha.cf 和authkeys 文件到node2
3. scp haresources node2:/etc/ha.d/
4.

#復(fù)制haresource 到nod2
,配置ldirectord ,同步配置文件
1. cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/ldirectord
.cf
2. #復(fù)制ldirector 的配置文件
內(nèi)容如下配置
1. checktimeout =5
2. #當DR 收不到realserver 的回應(yīng),設(shè)定幾秒后判定realserver 當機或掛掉了,
預(yù)設(shè)5秒。
3. checkinterval =3
4. #查詢間隔,每個幾秒偵測一次realserver
5. autoreload =yes
6. #配置文件發(fā)生改變是否自動重讀
7. quiescent =yes
8. #靜態(tài)鏈接,yes :表示偵測realserver 宕機,將其權(quán)值至零(如果開啟了
persistent 參數(shù)不要用yes );no :表示偵測到宕機realserver ,隨即將其對應(yīng)條目從ipvsadm 中刪除。
9. virtual=172.16.100.1:80
10. real=172.16.100.11:80 gate 4
11. fallback =127.0.0.1:80 gate #realserver全部失敗,vip 指向本機
80端口。
12. service =http
13. request ="test.html" #用于健康檢測的url,realserver 的相對路徑
為var/www/html目錄
14. receive ="ok" #用于健康檢測的url 包含的關(guān)鍵字
15. scheduler =wlc
16. #persistent =600
17. #持久鏈接:表示600s 之內(nèi)同意ip 將訪問同一臺realserver
18. protocol =tcp
19. checktype =negotiate
20. #檢查類型:negotiate ,表示DR 發(fā)送請求,realserver 恢復(fù)特定字
符串才表示服務(wù)正常;connect ,表示DR 能夠連線realserver 即正常。
21. checkport =80
啟動兩個節(jié)點上的heartbeat
1. service heartbeat start
2. ssh node2 -- 'service heartbeat start'
3. #啟動兩節(jié)點heartbeat 服務(wù)
,啟動后查看/var/log/messages

可以看到啟動過程,并可以手動執(zhí)行/usr/lib/heartbeat/

下的hb_standby 來釋放資源hb_takeover來爭奪資源
還可以通過ipvsadm -Ln 在主節(jié)點上查看lvs 的資源狀態(tài)
至此,帶狀態(tài)檢測的前端集群已經(jīng)布置完畢,下面就是varnish 緩存服務(wù)器和后端nginx 的web 應(yīng)用配置
三:varnish 緩存服務(wù)器
可以去varnish 的官網(wǎng)下載最新的源碼包,筆者為了便于演示,就用rpm 包了,(別鄙視我)
varnish 官網(wǎng)地址:http://www.varnish-cache.org/
我下的是最新的varnish-release-3.0-1.noarch.rpm
先rpm -ivh varnish-release-3.0-1.noarch.rpm
它的作用是給你yum 生成varnish 的倉庫,然后你在用yum 安裝varnish
yum install varnish
,安裝好后配置文件為/etc/default.vcl
本人只實現(xiàn)基本功能,沒有對varnish 做優(yōu)化,所以配置比較簡單

配置完成后保存退出,需手動啟動
varnishd -f /etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:2000 -f etc/varnish/default.vcl -f 指定varnishd 使用哪個配置文件。
-s malloc,1G -s用來指定varnish 使用的存儲類型和存儲容量。我使用的是 malloc 類型(malloc 是一個 C 函數(shù),用于分配內(nèi)存空間), 1G 定義多少內(nèi)存被 malloced。
-T 127.0.0.1:2000 -T 指定varnish 的管理端口。Varnish 有一個基于文本的管理接口,啟動它的話可以在不停止 varnish 的情況下來管理 varnish。您可以指定管理軟件監(jiān)聽哪個接口。
-a 0.0.0.0:8080 指定varnish 所監(jiān)聽所有IP 發(fā)給80的http 請求。如果不指定-a ,則為默認監(jiān)聽0.0.0.0:
ps:先配置nginx 在配置varnish 可以直接測試效果,本人為了演示架構(gòu)層次,所以就一層一層的配置了,建議如果按我的順序做的話,后端web 服務(wù)器先用yum 裝上apache 方便測試。varnish 到此就配置成功。到此我在幫各位順一下思路
,目前,如果你完全按照本文章做實驗,我們用了5臺服務(wù)器。
一臺director 它的vip 為172.16.100.1 DIP為172.16.100.10
與它實現(xiàn)高可用的從服務(wù)器vip 為172.16.100.1 DIP為 172.16.100.12
而這兩臺服務(wù)器都裝的有heartbeat 和ipvsadm 并通過ldirectord 把VIP 定義為資源,會自動流動,和自動添加ipvsadm 分發(fā)條目
在ipvsadm 中 定義的有一臺varnish 服務(wù)器 地址為172.16.100.11
varnish 緩存服務(wù)器在做反向代理時后端是兩臺web 服務(wù)器分別為

web1和web2 IP 分別為172.16.100.15和172.16.100.17 下圖幫你順下思路
四:nginx 服務(wù)器 php eAccelerator
(1)編譯安裝PHP 5.3.6所需的支持庫:
1. tar zxvf libiconv-1.13.1.tar.gz
2. cd libiconv-1.13.1/
3. ./configure --prefix=/usr/local
4. make
5. make install
6. cd ../
1. tar zxvf libmcrypt-2.5.8.tar.gz
2. cd libmcrypt-2.5.8/
3. ./configure
4. make
5. make install
,6. /sbin/ldconfig
7. cd libltdl/
8. ./configure --enable-ltdl-install
9. make
10. make install
11. cd ../../
1. tar zxvf mhash-0.9.9.9.tar.gz
2. cd mhash-0.9.9.9/
3. ./configure
4. make
5. make install
6. cd ../
1. ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
2. ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
3. ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
4. ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.
8
5. ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
6. ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
7. ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
8. ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
9. ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1
10. ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
1. tar zxvf mcrypt-2.6.8.tar.gz
2. cd mcrypt-2.6.8/
3. /sbin/ldconfig
4. ./configure
5. make
6. make install
7. cd ../
1. 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