在Discuz!NT的最新版本(企業版)中,支持目前主流LINUX平臺上的負載均衡解決方案,好比NGINX,HAPROXY,LVS等。本文與其說是解決方案,倒不如說是介紹如何搭建Discuz!NT負載均衡解決方案:)html
由於咱們的產品運行的主流平臺是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四層負載均衡軟件。其有以下特色:前端
LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具備很好的吞吐率(在DR模式下),將請求均衡地轉移到不一樣的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,並且無需修改客戶端和服務器端的程序。爲此,在設計時須要考慮系統的透明性、可伸縮性、高可用性和易管理性。通常來講,LVS集羣採用三層結構,其主要組成部分爲:linux
A、負載調度器(load balancer),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(咱們可稱之爲虛擬IP地址)上的。windows
B、服務器池(server pool),是一組真正執行客戶請求的服務器,即realserver,執行的服務有WEB、MAIL、FTP和DNS等。緩存
C、共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。服務器
LVS的IP負載均衡技術實現:
目前IP負載均衡技術是在負載調度器的實現技術中效率最高的。LVS集羣中實現的三種IP負載均衡技術,分別是:
Virtual Server via Network Address Translation (VS/NAT): 也有說端口映射的,其目標是將一組服務器構成一個高性能的、高可用的虛擬服務器。由於這種技術容易造成單點故障,從而形成網路沒法訪問,而且存在帶寬瓶頸。因此LVS又提供了下面兩種實現。網絡
Virtual Server via IP Tunneling (VS/TUN ): 經過IP隧道實現虛擬服務。
Virtual Server via Direct Routing (VS/DR) :直接路由實現虛擬服務器的方法(負載能力最強),本文搭建的就是DR模式。負載均衡
咱們的產品目前若是要做用負載均衡技術,則須要在管理後臺開啓遠程附件(FTP)和分佈式緩存服務(MEMCACHED),有關這兩個功能能夠參見我以前寫的這兩篇文章。
http://www.cnblogs.com/daizhj/archive/2010/02/08/discuznt_memcache_syncdata.html
http://www.cnblogs.com/daizhj/archive/2008/07/28/1254648.htmldom
這樣咱們的產品配置就完成了,下面介紹一下相應的服務器環境搭建。首先是IIS配置站點(要求在一個物理網段上)
curl
首先要說明的是,由於這裏使用的是LVS的VS/DR模式(上面提到),也就是要求REALSERVER會直接將結果返回到客戶端,即下面圖中(右側)描述:
因此咱們還須要在windows 服務器上配置VIP,可使用下面的方法 :
1.在控制面板裏添加一個硬件設備, Microsoft Loopback Adapter ,以下圖:
2.設置ip爲vip,掩碼隨意:
3.進註冊表編輯器,搜索這個vip,把掩碼改爲255.255.255.255,而後禁用啓用網卡便可(在window server 2003系統中有三處)。
這樣在‘網上鄰居’上看相應Microsoft Loopback Adapter 的IP MASK就變成了255.255.255.255。而後在IIS的相應站點下配置IP地址,可以使用VIP地址或使用‘所有未分配選項’。以下圖:
這樣配置就完成了,以後用:
c:\>telnet 10.0.8.13 80和c:\>telnet 10.0.8.12 80 看一下配置是否已正常啓用。
這樣就完成了windows服務器的配置工做。在介紹如何如何安裝配置LVS和KEEPALIVED以前,先要說明一下在虛擬機安裝CENTOS時要注意的幾個問題,以下:
1.由於Keepalived須要gcc工具來編譯因此要在安裝時定製一下安裝組件,以下:
而後安裝程序會檢驗相應組件依賴性
2.以後安裝防火牆時選擇禁用:
3.selinux也是禁用:
下面開始介紹一下linux下如何安裝配置LVS和KEEPALIVED.
1.首先安裝lvs的管理工具ipvsadm(直接使用yum安裝便可),啓用Centos1虛擬機(10.0.8.25),進入終端模式,鍵入
2.而後安裝keepalived,由於Keepalived須要gcc工具來編譯,因此請安裝它(前文已作介紹),在編譯時,keepalived倚賴openssl和內核源代碼
3.去官方下載最新的keepalived,解壓縮,而後編譯:
顯示結果:
------------------------
....
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes (這裏必須爲yes)
IPVS sync daemon support : Yes (這裏必須爲yes)
Use VRRP Framework : Yes (這裏必須爲yes)
Use LinkWatch : No
4.作成啓動服務
5.綁定虛擬IP(該步驟在某些安裝環境下能夠忽略,由於keepalived會自動維護vip,並根據設置,自動在系統裏添加vip,因此該步驟可能用途不大)
6.配置network(/etc/sysconfig/network )文件,內容以下(注:該步驟在網上某些文章中提到,這裏也就隨手多作了一步):
7.LVS 在3 種方式下均須要打開ip forward 功能,這能夠配置/etc/sysctl.conf. 文件,保證其中有以下一行(注:該步驟在網上某些文章中提到,這裏也就隨手多作了一步):
#net.ipv4.ip forward = 1
#sysctl -p #而後執行下面命令使配置生效:
備註:由於KEEPALIVED要使用80端口(稍後配置文件中會作設置),因此若是要立刻啓用80端口,能夠啓動Apache,用下面命令(這一步並不在安裝步驟中):
完成了環境配置以後,下面就是打開並修改Keepalived.conf文件了,咱們能夠從下面地址打開並編輯它:
/usr/local/keepalived/etc/keepalived.conf
或:
/etc/keepalived/keepalived.conf (以前的ln指令指向)
這裏將10.0.8.25這臺虛擬機設置爲MASTER,配置文件以下(相應配置信息詳見這篇文章):
而後咱們使用以下命令啓用keepalived:
或
咱們能夠經過下面指令來查看相應進程:
------------------------------
sr/local/keepalived/etc/keepalived/keepalived.conf
root 17670 0.0 0.2 4932 564 ? Ss 19:03 0:00 keepalived -D
root 17671 0.0 0.6 4976 1416 ? S 19:03 0:02 keepalived -D
root 17672 0.0 0.4 4976 928 ? S 19:03 0:00 keepalived -D
....
這裏注意keepalived要啓動一個主並fork兩個子進程,因此這裏顯示了三個進程。
這裏咱們能夠下面指令檢查一下配置是否生效:
若是正常的話,就說明keepalived已啓用了咱們的配置。
注:以前本人配置過程當中發現telnet常常沒法正常訪問,可使用下面指令查看80端口是否啓用:
也可使用下面指令檢查LVS進程:
到這裏就完成了10.0.8.25這臺虛擬機上的keepalived配置。而後重複1-7這些步驟,在10.0.8.55上也安裝並配置keepalived,這裏要注意的是在keepalived.conf文件中要將state MASTER改爲state BACKUP
接着,咱們在IE上輸入下面地址: http://10.0.8.9/index.aspx
若是能正常訪問,就說明負載均衡環境搭建完畢了
注:還能夠配置HOST文件(/etc/hosts)和DNS域名解析的配置文件(/etc/resolv.conf)
咱們可使用下面指令查看請求的轉發狀況:
-------------------------------------------
clientip vip realserver
TCP 14:44 ESTABLISHED 10.0.4.102:5244 10.0.8.9:80 10.0.8.12:80
TCP 14:44 ESTABLISHED 10.0.4.102:5232 10.0.8.9:80 10.0.8.12:80
TCP 07:35 ESTABLISHED 10.0.4.102:4875 10.0.8.9:80 10.0.8.13:80
TCP 14:44 ESTABLISHED 10.0.4.102:5249 10.0.8.9:80 10.0.8.12:80
TCP 14:46 ESTABLISHED 10.0.4.102:5246 10.0.8.9:80 10.0.8.12:80
TCP 08:40 ESTABLISHED 10.0.4.102:4913 10.0.8.9:80 10.0.8.12:80
TCP 08:40 ESTABLISHED 10.0.4.102:4927 10.0.8.9:80 10.0.8.12:80
TCP 14:44 ESTABLISHED 10.0.4.102:5247 10.0.8.9:80 10.0.8.12:80
TCP 08:40 ESTABLISHED 10.0.4.102:4929 10.0.8.9:80 10.0.8.12:80
TCP 07:35 ESTABLISHED 10.0.4.102:4872 10.0.8.9:80 10.0.8.13:80
TCP 14:47 ESTABLISHED 10.0.4.102:5243 10.0.8.9:80 10.0.8.12:80
TCP 08:40 ESTABLISHED 10.0.4.102:5011 10.0.8.9:80 10.0.8.12:80
TCP 14:56 ESTABLISHED 10.0.4.102:5245 10.0.8.9:80 10.0.8.12:80
TCP 00:44 NONE 10.0.4.102:0 10.0.8.9:80 10.0.8.12:80
TCP 00:34 NONE 10.0.4.102:0 10.0.8.9:65535 10.0.8.13:65535
TCP 07:35 ESTABLISHED 10.0.4.102:4848 10.0.8.9:80 10.0.8.13:80
接着咱們能夠把10.0.8.12:80或10.0.8.13:80 站點停掉,看看訪問是否正常。
而後咱們將10.0.8.25或10.0.8.55 虛擬機上關掉keepalived (使用killall keepalived或serivce keepalived stop),再用IE訪問相應網址看看。
另外那臺機器上的keepalived可否正常切換接管。若是正常,就說明這個環境是HA(高可用的)。
最後再羅列一些常的指令,以便你們查看keepalived運行狀況和網絡情況:
好了,今天的內容就先到這裏了。word文檔下載連接。
參考文檔:/Files/daizhj/lvs_cluster.pdf
文章寫於:2010.3.24