1. 程式人生 > >六十二、負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建

六十二、負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建

負載均衡集群介紹 LVS介紹 LVS的調度算法 LVS NAT模式搭建

六十二、負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建

一、負載均衡集群介紹

主流開源軟件LVS、keepalived、haproxy、nginx等

其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用。

OSI簡介:OSI采用了分層的結構化技術,共分七層,物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。

keepalived的負載均衡功能其實就是lvs,內置的功能。

lvs這種4層的負載均衡是可以分發除80外的其他端口通信的,比如MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種

相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求。


二、LVS介紹

LVS是由國人章文嵩開發

流行度不亞於apache的httpd,基於TCP/IP做的路由和轉發,穩定性和效率很高

LVS最新版本基於Linux內核2.6,有好多年不更新了

LVS有三種常見的模式:NAT、IP Tunnel、DR

LVS架構中有一個核心角色叫做分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs

LVS NAT模式

技術分享圖片技術分享圖片

Load Balance:分發器

過程:用戶發送請求到分發器,分發器再分發任務給後端的rs服務器,rs服務器處理好了結果以後再把結果告訴分發器,分發器再反饋給用戶。

因為分發器需要處理很多任務,所以請求量不能太大,一般的規模就十來臺,或者十臺以下,否則就可能力不從心了,除非配置很高。

這種模式借助iptables的nat表來實現

用戶的請求到分發器後,通過預設的iptables規則,把請求的數據包轉發到後端的rs上去

rs只需要設定網關為分發器的內網ip即可,因為不與外界通信。

用戶請求的數據包和返回給用戶的數據包全部需要經過分發器,所以分發器成為瓶頸。

在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源

LVS IP Tunnel模式

技術分享圖片技術分享圖片

這種模式,需要有一個公共IP配置在分發器和所有rs上,我們把它叫做vip

IP Tunnel實現原理:

1.客戶端請求的目標IP為vip,分發器接收到請求數據包後,會對數據包做一個加工,會把目標IP改為某臺rs的IP,這樣數據包就到了rs上。

2.rs接收數據包後,會還原原始數據包,這樣原來包裏的目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己,數據包裏有來源IP,然後rs處理好數據以後,通過公網IP直接把結果發送給用戶;所以這裏分發器就沒有瓶頸了,就沒那麽累了。

LVS DR模式

技術分享圖片技術分享圖片

這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip。

這裏分發器叫director,NAT模式和IP Tunnel模式是叫Load balance。

分發器和rs服務器需要有一個內網

和IP Tunnel不同的是,它會把數據包的MAC地址修改為rs的MAC地址。

rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己,然後rs處理好數據,通過公網IP直接把結果發送給用戶。


三、LVS調度算法

前面四種常用,重點:

輪詢 Round-Robin rr

//分發器均衡的把用戶的請求發送到rs上。

加權輪詢 Weight Round-Robin wrr

//帶權重的輪詢,配置好的rs權重就可以給高點,分配到的任務就多一些。

最小連接 Least-Connection lc

//將用戶請求發送到請求量少的rs服務器上去,因為rs閑,就會處理更快。

加權最小連接 Weight Least-Connection wlc

基於局部性的最小連接 Locality-Based Least Connections lblc

帶復制的基於局部性最小連接 Locality-Based Least Connections with Replication lblcr

目標地址散列調度 Destination Hashing dh

源地址散列調度 Source Hashing sh


四、LVS NAT模式搭建

準備工作:

三臺機器

1)分發器,也叫調度器(簡寫為dir)

先把網卡2改成僅主機模式,然後進虛擬網路編輯器看一下子網地址的網段,再更改ens37的網絡配置,設定好後啟動網卡,用Windows的cmdping一下這個232.1看是否可以通信。

內網ens33:93.130,外網ens37:232.1(ens37改為僅主機模式)

2)rs1

內網:93.131,設置網關為93.130(分發器內網IP)

安裝個iptables-services。

3)rs2

內網:93.132,設置網關為93.130

三臺機器上都執行執行

systemctl stop firewalld; systemctl disable firewalld

systemctl start iptables;systemctl enable iptables; iptables -F; service iptables save

關閉selinux。

開始搭建NAT模式:

dir(分發器)上安裝ipvsadm

ipvsadm工具:實現LVS的一個重要工具。

yum install -y ipvsdam

在dir上編寫腳本,LVS都是以腳本的方式執行的,方便維護。

# vim /usr/local/sbin/lvs_nat.sh//內容如下

#! /bin/bash

# director 服務器上開啟路由轉發功能,這個參數就是內核參數,實現路由轉發。

echo 1 > /proc/sys/net/ipv4/ip_forward

# 關閉icmp的重定向

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

# 註意區分網卡名字,自己的網卡名是什麽就寫什麽。

echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects

# director 設置nat防火墻

iptables -t nat -F

iptables -t nat -X //清空鏈

iptables -t nat -A POSTROUTING -s 192.168.93.2/24 -j MASQUERADE //可以讓同網段的內網去上網。

# director設置ipvsadm的功能

IPVSADM='/usr/sbin/ipvsadm' //這裏設置了一個變量,下面去引用這個變量($IPVSADM)。

$IPVSADM -C //清空規則

$IPVSADM -A -t 192.168.232.1:80 -s wlc -p 3 //這裏的wlc是算法,可以寫rr等;-A增加一條規則,指定是nat模式還是ip tunnel模式,還是DR模式;-t後跟的是分發器的外網IP;-s指定算法;-p指定它的超時時間,3秒之內一直訪問到A服務器上去,可以設置0,如果設置0無法執行這個腳本,就去掉這個參數。

$IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.131:80 -m -w 1

$IPVSADM -a -t 192.168.232.1:80 -r 192.168.93.132:80 -m -w 1

這裏下面的兩條規則:

-r:指定rs服務器

-m:說明是NAT模式

-w:權重

NAT模式效果測試

# sh /usr/local/sbin/lvs_nat.sh //先執行這個腳本,沒有輸出就是沒有錯誤

兩臺rs上都安裝nginx

設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結果

# vim /usr/share/nginx/html/index.html //對兩臺機器寫上不同的內容進行區分,我這裏因為第三臺默認頁是nginx的默認虛擬主機,所以在默認虛擬主機的index.html改內容:/data/wwwroot/default/index.html

測試:# curl 192.168.232.1

多訪問幾次看結果差異,可以發現訪問的一直是rs1和rs2在切換訪問。


擴展

lvs 三種模式詳解 http://www.it165.net/admin/html/201401/2248.html

lvs幾種算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html

關於arp_ignore和 arp_announcehttp://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

lvs原理相關的 http://blog.csdn.net/pi9nc/article/details/23380589


六十二、負載均衡集群介紹、LVS介紹、LVS的調度算法、LVS NAT模式搭建