# 高併發解決方法-LVS、LVS-NAT、LVS-DR ## 前言: 集群功能分類: 1.LB Load Balancing,負載均衡(增加處理能力),有一定高可用能力,但不是高可用集群,是以提高服務的**併發處理**能力為根本著重點。**LVS** 2.HA High Availability ...
高併發解決方法-LVS、LVS-NAT、LVS-DR
前言:
集群功能分類:
1.LB Load Balancing,負載均衡(增加處理能力),有一定高可用能力,但不是高可用集群,是以提高服務的併發處理能力為根本著重點。LVS
2.HA High Availability 高可用集群(增加服務可用性),是以提升服務的始終線上能力為著重點,不會因為宕機而導致服務不可用。Keepalived
大型網站高併發解決方案LVS
負載均衡
(Load Balance)負載均衡,當然這是一個簡單的概括,比如,我有10台機器都提供web服務,那麼我如何均衡的利用這10台機器呢,讓這10台機器保證高性能、高可用、高併發就是負載均衡要考慮和要做的事情。
實現負載均衡一般可以使用順序、比重、流量、服務類別等進行分配,負載均衡的部署方式也分為路由和服務直接返回模式
負載均衡的主要方式
1.http重定向
2.DNS負載均衡
優點:
將負載均衡的工作交給了DNS,省卻了網站管理維護負載均衡伺服器的麻煩,同時許多DNS還支持基於地理位置的功能變數名稱解析,將功能變數名稱解析成距離用戶地理最近的一個伺服器地址,加快訪問速度嗎,改善性能。
缺點:
目前的DNS解析是多級解析,每一級DNS都可能化緩存記錄A,當某一伺服器下線後,該伺服器對應的DNS記錄A可能仍然存在,導致分配到該伺服器的用戶訪問失敗。
DNS負載均衡的控制權在功能變數名稱服務商手裡,網站可能無法做出過多的改善和管理。
不能夠按伺服器的處理能力來分配負載。DNS負載均衡採用的是簡單的輪詢演算法,不能區分伺服器之間的差異,不能反映伺服器當前運行狀態,所以其的負載均衡效果並不是太好。
可能會造成額外的網路問題。為了使本DNS伺服器和其他DNs伺服器及時交互,保證DNSs數據及時更新,使地址能隨機分配,一般都要將DNS的刷新時間設置的較小,但太小將會使DNS流量大增造成額外的網路問題。3.反向代理負載均衡
4.ip負載均衡
優點:在響應請求時速度較反向伺服器負載均衡要快。
缺點。如法處理更高級的請求5.數據鏈路層負載均衡
優點:不需要負載均衡伺服器進行IP地址的轉換。數據響應時,不需要經過負載均衡伺服器。
缺點:負載均衡伺服器的網卡帶寬要求較高。
四層負載和七層負載
所謂四層就是基於IP+埠的負載均衡,主要代表有lvs。
七層負載也稱內容交換,就是基於URL等應用層信息.的負載均衡,主要代表有nginx。
關於代理
正向代理
反向代理
LVS概述
LVS是Linux Virtual Server 也就是Linux虛擬伺服器
LVS工作在一臺server上提供Directory(負載均衡器)的功能,本身並不提供服務,只是把特定的請求轉發給對應的real server(真正提供服務的主機),從而實現集群環境中的負載均衡。
LVS工作模式:
NAT轉發模式
1.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端lP),後面統稱為CIP,目標地址為VIP(負載均衡器前端地址,後面統稱為VIP)。
2.負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將客戶端請求報文的目標IP地址改為了後端伺服器的RIP地址並將報文根據演算法發送出去。
R.報文送到Real Server後,由於報文的目標地址是自己,所以會響應該請求,並將響應報文返還給LVS。
4.然後LVS將此報文的源地址修改為本機併發送給客戶端。
優點:
網路隔離安全,節約IP地址
還有DR直接路由模式、TUN-IP隧道模式、FULL-NAT等...
LVS-NAT實戰案例
準備:
client: VMNET0 192.168.31.86
LVS: VMNET0 192.168.31.143
VMNET2 192.168.198.128
web1: VMNET 2 192.168.198.129
web2: VMNET 2 192.168.198.130
關閉防護牆 關閉selinux
步驟:
1.web1配置網站和路由
yum install -y httpd //先使用NAT網路連接 安裝好httpd
systemctl start httpd
systemctl enable httpd //完成後切換為vmnet2僅主機網路
echo "web1" > /var/www/html/index.html
route add default gw 192.168.198.128 //配置真實伺服器的網路出口 -net外部網路 gw網關
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2a55dccb-7784-4b4e-a5e2-4004033803fa"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.198.129
NETMASK=255.255.255.0
GATEWAY=192.168.198.128 //只允許LVS的vmnet2通過
DNS1=114.114.114.114
2.web2配置網站和路由
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "web2" > /var/www/html/index.html
route add default gw 192.168.198.128 //配置真實伺服器的網路出口 -net外部網路 gw網關
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="2a55dccb-7784-4b4e-a5e2-4004033803fa"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.198.130
NETMASK=255.255.255.0
GATEWAY=192.168.198.128
DNS1=114.114.114.114
3.LVS-NAT配置路由功能和負載策略
[root@localhost ~]# vim /etc/sysctl.conf //啟動路由轉發功能
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p //查詢路由轉發功能是否開啟
yum install -y ipvsadm //安裝LVS
ipvsadm -A -t 192.168.31.32:80 -s rr //-A 對外提供地址 -t tcp協議 -s rr 使用rr策列輪詢策略
ipvsadm -a -t 192.168.31.32:80 -r 192.168.192.129:80 -m //-a對內真實伺服器 -r真實伺服器地址
ipvsadm -a -t 192.168.31.32:80 -r 192.168.192.130:80 -m
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.198.128
NETMASK=255.255.255.0
4.client測試
[root@localhost ~]# curl 192.168.198.129 //測試 直接curl realserver內網 是不行的 如果可以說明realserver並不在內網
curl: (7) Failed to connect to 192.168.198.129: 網路不可達
[root@localhost ~]# curl 192.168.198.130
curl: (7) Failed to connect to 192.168.198.130: 網路不可達
[root@localhost ~]# curl 192.168.31.143 //測試 curl LVSserver 正確是把請求通過DIP轉發到realserver
web22222
[root@localhost ~]# curl 192.168.31.143
web111111
DR轉發模式
Director Server作為群集的訪問入口,但不作為網關使用,後端伺服器池中的Real Server與Director Server在同一個物理網路中,發送給客戶機的數據包不需要經過Director Server。為了響應對整個群集的訪問,DS(前端負載均衡節點伺服器)與RS(後端真實伺服器)都需要配置有VIP地址
每個Real Server上都有兩個IP:VIP(負載均衡對外提供訪問的 IP 地址)和RIP(負載均衡後端的真實伺服器 IP 地址),但是VIP是隱藏的,就是不能提供解析等功能,只是用來做請求回覆的源IP的,Director上只需要一個網卡,然後利用別名來配置兩個IP:VIP和DIP(負載均衡與後端伺服器通信的 IP 地址),在DIR接收到客戶端的請求後,DIR根據負載演算法選擇一臺rs sever的網卡mac作為客戶端請求包中的目標mac,通過arp轉交給後端RS serve處理,後端再通過自己的路由網關回覆給客戶端
特點:
1.Director Server 和 Real Server 必須在同一個物理網路中
2.Real Server 可以使用私有地址,也可以使用公網地址,如果使用公網地址,可以通過互聯網對 RIP 進行直接訪問
3.Director Server作為群集的訪問入口,但不作為網關使用
4.所有的請求報文經由 Director Server,但回覆響應報文不能經過 Director Server
5.Real Server 的網關不允許指向 Director Server IP,即Real Server發送的數據包不允許經過 Director Server
6.Real Server 上的 lo 介面配置 VIP 的 IP 地址
優點:
負載均衡器只負責將請求包分發給物理伺服器,而物理伺服器將應答包直接發給用戶。所以,負載均衡器能處理很巨大的請求量,這種方式,一臺負載均衡能為 超過100台的物理伺服器服務,負載均衡器不再是系統的瓶頸。
LVS-DR模式實戰
準備:
四台統一網段的ip 關閉selinux 關閉防火牆
client:192.168.70.132
LVS:192.168.70.130
web1:192.168.70.133
web1:192.168.70.134
步驟:
1.LVS增加VIP
ifconfig //查看網卡
ifconfig ens33:0 192.168.70.131 broadcast 192.168.70.255 netmask 255.255.255.0 up //添加新ip
route add -host 192.168.70.131 //添加路由
2.LVS開啟路由轉發
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 // 開啟路由轉發功能
net.ipv4.conf.all.send_redirects = 0 //禁止轉發重定向報文
net.ipv4.conf.ens33.send_redirects = 0 //禁止ens33轉發重定向報文
net.ipv4.conf.default.send_redirects = 0 //禁止轉發預設重定向報文
3.LVS設置路由轉發規則/規則(設置ipvsadm)
yum install ipvsadm -y
ipvsadm -C //清除ipvs規則
ipvsadm -A -t 192.168.70.131:80 -s rr //添加vip規則
ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.133:80 -g
ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.134:80 -g
ipvsadm -ln //檢查
ipvsadm-save > /etc/sysconfig/ipvsadm //讓配置的規則永久生效
systemctl enable ipvsadm
4.配置web集群
設置子網掩碼32(兩台web都一樣如下配置)
yum install -y httpd
echo web1 > /var/www/html/index.html
systemctl start httpd
systemctl enable httpd
ifconfig lo:0 192.168.70.131/32 //在本地迴環介面(lo)上添加一個邏輯IP地址 /32表示這個地址的掩碼為255.255.255.255,即單IP.因為在LVS-DR模式下,需要在每台真實伺服器上都設置一個虛擬IP(VIP),但是兩一樣ip會衝突,這樣當負載均衡器下線時,真實伺服器可以接管VIP,繼續提供服務。
設置內核參數
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore //忽略arp響應,只有噹噹目標IP與本機介面地址匹配時,才響應ARP請求。
這樣可以防止介面收到發往其他IP的ARP請求時也錯誤響應。
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce //介面會主動對所有接收到的ARP請求進行回應,即使目標IP不是本地IP。
5.client測試
curl 192.168.70.131
可以在LVS看詳細狀態
ipvsadm -Lnc
對以上兩種模式的補充:
我們在配置ipvsadm時 rr表示虛擬服務演算法的選擇
靜態調服方法:
1.rr 輪詢演算法 均等的對待每一臺伺服器,不管伺服器上實際的連接數量和系統負載
2.wrr 加權輪詢 根據真實伺服器的不同處理能力,動態地調整其許可權,來調度訪問請求
動態調服方法
3.lr 最少連接 調度器通過”最少連接“調度演算法動態地將網路請求調度到已建立的鏈接數最少的伺服器上
4.wlc 加權最少連接 調度器可以自動問詢真實伺服器的負載情況,並動態地調整其許可權
命令補充:
管理虛擬服務
ipvsadm -E -t 192.168.70.131:80 -s wrr //修改演算法
ipvsadm -D -t 192.168.70.131:80 //刪除指定虛擬服務
ipvsadm -C //全部清空
管理真實服務
ipvsadm -a -t 192.168.70.131:80 -r 192.168.70.133 -g -w 5 //增加真實伺服器的權重
ipvsadm -e -t 192.168.70.131:80 -r 192.168.70.133 -g -w 2 //修改真是伺服器的權重
ipvsadm -d -t 192.168.70.131:80 -r 192.168.70.133 //刪除真實伺服器