1. 程式人生 > >負載均衡(集群介紹,lvs介紹,LVS調度算法,NAT模式搭建)

負載均衡(集群介紹,lvs介紹,LVS調度算法,NAT模式搭建)

bottom table all lvs dr 有一個 gen 輪詢 chang 定向

一、負載均衡集群介紹

負載均衡集群:簡單地說就是讓多臺服務器均衡地去承載壓力。

實現負載均衡的開源軟件有: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模式搭建)