LVS服務原理以及搭建


一、LVS簡介

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統,目的在於使用集群技術和Linux操作系統實現一個高性能、高可用的服務器。它具有良好的可靠性,可拓展性和可操作性。從而以低廉的成本實現最優的性能。

二、LVS的體系架構

使用LVS架設的服務器集群系統有三個部分組成:最前端的負載均衡層(Loader Balancer),中間的服務器群組層,用Server Array表示,最底層的數據共享存儲層,用Shared Storage表示。在用戶看來所有的應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。

LVS服務原理以及搭建(理論+干貨)

LVS的各個層次的詳細介紹:

Load Balancer層:位於整個集群系統的最前端,有一台或者多台負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。

Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。

Shared Storage層:是為所有Real Server提供共享存儲空間和內容一致性的存儲區域,在物理上,一般有磁盤陣列設備組成,為了提供內容的一致性,一般可以通過NFS網絡文件系統共享數 據,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以采用集群文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。

從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的操作系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就可以支持LVS功能,而FreeBSD作為 Director Server的應用還不是很多,性能也不是很好。對於Real Server,幾乎可以是所有的系統平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。

三、LVS模式

IP負載均衡技術:

負載均衡技術有很多實現方案,有基於DNS域名輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度算法中,執行效率最高的是IP負載均衡技術。

LVS 的IP負載均衡技術是通過IPVS模塊來實現的,IPVS是LVS集群系統的核心軟件,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須通過這個虛擬的IP地址訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達負載調度器,然后由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。

當用戶的請求到達負載調度器后,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:

VS/NAT: 即(Virtual Server via Network Address Translation)

也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改成選定的Real Server的相應端口,最后將報文請求發送到選定的Real Server。在服務器端得到數據后,Real Server返回數據給用戶時,需要再次經過負載調度器將報文的源地址和源端口改成虛擬IP地址和相應端口,然后把數據發送給用戶,完成整個負載調度過程。可以看出,在NAT方式下,用戶請求和響應報文都必須經過Director Server地址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。

VS/TUN :即(Virtual Server via IP Tunneling)

也就是IP隧道技術實現虛擬服務器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器采用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網絡。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的吞吐量大大提高。

VS/DR: 即(Virtual Server via Direct Routing)

也就是用直接路由技術實現虛擬服務器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。

四、LVS調度算法

Lvs的調度算法決定了如何在集群節點之間分布工作負荷。當director調度器收到來自客戶端訪問VIP的上的集群服務的入站請求時,director調度器必須決定哪個集群節點應該處理請求。Director調度器用的調度方法基本分為兩類:

固定調度算法:rr,wrr,dh,sh

動態調度算法:wlc,lc,lblc,lblcr

LVS服務原理以及搭建(理論+干貨)

LVS調度算法的生產環境選型:

1、一般的網絡服務,如http,mail,mysql等常用的LVS調度算法為:

a.基本輪詢調度rr

b.加權最小連接調度wlc

c.加權輪詢調度wrc

2、基於局部性的最小連接lblc和帶復制的給予局部性最小連接lblcr主要適用於web cache和DB cache

3、源地址散列調度SH和目標地址散列調度DH可以結合使用在防火牆集群中,可以保證整個系統的出入口唯一。

實際適用中這些算法的適用范圍很多,工作中最好參考內核中的連接調度算法的實現原理,然后根據具體的業務需求合理的選型。

五、實際搭建

術語 VIP: 虛擬服務器地址

DIP: 轉發的網絡地址

–1,和RIP通信:ARP協議,獲取Real Server的RIP:MAC地址

–2,轉發Client的數據包到RIP上(隱藏的VIP)

RIP: 后端真實主機(后端服務器)

CIP: 客戶端IP地址

VIP: 虛擬主機IP

 

LVS/DR:

1、准備3台虛擬機,使eth0在同一個網段上,使DIP和RIP在統一網段

2、配置lvs的VIP

Ifconfig eth0:0 192.168.249.100/24

(24 代表該 IP 的子網掩碼為 255.255.255.0)

3、調整RS的響應。通告級別(每一台RS都配)

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

4、5,配置RS的VIP(每一台RS都配)

Ifconfig lo:8 192.168.249.100 netmask 255.255.255.255

5、啟動RS上的httpd

yum -y install httpd

在httpd服務的默認路徑 /var/www/html/ 下新建一個入口訪問頁

測試兩台RS 能否訪問

6、LVS——ipvsadm

yum -y install ipvsadm

ipvsadm -A -t 192.168.249.100:80 -s rr

ipvsadm -a -t 192.168.249.100:80 -r 192.168.249.120 -g -w 1 (-w 表示設置權重)

ipvsadm -a -t 192.168.249.100:80 -r 192.168.249.130 -g -w 1

ipvsadm –ln 顯示內核服務器列表

瀏覽器刷新: 訪問vip

ipvsadm -lnc 顯示lvs的連接詳情

到這里基本的服務已經配置完了

注意:這套配置中,VIP 、通告級別、以及httpd 在服務器重啟后,都需要重新設置

當然也可以設置httpd為開機啟動:chkconfig httpd on

使VIP永久生效用,設置子網卡:

vi /etc/sysconfig/network-scripts/ifcfg-lo:8

DEVICE=lo:8

IPADDR=192.168.249.100

NETMASK=255.255.255.25

但是,重啟之后必須手動重新設置通告級別,所以還是比較麻煩

7、因此編寫如下啟動配置腳本(分為LVS server腳本 和 real server腳本):

7.1、配置lvs的dr模式LVS server腳本,如下:

#!/bin/bash

#配置lvs的

VIP=192.168.249.100 #(注意,lvs server那台機器2個ip,一個是vip,一個是本身ip例如192.168.249.110)

RIP1=192.168.249.120

RIP2=192.168.249.130

#RIPn=192.168.249.n

VPORT=80

RPORT=80

Usage (){

echo "Usage:`basename $0` 請輸入:(start|stop|status) "

exit 1

}

if [ $# -ne 1 ];then

Usage

fi

case "${1}" in

start)

echo "start LVS of DirectorServer"

echo 1 > /proc/sys/net/ipv4/ip_forward #表示允許數據包轉發

# set the vip 配置lvs的VIP

/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/route add -host $VIP dev eth0:0

# clear ipvs table 清空ipvs規則

/sbin/ipvsadm -C

# add lvs vip and port

/sbin/ipvsadm -A -t $VIP:$VPORT -s rr

# add rip and port

/sbin/ipvsadm -a -t $VIP:$VPORT -r $RIP1:$RPORT -g -w 1

/sbin/ipvsadm -a -t $VIP:$VPORT -r $RIP2:$RPORT -g -w 1

/sbin/ipvsadm -L -n

echo "start success!!!"

;;

stop)

echo "close LVS DirectorServer"

/sbin/ipvsadm -C

/sbin/ifconfig eth0:0 down

echo "closed !!!"

;;

status)

/sbin/ipvsadm -L -n

;;

*)

Usage

esac

7.2、real server 腳本如下:(每台real server 都單獨有自己的一個啟動腳本,腳本內容一樣)

#!/bin/bash

#real_server配置腳本 lvs的dr模式RIP server腳本

VIP=192.168.249.100

#vip's broadcast 虛擬服務器的廣播地址

BROADCAST=192.168.249.255

Usage () {

echo "Usage:`basename $0` 請輸入:(start|stop)"

exit 1

}

if [ $# -ne 1 ];then

Usage

fi

case $1 in

start)

echo "reparing for Real Server"

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce

/sbin/ifconfig lo:8 $VIP netmask 255.255.255.255 broadcast $BROADCAST up

/sbin/route add -host $VIP dev lo:8

echo "start success!!!"

;;

stop)

/sbin/ifconfig lo:8 down

echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce

echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_ignore

echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce

echo "stop Real Server"

;;

*)

Usage

esac

7.3開機自啟動

如果覺得每次開機后還得執行腳本來啟動服務配置,那么就可這直接將腳本設為開機啟動,具體如下圖

LVS服務原理以及搭建(理論+干貨)

將要開機執行的腳本全路徑寫在/etc/rc.local 文件末尾,下次開機啟動的時候將會自動執行你添加的腳本。

***常用ipvsadm命令:

-A –add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也

就是增加一台新的虛擬服務器。

-E –edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄。

-D –delete-service 刪除內核虛擬服務器表中的一條虛擬服務器記錄。

-C –clear 清除內核虛擬服務器表中的所有記錄。

-R –restore 恢復虛擬服務器規則

-S –save 保存虛擬服務器規則,輸出為-R 選項可讀的格式

-a –add-server 在內核虛擬服務器表的一條記錄里添加一條新的真實服務器

記錄。也就是在一個虛擬服務器中增加一台新的真實服務器

-e –edit-server 編輯一條虛擬服務器記錄中的某條真實服務器記錄

-d –delete-server 刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l –list 顯示內核虛擬服務器表

-Z –zero 虛擬服務表計數器清零(清空當前的連接數量等)

–set tcp tcpfin udp 設置連接超時值

–start-daemon 啟動同步守護進程。他后面可以是master 或backup,用來說

明LVS Router 是master 或是backup。在這個功能上也可以采用keepalived 的

VRRP 功能。

–stop-daemon 停止同步守護進程

-h –help 顯示幫助信息

其他的選項:

-t –tcp-service service-address 說明虛擬服務器提供的是tcp 的服務

[vip:port] or [real-server-ip:port]

-u –udp-service service-address 說明虛擬服務器提供的是udp 的服務

[vip:port] or [real-server-ip:port]

-f –fwmark-service fwmark 說明是經過iptables 標記過的服務類型。

-s –scheduler scheduler 使用的調度算法,有這樣幾個選項

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,

默認的調度算法是: wlc.

-p –persistent [timeout] 持久穩固的服務。這個選項的意思是來自同一個客

戶的多次請求,將被同一台真實的服務器處理。timeout 的默認值為300 秒。

-M –netmask netmask persistent granularity mask

-r –real-server server-address 真實的服務器[Real-Server:port]

-g –gatewaying 指定LVS 的工作模式為直接路由模式(也是LVS 默認的模式)

-i –ipip 指定LVS 的工作模式為隧道模式

-m –masquerading 指定LVS 的工作模式為NAT 模式

-w –weight weight 真實服務器的權值

–mcast-interface interface 指定組播的同步接口

-c –connection 顯示LVS 目前的連接 如:ipvsadm -L -c

–timeout 顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout

–daemon 顯示同步守護進程狀態

–stats 顯示統計信息

–rate 顯示速率信息

–sort 對虛擬服務器和真實服務器排序輸出

–numeric -n 輸出IP 地址和端口的數字形式

六、上面提到開機啟動腳本,下面順便聊一下定時執行shell腳本

例如每分鍾要執行一次test.sh腳本

crontab -l 每個用戶都有各自不同的計划任務列表,用各自的帳戶登錄后運行

crontab -e 查看到各任務的計划任務情況,可以修改自己的計划任務

(*/1 * * * * 為cron表達式,這個表示每分鍾執行一次,具體的可以百度一下哦)

其中*/1 * * * * /user/script/test.sh(一定要絕對路徑)

LVS服務原理以及搭建(理論+干貨)

保存后,必須重新啟動crond服務,不然不會生效

service crond restart

LVS服務原理以及搭建(理論+干貨)

我的腳本是:

echo "測試開機調用,現在時間:`date '+%Y/%m/%d %H:%M:%S'`" >> /user/script/log.txt

查看定時執行效果:

LVS服務原理以及搭建(理論+干貨)

這樣一個簡單的定時任務就ok了

*** crontab常用命令簡紹

crontab -u //設定某個用戶的cron服務,一般root用戶在執行這個命令的時候需要此參數。

crontab -l //列出某個用戶cron服務的詳細內容

crontab -r //刪除沒個用戶的cron服務

crontab -e //編輯某個用戶的cron服務

需要將crond設置為系統啟動后自動啟動的服務,可以在/etc/rc.d/rc.local 中,在末尾加上 service crond start

基本用法:

crontab -l 列出當前的crontab任務

crontab -d 刪除當前的crontab任務

crontab -e (solaris5.8上面是 crontab -r)編輯一個crontab任務,ctrl_D結束

crontab filename 以filename做為crontab的任務列表文件並載入

crontab file的格式:

crontab 文件中的行由 6 個字段組成,不同字段間用空格或 tab 鍵分隔。前 5 個字段指定命令要運行的時間

分鍾 (0-59)

小時 (0-23)

日期 (1-31)

月份 (1-12)

星期幾(0-6,其中 0 代表星期日)

補充:在使用crontab的時候,要特別注意的是運行腳本中能夠訪問到的環境變量和當前測試環境中的環境變量未必一致,一個比較保險的做法是在運行的腳本程序中自行設置環境變量(export)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM