Linux服務器集群概念辨識

計算機集群

計算機集群簡稱

集群(Clusters),是一種計算機系統。它通過一組散列集成的 軟件或硬件 連接起來高度緊密地協作完成計算工作。在莫種意義上,他們可以被看做是一臺計算機。

集群系統中的單個計算機通常稱為節點,通常通過內網連接,但也有其它的可能連接方式。集群計算機通常用來改進單個計算機的計算速度和可靠性。

集群分類

集群分為同構和異構,他們區別在於 “組成集群系統的計算機之間的體系結構是否相同”。

集群計算機按功能和結構可以分為以下幾類:

高可用性集群 HA(High-Availability clusters);

負載均衡集群(Load Balancing clusters);

高性能計算集群(High Performance clusters);

網格計算(Grid Computing);

集群技術特點

通過多臺計算機完成同一工作,達到更高的效率;

多臺主機內容、工作過程等完全一樣,其中一臺宕機不會影響全局;



Linux服務器集群概念

集群、冗餘、負載均衡、主從複製、讀寫分離、分佈式、分佈式計算、分佈式計算平臺、並行計算......

實際生產環境中常有的問題:

1,當數據庫性能遇到問題時,是否能夠橫向擴展,通過添加服務器的方式達到更高的吞吐量,從而充分利用現有的硬件實現更好的投資回報率;

2,是否擁有實時同步的副本,當數據庫面臨災難時,可以短時間內通過故障轉移的方式保證數據庫的可用性。此外,當數據丟失或損壞時,能否通過所謂的實時副本(熱備)實現數據的零損失;

3,數據庫的橫向擴展是都對應用程序透明,如果數據庫的橫向擴展需要應用程序端進行大量修改,則所帶來的後果不僅僅是高昂的開發成本,同時也會帶來很多潛在和非潛在的風險;


集群和冗餘

集群和冗餘並不對立,多臺服務器做集群(不是主從),本身就有冗餘和負載均衡的效果。

狹義上來說,集群就是把多臺服務器虛擬成一臺服務器,而冗餘的每臺服務器都是獨立的。

集群的側重點在於協同,多臺服務器系統分擔工作,提升效率;

冗餘的側重點在於防止單點故障,一主多備的架構,也就是主從複製;

數據冗餘==高可用性==主從;

主從一定程度上起到了負載均衡的作用,但主要目的還是為了保證數據冗餘和高可用性;

主從只提供一種成本較低的數據備份方案加上不完美的災難和負載均衡,由於複製存在時間差,不能同步讀,所以只是不完善的負載均衡和有損災備;

主從顯然達不到集群的嚴格度,不論是 HA 還是 AA(多活並行集群),主從都達不到數據一致性的集群要求;

主從很難嚴格界定是哪種模式,可以歸類為:

有一定冗餘度的非一致性異步副本(不可靠不同步);

對於沒有嚴格一致性要求的系統,可以定製為 分擔負載、查詢過時報表;


負載均衡、高可用、高性能是什麼

集群有負載均衡集群、高可用集群、高性能集群,分別側重於抗併發,避免單點故障和大數據下的並行處理。三者也有不同的實現方法,但同時這三者又是相輔相成的。

負載均衡集群(Load Balance clusters)

負載均衡著重在於提供服務併發處理能力的集群。是為了消除性能瓶頸,當然也可以起到備份工作。把負載壓力根據某種算法合理分配到集群中的每一臺計算機上,以減輕主服務器的壓力,降低對主服務器的硬件和軟件要求

負載均衡運行時,一般通過一個或者多個前端負載均衡器,將工作負載分發到後端的一組服務器上,從而達到整個系統的高性能和高可用性。這樣的計算機集群有時也被稱為服務器群(Server Farm);

實現原理,一個負載均衡器加上一個集群實現的。負載均衡集群中有一個 分發器(調度器),我們稱之為Director,它處在多臺服務器上面,分發器根據內部鎖定義的規則或調度方式從下面的服務器群中選擇一個以此來響應客戶端發送的請求。分攤到多個操作單元上進行執行,例如Web服務器,FTP服務器,企業關鍵任務服務器等,從而共同完成工作任務;

一般高可用性集群和負載均衡集群會使用類似的技術,或同時具有高可用性和負載均衡的特點;

Linux虛擬服務器(LVS)項目 在Linux操作系統上提供最常用的負載均衡軟件;


高可用性集群(High Availability clusters)

一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上.還指可以將集群中的某節點進行離線維護再上線,該過程並不影響整個集群的運行;

高可用 以提升服務在線的能力的集群;

高可用集群主要是為了避免單點故障存在的,備機平時不參與工作。高可用集群是可用性比較高,當我們某臺服務器死機後不會造成我們的服務不可用。其工作模式則是將一個具有故障的服務轉交給一個正常工作的服務器,從而達到服務不會中斷。一般來說我們集群中工作在前端(分發器)的服務器都會對我們的後端服務器做一個健康檢查,如果發現我們服務器宕機就不會對其再做轉發;

衡量標準:可用性=在線時間(在線時間+故障處理時間);

高可用性集群,是保證業務連續性的有效解決方案,一般有兩個或兩個以上的節點,且分為活動節點及備用節點。通常把正在執行業務的稱為活動節點,而作為活動節點的一個備份則稱為備份節點。當活動節點出現問題,導致正在運行的業務不能正常運行時,備用結點此時就會偵測到,並立即接續活動節點來執行業務,從而實現業務的不中斷或短暫中斷;

實現原理:利用集群管理軟件,當主機故障時,備機能夠自動接管主機的工作,並及時切換過去,以實現對用戶的不間斷服務;


高性能集群(High Performance clusters)

高性能著重用於處理一個海量任務;

高性能集群是當某一個任務量非常大的時候,我們做一個集群共同來完成這一任務,所以又被稱為 “並行處理集群”;

充分利用集群中每一臺計算機的資源,實現複雜運算的並行處理,通常用於科學計算領域,如化學分析等;

實現原理:並行處理集群試講大人物劃分為小任務,分別進行處理的機制。一般這樣的集群用來科學研究與大數據運算等方面的工作。現在比較火的Hadoop就是使用並行處理集群;


高可用與負載均衡有什麼區別

HA 和 LB 確實不是一個概念,解決方案的側重點完全不同。

HA偏重於備用資源,切機時會有業務的斷開的,保證了數據的安全,但造成資源的浪費;

LB側重於資源的充分應用,沒有主備的概念,只有資源的最大限度的加權平均應用,基本不會業務的中斷;

從目的上來說:

HA的目的是不中斷服務,LB的目的是為了提高接入能力。雖然經常放一起用,但確實是兩個不同的領域;

從功能上來說:

HA在一條路不通的時候提供另一條路可走,而 LB 就類似於是春運時的多個窗口;

HA 和 LB是兩個概念的問題,一般來說沒有誰優誰劣的標準,只有在特定的環境下,誰更適合的問題。


向上擴展和向外擴展(單機和多機)

向上擴展:升級當臺服務器的硬件;

缺點是在一定的範圍之內它的性能是上升的趨勢,但是超出範圍之後就是下降的趨勢,隨著CPU個數的增加資源競爭性越大;

向外擴展:增加新的服務器;

優勢是增減服務器很方便,而且沒有向上擴展隨著增加性能下降;


集群管理工具

Swarm - Docker;

Fleet – Core OS;

Kubernetes –谷歌;

Mesos – Apache;


負載均衡

所謂負載均衡,就是把大訪問量分發給不同的服務器,也就是分流請求。

實現負載均衡的六種方法

1,HTTP重定向協議實現負載均衡

HTTP 重定向就是應用層的請求轉發,用戶的請求其實已經到了HTTP重定向負載均衡服務器,服務器根據算法要求用戶重定向,用戶收到重定向請求後,再次請求真正的集群;

優點:簡單;

缺點:性能較差;

2,DNS域名解析負載均衡

DNS域名解析負載均衡就是在用戶請求DNS服務器,獲取域名對應的IP地址時,DNS服務器直接給出負載均衡後的服務器IP;

優點:交給DNS,不用我們去維護負載均衡服務器;

缺點:當一個應用服務器掛了,不能及時通知DNS,而且DNS負載均衡的控制權在域名服務商那裡,網站無法做更多的改善和更強大的管理;

3,反向代理負載均衡

在用戶的請求到達方向代理服務器時(已到達網站機房),由於反向代理服務器根據算法轉發到具體的服務器,常用的Apache,Nginx都可以充當反向代理服務器;

優點:部署簡單;

缺點:代理服務器可能成為性能的瓶頸,特別是一次上傳大文件;

LVS集群中實現的三種IP負載均衡技術

4,IP負載均衡

LVS-NAT,在請求到達負載均衡器後,負載均衡器通過修改請求的目的IP地址,從而實現請求的轉發,做到負載均衡;

優點:性能更好;

缺點:負載均衡器的帶寬稱為瓶頸;

5,直接路由負載均衡

LVS-DR,數據鏈路層負載均衡,在請求到達負載均衡器後,負載均衡器通過修改請求的Mac地址,從而做到負載均衡,與IP負載均衡不一樣的是,當請求訪問完服務器之後,直接返回客戶,而無需在經過負載均衡器;

6,IP隧道負載均衡(LVS-TUN)


負載均衡和反向代理有什麼區別

做了反向代理才能實現負載均衡,負載均衡是做反向代理的目的之一。


Nginx負載均衡分發請求的幾種方式

1,輪詢;

2,權重;

3,IP-hsah

#1,2,3是Nginx自帶方法;4,5是第三方方法

4,fair;

5,url_hash;



主從複製

主從複製的作用

主從是一種用於數據容錯和災備的高可用解決方案,而不是一種處理高併發壓力的解決方案(負載均衡是用來抗併發的)

1,主機負責查詢,從機負責增刪改;

2,可以在從機上執行備份,以避免備份期間影響主機的服務;

3,主從複製後,也可以在從機上查詢,以降低主機的訪問壓力。但是,只有更新不頻繁的數據或者對實時性要求不高的數據可以通過從服務器查詢,實時性要求高的數據仍需在主服務器查詢(因為主從複製有同步延遲,所以不能保證強數據一致性);


主從複製和讀寫分離的區別

主從複製是實現讀寫分離的技術之一,也是實現讀寫分離的前提條件。

做讀寫分離時最重要的就是確保 讀庫 寫庫 的數據統一,而主從複製是實現數據統一最簡單的方法(並不能夠保證強數據的一致性);

讀寫分離,顧名思義,就是一個表只負責向前臺頁面展示數據,而後臺管理人員對錶的增刪改在另一個表中,把兩個表分開,就是讀寫分離;

主從複製則是一個表數據 增刪改 之後會及時更新到另一個表中,保證兩個表的數據一致;


實現主從複製的方法

MySQL主從複製;

MongoDB主從複製;


如何減少主從複製的同步延遲

MySQL主從數據庫同步延遲問題;

MongoDB主從數據庫同步延遲問題;


主從複製側重點不同的幾種類型

雙機熱備=主機+備機;

主要應用運行在主機,備機即備用機器。備機不工作,主機出現故障時備機接管主機的所有工作;

雙機互備=主機(備機) + 備機(主機);

互為主備,部分應用運行於主機,部分應用運行於備機,主機備機同時工作;

雙機雙工=主機+主機;

兩臺主機同時運行應用,主機備機同時工作;



分佈式

分佈式與集群有什麼區別

廣義上的分佈式是指,將不同的服務分佈在不同的服務器上;

集群是指,將幾臺服務器集中在一起,實現同一業務;

分佈式中的每一個節點都可以做集群,而集群並不一定是分佈式的;





Web負載均衡、集群、高可用解決方案

組件

Apache,Apache軟件基金會下的一個項目,Apache HTTP Server ;

Nginx,高性能HTTP和反向代理服務器,Nginx HTTP Server;

LVS,Linux虛擬服務器,是一個虛擬的服務器集群系統;

HAProxy,可提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常有需要會話保持或七層處理。HAProxy運行中當前的硬件上,完全可以支持數以萬計的併發連接,並且它的運行模式使得它可以很簡單安全的整合進你當前的架構中,同時可以保護你的Web服務器不被暴露到網絡上;

Keepalived,這裡說的keepalived不是Apache或者Tomcat等某個組件上的屬性字段,它也是一個組件,可以實現Web服務器的高可用。它可以檢測Web服務器的工作狀態,如果該服務器出現故障被檢測到,將其剔除服務器群中,直至正常工作後,Keepalived會自動檢測到並加入到服務器群裡面。實現主備服務器發生故障時IP瞬時無縫交接。它是LVS集群節點將抗檢測的一個用戶空間守護進程,也是LVS的引導故障轉移模塊(director failover)。Keepalived守護進程可以檢查LVS池的狀態。如果LVS服務器池當中的某一個服務器宕機了,Keepalived會通過一個setsockopt呼叫通知內核將這個節點從LVS拓撲圖中移除;

Memcached,它是一個高性能分佈式內存對象緩存系統,用於對業務查詢數據緩存,減輕數據庫的負載,在memcached裡面緩存的數據必須序列化;

Teeracotta,是一款由美國Teeracotta公司開發的著名開源Java集群平臺,支持數據的持久化、session的複製以及高可用;


常用Web集群

Tomcat

Apache Tomcat是Apache基金會下開發的一個Servlet容器,提供了作為web服務器的一些特殊功能,如Tomcat管理和控制平臺、安全域管理和Tomcat閥。

Servlet(Server Applet),全稱Java Servlet,是用Java編寫的服務器端程序。其功能在於交互地瀏覽和修改數據,生成動態web內容。

Tomcat更多用來做一個應用容器,管理整個Servlet的生命週期,主要用來跑Java web App。因為Java後臺程序無法運行在Apache和Nginx上,他兩不是Servlet容器。

與Apache HTTP Server相比,Tomcat能夠動態的生成資源並返回到客戶端。Apache 和 Nginx都能夠將某一個文本文件的內容通過HTTP協議返回到客戶端,但這個文本文件的內容是固定的。也就是說,無論何時、任何人訪問它得到的內容都是完全相同的,這樣的資源我們稱為靜態資源。動態資源與之相反,在不同的時間、不同的客戶端訪問得到的內容是不相同的。

Apache 和 Nginx 本身不支持生成動態頁面,但它們可以通過其他模塊來支持(如shell、Python、PHP程序來生成動態內容)。

雖然Tomcat也可以認為是HTTP服務器,但通常它仍然會和Nginx配合在一起使用:

動靜態資源分離

,運用Nginx的反向代理功能分發請求,所有動態資源的請求交個Tomcat,而靜態資源的請求則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力;

負載均衡,當也無壓力增大時,可能一個Tomcat的實例不足以處理,那麼這時可以啟動多個Tomcat實例進行水平擴展,而Nginx的負載均衡功能可以把請求通過算法分發到各個不同的實例進行處理;

Tomcat集群方案

Apache + Tomcat;

Nginx + Tomcat;

Lvs + Nginx + Tomcat;

# lvs負責集群調度,Nginx負責靜態文件處理,Tomcat負責動態文件處理;


Session複製

在訪問系統會話的過程中,用戶登錄系統後,不管訪問系統的任何資源地址都不需要重複登錄,這裡面的 Servlet容易保存了該用戶的會話(session)。如果兩個Tomcat(A、B)提供集群服務時,用戶在 A上登錄,接下來的請求Web服務器根據策略分發到 B,因為B沒有保存用戶的會話(session)信息,不知道其登錄,會跳轉到登錄界面。這時候我們需要讓 B也保存有 A的會話,我們使用Tomcat的session複製實現或者通過其他手段讓session共享。

如果不採用 粘性session,那麼我們可以採用Tomcat的session複製使所有節點Tomcat的會話相同,Tomcat使用組播技術,只要集群中一個Tomcat節點的session發生改變,會廣播通知所有的Tomcat節點發生改變。


高可用(HA)和session共享

使用 Lvs + Keepalived 實現集群高可用,達到更健壯的LB

我們可以做前端使用 Lvs 來做負載均衡,根據Lvs的8種調度算法,分發請求到對應的Web服務器集群上。Lvs做雙機熱備,通過Keepalived模塊能夠達到故障自動轉移到備份服務器,不間斷提供服務。

Linux服務器集群概念辨識

Web端使用的負載均衡:

HAProxy + Keepalived + Nginx;

數據庫集群(如MySQL):

Lvs + Keepalived + MySQL;

因為HAProxy和Nginx一樣是工作在網絡7層之上,並且HAProxy彌補了Nginx的一些缺點(如session的保持,cookie的引導),且它本身是個負責均衡軟件,處理負載均衡上面必然優於Nginx。

Lvs比較笨重,對於比較龐大的網絡應用,實施比較複雜,雖然它運行在網絡4層之上,僅做分發沒有流量產生,但是它不能做正則處理也不能做動靜分離,所以一般用 Lvs + Keepalived或heatbeat做數據庫層的負載均衡。

使用 terracotta 或 memcached 使session共享

terracotta 是 jvm 級別的 session共享

它基本原理是對於集群間共享的數據,當在一個節點發生變化的時候,Terracotta只把變化的部分發送給Terracotta服務器,然後服務器把它轉發給真正需要這個數據的節點,並且共享的數據對象不需要序列化。

通過 memcached 實現內存級 session共享

通過 memcached-session-manager(msm)插件,通過Tomcat上一定的配置,即可實現把session儲存到memcached服務器上。在memcached內存中共享的對象需要序列化。

Linux服務器集群概念辨識

其他方案

通過cookie保存用戶信息(一般是登錄信息),每一個請求到達Web應用的時候,Web應用從cookie中取出數據進行處理(這裡cookie肯定要加密);

另一種是把用戶信息的關鍵屬性保存到數據庫,這樣就不需要session了。請求過來從數據庫查詢關鍵屬性數據,做相應處理。缺點是加大了數據庫的負載,是數據庫成為集群的瓶頸。

需要更多c/c++Linux後臺服務器開發學習視頻資料的可以後臺私信【架構】免費獲取

Linux服務器集群概念辨識



分享到:


相關文章: