cluster集群基本概念


cluster集群種類:

1,LB(Load Balance)負載均衡集群:

弱點:當橫向擴展到一定機器后,發現在怎么橫向加機器也沒有效果的時候,瓶頸就卡在分發的服務器上了,也就是LB機器上了,如何解決呢?功能拆分嗎,一個功能一個LB集群。

2,HA(High Availability)高可用集群:有多個LB,一旦主LB掛斷,副LB馬上取而代之。副LB怎么知道主LB是否還或者呢,主LB每間隔一段時間(1秒或者半秒)向副LB集群發送還活着的信息,副LB接到了主LB還或者的信息,就知道了它還或者。如果多次副LB沒有接收到主LB的活着的信息,則取而代之。那么副LB怎么取代主LB呢,把主LB的IP設置成自己機器的IP,並啟動和主LB同樣的服務。

3,HP(High performance)集群

  • 向量機:通過在一台機器上增加硬(比如加100個CPU)件的方式提高性能。
  • 並行處理集群:橫向擴展
    • 需要一個分布式文件系統
    • 將大任務切割為小任務,分別進行處理的機制

上面3種集群的各自用途:

  • LB用於高並發

  • HA用於高穩定

  • HP用於海量數據分析(大數據分析,比如分析中國15億人),復雜的科學計算,模擬核彈爆炸,天氣預報

集群節點間的文件同步:

rsync:遠程文件拷貝命令

inotify :內核監控文件發生變化后,會發信號給用戶進程。

所以使用rsync+inotify ,可以實現,各個服務器機器見的靜態文件的同步。

health check:

試想一下,如果LB下的某個機器壞掉了,會發生什么情況?LB分發到這台機器上的請求,這台機器不能處理了。所以LB需要知道地下的機器哪些掛掉了,哪些又從掛掉的狀態恢復成正常狀態了,這就是health check。如果發現它掛掉了,則不往它這里分發請求了。如果它又恢復了,則繼續往它這里分發請求。

DAS和NAS

DAS:direct attached storage

以塊為單位請求文件

NAS:network attached storage

以整個文件為單位請求文件

DAS的傳輸速度根據設備類型的不同,最少也能320Mbps,最高的能6Gbps;

而百兆以太網的速度為12.5Mbps,千兆125Mbps。

所以DAS的性能更好。如果多台主機同時使用DAS設備,是通過線連接到DAS設備上的,DAS設備相當於一塊硬盤,里面沒有操作系統,所以主機1寫DAS上的文件A,主機B也寫DAS上的文件A,文件A就會錯亂。主機1的進程1寫DAS上的文件A,主機1的進程2寫DAS上的文件A,主機1的操作系統會提供鎖機制。

主副切換時,會產生split-brain:腦裂

主服務器由於太忙了,沒來得及給副服務器發送心跳信息,這時副服務器取代了主服務器,

但是在主服務器還有一些數據沒有寫到DAS設備上,數據就丟失了。

如何解決呢,防止主服務器是假死,所以補上一刀,直接拔掉主服務器的電源。

只要主服務器和副服務器都插在一個電源管理器上的話,副服務器發送關閉主服務器的命令給電源管理器械就行了。

stonith:shoot the other node in the head爆頭。

隔離機制:fencing

1,節點級別:stonith

2,資源級別:切斷某個主機能夠訪問DAS的接口

如果只有主服務器和一個副服務器,它們2個就會來回強着當主服務器,為了避免split-brain,我們就需要至少3台服務器或者奇數個服務器作為一個集群。

  • 其中一台接受不到另外2台的心跳了,自動把自己下線
  • 其中2台都接受不到另外一條的心跳了,殺死它。

LB集群

  • Hardware

    • F5(最好?),BIG IP
    • Citrix,Netscaler
    • A10(最便宜)
  • Software

    • 四層

      • LVS(Linux Virtual Server)國人發明的
    • 七層

      • nginx

        http ,smtp,pop3,imap

      • haproxy

        http,tcp(mysql,smtp)

    • 四層和七層的區別:4層是在IP和端口上做負載均衡,7層是在特定的應用層協議上做負載均衡。

四層的LVS說明

LVS不能和iptables一起使用,LVS是工作在內核區域的。

iptables/netfilter

LVS

  • ipvsadm:用戶區。管理集群服務的命令行工具
  • ipvs:在內核區

IP地址的名詞解釋:

  • CIP:客戶端的IP
  • VIP:負載均衡機器(director)的公網IP,也就是客戶端發送請求里的目標IP。
  • DIP:轉發請求時,使用的IP
  • RIP:集群節點機器的IP

LVS種類:

1,NAT

  • 集群主機必須和負載均衡主機在同一個內網了,而且DIP必須是RIP們的網關
  • RIP是私有IP
  • DIP位於CIP和RIP之間,即負責CIP過來接收請求,然后把目標IP從VIP修改為RIP,然后RIP機器處理完成后,把相應再發回DIP機器(director),然后DIP再把目標IP從RIP修改回VIP。所以director的負載很重
  • 支持端口映射,RIP的服務的端口可以是任意的
  • real server可以是任意操作系統,但是director必須是Linux系統
  • 確定director是最容易形成性能瓶頸的。最多掛10 real server

,DR:直接路由。被使用最多

  • 集群節點必須和director在同一個物理網絡中(同一個物理網絡是什么意思???)

  • director只負責接收請求,而不負責響應;相應報文直接發給CIP

  • 實際過來的是,請求端IP為CIP,目標端IP為VIP。

  • 每台RIP機器配2個IP,一個是VIP但必須是隱藏的,負責IP就會沖突了;另一個是RIP

  • 當CIP的請求發送到了VIP,然后director不修改目標IP,所以目標IP還是VIP,它修改MAC地址,把目標IP攜帶的MAC地址修改為RIP的,real server處理完后,把相應報文用隱藏的VIP發送給CIP,這樣一來就不用經過director了。

    VIP是配置到網卡別名上,並且是隱藏的,不用於接受請求,只用於發送相應。

  • RIP可以使用公網IP,實現便捷的遠程管理。也可以是私有IP

  • 集群節點一定不能將網關指向DIP

  • director不支持端口映射

  • RIP機器上可以使用大多數操作系統,前提是支持IP隱藏功能。

  • DR模式可以帶動更多的real server,至少100以上。

    理由:只負責接收請求,而不負責響應;請求報文很小,響應報文很大,director不處理響應報文了,所以性能提高很大。

3,TUN模式

解決real server 分布在不同的國家,不同的城市

  • director通過隧道協議把原CIP和目標VIP作為報文發給realserver,發的時候,使用DIR-》RIP
  • RIP要有公網IP,realserver的OS必須支持隧道協議
  • 其余的和DR模式一樣

調度算法:靜態調度,動態調度

(active)活動連接數:正在傳輸數據

(inactive)非活動連接數:傳輸數據完成了,但是連接還沒有斷開。

靜態調度(固定調度):調度器不管realserver的活動連接數和非活動連接數,按照事先指定好的算法調度。所以就有可能把某個realserver累死了,有的閑死了。

  • rr:輪詢(平均呼叫)

  • wrr:weight 加權輪詢(性能好的realserver多叫,不好的少叫)

  • sh(source hash 原地址hash):只要是同一個CIP來的請求,都給固定的realserver。

    感覺很奇怪,這不就破壞了負載均衡的機制了嗎,為什么會有這樣的算法?

    http協議是無狀態的短鏈接,所以server處理完會給瀏覽器發送一個身份信息,來標識這個client,

    瀏覽器會把這個信息保存在本地的cookie中。早期cookie里有太多的敏感信息,會泄露用戶的信息,

    所以瀏覽器保存了最少量的信息,變成了輕cookie,原來的信息放到了server端,存到了server的內存中,叫session。就是為了找到原來的session,才需要把同一個CIP導向到原來的real server。

    如果各個節點的real server可以同步session的話,sh調度算法就沒有使用的必要了。

  • dh(destination hash 目標地址hash):和sh算法類似。用於緩存服務器集群。保證緩存命中率的提高。

動態調度:調度器要考慮realserver的活動連接數和非活動連接數

  • lc(最少連接):計算:active × 256 + inactive,結果最小的realserver,作為這次的目標realserver
  • wlc:加權lc。計算:(active × 256 + inactive)/weight,結果最小的realserver,作為這次的目標realserver。wlc被使用最多
  • sed(最短期望延遲)計算:(active+1) × 256/weight,結果最小的realserver,作為這次的目標realserver
  • np(never queue 永不排隊):只要有個realsever沒有被分到,就分給它一個再說。
  • lblc(基於本地的最少連接):相當於動態的dh,不考慮active數
  • lblcr(基於本地的帶復制功能的最少連接):考慮active數

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM