標籤:haproxy mysql 架構 couchbase fastdfs
目錄
1系統架構圖...1
2架構設計...3
2.1項目開發環境...3
2.2運行環境要求:...3
2.3 伺服器架構平台:...4
2.4.架構邏輯設計...5
2.4.1 LVS+KEEPLIVED+SQUID+HAPROXY+JBOSS叢集...5
2.4.2mysql叢集...6
2.4.3fastdfs圖片伺服器叢集...8
2.4.4acveMQ伺服器叢集...8
3 架構剖析...10
3.1負載平衡器解析...10
3.2 lvs解析...11
3.3keeplived解析...11
3.4 haproxy解析...11
3.5mysql解析...12
3.6couchbase解析。...13
3.7 squid解析...14
3.8 lucene解析...14
3.9Nagios解析...15
3.10activeMQ解析...15
當前一種先進實用的架構設計
李萬鴻
對用JAVA開發的項目來說,根據“成熟穩定、先進科學、實用可靠“的原則,可以使用這樣一種架構,採用多個叢集來保證系統的高效能、高可靠性、伸縮性、可維護性和安全的需要,伺服器可以線性擴充,使用開源免費軟體和廉價伺服器,提供極高的性價比。
1系統架構圖
系統應用架構採用門戶、應用系統、商務邏輯和基礎資源4層。
2架構設計2.1項目開發環境
1. 開發語言、工具:JAVA 、eclipse。
2. 技術架構採用STRUTS2+SPRING3+HIBERNATE3。
3. 採用自動化的測試工具進行嚴格測試,保證代碼品質,如:QTP、ROBERT、LOADRUNNER等。
4. 軟體環境:maven、SVN(git)、jetty,JDK6。
5. 硬體環境:cpu:P3 2.8GHZ以上 Memory:3G以上。
2.2運行環境要求:
硬體環境:
伺服器端: 推薦配置為16G記憶體以上,CPU為2.8GHZ以上配置,硬碟容量為500G以上的伺服器。
通訊網路: 網路通訊協定為HTTP、TCP/IP。
軟體環境:
伺服器端:
? 資料庫伺服器:mysql5.6。
? Web伺服器:jboss7
? 伺服器採用華碩伺服器。
? 伺服器作業系統: linuxcentos6.5.
? 瀏覽器:Internet Explore8.0或以上版本、360瀏覽器6及以上版本。
? NAS儲存,42T,RAID5,用於儲存資料。
螢幕解析度推薦為:1024*768或以上。
2.3伺服器架構平台:
1) Lvs+keepalived-1.2.8 ,2台叢集做互連網訪問的入口。
2) Squid3.3用2台叢集進行頁面緩衝。
3) HAPROXY1.4+keepalived-1.2.8用3台叢集進行WEB伺服器負載平衡和動靜分離。
4) jboss伺服器進行3台叢集,每台硬碟500G。
5) mysql資料庫用haproxy進行4台主從叢集和負載平衡。
6) 用2台couchbase2叢集進行資料緩衝。
7) 用2台fastdfs3叢集儲存圖片。
8) 用1台Lucene4.7搜尋伺服器。
9) 用4台activeMQ叢集傳遞訊息。
10)ngios3.5監控伺服器,發生異常時可發郵件和簡訊。
這個架構先進實用,消除了資料庫I/O瓶頸,大大提升了效能,而且支援伺服器線性擴充,具有極強的伸縮性,可以支援7X24每分鐘數萬至數十萬的訪問量。具體配置可以根據需要靈活處理。
2.4.架構邏輯設計2.4.1 LVS+KEEPLIVED+SQUID+HAPROXY+JBOSS叢集
用LVS+KEEPLIVED雙機通過一個VIP(vitual IP)對對個squid快取服務器進行負載平衡,Squid快取服務器通過haproxy為jboss伺服器進行緩衝,haproxy+keeplived雙機對jboss伺服器叢集進行負載平衡調度。
2.4.2mysql叢集
MySQL支援雙主的設定,即兩個MySQL節點互為主備,不過雖然理論上,雙主只要資料不衝突就可以工作的很好,但實際情況中還是很容發生資料衝突的,比如在同步完成之前,雙方都修改同一條記錄。因此在實際中,最好不要讓兩邊同時修改。即邏輯上仍按照主從的方式工作。但雙主的設定仍然是有意義的,因為這樣做之後,切換主備會變的很簡單。因為在出現故障後,如果之前配置了雙主,則直接切換主備會很容易。
雙主在設定時,只需將上面的一段設定複製一份,分別寫入兩個MySQL節點的設定檔,但要修改相應的server-id,auto-increment-offset和master-host。auto-increment-offset就是為了讓雙主同時在一張表中進行添加操作時不會出現id衝突,所以在兩個節點上auto-increment-offset設定為不同的值就好。 在兩個節點上都為對方建立使用者。
Mysql用2主多從,提供高效能服務,主要資料庫提供對資料庫的寫操作,從資料庫進行讀操作,實現了讀寫分離和Database Backup。從資料庫可線性擴充。
用haproxy+keeplived雙機對slave資料庫進行負載平衡,提供對資料庫的讀操作。
2.4.3fastdfs圖片伺服器叢集
Fastdfs叢集儲存圖片等檔案,可動態線性擴充。
2.4.4acveMQ伺服器叢集
通過master-slave+network breokers方式建立activeMQ訊息叢集,支援負載平衡,同時又保證訊息的可靠性。採用訊息叢集可以在系統之間或系統內進行訊息傳遞,實現分布式非同步通訊。
3架構剖析3.1負載平衡器解析
負載平衡器(調度器)是一種採用各種分配演算法把網路請求分散到一個伺服器叢集中的可用伺服器上去,通過管理進入的Web資料流量和增加有效網路頻寬,從而使網路訪問者獲得儘可能最佳的連網體驗的硬體裝置。
1、負載平衡器的工作層次:
1)工作於tcp/udp層實現底層協議的負載平衡,請求在核心中實現轉寄;
2)工作於應用程式層,支援特定的應用協議實現應用程式層的負載平衡,請求在使用者空間中。
工作於tcp/udp層的效能要比工作於應用程式層的負載平衡器的好得多,若請求數量沒超過應用程式層負載平衡器的容量,應使用應用程式層的負載平衡器,它能直接於前端更好的解決請求。
2、http/https協議層的負載平衡器
1)tcp/udp層:lvs,haproxy
2) 應用程式層:apache,nginx,haproxy,lighttpd,varnish,squid
3、mysql協議層的負載平衡器
1)tcp/udp層:lvs
2)應用程式層:haproxy,資料庫專用連線池能實現讀寫分離。
3.2 lvs解析
LVS叢集採用IP負載平衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的伺服器上執行,且調度器自動屏蔽掉伺服器的故障,從而將一組伺服器構成一個高效能的、高可用的虛擬伺服器。整個伺服器叢集的結構對客戶是透明的,而且無需修改用戶端和伺服器端的程式。為此,在設計時需要考慮系統的透明性、延展性、高可用性和易管理性。
3.3keeplived解析
Keepalived的作用是檢測web伺服器的狀態,如果有一台web伺服器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web伺服器從系統中剔除,當web伺服器工作正常後Keepalived自動將web伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修複故障的web伺服器。Layer3,4&7工作在IP/TCP協議棧的IP層,TCP層,及應用程式層。
3.4 haproxy解析
HAProxy提供高可用性、負載平衡、動靜分離以及基於TCP和HTTP應用的代 理,支援虛擬機器主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web網站,這些網站通常又需要會話保持或七層處理。HAProxy運行在當前的硬體上,完全可以支援數以萬計的並發串連。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。
HAProxy實現了一種事件驅動, 單一進程模型,此模型支援非常大的並發串連數。Haproxy比nginx效能更好。
3.5 MySQ解析
MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。MariaDB是mysql原Team Dev的傑作,google公司已轉為使用MariaDB。
Mysql成熟實用,穩定可靠,已在業界得到廣泛的使用,mysql的效能比postgre優異,通過實際測試,可以看到mysql比postgre更強。
Mysql提供主從複製功能,主從伺服器設定的穩健性得以提升,如果主伺服器發生故障,可以把本來作為備份的從伺服器提升為新的主伺服器。在主從伺服器上分開處理使用者的請求,讀的話,可以直接讀取備機資料,可獲得更短的回應時間。用從伺服器做資料備份而不會佔用主伺服器的系統資源。採用haproxy對從資料庫進行負載平衡,提供高效能的讀操作。
實踐證明,mysql-proxy,amoeba,master-master-manage、mysqlcluster的效能不穩定,不建議使用。
3.6couchbase解析。
Memcache基本上已經是開發的標配了,但是對於Memcache叢集,很多線上部署仍然是很單薄的。
幾個存在的問題:不健壯、資料不安全、配置變更可能導致存取異常、後備資料的一致性。鑒於存在以上問題,Memcache的Team Dev開發了Membase,支援多台伺服器叢集,資料的切片和複製,有效提高了服務穩定性和資料的安全性,並且支援資料的持久儲存。代碼的穩定性不夠好,在部分線上業務上使用了Membase,後來因為幾次莫名的存取操作緩慢,只能又撤銷回到Memcache。之後,Membase團隊與CouchDB團隊合并,推出變形平板的產品: Couchbase。
Couchbase的最大特點:
1,完全繼承Memcache,原生支援所有Memcache操作;
2,繼承了Membase的特性,支援叢集和資料持久化及線性擴充;
3,繼承了CouchDB的文檔性質,支援通過View對資料進行操作。這個View的特性,提供了以往memcache所不具備的便利性,但是同Mongodb相比又很簡單原始,感覺不是一種普遍需求的功能。編程使用couchbase和使用memcached一樣。
Couchbase比redis做緩衝更好,redis一旦重啟,速度非常慢,10G資料需要半個小時。
3.7 squid解析
Squid作為網頁伺服器的前置cache伺服器,可以代理使用者向web伺服器請求資料並進行緩衝,也可以用在區域網路中,使區域網路使用者通過代理上網。Squid主要設計用於在Linux一類系統運行。
Squid是一個緩衝internet資料的一個軟體,可緩衝html頁面和圖片等,它接收使用者的下載申請,並自動處理所下載的資料。也就是說,當一個使用者想要下載一個首頁時,它向Squid發出一個申請,要Squid替它下載,然後Squid 串連所申請網站並請求該首頁,接著把該首頁傳給使用者同時保留一個備份,當別的使用者申請同樣的頁面時,Squid把儲存的備份立即傳給使用者,使使用者覺得速度相當快。
3.8 lucene解析
Lucene是一套用於全文檢索索引和搜尋的開源程式庫,由Apache軟體基金會支援和提供。Lucene提供了一個簡單卻強大的應用程式介面,能夠做全文索引和搜尋。在Java開發環境裡Lucene是一個成熟的免費開源工具。就其本身而言,Lucene是當前以及最近幾年最受歡迎的免費Java資訊檢索程式庫。
3.9Nagios解析
Nagios是一款開源的免費網路監視工具,能有效監控Windows、Linux和Unix的主機狀態,交換器路由器等網路設定,印表機等。在系統或服務狀態異常時發出郵件或簡訊警示第一時間通知網站營運人員,在狀態恢複後發出正常的郵件或簡訊通知。
3.10activeMQ解析
ActiveMQ是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,對Spring的支援,ActiveMQ可以很容易內嵌到使用Spring的系統裡面。ActiveMQ的叢集方式主要由兩種:Master-Slave和BrokerCluster。
總之,這是一個先進實用的架構,採用了haproxy、lvs、keeplived進行負載平衡,使用couchbase、squid進行緩衝,使用mysql資料庫主從方式,使用lucene搜尋,使用activeMQ傳遞訊息等技術,他們的配置要進行最佳化,提供了HA、HP的服務效能,能滿足大多數項目的實際需要,值得採納。
本文借鑒了網上的文章,在此表示感謝,願和大家一起在探索科學架構的征途上留下閃光的腳印!
2014-06-28