負載均衡(集群介紹,lvs介紹,LVS調度算法,NAT模式搭建)
負載均衡集群:簡單地說就是讓多臺服務器均衡地去承載壓力。
實現負載均衡的開源軟件有:LVS,keepalived,haproxy,nginx等
其中相對於(網絡OSI七層模型),LVS屬於四層,Nginx屬於七層,haproxy既可以認為四層,也可以認為是七層。
keepalived的負載均衡功能其實就是lvs
lvs這種4層的負載均衡是可以分發出80外的其他端口通信的,比如Mysql,而七層nginx僅僅支持http.https,mail,haproxy也支持mysql這種。
相比較來說,LVS這種4層的更穩定,能承受更多的情趣,而Nginx這種7層的更加靈活,能實現更多的個性化需求。
二、LVS介紹
LVS由國人章文嵩開發,流行度不亞於httpd,基於TCP/IP做的路由和轉發,穩定性和效率很高
LVS有三種常見的模式:NAT,DR,IP Tunnel
LVS架構中有一個核心角色叫做分發器(Load Balancer),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(RealServer,簡稱rs)
LVS的NAT模式:
這種模式借助iptables的nat表來實現,用戶的請求到分發器後,通過預設的iptables規則,把請求的數據包轉發到後端的rs上去。
rs需要設定網關為分發器的內網ip,用戶請求的數據包和返回的用戶的數據包全部經過分發器,所以分發器成為瓶頸。
優點:在NAT模式中,只需要分發器有公網Ip,分發器和rs之間可以用內網通信,所以比較節省公網ip資源
缺點:分發器成為瓶頸,請求量不能太大。規模保持在10臺左右。
刪除筆記修改筆記
LVS IP Tunnel模式
我們可以想象分發器和每個rs之間建立了一個虛擬通道。這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip,
原理是客戶端請求的目標IP為vip,分發器接收到請求數據包後,會對數據包做一個交工,會把目標IP由vip更改為rs的IP,這樣數據包就到了rs上。
rs接受數據包後,會還原原始數據包,這樣目標IP為vip,因為所有的rs上配置了這樣一個vip,所以它會認為是它自己。
LVS DR模式
這種模式也需要一個公共的ip配置在分發器和所有rs上,也就是vip,
和IP Tunnel不同的是,它會把所有的MAC地址修改為rs的MAC,
rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認識是它自己。
三、LVS調度算法
常用的4種
輪詢:Round-Robin rr (任務均衡的分發到rs上)
加權輪詢:Weight Round-Robin wrr (帶權重的輪詢,例如一個rs的配置好,你可以將它權重設置高一點)
最小連接:Least-Connection lc (把新的任務發送到請求數少的rs上)
加權最小連接:Weight Least-Connection wlc (帶權重的最小連接)
不常用的4種
基於局部性的最小連接:Locality-Based Least Connections lblc
帶復制的基於局部性最小鏈接:Locality-Based Least Connections with Replication lblcr
目標地址散列調度:Destination Hashing dh
源地址散列調度:Source Hashing sh
四、NAT模式搭建
準備工作:
三臺機器
分發器,也叫調度器(dir)
內網:192.168.52.100 外網:192.168.211.100 (vmware僅主機模式)
rs1:
內網:192.168.52.101 網關GATEWAY:192.168.52.100 (將網關設置成分發器的內網)
[root@zhuji ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.52.100 0.0.0.0 UG 100 0 0 ens33
192.168.52.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
rs2:
外網:192.168.52.102 網關GATEWAY:192.168.52.100 (將網關設置成分發器的內網)
[root@zhuji ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.52.100 0.0.0.0 UG 100 0 0 ens33
192.168.52.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
三臺機器關閉防火墻:
[root@lty ~]# systemctl stop firewalld
[root@lty ~]# systemctl disable firewalld
三臺機器使用centos6中iptables的規則:
[root@lty ~]# yum install iptable-service -y
[root@zhuji ~]# systemctl start iptables
[root@zhuji ~]# iptables -F
[root@zhuji ~]# service iptables save
[root@zhuji ~]# systemctl enable iptables
三臺機器關閉selinux:
[root@lty ~]# setenforce 0
配置:
在dir上安裝ipvsadm (這個工具是實現lvs的重要工具,只用在分發器上安裝)
[root@congji ~]# yum install ipvsadm -y
在dir上編輯腳本,在ipvsadm上最好用腳本去執行命令,方便簡潔:
[root@congji ~]# 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
# 註意區分網卡名字,阿銘的兩個網卡分別為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.52.0/24 -j MASQUERADE
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.221.100:80 -s rr
$IPVSADM -a -t 192.168.221.100:80 -r 192.168.52.101:80 -m -w 1
$IPVSADM -a -t 192.168.221.100:80 -r 192.168.52.102:80 -m -w 1
[root@congji ~]# sh !$
sh /usr/local/sbin/lvs.nat.sh
測試:兩臺機子上都要安裝Nginx/
dir用Yum安裝nginx,修改主頁:
[root@congji ~]# vim /usr/share/nginx/html/index.html
dir,dir,dir
rs1用源碼包安裝nginx,修改主頁:
[root@zhuji ~]# vim /data/wwwroot/default/index.html
rs1,rs1,rs1
rs2用yum 安裝,修改主頁:
[root@lty ~]# vim /usr/share/nginx/html/index.html
rs2,rs2,rs2
curl測試:
[root@congji ~]# curl 192.168.221.100
rs2,rs2,rs2
[root@congji ~]# curl 192.168.221.100
rs1,rs1,rs1
[root@congji ~]# curl 192.168.221.100
rs2,rs2,rs2
[root@congji ~]# curl 192.168.221.100
rs1,rs1,rs1
[root@congji ~]# curl 192.168.221.100
rs2,rs2,rs2
[root@congji ~]# curl 192.168.221.100
rs1,rs1,rs1
負載均衡(集群介紹,lvs介紹,LVS調度算法,NAT模式搭建)