Load Balancer
負載均衡技術是在負載調度器的實現技術中效率最高的。在已有的IP負載均衡技術中,主要有通過網絡地址轉換NAT(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,稱之爲VS/NAT技術(Virtual Server via Network Address Translation)。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,提出了通過IP隧道實現虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。VS/NAT、VS/TUN和VS/DR技術是LVS集羣中實現的三種IP負載均衡技術。
LVS組成:
LVS 由2部分程序組成,包括 ipvs 和 ipvsadm。
1. ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼。
2. ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責爲ipvs內核框架編寫規則,定義誰是
集羣服務,而誰是後端真實的服務器(Real Server)
LVS相關術語:
- DS:Director Server。指的是前端負載均衡器節點。
- RS:Real Server。後端真實的工作服務器。
- VIP:向外部直接面向用戶請求,作爲用戶請求的目標的IP地址。
- DIP:Director Server IP,主要用於和內部主機通訊的IP地址。
- RIP:Real Server IP,後端服務器的IP地址。
- CIP:Client IP,訪問客戶端的IP地址。
Virtual Server via Direct Routing
跟VS/TUN方法一樣,VS/DR調度器只處理客戶到服務器端的連接,響應數據可以直接從獨立的網絡路由返回給客戶。這可以極大地提高LVS集羣系統的伸縮性。
跟VS/TUN相比,這種方法沒有IP隧道的開銷,但是要求負載調度器與實際服務器都有一塊網卡連在同一物理網段上,服務器網絡設備(或者設備別名)不作ARP響應,或者能將報文重定向(Redirect)到本地的Socket端口上。
LVS-DR模式採的IP地址全部爲外網IP。
實驗操作:
配置多個yum源:
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.30.250/rhel6.5
enabled=1
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.30.250/rhel6.5/HighAvailability
gpgcheck=0
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.30.250/rhel6.5/LoadBalancer
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.30.250/rhel6.5/ResilientStorage
gpgcheck=0
yum repolist
DR:client -> VS -> RS -> client
Load Balancer:
1 ip addr add 172.25.30.100/24 dev eth0#添加虛擬的IP到eth0網卡
2 yum install ipvsadm -y
3 ipvsadm -A -t 172.25.30.100:80 -s rr添加虛擬主機,-A添加虛擬服務,rr調度算法,rr倫叫
4 ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.3:80 -g
#添加到同一個局域網,-g直連模式,在同一個局域網,-t表示tcp協議,-a端口不可改變
5 ipvsadm -a -t 172.25.30.100:80 -r 172.25.30.2:80 -g
在客戶端發送請求:
調度站會收到請求並響應把請求扔給後臺web服務器
ipvsadm -nL #查看受到並響應客戶端請求次數有解析
ipvsadm -L #查看受到並響應客戶端請求次數無解析
由於三個IP均是100在同一個局域網(vlan)會有偶然性:並不知道server1會不會被一直當作調度器來使用:通過添加訪問server2和server3時服務被拒絕的策略來解決偶然性:
在server2安裝服務添加策略:
REAL SERVER:
後臺web服務器需要安裝arptables並設置VIP用戶才能完成客戶端請求,從http獲得數據這裏用到了三次握手要達到均衡負載必須有多臺服務器,才能從多臺web服務器上面均衡調度數據.所以兩臺服務器上面部署相同
ARP (地址解析協議)
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任的基礎上的,網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送僞ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關係、添加或刪除靜態對應關係等。相關協議有RARP、代理ARP。NDP用於在IPv6中代替地址解析協議。
兩個web在arp中接收virtual-IP規則相同:
1 /etc/init.d/httpd start
2 ip addr add 172.25.30.100/24 dev eth0
3 ip addr
4 yum install arptables_jf -y
5 arptables -A IN -d 172.25.30.100 -j DROP #在V-ip進入時執行DROP動作當訪問時候直接丟棄
6 arptables -A OUT -s 172.25.30.100 -j mangle --mangle-ip-s 172.25.30.2 #V-ip出去時執行mangle
8 /etc/init.d/arptables_jf save
9 arptables -L
客戶端測試:
arp -d 172.25.30.100 #刪除arp中緩存
arp -an |grep 100
crul 172.25.30.100
DR中沒有安裝ld檢測後臺服務器時,當後臺服務器壞掉時,他是不會檢測出來的,這樣當客戶端訪問時,他還是會把客戶端要求輪循扔給後臺服務器,此時掛掉的服務器接收到請求就會反饋給客戶端一個無服務的信息。如下圖:
此時,我們需要在前期對後臺服務器進行檢測,當後臺服務器壞掉時,負載均衡端不會把請求扔給壞掉的服務器,這樣客戶就會得到準確信息。
ld檢測後臺web服務器並更新調度站信息.一旦有服務器壞掉調度站不會把客戶端要求扔給壞掉的服務,客戶端也不會得到錯誤的信息
1 yum install ldirectord-3.9.5-3.1.x86_64.rpm
2 rpm -ql ldirectord
3 cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
4 cd /etc/ha.d/
5 ls
6 vim ldirectord.cf
virtual=172.25.30.100:80 #虛擬ip
real=172.25.30.2 gate #real server
real=172.25.30.3 gate
fallback=127.0.0.1:80 gate #lvs調度站
service=http #服務器
scheduler=rr #round-robin
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z
7 ipvsadm -C #清除lvs設置規則
8 ipvsadm -ln
9 /etc/init.d/ldirectord start
10 vim /etc/httpd/conf/httpd.conf #ld不支持端口轉發,所以將先前實驗的更改端口改回來端口改回80
11 cd /var/www/html
12 vim index.html
172.25.30.100 網站正在維護中
13 /etc/init.d/httpd reload
當有一個服務器掛掉時:
當兩個服務器掛掉時:
上述情況是後臺服務器壞掉,那大家有沒有考慮過如果負載均衡端壞掉了怎麼辦?我們是不是應該有一個負載均衡的備份,當主負載均衡壞掉了,還有備份的頂替他的工作。
1 tar zxf keepalived-2.0.6.tar.gz
2 ls
3 yum install keepalived-2.0.6 libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y
4 cd keepalived-2.0.6
5 ls
6 yum install gcc
7 yum search OpenSSL
8 yum install openssl-devel.x86_64 -y
9 ./configure --prefix=/usr/local/keepalived --with-init=SYSV
10 make
11 make install
12 cd /usr/local/keepalived/etc/rc.d/init.d/
13 ls
14 chmod +x keepalived
15 ls
#建立軟鏈接即快捷方式
16 ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d
17 ln -s /usr/local/keepalived/etc/keepalived/ /etc/
18 ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
19 ln -s /usr/local/keepalived/sbin/keepalived /sbin/
20 which keepalived
21 /etc/init.d/keepalived start
22 cd /usr/local
23 ls
24 scp -r keepalived/ server4:/usr/local/
備用server4 和主負載端keep安裝操作相同
keepalived配置:
MASTER:
BACKUP:備用keepalived修改權重和地位
16 ipvsadm -C
17 ipvsadm -L
18 /etc/init.d/keepalived restart
19 ipvsadm -L
20 ip addr
當均衡負載端壞掉時,我們可以看到備用佔據了他的位置頂替他的工作: