1. 程式人生 > >2018-4-10 15周5次課 lvs負載均衡

2018-4-10 15周5次課 lvs負載均衡

lvs

18.6 負載均衡集群介紹


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

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

·keepalived的負載均衡功能其實就是lvs

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

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





18.7 LVS介紹


·LVS是由國人章文嵩開發

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

·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 IP Tunnel模式

技術分享圖片

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

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

·rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己


·LVS DR模式

技術分享圖片

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

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

·rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己





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





18.9/18.10 LVS NAT模式搭建



準備工作:

1,配置三臺機器

第一臺作為轉發器,ip:192.168.65.128,添加第二塊網卡作為外網ip:192.168.174.128

技術分享圖片


第二臺主機為rs1,ip:192.168.65.129,網關為第一臺主機的內網ip

技術分享圖片


第三臺主機為rs2,ip:192.168.65.130,網關為第一臺主機的內網ip

技術分享圖片

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


編輯第一臺機器的第二塊網卡:

技術分享圖片

可ping通,網絡已通

技術分享圖片


2,關閉防火墻

iptables -nvL查看iptables規則,iptables -F清空規則

systemctl stop firewalld關閉firewalld服務,如果加入開機啟動systemctl disable firewalld

關閉selinux


在dir上安裝ipvsadm

[root@localhost ~]# yum install -y ipvsadm

(過程省略)

[root@localhost ~]# vim /usr/local/sbin/lvs_nat.sh

技術分享圖片

[root@localhost ~]# sh /usr/local/sbin/lvs_nat.sh


RS1上:

[root@localhost ~]# curl localhost
This is the default site.
RS1


RS2上:

[root@localhost ~]# curl localhost
This is the default site.
RS2


訪問192.168.174.174

技術分享圖片


ipvsadm的規則:

[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.174.174:80 wlc persistent 3
-> 192.168.65.129:80            Masq    1      0          0
-> 192.168.65.130:80            Masq    1      0          1


可能連續幾次訪問該ip結果都是RS2,也許是緩存的原因

可以把lvs_nat.sh的IPVSADM規則第一條改為:輪詢

$IPVSADM -A -t 192.168.174.174:80 -s rr

技術分享圖片

[root@localhost ~]# sh /usr/local/sbin/lvs_nat.sh            ##重新sh一下


用curl來連外網ip,看看結果

技術分享圖片

訪問還是非常平均的,這是rr起作用了

實驗成功!


2018-4-10 15周5次課 lvs負載均衡