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

18.6 負載均衡集羣介紹

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

• 其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用nginx

• keepalived的負載均衡功能其實就是lvs算法

• lvs這種4層的負載均衡是能夠分發除80外的其餘端口通訊的,好比MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種apache

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

18.7 LVS介紹

•LVS是由國人章文嵩開發後端

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

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

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

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

LVS NAT模式

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

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

• rs須要設定網關爲分發器的內網ip

• 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸

• 在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源

LVS NAT模式的特色

一、LVS NAT模式是經過一個分發器(Load Balancer);把用戶的請求,分發給後端的Real Server ,Real Server這些服務器接收到請求之後,處理好用戶請求之後,就從新丟回給分發器;最後分發器再返回給用戶;

二、LVS NAT模式的弊端是分發器會成爲整個網絡的瓶頸,當訪問量、請求量、反饋量大的時候,分發器的壓力會很大

三、LVS NAT模式的規模,通常最多支持10來臺服務器,超過10臺的話就會有力不從心;

四、LVS NAT模式這個結構,只須要有一個公網IP,其餘real server服務器所有在內網就能夠實現。能夠節省不少的公網IP資源

LVS IP Tunnel模式

• 這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip

• 客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上

• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身

LVS IP Tunnel模式的特色

在分發器(load balancer)與真實服務器(real server)之間創建了虛擬通道,叫作 ip tunnel ;其實是更改了數據包目的IP;請求過來經過分發器,經過在真實服務器上配置的VIP;用戶請求的時候,數據包裏面包好的目的IP,當數據包到達分發器的時候,分發器會進行一個數據包目的IP的更改,而後發送到具體的真實服務器上,經過lvs的本身的算法,進行實現到底傳輸到哪臺真實服務器上;而後真實服務器再解包處理,再經過一個VIP直接經過公網返回到用戶,這樣省略數據回到分發器的過程,減少了分發器的壓力,解決了分發器的瓶頸。

LVS DR模式

• 這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip

• 和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址

• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身

LVS DR模式的特色

與IP Tunnel模式總體過程相同,不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址進行分發。

18.8 LVS調度算法

• 輪詢 Round-Robin  rr

• 加權輪詢 Weight Round-Robin wrr

• 最小鏈接 Least-Connection lc

• 加權最小鏈接 Weight Least-Connection wlc

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

• 帶複製的基於局部性最小鏈接 Locality-Based Least Connections with Replication  lblcr

• 目標地址散列調度 Destination Hashing dh

• 源地址散列調度 Source Hashing  sh

注:前4種爲經常使用的調度算法

18.9/18.10 LVS NAT模式搭建

準備工做

準備三臺機器

• 分發器,也叫調度器(簡寫爲dir)

內網:88.15,外網:99.99(vmware僅主機模式)

• rs1

內網:88.5,設置網關爲88.15

• rs2

內網:88.10,設置網關爲88.15

增長網卡時須要注意:

在虛擬機增長一個新的網卡以後,並設置爲僅主機模式

開啓虛擬機,用ifconfig命令,查看是否已經加載了網卡——>安裝ifconfig包:yum install -y net-tools

複製網卡配置文件到新的網卡里面,並更改配置文件中的IP刪除UUID更改mac

[root@linux-15 ~]# cd /etc/sysconfig/network-scripts/
[root@linux-15 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@linux-15 network-scripts]# vim ifcfg-ens37

更改mac,可使用ip add命令查看,新的網卡的mac,並在配置文件中更改

重啓網卡

ifup ens37

重啓網絡服務

systemctl restart network

用物理機嘗試新的網卡IP是否能通訊

三臺機器上都執行執行

systemctl stop firewalld
systemc disable firewalld
systemctl start iptables
iptables -F 
service iptables save

在分發器上安裝ipvsadm

[root@linux-15 network-scripts]# yum install -y ipvsadm

在分發器上編寫腳本

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 //假裝操做,否則不能轉發rs的數據
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects //假裝操做,否則不能轉發rs的數據
# 注意區分網卡名字,兩個網卡分別爲ens33和ens37
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.88.0/24  -j MASQUERADE
//MASQUERADE實現同網段的機器去上網,路由器使用的就是這個功能
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'  //定義一個變量,方便下面命令引用
$IPVSADM -C    //清空規則
$IPVSADM -A -t 192.168.99.99:80 -s wlc -p 3  //用來定義lvs的模式;wlc爲算法,能夠按需求選擇lvs裏面適合的算法
$IPVSADM -a -t 192.168.99.99:80 -r 192.168.88.5:80 -m -w 1  //詳細規則,-r 指定rs機器IP,-m 指定nat模式,-w指定rs權重
$IPVSADM -a -t 192.168.99.99:80 -r 192.168.88.10:80 -m -w 1  //詳細規則,-r 指定rs機器IP,-m 指定nat模式,-w指定rs權重

IPVSADM -A -t 192.168.142.144:80 -s lc -p 3 : -A增長一個規則,-t 制定lvs 模式,以後IP 就是分發器的IP,-s 指定算法;-p 指定超時時間(數據包轉發超時時間),例如用戶1訪問的是a機器,-p 的意思就是在同一個時間,一直在同一臺機器上進行請求

測試腳本

[root@linux-15 network-scripts]# sh /usr/local/sbin/lvs_nat.sh
[root@linux-15 network-scripts]#

執行腳本,如果沒輸出,表示腳本沒有錯誤

效果測試

使用curl模擬公網IP進行訪問

[root@linux-15 network-scripts]# curl 192.168.99.99
master master
[root@linux-15 network-scripts]# curl 192.168.99.99
This is a default site.
[root@linux-15 network-scripts]# curl 192.168.99.99
master master
[root@linux-15 network-scripts]# curl 192.168.99.99
This is a default site.
[root@linux-15 network-scripts]# curl 192.168.99.99
master master

經過上述結果,說明lvs已經部署成功了

相關文章
相關標籤/搜索