http://aokunsang.iteye.com/blog/2053719 淺談web應用的負載均衡、集羣、高可用(HA)解決方案html
http://zhuanlan.51cto.com/art/201612/524201.htm 互聯網架構「高可用」
http://www.blogjava.net/ivanwan/archive/2013/12/25/408014.html LVS/Nginx/HAProxy負載均衡器的對比分析java
http://freeloda.blog.51cto.com/2033581/1265304 Linux 高可用(HA)集羣基本概念詳解nginx
高可用HA(High Availability)是分佈式系統架構設計中必須考慮的因素之一,它一般是指,經過設計減小系統不能提供服務的時間。
若是系統每運行100個時間單位,會有1個時間單位沒法提供服務,咱們說系統的可用性是99%。不少公司的高可用目標是4個9,也就是99.99%,這就意味着,系統的年停機時間爲8.76個小時。web
方法論上,高可用是經過 冗餘(集羣化) + 自動故障轉移(failover)來實現的。數據庫
整個互聯網分層系統架構的高可用,又是經過每一層的冗餘+自動故障轉移來綜合實現的,具體的:緩存
(1)【客戶端層】到【反向代理層】的高可用,是經過反向代理層的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移tomcat
(2)【反向代理層】到【站點層】的高可用,是經過站點層的冗餘實現的,常見實踐是nginx與web-server之間的存活性探測與自動故障轉移網絡
(3)【站點層】到【服務層】的高可用,是經過服務層的冗餘實現的,常見實踐是經過service-connection-pool來保證自動故障轉移架構
(4)【服務層】到【緩存層】的高可用,是經過緩存數據的冗餘實現的,常見實踐是緩存客戶端雙讀雙寫,或者利用緩存集羣的主從數據同步與sentinel保活與自動故障轉移;更多的業務場景,對緩存沒有高可用要求,能夠使用緩存服務化來對調用方屏蔽底層複雜性負載均衡
(5)【服務層】到【數據庫「讀」】的高可用,是經過讀庫的冗餘實現的,常見實踐是經過db-connection-pool來保證自動故障轉移
(6)【服務層】到【數據庫「寫」】的高可用,是經過寫庫的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移
常見的Tomcat集羣方案:ngnix+tomcat;lvs+ngnix+tomcat;(lvs負責集羣調度,nginx負責靜態文件處理,tomcat負責動態文件處理[最優選擇])。
虛擬IP(VirtualIP/VIP) http://blog.csdn.net/whycold/article/details/11898249
實現原理主要是靠TCP/IP的ARP協議。(虛擬IP漂移)由於ip地址只是一個邏輯 地址,在以太網中MAC地址纔是真正用來進行數據傳輸的物理地址,每臺主機中都有一個ARP高速緩存,存儲同一個網絡內的IP地址與MAC地址的對應關 系,以太網中的主機發送數據時會先從這個緩存中查詢目標IP對應的MAC地址,會向這個MAC地址發送數據。操做系統會自動維護這個緩存。這就是整個實現的關鍵。