原文:http://liujintao.blog.51cto.com/413051/86242
上周六參加了51CTO的負載均衡的技術沙龍,主要是基于LVS的負載均衡,受益匪淺,開闊了思路,回去要好好研究一下.
其實使用web服務器自身的設置也能達到負載均衡的目的,我們公司使用的web服務器是resin,resin自生就可以進行負載均衡設置,但是只有professional版本才支持,這個東西的license一個CPU要$500,所以實際使用的apache+resin的組合(免費嘛:)),由于公司的系統只有運營商和CP會登錄訪問,并發壓力并不大,使用負載均衡主要是為了防止系統死掉后無法登錄,所以這樣的設計基本夠用了。如果并發訪問量很大的話,就應該考慮在apache前面加squid做cache、通過dns輪尋等方案了。
雖然網上也有apache+resin進行負載均衡設置的例子,但是由于apach和resin不同版本的配置的配置文件有一定的差距,按照網上的資料不一定能設置成功,下面的例子是在linux環境下使用httpd-2.0.59和Resin-3.1.6進行負載均衡設置的,如果使用其他版本請參考apache和resin官方網站的配置說明
需要準備3臺linux機器(如果是在沒有,可以先用一臺機器熟悉一下),每臺機器都要安裝apache和resin(其實1臺裝apach,另外2臺裝resin就夠用了,,之所以要全裝是為了以后的擴展考慮),其中一臺作為前端服務器(apache),另外2臺作為后臺服務器(resin)
1 演示環境
192.168.11.5:前端服務器
192.168.11.111:后臺服務器
192.168.11.11:后臺服務器
2 安裝Apache
[root@yf3 liujt]# tar –xzvf httpd-2.0.59.tar.gz //解壓縮安裝文件
[root@yf3 liujt]# cd httpd-2.0.59 //進入解壓縮的文件
[root@yf3 httpd-2.0.59] # ./configure --prefix /usr/local/Apache2 -–enable-rewrite=shared --enable-speling=shared
[root@yf3 httpd-2.0.59] # make
[root@yf3 httpd-2.0.59] # make install
完成以上操作后,進入/usr/local/Apache2,發現Apache已經安裝完成.
3 安裝Resin
到Resin的官方網站可以下載
演示時使用的是Resin-3.1.6版本
和普通安裝Resin的方式有一點區別,Resin要聯合Apache安裝,也就是使用參數--with-Apache=/usr/local/Apache2
[root@yf3 liujt]# tar –xzvf Resin-3.1.6.tar.gz //解壓縮安裝文件
[root@yf3 liujt]# cd Resin-3.1.6 //進入解壓縮的文件
[root@yf3 Resin-3.1.6] # ./configure --prefix=/usr/local/Resin --withapxs=/usr/local/
Apache2/bin/apxs
[root@yf3 Resin-3.1.6] # make
[root@yf3 Resin-3.1.6] # make install
3 配置Resin
需要修改2臺后服務器的Resin的配置文件Resin.conf,路徑/usr/local/Resin/conf/Resin.conf,如果有多個Resin,均按此方式配置
[root@yf3 Resin-3.1.6] # vi /usr/local/Resin/conf/Resin.conf
3.1 配置默認的負責均衡
找到配置文件中的<!-- define the servers in the cluster -->,修改負載均衡配置,需要設置服務的ID、IP和port,例如192.168.11.11的設置如下
<server id="a" address="127.0.0.1" port="6805"/>
如果同一個項目要啟動多個服務,可以配置多項,但是要使用不同的id名稱和port,例如:
<server id="a" address="127.0.0.1" port="6805"/>
<server id="b" address="127.0.0.1" port="6806/>
如果要在同一個resin中部署多個項目,可以設置不同的配置文件,指向不同的虛擬目錄來實現,啟動resin時啟動不同的配置文件即可.
4 配置Apache
需要對前端程序(192.168.11.5)的apach的配置文件httpd.conf進行修改,路徑:/usr/local/Apache2/conf/httpd.conf
[root@yf3 Resin-3.1.6] # vi /usr/local/Apache2/conf/httpd.conf
4.1 修改監聽接口
4.2 修改DocumentRoot
找到配置文件中的DocumentRoot配置
DocumentRoot "/usr/local/Apache2/htdocs"
修改為實際需要的路徑,例如改為實際的發布路徑為/usr/local/Apache2/htdocs/test,就需要改成以下形式
DocumentRoot "/usr/local/Apache2/htdocs/test"
4.3 Directory
找到配置文件中的Directory配置
<Directory "/usr/local/Apache2/htdocs">
修改為實際需要的路徑,例如改為實際的發布路徑為/usr/local/Apache2/htdocs/test,就需要改成以下形式
<Directory "/usr/local/Apache2/htdocs/test">;
4.4 修改DirectoryIndex
找到配置文件中的DirectoryIndex配置
DirectoryIndex index.html index.html.var
增加index.jsp。修改為:
DirectoryIndex index.jsp index.html index.html.var
4.5 修改Rensin相關配置
在apache的配置文件httpd.conf最后增加以下內容
LoadModule caucho_module /usr/local/Apache2/modules/mod_caucho.so
ResinConfigServer 192.168.11.11 6805
ResinConfigServer 192.168.11.111 6806
CauchoConfigCacheDirectory /tmp
CauchoStatus yes
其中ResinConfigServer配置的是調用的Resin的設置的負載均衡器的IP地址和端口號
11.5的apach分別調用了11.11和11.111的兩個Resin
11.11的Resin的負載生成器的配置為
<server id="a" address="192.168.11.11" port="6805"/>
11.111的Resin的負載生成器的配置為
<server id="a" address="192.168.11.111" port="6806"/>
5 訪問測試
5.1. 編寫測試頁面
為了檢查負載均衡是否生效,需要編寫測試頁面a.jsp,通過在web頁面和各Resin的日志中顯示的內容進行辨別,下面11.11的其中一個Resin為例說明
<%System.out.println("server 192.168.11.11");%> //在Resin日志中顯示
server 192.168.11.11 //在web頁面顯示
其他Resin的a.jsp參照上面的例子,只需要將其中的內容替換掉,例如11.111的a.jsp文件可以寫成
<%System.out.println("server 192.168.11.111");%> //在Resin日志中顯示
server 192.168.11.111 //在web頁面顯示
5.2 發布項目
1. Apche項目發布
將a.jsp文件放到設置的apche的虛擬目錄中,演示的設置的虛擬目錄是
DocumentRoot "/usr/local/Apache2/test"
因此需要將a.jsp放到/usr/local/Apache2/test目錄下
2. Resin項目發布
分別將來兩個a.jsp文件放到192.168.11.11和192.168.11.111設置的Resin的虛擬目錄中,如果某Resin的虛擬目錄是
<web-app id="/" root-directory="webapps/ROOT"/>
則需要將a.jsp放到Resin的webapps/ROOT目錄下
5.3. 啟動服務
1. 啟動Apache
[root@yf3 httpd-2.0.59] # /usr/local/Apache2/bin/httpd -f ./conf/httpd.conf
2. 分別啟動調用的Resin
例如啟動11.11的Resin-3.1.6中id為"a"的服務,需要在11.11服務器執行如下命令
[root@ yf3 Resin-3.1.6] # / usr/local/Resin-web/bin/httpd.sh -server a start
啟動11.111的Resin-3.1.6中id為"a"的服務,需要在11.111服務器執行如下命令
[root@ localhost Resin-3.1.6] # / usr/local/Resin-web/bin/httpd.sh -server a start
5.4. 驗證a.jsp
使用IE多次訪問web發布頁面,通過頁面顯示的內容和Resin日志打印的內容,檢查是否隨機調用各Resin的a.jsp文件。
Web頁面的訪問地址如下
[url]http://192.168.11.5:8080/a.jsp[/url]
查看rensin的方法如下,如果要看查看11.111的Resin-3.1.6中id為"a"服務的日志,需要在11.111服務器執行如下命令
[root@ localhost Resin-3.1.6] # tail –f / usr/local/Resin-3.16 /log/a.log