集群(cluster):將一組計算機軟/硬體連線起來,高度緊密的協作完成計算工作,其中的單個計算機通常稱為節點。負載均衡集群(load balancing):通過負載均衡器,將負載盡可能平均分攤處理。
lvs(linux virtul server)linux虛擬服務,分為三層結構:
排程器:上面的虛擬ip面向客戶端,將請求傳送到真實伺服器上。
伺服器:真正的伺服器,上面可以啟很多伺服器(web,mail,ftp)。
共享儲存:給伺服器提供共享儲存,是伺服器擁有相同的內容。
lvs與iptables/netfilter類似,工作在input鏈上,當客戶端請求集群伺服器時,lvs會強制修改報文,將報文發往postrouting,再**到節點伺服器處理。兩個模組:
ipvsadm 管理集群的命令工具;
ipvs 在核心上具體操作;在2.4.23前的核心上沒有。
三種模式:
nat 位址轉換
1、節點必須與排程器在同一網路
2、節點上的ip為私有ip,僅用於各節點和排程器之間通訊(用組播通訊)
3、排程器在客戶端和伺服器之間,負責所有通訊進出
4、節點需將閘道器指向排程器
5、排程器支援埠對映(將80埠改為節點上的8080)
6、節點可以是任意型別作業系統,只要能提供服務
7、併發高是,排程器是瓶頸
dr(direct routing一般用在生產環境中)
1、節點要和排程器在同一物理網路(根據mac**)
2、節點上可以是公網ip(便於遠端管理和監控)
3、排程器只負責入站請求,響應報文由節點直接發給客戶端
4、節點閘道器不指向排程器
5、不支援埠對映
工作原理:
排程器dr和真實伺服器rs上都有一塊網絡卡都有vip,但是,當客戶端請求發到路由器時,路由會事先設定靜態路由直接指向dr,或讓rs拒絕接受arp請求。dr接收到後,根據演算法將請求負載在一台rs上,dr會將請求的目標mac改為那個rs的mac,而其他報頭不會改變,rs收到後,檢視目標ip和mac都是自己,所以就會解封裝、處理、直接回應給客戶端,再不經過dr。
dr模式下rs兩個核心引數:
arp_ignore:定義接受arp請求時響應級別(eth0:222.24.24.67、eth1:192.168.1.1)
1:eth0接收到的是對192.168.1.1的查詢,只會回應eth1的mac,而不回應eth0的mac。[請求什麼說什麼,不管是從哪個介面請求]
2:只有本介面收到請求本介面上mac時才響應,不會響應不是請求本介面mac的。(只有與222.24.24.67同網段的,向eth0請求222.24.24.67的mac,才會回應,同理eth1,)[請求的和被請求的要在同一網段]
3:不回應該網路內的arp,只對設定的回應。
4~7:保留未用。
8:不回應任何arp請求。
arp_announce:將自己的位址向外通告的級別。
1:當請求時本網路內主機時,盡量不通告。
一般arp_ignore=1、arp_announce=2
tun(隧道模式)
1、節點可以跨網際網路
2、節點ip是公網ip
3、排程器負責入站請求
4、節點閘道器不指向排程器
5、不支援埠對映
工作原理:
伺服器可能在不同的地方,相距比較遠。在原來的ip報文再封裝乙個ip,源ip為dip,目標ip為rip,rs收到後解封裝後會看見原來的ip封裝。
支援的排程演算法:
1、rr(round robin)「輪叫」:按順序將請求輪流均等的分配到各節點。
2、wrr(wighted round robin)「加權輪叫」:根據伺服器的處理能力來排程請求,(多能多勞)
3、sh(source hashing)將請求的源ip位址,作為雜湊鍵從靜態分配的雜湊表,找出對應的伺服器,用於session繫結。
4、dh (destination hashing)將請求的目標位址,作為雜湊鍵從靜態分配的雜湊表,找出對應的伺服器
5、lc(least connections)最少鏈結,動態地將網路請求排程到已建立的鏈結數最少的伺服器上
6、wlc(weighted least connections)加權最少鏈結,具有較高權值的伺服器將承受較多的活動連線負載,排程器可以自動問詢真實伺服器的負載情況,並動態地調整其權值(lvs預設用該演算法)
7、sed 最短期望延遲 wlc的改進版,權重大的伺服器事先被挑中,(active+1)*256/weight,權重大的伺服器有很多的時候,權重小的伺服器可能乙個都沒有。
8、nqnever queue 永不排隊無需佇列,如果有台 realserver的連線數=0就直接分配過去,不需要在進行sed運算。
9、lblc(locality-based least connections)基於區域性的最少鏈結,針對目標ip位址的負載均衡,目前主要用於cache集群系統。根據請求的目標ip位址找出該目標ip位址最近使用的伺服器,若該伺服器 是可用的,將請求傳送到該伺服器;若伺服器不存在或超載,則用"最少鏈結"的原則選出乙個可用的伺服器,將請求傳送到該伺服器。
10、lblcr(locality-based least connections with replication)帶複製的基於區域性的最少鏈結,它要維護從乙個 目標ip位址到一組伺服器的對映,而lblc演算法維護從乙個目標ip位址到一台伺服器的對映。
基本配置:
安裝ipvsadm
uname -r #檢視核心版本
2.6.18-194.el5
rpm -q kernel-devel #檢視有無核心原始碼
rpm -i kernel-devel-2.6.18-398.el5.i686.rpm
#安裝後會在/usr/src/kernels中有核心源**
ln -s /usr/src/kernels/2.6.18-398.el5-i686/ /usr/src/linux #做軟鏈結
nat
ipvsadm:
格式:ipvsadm -a|e -t|u|f service-address [-s scheduler]
-a 增加集群服務
ipvsadm -a -t 222.24.24.1:80 -s rr #新增乙個集群服務演算法為rr
-e 改服務
-t tcp
-u udp
-f 防火牆標記號
-d刪除服務
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m]
-a新增乙個節點
-r表示節點伺服器的ip
-g dr
-i tun
-m nat
ipvsadm -a -t 222.24.24.1:80 -r 192.168.1.1 -m #新增兩個rs
ipvsadm -a -t 222.24.24.1:80 -r 192.168.1.2:8080 -m
-l/l 檢視
-n表示使用者數字ip表示主機
--rate 檢視速率
--stats 檢視統計
--timeout 顯示超時(tcp tcpfin udp)
-c刪除所有集群服務
-s儲存配置 ipvsadm -s > ipvs.bak
-r載入配置 ipvsadm -r < ipvs.bak
(配置lvs是,節點之間的時間必須是一樣的,誤差不超過1s)
可以和排程器同步時間,ntpdate 222.24.24.1 (222.24.24.1是排程器)
或者修改/etc/ntp.conf
dr 在dr上:
sysctl -w net.ipv4.conf.eth0.arp_announce=2 設定相應arp級別
sysctl -w net.ipv4.conf.all.arp_announce=2
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/ip_forward 開啟**功能
在rs:
ifconfig lo:0 222.24.24.1 配置vip
lvs持久連線:
ppc(持久埠連線)將來自同一客戶端,對同一集群服務的請求始終定向至此前選定的rs。
pcc(持久客戶端連線)將來自同一客戶端,對所有埠的訪問,都定向到之前選定的乙個rs。
pnmpp(持久防火牆標記連線)將特定埠定義在同一rs,在防火牆prerouting鏈上。
lvs很優秀但是也有缺陷,沒有技術支援,排程也會出現單點故障等等。
負載均衡之LVS
lvs是四層負載均衡器,linux2.4核心以後天然支援 核心的一部分 其網路架構如下所示 備註 lvs對外暴露的公網ip叫做 vip nat模式 nat network address translation 網路位址轉換,即將乙個ip位址轉換為另乙個ip位址的技術,如下圖所示 lvs接收到請求,...
負載均衡之LVS詳解
負載均衡 四層負載均衡 lvs 之前也寫過相關的文章,但是寫的太爛了。自己都不也敢直視。現在有空決定重新全面學習了下lvs.總結出本部落格。好了,其他的不多說了,我們開始吧。一 負載均衡 負載均衡包括如下 1 硬體負載均衡 f5,big ip citrix,netscaler a102 軟體負載均衡...
負載均衡之LVS詳解
負載均衡 四層負載均衡 lvs 之前也寫過相關的文章,但是寫的太爛了。自己都不也敢直視。現在有空決定重新全面學習了下lvs.總結出本部落格。好了,其他的不多說了,我們開始吧。一 負載均衡 負載均衡包括如下 1 硬體負載均衡 f5,big ip citrix,netscaler a102 軟體負載均衡...