我們都知道ngnix可以做反向**來實現負載均衡。但是如果ngnix掛了豈不是就完蛋了。所以,我們需要同時實現負載均衡和高可用。
反向**一般有下面幾種技術
ngnix 號稱能支援5w以上高併發連線,3w併發連線的情況下是apache httpd的10倍。這得益於nginx使用了最新的epoll(linux 2.6核心)和kqueue(freebsd)網路i/o模型。apache所採用的select網路i/o模型非常低效。(apache httpd內心獨白:嫌我年老珠黃就直說,不要裝作我的我的event mpm不存在行麼)
lvshaproxy
keepalived 是乙個基於vrrp協議來實現的lvs服務高可用方案,可以利用其來避免單點故障。乙個lvs服務會有2臺伺服器執行keepalived,一台為主伺服器(master),一台為備份伺服器(backup),但是對外表現為乙個虛擬ip,主伺服器會傳送特定的訊息給備份伺服器,當備份伺服器收不到這個訊息的時候,即主伺服器宕機的時候, 備份伺服器就會接管虛擬ip,繼續提供服務,從而保證了高可用性。keepalived是vrrp的完美實現,因此在介紹keepalived之前,先介紹一下虛擬ip和vrrp的原理。
虛擬ip
我們知道一般的ip位址是和物理網絡卡繫結的,而vip相反,是不與實際網絡卡繫結的的ip位址。當外網的上的乙個機器,通過網域名稱訪問某公司內網資源時,內網的dns伺服器會把網域名稱解析到乙個vip上。當外網主機經過網域名稱解析得到這個vip後,就將資料報發往這個vip。但是在內網中,這個vip是不與具體的裝置相連線的,所以外網發過來的目的位址是vip的ip資料報,究竟會到哪台機器呢?
其實,這個在內網的過程是,通過arp協議來完成的。也就是說這個vip可以對映到的mac位址是可以控制的。vip在內網中被動態的對映到不同的mac位址上,也就是對映到不同的機器裝置上,那麼就可以起到負載均衡的效果啦。
vrrp
同一網段內的所有主機都設定一條相同的、以閘道器為下一跳的預設路由。主機發往其他網段的報文將通過預設路由發往閘道器,再由閘道器進行**,從而實現主機與外部網路的通訊。當閘道器發生故障時,本網段內所有以閘道器為預設路由的主機將無法與外部網路通訊,僅能實現內部主機間通訊。預設路由為使用者的配置操作提供了方便,但是對預設閘道器裝置提出了很高的穩定性要求。增加出口閘道器是提高系統可靠性的常見方法,此時如何在多個出口之間進行選路就成為需要解決的問題。而vrrp正好解決了此問題。
vrrp:virtual router redundancy protocol,虛擬路由冗餘協議。vrrp說白了就是實現位址漂移的,是一種容錯協議,在提高可靠性的同時,簡化了主機的配置。該協議能夠實現將可以承擔閘道器功能的一組路由器加入到備份組中,形成一台虛擬路由器,由vrrp的選舉機制決定哪台路由器承擔**任務,區域網內的主機只需將虛擬路由器配置為預設閘道器。
下面就是乙個簡單的ngnix+keepalive的方案。
服務註冊一般分為客戶端和服務端。
客戶端的例子比如說阿里的dubbo,或者基於dns。服務端的例子主要是基於我們上面說的反向**技術,再加上路由配置自動更新的技術。
服務端的服務註冊會進一步減輕客戶端的**,這是最大的優勢。
consul + nginx
基於Docker的負載均衡和服務發現
核心空間 lvs ipvs 使用者空間 nginx 使用者空間 haproxy 自定義路由服務 作為乙個可選的容器,實現跟簡單路由服務類似,解決如下需求 slb路由服務 將slb繫結到某個服務上面,後端隨服務的啟停動態配置。主要解決如下需求 layers s n ingress 入口通訊 e w p...
總結 Http和服務伺服器負載均衡
1,備選方案 硬體 f5,array 軟體 nginx 優點 工作在網路 第七層之上,針對 http做分流策略,比如 網域名稱,url,目錄結構,正則規則 比haproxy強大 nginx對 網路穩定性依賴非常小,lvs對網路依賴比較大 nginx 安裝比較 簡單 曾擔 高負載且 穩定 nginx可...
consul集群和服務發現
建立集群 1個client,3個server docker run d name consul1 p 8900 8500 e consul bind inte ce eth0 consul agent server true bootstrap expect 3 client 0.0.0.0 ui ...