一. lvs簡介:
LVS 是linux virtual server 的簡寫,即linux的虛擬服務器,是一個虛擬的服務器集羣系統。ip負載均衡技術是在負載調度器的實現技術中效率最高的,在已有的ip負載均衡技術中,主要通過網絡地址轉換(即VS/NAT 技術)、由於使用nat技術會使分派器成爲瓶頸,所以提出了通過ip隧道實現虛擬服務器(即VS/TUN)和通過直接路由實現虛擬服務器的方法即VS/DR。 VS/NAT、VS/TUN和VS/DR技術是LVS集羣中實現的三種IP負載均衡技術。
LVS採用ip負載均衡技術和基於內容的請求分發技術。調度器具有很好的吞吐率,將請求均衡的轉移到不同的服務器上執行,且調度器自動屏蔽故障的服務器,從而將一組服務器構成了一個高性能、高可用的虛擬服務器 。整個服務器對客戶完全透明,而且無需修改客戶端和服務器端的程序,所以有透明性、可伸縮性、高可用性和易管理性優點。
採用三層結構:
A:負載調度器director
它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(我們可稱之爲虛擬IP地址)上的。
B:服務器池
是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等。
C:共享的存儲
它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
NAT模型:
如圖所示:外網用戶直接訪問Director上的VIP地址,在Director 上做DNAT,將請求分派給給real server服務器中的其中一臺,請求可以是http、mail、dns或ftp。然後real server將請求結果通過Director的Dip發送給請求者。由於請求和回覆都要經過Director,容易使Director成爲瓶頸,最多可以有10個節點
DR模型:
如下圖所,外網用戶直接訪問Director上的VIP地址,Director將請求分派給real server 進行處理,當realserver處理後不再經過Director,而是直接送至客戶端,繞開了Director,使Director不再成爲瓶頸。可以有大量的節點,最多可以有100個節點
LVS調度算法:
當Director收到請求後,需要將請求發送給Real server 進行處理,但是發送哪一臺服務器就要按照算法進行分派。
共有十總調度算法:
固定算法4個:按照設置的算法執行,不考慮現實狀況
RR:Round-robin 輪循調度算法
WRR:Weighted round-robin 加權的輪循調度算法,權值越大越優先
DH:Destination hashing 目標hash 同一個ip用戶的請求都發送給其中的一臺固定的realserver
SH:Source hashing 來源hash 當director的前端同時連接有兩臺或多臺路由器或防火牆時,用戶通過通過其中一臺路由器(或防火牆)將請求發送給director,realserver處理完後將仍然從進入的路由器(或防火牆)的接口出去
動態算法:根據Director中的跟蹤表,查看每個服務器的active 和inactive 個數進行調整
LC:least-connection :最小連接 查看每個節點的active 和inactive數量,根據active* 256+inactive,哪個結果小,就將請求發送給該服務器
WLC:weighted least-connection 加權的最小連接,計算方法:(active* 256+inactive)/權值。,哪個結果小,就將請求發送給該服務器
SED:最少的期望權值 只考慮active激活的連接,不考慮inactive連接。計算方法:(active+1)*256
NQ:永不排隊 若果某個節點未處於活動連接,就將下一個請求發送給該節點進行處理
LBLC:當director和服務器之間有squid或varnish緩存服務器時,需要在director上設置,使請求分別到兩臺緩存服務器上
LBLCR:在LBLC的基礎上,若其中一部分人不在訪問網站,則下面一臺緩存服務器將不會有頁面緩存,這時候該緩存服務器將會空閒下來。該算法使下面一臺緩存服務器自動複製上面一臺緩存服務器的網頁,用於提供緩存
二. 配置案例
案例一:
如下圖所示,外網用戶直接訪問Director上的VIP地址1.1,使用網絡地址轉換(即VS/NAT 技術)director將請求分派給下面兩臺realserver ,分貝使用RR輪循調度算法和WRR加權輪循調度算法
拓撲圖:
1. 配置director
1)爲了方便安裝軟件包配置yum服務器
[root@localhost ~]# vim /etc/yum.repos.d/rhel-debuginfo.repo
2)配置網卡的地址192.168.2.1/24爲虛擬ip
3)配置網卡地址192.168.1.20/24爲dip
4)安裝ipvsadm工具
[root@localhost ~]# yum install ipvsadm –y
此時啓動ipvsadm將失敗,提示不存在文件/etc/sysconfig/ipvsadm
5)執行命令service ipvsadm save,將會生成/etc/sysconfig/ipvsadm文件,然後啓動將成功
[root@localhost ~]# service ipvsadm save
[root@localhost ~]# ll /etc/sysconfig/ipvsadm
-rw-r--r-- 1 root root 0 09-10 22:05 /etc/sysconfig/ipvsadm
6)打開linux的數據包轉發功能
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl -p
7)定義服務。
-A:增加virtual service ,即director的vip地址加端口號
-t :tcp -s:算法 scheduler,rr爲輪循調度算法
[root@localhost ~]# ipvsadm -A -t 192.168.2.1:80 -s rr
8)添加服務器。
-a:添加realserver -t:tcp -r :realserver -m:masquerading即nat模式
[root@localhost ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.1.100 -m
[root@localhost ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.1.200 –m
9)使用命令ipvsadm -ln 來查看配置的規則
此時/etc/sysconfig/ipvsadm的內容如下
2. 配置兩臺web服務器
1)配置兩臺服務器的ip將網關指向Director的DIP地址192.168.1.20如下
2)配置兩臺web服務器的首頁
[root@localhost ~]# vim /var/www/html/index.html
[root@localhost ~]# vim /var/www/html/index.html
3)重啓兩臺服務器的httpd服務
4)192.168.2.0網段的一臺主機訪問vip如下
刷新一次將出現如下結果
5)更改調度算法爲wrr
# ipvsadm -E -t 192.168.2.1:80 -s wrr
# ipvsadm -e -t 192.168.2.1:80 -r 192.168.2.100 -m -w 15 將權重調整爲10
# ipvsadm -e -t 192.168.2.1:80 -r 192.168.2.200 -m -w 5 將權重調整爲5
6)保存規則
13.再次訪問,將會出現三次次web1,一次web2站點,這是由於realserver1的權重是realserver2的3倍
案例二:
如下圖所示,director上的網卡eth0:0上配置VIP地址,eth0上配置DIP地址,外網用戶通過交換機訪問到director的VIP,然後director通過DIP將請求發送至兩臺realserver :realserver1和realserver2 ,然後兩臺realserver 通過右側交換機到存儲服務器上查找網頁,在將結果直接通過左側的交換機返回給客戶機,繞開了director。
拓撲圖:
1)配置realserver1ip地址
2)配置realserver2ip地址
3)先修改arp_announce 和arp_ignore的值,然後在分別配置兩臺realserver的loopback 的vip,否則將會出現vip地址衝突
使用命令:sysctl -a |grep arp 查看arp_announce和arp_ignore的值
4)需要將arp_announce的值改爲2,將arp_ignore的值爲1,寫入文件/etc/sysctl.conf
5)配置realserver1的loopback0:0的ip地址,子網掩碼爲4個 255
6) 配置realserver2的loopback0:0的ip地址,子網掩碼爲4個 255,並重啓網絡服務
在兩臺realserver上分別創建路由,即當director將請求發送至realserver上時,目的地址爲1.101,這時候realserver接收到請求並將到達ip爲1.101的請求交與網卡lo:0來處理
Realserver 1上:
7)同理修改realserver2上的內核選項
8)在director上安裝ipvsadm服務
9)聲明服務,添加服務器
# ipvsadm -A -t 192.168.1.101:80 -s rr
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.200 -g
# ipvsadm -a -t 192.168.1.101:80 -r 192.168.1.201 -g
10)保存配置,啓動ipvsadm服務
11) 分別在realserver1和realserver2上安裝httpd服務,並分別產生網頁內容分別爲“web1” “web2”前面的案例已經做過
通過外網訪問,可以交替訪問到兩個網頁
12) 現在直接路由模型已經搭建完成,但是兩個網頁不能保持動態一致,可以使用nfs的開機自動掛載,將共同的頁面存放到一臺獨立的存儲服務器中,當訪問頁面時,自動讀取同一份網頁文件/abc/index.html
#service nfs start
13) 編輯共享清單,將文件夾/abc 共享出來,允許192.168.2.0網段用戶訪問
# vim /etc/exports
14)導出共享清單: r:導出 v:詳細信息
15)在realserver1上,修改文件系統表
16)執行命令mount -a ,然後查看是否掛載成功
17)在realserver2上修改文件系統表,實現開機自動掛載
18)執行命令mount -a ,然後查看是否掛載成功
19)通過訪問director的VIP,直接訪問到了放置在存儲器上的網頁文件
20)自動掛載:
# vim /etc/auto.master
將共享文件掛載到/var/www下,當讀取index.html文件時,自動切換到html目錄下
# vim /etc/auto.nfs1
21)重啓autofs服務