• 主流開源軟件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
•LVS是由國人章文嵩開發後端
• 流行度不亞於apache的httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高bash
• LVS最新版本基於Linux內核2.6,有好多年不更新了服務器
• LVS有三種常見的模式:NAT、DR、IP Tunnel網絡
• LVS架構中有一個核心角色叫作分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)架構
• 這種模式藉助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資源
• 這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip
• 客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上
• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
在分發器(load balancer)與真實服務器(real server)之間創建了虛擬通道,叫作 ip tunnel ;其實是更改了數據包目的IP;請求過來經過分發器,經過在真實服務器上配置的VIP;用戶請求的時候,數據包裏面包好的目的IP,當數據包到達分發器的時候,分發器會進行一個數據包目的IP的更改,而後發送到具體的真實服務器上,經過lvs的本身的算法,進行實現到底傳輸到哪臺真實服務器上;而後真實服務器再解包處理,再經過一個VIP直接經過公網返回到用戶,這樣省略數據回到分發器的過程,減少了分發器的壓力,解決了分發器的瓶頸。
• 這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip
• 和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址
• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
與IP Tunnel模式總體過程相同,不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址進行分發。
• 輪詢 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種爲經常使用的調度算法
準備三臺機器
• 分發器,也叫調度器(簡寫爲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
[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已經部署成功了