1. 程式人生 > >之高併發場景 LVS 簡快入門實戰

之高併發場景 LVS 簡快入門實戰

隨著移動網際網路的加速,應用大規模同時使用的情況成為了常態,如微博、知乎、今日頭條等大型應用,作為Linux運維從業者,高併發場景的解決能力成為了高薪的關鍵。

今天我們特別邀請了資深的Linux運維老司機慘綠少年Linux來給大家普及高併發場景 LVS的實現過程,助你高薪之路順暢。

作者:慘綠少年Linux,馬哥Linux原創作者社群特約作者,資深Linux運維工程師,作者部落格:www.nmtui.com,擅長虛擬化、OpenStack等前沿技術。

1.1 負載均衡介紹

1.1.1 負載均衡的妙用

負載均衡(Load Balance)叢集提供了一種廉價、有效、透明的方法,來擴充套件網路裝置和伺服器的負載、頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性。

單臺計算機無法承受大規模的併發訪問或資料流量了,此時需要搭建負載均衡叢集把流量分攤到多臺節點裝置上分別處理,即減少使用者等待響應的時間又提升了使用者體驗;

7*24小時的服務保證,任意一個或多個有限後端節點裝置宕機,不能影響整個業務的執行。

1.1.2 為什麼要用lvs

工作在網路模型的7層,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,Nginx單憑這點可利用的場合就遠多於LVS了。

最新版本的Nginx也支援4層TCP負載,曾經這是LVS比Nginx好的地方。

Nginx對網路穩定性的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢之一,相反LVS對網路穩定性依賴比較大。

Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網路依賴比較大。

那為什麼要用lvs呢?

簡單一句話,當併發超過了Nginx上限,就可以使用LVS了。

日1000-2000W PV或併發請求1萬以下都可以考慮用Nginx。

大型入口網站,電商網站需要用到LVS。

1.2 LVS介紹

LVS是Linux Virtual Server的簡寫,意即Linux虛擬伺服器,是一個虛擬的伺服器集群系統,可以在UNIX/LINUX平臺下實現負載均衡叢集功能。該專案在1998年5月由章文嵩博士組織成立,是中國國內最早出現的自由軟體專案之一。

1.2.1 相關參考資料

LVS官網:http://www.linuxvirtualserver.org/index.html

相關中文資料

LVS專案介紹           http://www.linuxvirtualserver.org/zh/lvs1.html

LVS叢集的體系結構     http://www.linuxvirtualserver.org/zh/lvs2.html

LVS叢集中的IP負載均衡技術  http://www.linuxvirtualserver.org/zh/lvs3.html

LVS叢集的負載排程      http://www.linuxvirtualserver.org/zh/lvs4.html

1.2.2 LVS核心模組ip_vs介紹

早在2.2核心時, IPVS就已經以核心補丁的形式出現。

從2.4.23版本開始,IPVS軟體就合併到Linux核心的常用版本的核心補丁的集合。

從2.4.24以後IPVS已經成為Linux官方標準核心的一部分。

LVS無需安裝

安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive

ipvsadm是通過命令列管理,而keepalive讀取配置檔案管理

後面我們會用Shell指令碼實現keepalive的功能

1.3 LVS叢集搭建

1.3.1 叢集環境說明

主機說明

[[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [[email protected] ~]# uname -aLinux lb03 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux[[email protected] ~]# systemctl status firewalld.servicefirewalld.service - firewalld - dynamic firewall daemon   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)   Active: inactive (dead)     Docs: man:firewalld(1)[[email protected] ~]# getenforce Disabled

web環境說明

[[email protected] ~]# curl 10.0.0.17web03[[email protected] ~]# curl 10.0.0.18web04

web伺服器的搭建參照: 

Tomcat: http://www.cnblogs.com/clsn/p/7904611.html

 Nginx: http://www.cnblogs.com/clsn/p/7750615.html

1.3.2 安裝ipvsadm管理工具

安裝管理工具

yum -y install ipvsadm

檢視當前LVS狀態,順便啟用LVS核心模組。

ipvsadm

檢視系統的LVS模組。

[[email protected] ~]# lsmod|grep ip_vsip_vs_wrr              12697  1ip_vs                 141092  3 ip_vs_wrrnf_conntrack          133387  1 ip_vslibcrc32c              12644  3 xfs,ip_vs,nf_conntrack

1.3.3 LVS叢集搭建

配置LVS負載均衡服務(在lb03操作)

步驟1:在eth0網絡卡繫結VIP地址(ip

步驟2:清除當前所有LVS規則(-C

步驟3:設定tcptcpfinudp連結超時時間(--set

步驟4:新增虛擬服務(-A),-t指定虛擬服務的IP埠,-s 指定排程演算法 排程演算法見man ipvsadm rr wrr 權重輪詢 -p 指定超時時間

步驟5:將虛擬服務關聯到真實服務上(-a -r指定真實服務的IP -g LVS的模式 DR模式 -w 指定權重

步驟6:檢視配置結果(-ln

命令集:

ip addr add 10.0.0.13/24 dev eth0ipvsadm -C                    ipvsadm --set 30 5 60         ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20   ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1 ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1ipvsadm -ln

檢查結果:

[[email protected] ~]# ipvsadm -lnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  10.0.0.13:80 wrr persistent 20  -> 10.0.0.17:80                 Route   1      0          0    -> 10.0.0.18:80                 Route   1      0          0

ipvsadm引數說明:(更多參照 man ipvsadm)

1.3.4 web瀏覽器配置操作

步驟1:在lo網絡卡繫結VIP地址(ip

步驟2:修改核心引數抑制ARP響應

命令集:

ip addr add 10.0.0.13/32 dev locat >>/etc/sysctl.conf<<EOFnet.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2EOFsysctl -p

至此LVS叢集配置完畢!

1.3.5 進行訪問測試

瀏覽器訪問:

命令列測試:

[[email protected] ~]# curl 10.0.0.13web03

抓包檢視結果:

         arp解析檢視:

[[email protected] ~]# arp -nAddress                  HWtype  HWaddress           Flags Mask            Iface10.0.0.254               ether   00:50:56:e9:9f:2c   C                     eth010.0.0.18                ether   00:0c:29:ea:ca:55   C                     eth010.0.0.13                ether   00:0c:29:de:7c:97   C                     eth0172.16.1.15              ether   00:0c:29:de:7c:a1   C                     eth110.0.0.17                ether   00:0c:29:4a:ac:4a   C                     eth0

1.4 負載均衡(LVS)相關名詞

術語說明:

DS:Director Server。指的是前端負載均衡器節點。RS:Real Server。後端真實的工作伺服器。VIP:向外部直接面向用戶請求,作為使用者請求的目標的IP地址。DIP:Director Server IP,主要用於和內部主機通訊的IP地址。RIP:Real Server IP,後端伺服器的IP地址。CIP:Client IP,訪問客戶端的IP地址。

1.4.1 LVS叢集的工作模式--DR直接路由模式

DR模式是通過改寫請求報文的目標MAC地址,將請求發給真實伺服器的,而真實伺服器將響應後的處理結果直接返回給客戶端使用者。

DR技術可極大地提高集群系統的伸縮性。但要求排程器LB與真實伺服器RS都有一塊物理網絡卡連在同一物理網段上,即必須在同一區域網環境。

DR直接路由模式說明:

a)通過在排程器LB上修改資料包的目的MAC地址實現轉發。注意,源IP地址仍然是CIP,目的IP地址仍然是VIPb)請求的報文經過排程器,而RS響應處理後的報文無需經過排程器LB,因此,併發訪問量大時使用效率很高,比Nginx代理模式強於此處。c)因DR模式是通過MAC地址的改寫機制實現轉發的,因此,所有RS節點和排程器LB只能在同一個區域網中。需要注意RS節點的VIP的繫結(lo:vip/32)和ARP抑制問題。d)強調下:RS節點的預設閘道器不需要是排程器LBDIP,而應該直接是IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的情況),理論上講,只要RS可以出網即可,不需要必須配置外網IP,但走自己的閘道器,那閘道器就成為瓶頸了。e)由於DR模式的排程器僅進行了目的MAC地址的改寫,因此,排程器LB無法改變請求報文的目的埠。LVS DR模式的辦公室在二層資料鏈路層(MAC),NAT模式則工作在三層網路層(IP)和四層傳輸層(埠)。f)當前,排程器LB支援幾乎所有UNIXLinux系統,但不支援windows系統。真實伺服器RS節點可以是windows系統。g)總之,DR模式效率很高,但是配置也較麻煩。因此,訪問量不是特別大的公司可以用haproxy/Nginx取代之。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或併發請求1萬以下都可以考慮用haproxy/Nginx(LVS的NAT模式)h)直接對外的訪問業務,例如web服務做RS節點,RS最好用公網IP地址。如果不直接對外的業務,例如:MySQL,儲存系統RS節點,最好只用內部IP地址。

DR的實現原理和資料包的改變

(a) 當用戶請求到達Director Server,此時請求的資料報文會先到核心空間的PREROUTING鏈。 此時報文的源IP為CIP,目標IP為VIP(b) PREROUTING檢查發現數據包的目標IP是本機,將資料包送至INPUT鏈(c) IPVS比對資料包請求的服務是否為叢集服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將資料包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址(d) 由於DS和RS在同一個網路中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麼此時資料包將會發至Real Server。(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo介面傳送給eth0網絡卡然後向外發出。 此時的源IP地址為VIP,目標IP為CIP(f) 響應報文最終送達至客戶端

1.5 在web端的操作有什麼含義?

1.5.1 RealServer為什麼要在lo介面上配置VIP

既然要讓RS能夠處理目標地址為vipIP包,首先必須要讓RS能接收到這個包。

  在lo上配置vip能夠完成接收包並將結果返回client

1.5.2 eth0網絡卡上配置VIP可以嗎?

不可以,將VIP設定在eth0網絡卡上,會影響RSarp請求,造成整體LVS叢集arp快取表紊亂,以至於整個負載均衡叢集都不能正常工作。

1.5.3 為什麼要抑制ARP響應?

① arp協議說明

ARP協議,全稱"Address Resolution Protocol",中文名是地址解析協議,使用ARP協議可實現通過IP地址獲得對應主機的實體地址(MAC地址)

ARP協議要求通訊的主機雙方必須在同一個物理網段(即區域網環境)!

為了提高IP轉換MAC的效率,系統會將解析結果儲存下來,這個結果叫做ARP快取。

Windows檢視ARP快取命令 arp -aLinux檢視ARP快取命令 arp -nLinux解析IP對應的MAC地址 arping -c 1 -I eth0 10.0.0.6

ARP快取表是把雙刃劍

a) 主機有了arp快取表,可以加快ARP的解析速度,減少區域網內廣播風暴。因為arp是發廣播解析的,頻繁的解析也是消耗頻寬的,尤其是機器多的時候。

b) 正是有了arp快取表,給惡意黑客帶來了攻擊伺服器主機的風險,這個就是arp欺騙攻擊。

c) 切換路由器,負載均衡器等裝置時,可能會導致短時網路中斷。因為所有的客戶端ARP快取表沒有更新

②伺服器切換ARP問題

當叢集中一臺提供服務的lb01機器宕機後,然後VIP會轉移到備機lb02上,但是客戶端的ARP快取表的地址解析還是宕機的lb01MAC地址。從而導致,即使在lb02上新增VIP,也會發生客戶端無法訪問的情況。

解決辦法是:當lb01宕機,VIP地址遷移到lb02時,需要通過arping

相關推薦

併發場景 LVS 入門實戰

隨著移動網際網路的加速,應用大規模同時使用的情況成為了常態,如微博、知乎、今日頭條等大型應用,作為Linux運維從業者,高併發場景的解決能力成為了高薪的關鍵。今天我們特別邀請了資深的Linux運維老司機慘綠少年Linux來給大家普及高併發場景 LVS的實現過程,助你高薪之路順暢。作者:慘綠少年Linux,馬哥

併發程式設計併發場景:秒殺(無鎖、排他鎖、樂觀鎖、redis快取的逐步演變)

環境: jdk1.8;spring boot2.0.2;Maven3.3 摘要說明: 在實際開發過程中往往會出現許多高併發場場景,秒殺,強紅包,搶優惠卷等; 其中: 秒殺場景的特點就是單位時間湧入使用者量極大,商品數少,且要保證不可超量銷售; 秒殺產品的本質就是減

SpringBoot實戰實現分散式鎖一重現多執行緒併發場景

實戰前言:上篇博文我總體介紹了我這套視訊課程:“SpringBoot實戰實現分散式鎖” 總體涉及的內容,從本篇文章開始,我將開始介紹其中涉及到的相關知識要點,感興趣的小夥伴可以關注關注學習學習!!工欲善其事,必先利其器,介紹分散式鎖使用的前因後果之前,得先想辦法說清楚為啥需要分散式鎖以及

Mysql數據庫學習可用架構Atlas

mysql數據庫 北京mysql mysql周末 數據庫管理員   Atlas是一個基於MySQL協議的數據中間層項目,在MySQL-Proxy 0.8.2版本基礎上修改了大量bug,添加了很多功能特性。目前該項目很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。 

併發場景下的快取有哪些常見的問題?

一、快取一致性問題 當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。 這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。 二、快取併發

快取在併發場景下的常見問題 侵立刪

快取一致性問題 當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。

系統架構師考試筆記併發佇列的學習

訊息佇列已經逐漸成為企業IT系統內部通訊的核心手段。它具有低耦合、可靠投遞、廣播、流量控制手段。最終一致性等一系列的功能,成為非同步RPC的主要手段之一。 訊息佇列被處理的過程相當於流程 A被處理。我們這裡以一個實際的模型來計論下,如如使用者下單成功時給用記發簡訊,如果沒有

Golang適合併發場景的原因分析

                典型的兩個現實案例:  我們先看兩個用Go做訊息推送的案例實際處理能力。  360訊息推送的資料:  16臺機器,標配:24個硬體執行緒,64GB記憶體    Linux Kernel 2.6.32 x86_64     單機80萬併發連線,load 0.2~0.4,CPU 總

併發場景解決--搶紅包

前言 高併發場景越來越多的應用在網際網路業務上。 本文將重點介紹悲觀鎖、樂觀鎖、Redis分散式鎖在高併發環境下的如何使用以及優缺點分析。 本文相關的學習專案–搶紅包,歡迎Star. 三種方式介紹 悲觀鎖 悲觀鎖,假定會發生併發

搶紅包、秒殺併發場景的 mysql 高效實現

場景分析 這裡以搶紅包場景為例,需求如下: 1.紅包有個數限制,假設紅包的個數限制為X。 2.紅包金額上線限制,假設金額上線為Y。 3.要求使用者搶紅包的時候,不超過紅包的個數限制X。 4.要求使用者搶紅包的時候,不超過紅包的金額Y。

併發場景下的快取+資料庫雙寫不一致問題分析與解決方案

1、最初級的快取不一致問題以及解決方案問題:先修改資料庫,再刪除快取,如果刪除快取失敗了,那麼會導致資料庫中是新資料,快取中是舊資料,資料出現不一致。解決思路:先刪除快取,再修改資料庫,如果刪除快取成功了,如果修改資料庫失敗了,那麼資料庫中是舊資料,快取中是空的,那麼資料不會

併發場景下的快取 資料庫雙寫不一致問題分析與解決方案設計

馬上開始去開發業務系統 從哪一步開始做,從比較簡單的那一塊開始做,實時性要求比較高的那塊資料的快取去做 實時性比較高的資料快取,選擇的就是庫存的服務 庫存可能會修改,每次修改都要去更新這個快取資料; 每次庫存的資料,在快取中一旦過期,或者是被清理掉了,前端的ngin

java架構併發,分散式,叢集,高效能,中介軟體合集高階學習

視訊課程內容包含: 高階Java架構師包含:Spring boot、Spring  cloud、Dubbo、Redis、ActiveMQ、Nginx、Mycat、Spring、MongoDB、ZeroMQ、Git、Nosql、Jvm、Mecached、Netty、Nio

併發場景系列(一) 利用redis實現分散式事務鎖,解決併發環境下減庫存

問題描述:某電商平臺,首發一款新品手機,每人限購2臺,預計會有10W的併發,在該情況下,如果扣減庫存,保證不會超賣 方案一 利用資料庫鎖機制,對記錄進行鎖定,再進行操作  SELECT * from goods where ID =1 for updat

慕課網-java併發秒殺api併發優化-總結

1.架構優化 2.spring宣告式事務 宣告式事務:http://www.open-open.com/lib/view/open1414310646012.html 配置並使用Spring宣告式事務 在spring-service.xml中新增上配置事務管理器 <

併發場景下請求合併的實踐

前言 專案中一般會請求第三方的介面,也會對外提供介面,可能是RPC,也可能是HTTP等方式。在對外提供介面時,有必要提供相應的批量介面,好的批量實現能夠提升效能。 高併發場景中,呼叫批量介面相比呼叫非批量介面有更大的效能優勢。但有時候,請求更多的是單個介面,不能夠直接呼叫批量介面,如果這個介面是高頻介面,

25-02、併發場景下的快取+資料庫雙寫不一致問題分析與解決方案設計

馬上開始去開發業務系統, 從哪一步開始做,從比較簡單的那一塊開始做,實時性要求比較高的那塊資料的快取去做, 實時性比較高的資料快取,選擇的就是庫存的服務, 庫存可能會修改,每次修改都要去更新這個快取資料; 每次庫存的資料,在快取中一旦過期,或者是被清理掉了,前端的nginx服務都會發送請

C++0x併發【如何使用併發

什麼是併發併發是指多個獨立的任務同時進行。併發在我們的生活中隨處可見,如:走路的時候可以打電話,一邊唱歌一邊跳舞,小到原子(每個核外電子同時繞著原子核高速的運轉),大到宇宙各個天體按照自己的軌跡同時相互獨立的執行著這些都可以看作是併發。計算機世界的併發【單核CPU】單核系統上

資料庫 併發環境下的規則

原文: 資料庫 之 高併發環境下的規則 本文大部分轉至沈劍老師,加上自己的一些見解。   本文前提 高併發環境   規則要點 1) 資料庫字符集使用utf8mb4 無亂碼風險、萬國碼 2)禁止使用儲存過程、檢視、觸發器、Event 高併發大資料的網際網路業務,架構設計思

併發經驗八年架構師:快取在併發場景下該如何問題

快取一致性問題當資料時效性要求很高時,需要保證快取中的資料與資料庫中的保持一致,而且需要保證快取節點和副本中的資料也保持一致,不能出現差異現象。這就比較依賴快取的過期和更新策略。一般會在資料發生更改的時,主動更新快取中的資料或者移除對應的快取。快取併發問題快取過期後將嘗試從後