高并发负载均衡(四):基于keepalived的LVS高可用搭建
LVS四層 & Nginx七層 對比
你要分清哪些程序是應用層的,哪些程序是內核的。
LVS四層負載均衡服務器,是不會碰握手這一個步驟的。
Nginx是基于反向代理(七層)的負載均衡服務器,要先握手建立連接,才能取到URI,在判定location是否匹配,然后才將URI傳遞給后面的服務器。
server返回數據時,是需要過Nginx服務器的,而使用LVS的時候不會過LVS服務器。
學習 keepalived 之前,關于高可用,你需要知道:
1、如果你的LVS負載均衡服務器掛掉了,你整個公司的業務就下線了,這是不能容忍的。
這屬于單點故障。
解決方法:一變多!但是入口的IP地址只能有一個,怎么變多?怎么實現多點?有2種形式:要么是主備,要么是主主
主備模型:備用機要以最快的速度接管原來的VIP(virtual IP),只有主機對外提供服務,只有主機掛了的時候,備機才頂上去。
主主模型:所有的LVS都是主,現在要借用其他形式搞定只有一個的入口IP地址,比如動態DNS。主和主之間是協作的形式。
我們首先討論主備,有兩個點需要考慮:方向性、效率性。
怎么知道主機掛沒掛?
可以由備機輪詢主機,但是這樣會對主或多或少造成一些壓力。
可以由主機發廣播到所有的備機,但是網絡是不可靠的,所以有一種重試機制。
如果已經確定主機掛了,誰來作為新的主機?
使用加權重的方式,這也是paxos和zookeeper的區別。官方壓測200ms就能選出新的主機出來。
2、如果你后臺的某一個RS(Real Server)掛掉了,負載均衡服務器還會對另外兩臺正常連接,會造成一部分人的業務請求異常,另一部分人的業務正常。
怎么知道RS掛了?可以用ping嗎?
不可以!ping命令是網絡層的只能檢驗網絡能不能通,連TCP握手都不做,而web服務是應用層的。能ping通不能代表web服務可用。那怎么知道RS掛沒掛?最簡單的方式是“訪問一下”。
“訪問一下”這個操作,它的底層驗證的是 應用層的HTTP協議,你發一個請求,返回的是200ok,就說明是可用的。
LVS內核中有模塊:ipvs負載均衡模塊。你想要檢測各個RS是否可用的話,可以直接去修改模塊的源碼,也可以使用第三方實現。第三方可以是人,也可以是自動化(也就有了自動化運維)。
這個自動化的程序就是keepalived!它可以代替人工,實現自動運維。解決LVS單點故障,實現HA
keepalived
(1)監控自己的LVS服務
(2)每一臺機器上都安裝keepalived。Master(主機)通告自己還活著,Backup(備機)監聽Master狀態。如果Master掛了,一堆Backup推舉選出一個新的Master.
(3)你不需要再手動配置VIP,添加LVS(ipvs模塊)配置,只需要寫到配置文件中即可。
(4)對后端的RS(real server)做健康檢查,及時剔除不可用的節點
(5)最后,keepalived不僅僅用來解決LVS,它是一個通用的環境,主要作為linux上的HA的實現。例如,當你并發量不大的時候,nginx可以作為公司的負載均衡來使用,此時nginx成為了單點故障。這個問題也可以用keepalived來解決。
keepalived 實驗手冊
步驟說明
另外,可以參考Keepalived之——Keepalived + Nginx 實現高可用 Web 負載均衡,寫的比較詳細
一些過程記錄
清空原來的負載記錄
卸掉原來配置的VIP,因為keepalived會幫你去配。
虛擬路由冗余協議
VRRP使用選舉機制來確定路由器的狀態(Master或Backup)。運行VRRP的一組路由器對外組成了一個虛擬路由器,其中一臺路由器處于Master狀態,其他的處于Backup狀態。
關于keepalived配置文件
可以使用man 5 keepalived.conf查看它的配置文件的幫助文檔(并不是所有軟件的配置文件都有幫助文檔,只是它剛好提供了)
總結
以上是生活随笔為你收集整理的高并发负载均衡(四):基于keepalived的LVS高可用搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HotSpot源码(一):Docker与
- 下一篇: HotSpot源码(二):Java与C语