標籤:discuz style blog tar ext color
LVS 負載平衡解決方案
因為我們的產品啟動並執行主流平台是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四層負載平衡軟體。其有如下特點:
LVS叢集採用IP負載平衡技術和基於內容請求分發技術。調度器具有很好的吞吐率(在DR模式下),將請求均衡地轉移到不同的伺服器上執行,且調度器自動 屏蔽掉伺服器的故障,從而將一組伺服器構成一個高效能的、高可用的虛擬伺服器。整個伺服器叢集的結構對客戶是透明的,而且無需修改用戶端和伺服器端的程 序。為此,在設計時需要考慮系統的透明性、延展性、高可用性和易管理性。一般來說,LVS叢集採用三層結構,其主要組成部分為:
A、負載調度器(load balancer),它是整個叢集對外面的前端機,負責將客戶的請求發送到一組伺服器上執行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
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.html
這樣我們的產品配置就完成了,下面介紹一下相應的伺服器環境搭建。首先是IIS配置網站(要求在一個物理網段上)
RealServer 1:10.0.8.13:80
RealServer 2:10.0.8.12:80
VIP(虛擬IP):10.0.8.9
兩台虛擬機器安裝Centos5.4(採用DHCP安裝模式),地址:
Centos1: 10.0.8.25 (keepalived:MASTER)
Centos2: 10.0.8.55 (keepalived:BACKUP)
首先要說明的是,因為這裡使用的是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),進入終端模式,鍵入
# yum –y install ipvsadm
2.然後安裝keepalived,因為Keepalived需要gcc工具來編譯,所以請安裝它(前文已做介紹),在編譯時間,keepalived倚賴openssl和核心原始碼
# yum –y install openssl-devel kernel-devel
3.去官方下載最新的keepalived,解壓縮,然後編譯:
#wget http://www.keepalived.org/software/keepalived-1.1.18.tar.gz
#tar zxvf keepalived-1.1.18.tar.gz
#cd keepalived-1.1.18
#./configure --with-kernel-dir=/usr/src/kernels/2.6.18-164.15.1.el5-i686
--prefix=/usr/local/keepalived #將其布署在LVS的目錄下
#上面的with-kernel-dir是和lvs整合必須的編譯參數
註:with-kernel-dir是和lvs整合必須的編譯參數,因為keepalived要被放到/usr/local/keepalived下進行編譯,另外kernels核心源碼會因linux版本不同而有所變化。
顯示結果:
------------------------
....
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
# make && make install #編譯
4.做成啟動服務
#ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived
#ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
#ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
#service keepalived start #關閉:stop
5.綁定虛擬IP(該步驟在某些安裝環境下可以忽略,因為keepalived會自動維護vip,並根據設定,自動在系統裡添加vip,所以該步驟可能用途不大)
#/sbin/ifconfig eth0:0 10.0.8.9 broadcast 10.0.8.9 netmask 255.255.255.255 up #這樣的設定可防止IP衝突
#/sbin/route add -host 10.0.8.9 dev eth0:0
6.配置network(/etc/sysconfig/network )檔案,內容如下(註:該步驟在網上某些文章中提到,這裡也就隨手多做了一步):
NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=10.0.8.1
7.LVS 在3 種方式下均需要開啟ip forward 功能,這可以配置/etc/sysctl.conf. 檔案,保證其中有如下一行(註:該步驟在網上某些文章中提到,這裡也就隨手多做了一步):
#net.ipv4.ip forward = 1
#sysctl -p #然後執行下面命令使配置生效:
備忘:因為KEEPALIVED要使用80連接埠(稍後設定檔中會做設定),所以如果要馬上啟用80連接埠,可以啟動Apache,用下面命令(這一步並不在安裝步驟中):
#service httpd start (或restart)
完成了環境配置之後,下面就是開啟並修改Keepalived.conf檔案了,我們可以從下面地址開啟並編輯它:
/usr/local/keepalived/etc/keepalived.conf
或:
/etc/keepalived/keepalived.conf (之前的ln指令指向)
這裡將10.0.8.25這台虛擬機器設定為MASTER,設定檔如下(相應配置資訊詳見這篇文章):
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0 #HA監測網路介面
virtual_router_id 51 #主、備機的virtual_router_id必須相同
priority 100 #主、備機取不同的優先順序,主機值較大,備份機值較小,值越大優先順序越高
advert_int 1 #VRRP Multicast廣播周期秒數
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.8.9
}
}
virtual_server 10.0.8.9 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 10 !同一ip50秒內的請求都發送到同一realserver
protocol TCP
real_server 10.0.8.12 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.8.13 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
然後我們使用如下命令啟用keepalived:
#keepalived #位於/usr/local/keepalived/sbin/
或
#service keepalived start
我們可以通過下面指令來查看相應進程:
#ps aux|grep 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兩個子進程,所以這裡顯示了三個進程。
這裡我們可以下面指令檢查一下配置是否生效:
#ping 10.0.8.9 -c 4
#telnet 10.0.8.9 80
如果正常的話,就說明keepalived已啟用了我們的配置。
註:之前本人配置過程中發現telnet經常無法正常訪問,可以使用下面指令查看80連接埠是否啟用:
#netstat -npl | grep :80 #windows下相應指令為:netstat -an|findstr LISTEN
也可以使用下面指令檢查LVS進程:
#lsmod | grep ip_vs
到這裡就完成了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)
我們可以使用下面指令查看請求的轉寄情況:
[[email protected] ~]# ipvsadm -lcn|grep 10.0.8.9
-------------------------------------------
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運行情況和網路狀況:
#tail -f /var/log/messages #查看系統日誌
#tcpdump src host 10.0.8.9 and port 80 #抓包
#curl -I http://10.0.8.9/ #利用URL文法在命令列方式下的檔案傳輸工具
#ip addr #IP地址資訊或ip add show eth0 查看虛擬IP綁定情況
#service iptables stop #關閉iptables防火牆
#iptables –nvL #列出防火牆進入資料資訊
#ipvsadm -ln #查看lvs服務是否正常,包括活動連結,weight(keepalived配置),內部連結等。