前言 即便想 nginx 這麼牛B的伺服器, 也不能保證他不掛啊, 就算不是機器出故障, 比如, 停電了, 那麼機器掛了, 很正常啊. 這時候, 沒有分發伺服器, 網站就不能正常訪問了, 咋搞? 網站不開了, 大家放假回家咯! - 不錯的辦法啊. 我們想回家, 但是老闆不許, 沒辦法, 加個備份機吧 ...
前言
即便想 nginx 這麼牛B的伺服器, 也不能保證他不掛啊, 就算不是機器出故障, 比如, 停電了, 那麼機器掛了, 很正常啊. 這時候, 沒有分發伺服器, 網站就不能正常訪問了, 咋搞?
網站不開了, 大家放假回家咯! - 不錯的辦法啊.
我們想回家, 但是老闆不許, 沒辦法, 加個備份機吧, 有點像是備胎. 可以藉助 keepalived + nginx 來實現主備.
一. keepalived是幹啥的
keepalived主要的工作就是檢測 web 伺服器的狀態, 如果有一臺 web 伺服器掛了, keepalived 檢測到後, 會將有故障的 web 伺服器從環境中剔除, 完成切換操作.當 web 伺服器工作正常後, keepalived 會自動將該 web 伺服器加入到 伺服器群組中.
這麼看, keepalived 是集群管理中, 保證集群高可用的一個服務軟體, 可以防止單點故障.
二. keepalived 工作原理
keepalived 是以VRRP協議為實現基礎的. VRRP又叫 虛擬路由冗餘協議, 可以人為是實現路由器高可用的協議, 將 n 台提供相同功能的路由器組成一個路由器群組, 這個組裡面有一個 master(主伺服器) 和 多個 backup(備胎機).
master 裡面有一個對外提供服務的 vip( virtual ip address, 虛擬 ip 地址, 該路由器所在區域網內, 其他機器的預設路由為該 vip), master會發組播, 當backup接收不到的時候, 會人為master掛掉了, 這時, 需要推舉一個武林盟主出來. 但是這不是亂推的, 得按照輩分(優先順序)來推舉. 這樣, 就能保證在群組中, 總有一個nginx伺服器是可用的.
三. keepalived 工作流程大致如下
master 沒有掛的情況下, 是這麼工作的:
當master掛掉之後, 就會切換伺服器
當master回覆正常之後, 會再次切換回第一幅圖那樣.