LVS 基礎知識總結


基礎概念

LVS (Linux Virtual Server)是一種集群(Cluster)技術,采用IP負載均衡技術基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。

可伸縮性
可伸縮網絡服務是指網絡服務能隨着用戶數目的增長而擴展其性能,如在系統中增加服務器、內存或硬盤等;整個系統很容易被擴展,無需重新設置整個系統,無需中斷服務。換句話說,系統管理員擴展系統的操作對最終用戶是透明的,他們不會知道系統的改變。

網絡服務的需求
* 可伸縮性(Scalability),當服務的負載增長時,系統能被擴展來滿足需求,且不降低服務質量。
* 高可用性(Availability),盡管部分硬件和軟件會發生故障,整個系統的服務必須是每天24小時每星期7天可用的。
* 可管理性(Manageability),整個系統可能在物理上很大,但應該容易管理。
* 價格有效性(Cost-effectiveness),整個系統實現是經濟的、易支付的

單服務器顯然不能處理不斷增長的負載,服務器升級方法有下列不足:
一是升級過程繁瑣,機器切換會使服務暫時中斷,並造成原有計算資源的浪費;
二是越往高端的服務器,所花費的代價越大;
三是一旦該服務器或應用軟件失效,會導致整個服務的中斷。

針對上述需求,我們給出了基於IP層和基於內容請求分發的負載平衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的服務器集群,我們稱之為Linux虛擬服務器(Linux Virtual Server)

LVS結構
負載調度器(load balancer),它是整個集群對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認為服務是來自一個IP地址上的。它可以是用IP負載均衡技術的負載調度器,也可以是基於內容請求分發的負載調度器,還可以是兩者的結合。
服務器池(server pool),是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等。
后端存儲(backend storage),它為服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

IP負載均衡技術中,需要服務器池擁有相同的內容提供相同的服務。當客戶請求到達時,調度器只根據負載情況從服務器池中選出一個服務器,將該請求轉發到 選出的服務器,並記錄這個調度;當這個請求的其他報文到達,也會被轉發到前面選出的服務器。在基於內容請求分發技術中,服務器可以提供不同的服務,當客戶 請求到達時,調度器可根據請求的內容和服務器的情況選擇服務器執行請求。因為所有的操作都是在操作系統核心空間中將完成的,它的調度開銷很小,所以它具有 很高的吞吐率。

后端存儲通常用容錯的分布式文件系統,如AFS、GFS、Coda和Intermezzo等。分布式文件系統為各服務器提供共享的存儲區,它們訪問分布式 文件系統就像訪問本地文件系統一樣。同時,分布式文件系統提供良好的伸縮性和可用性。然而,當不同服務器上的應用程序同時訪問分布式文件系統上同一資源 時,應用程序的訪問沖突需要消解才能使得資源處於一致狀態。這需要一個分布式鎖管理器(Distributed Lock Manager),它可能是分布式文件系統內部提供的,也可能是外部的。開發者在寫應用程序時,可以使用分布式鎖管理器來保證應用程序在不同結點上並發訪 問的一致性。

**雙機集群(HA)**HA(High Available), 高可用性群集,是保證業務連續性的有效解決方案,一般有兩個或兩個以上的節點,且分為活動節點及備用節點。通常把正在執行業務的稱為活動節點,而作為活動 節點的一個備份的則稱為備用節點。當活動節點出現問題,導致正在運行的業務(任務)不能正常運行時,備用節點此時就會偵測到,並立即接續活動節點來執行業 務。從而實現業務的不中斷或短暫中斷
Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web 服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人 工做的只是修復故障的web服務器。

LVS DR的基本原理

1.client向目標VIP(virtual IP)發送請求
IP包形式為

Src mac Des mac Src IP Des IP
client mac dr mac client IP VIP

2.director接收到包,通過算法策略選擇一台Real Server
這里是通過映射表進行輪巡選擇的,選好一台Real Server后,將包發過去,此時IP包為。

Src mac Des mac Src IP Des IP
client mac Rs mac client IP VIP

需要注意的是,無論是DR模式還是NAT模式,都需要將director 的ip_forward置一,而對於real server則該選項需要置0。這個選項控制包轉發功能。
3.當real server收到包后,會比對des mac 和des ip,其中,mac地址與物理網卡eth0相同,而IP與l0上綁定的虛擬IP相同,則符合,到內核進行處理,任務結束后將處理結果發給cilent

Src mac Des mac Src IP Des IP
Rs mac client mac VIP client IP

http://os.51cto.com/art/201105/264303.htm
http://os.51cto.com/art/201105/262536.htm

軟件安裝

LVS在一般linux機器上都有配備,我們只需要安裝實現需要的軟件ipvsadm

sudo apt-get install ipvsadm

查看是否安裝成功

dpkg -l |grep ipvsadm

查看內核模塊是否運行

lsmod | grep ip_vs
#或者
modprobe -l|grep ipvs

這里就安裝成功了
由於lvs涉及網絡方面的操作,這里列舉一些用到的命令

#查看hosts表
vim /etc/hosts
#查看路由
route
#創建虛擬IP
ifconfig eth0:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
#eth0:0在網卡eth0上的0位置創建一個虛擬IP;
#netmask 子網掩碼
#broadca 廣播段,設置為IP相同確保精准廣播
#虛擬IP添加到路由
route add -host 192.168.1.200 dev eth0:0
#從路由刪除虛擬IP
route delete -host 192.168.1.200
#禁用該虛擬IP或網卡
ifconfig eth0:0 down
#啟用網卡
ifconfig eth0 up

linux 執行shell腳本

方法一:切換到shell腳本所在的目錄

cd /data/shell
./hello.sh

./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變量PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變量PASH中的,所以必須加上./才可執行。

方法二:以絕對路徑的方式去執行bash shell腳本:

/data/shell/hello.sh

方法三:直接使用bash 或sh 來執行bash shell腳本:

cd /data/shell
bash hello.sh

cd /data/shell
sh hello.sh

注意,若是以方法三的方式來執行,那么,可以不必事先設定shell的執行權限,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行權限。那么不用指定bash路徑自然也好理解了啊,呵呵……。

方法四:在當前的shell環境中執行bash shell腳本:

cd /data/shell
. hello.sh

cd /data/shell
source hello.sh

LVS配置

Director 配置
將VIP配到director的主網卡eth0上,這是為了client可以通過尋址VIP來尋址到director。
打開ip_forward
清除ipvsadm配置,ipvsadm -C
-A 時在內核的虛擬服務器表中添加一條新的虛擬服務器記錄
-a 在內核虛擬服務器表的一條記錄里添加一條新的真實服務器記錄。
-D 刪除內核虛擬服務器表中的一條虛擬服務器記錄
-C 清除內核虛擬服務器表中的所有記錄
-s rr 選擇調度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
-t TCP
-u UDP
-r 真實的服務器
-g 直接路由模式(DR模式)
-p 這個選項的意思是來自同一個客戶的多次請求,將被同一台真實的服務器處理。timeout的默認值為300秒。
http://blog.chinaunix.net/uid-24668835-id-2598605.html

    #!/bin/bash
  VIP=192.168.60.200
  RIP1=192.168.60.132
  RIP2=192.168.60.144
  GW=192.168.60.1
  # set the Virtual IP Address
  /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev eth0:0
  echo "1" >/proc/sys/net/ipv4/ip_forward
  #Clear IPVS table
  /sbin/ipvsadm -C
  #set LVS
  /sbin/ipvsadm -A -t $VIP:80 -s rr -p 600
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  #Run LVS
  /sbin/ipvsadm
  #end

Real Server 配置
將虛擬IP配置到l0上,如果配到出口網卡則會影響到Director的arp request。
對arp幀進行配置
arp_announce : INTEGER
默認為0
對網絡接口上本地IP地址發出的ARP回應作出相應級別的限制:
確定不同程度的限制,宣布對來自本地源IP地址發出Arp請求的接口
0 - (默認) 在任意網絡接口上的任何本地地址
1 -盡量避免不在該網絡接口子網段的本地地址. 當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用.此時會檢查來訪IP是否為所有接口上的子網段內ip之一.如果改來訪IP 不屬於各個網絡接口上的子網段內,那么將采用級別2的方式來進行處理.
2 - 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出 訪問子網中包含該目標IP地址的本地地址. 如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP回應的網絡接口來進行發送
all/ 和{interface}/ 下兩者同時比較,取較大一個值生效.
提高約束級別有益於從指定的目標接受應答,而降低級別可以給予更多的arp查詢者以反饋信息(關於arp代理這一段我普遍翻譯地不好,去啃一下tcp/ip bible的卷一,然后再翻譯吧)
arp_ignore : INTEGER
默認為0
定義對目標地址為本地IP的ARP詢問不同的應答模式
0 - (默認值): 回應任何網絡接口上對任何本地IP地址的arp查詢請求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到來自10.1.1.2這樣地址發起的對10.1.1.1 的arp查詢也會回應–而原本這個請求該是出現在eth1上,也該有eth1回應的)
1 - 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求(比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使 eth0收到來自10.1.1.2這樣地址發起的對192.168.0.1的查詢會回答,而對10.1.1.1 的arp查詢不會回應)
2 -只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內(比如 eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到來自10.1.1.2這樣地址發起的對192.168.0.1 的查詢不會回答,而對192.168.0.2發起的對192.168.0.1的arp查詢會回應)
3 - 不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應(do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied 翻譯地似乎不好,這個我的去問問人)
4-7 - 保留未使用
8 -不回應所有(本地地址)的arp查詢

#!/bin/bash
  VIP=192.168.60.200
  /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
  /sbin/route add -host $VIP dev lo:0
  echo1″ >/proc/sys/net/ipv4/conf/lo/arp_ignore
  echo2″ >/proc/sys/net/ipv4/conf/lo/arp_announce
  echo1″ >/proc/sys/net/ipv4/conf/all/arp_ignore
  echo2″ >/proc/sys/net/ipv4/conf/all/arp_announce
  sysctl -p
  #end

Keepalived

作為HA
Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web 服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人 工做的只是修復故障的web服務器。可以有多個backup,當master不工作時會根據priority 來對剩下的進行選舉
注意,master 和 slave 只有
router_id、state和priority 不同
http://outofmemory.cn/wiki/keepalived-configuration
vi /etc/keepalived/keepalived.conf

global_defs {
router_id LVS_dr_1 #運行keepalived機器的一個標識
}
vrrp_sync_group VGM {#監控多個網段的實例
group {
VI_dr #實例名
}
}
vrrp_instance VI_dr {
state MASTER #指定一個為master,另一個為backup
interface eth0 #設置實例綁定的網卡
virtual_router_id 51 #VPID標記
priority 100 #優先級,高優先級競選為master
advert_int 1 #檢查間隔,默認1秒
authentication {#設置認證
auth_type PASS #認證方式
auth_pass 1111 #認證密碼
}
virtual_ipaddress { #設置vip
10.241.7.6
}
}
virtual_server 10.241.7.6 443 {
delay_loop 6 #健康檢查時間間隔
lb_algo rr #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #負載均衡轉發規則NAT|DR|RUN
persistence_timeout 50#會話保持時間
protocol TCP #使用的協議

#sorry_server 192.168.200.200 1358#備用機,所有realserver失效后啟用

real_server 10.241.0.8 443 {
weight 100 #默認為1,0為失效 ???WHY 100
TCP_CHECK {
connect_timeout 3 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 443 #健康檢查的端口的端口
}
}
real_server 10.241.0.9 443 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 443
}
}
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



集群及LVS基礎知識整理 基礎知識總結(九) 基礎知識的總結 基礎知識總結 vue基礎知識總結 HTML基礎知識總結 關於COM的基礎知識總結 Java基礎知識總結(一) HTML基礎知識總結 HTML基礎知識總結一
 
粤ICP备14056181号  © 2014-2021 ITdaan.com