LB Cluster:lvs

Linux Cluster:

  • Cluster:計算機集合,為解決某個特定問題組合起來形成的單個系統;

  • Linux Cluster類型:

    • LB:Load Balancing,負載均衡;
    • HA:High Availiablity,高可用;
      A=MTBF/(MTBF+MTTR)
      (0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, 99.999%, 99.9999%
    • HP:High Performance,高性能;

    • 分布式系統:

      • 分布式存儲
        分布式計算
  • 系統擴展方式:
    Scale UP:向上擴展
    Scale Out:向外擴展:Cluster

LB Cluster:

  • LB Cluster的實現:

    • 硬件:
      F5 Big-IP
      Citrix Netscaler
      A10 A10
    • 軟件:
      lvs:Linux Virtual Server
      nginx
      haproxy
      ats:apache traffic server
      perlbal
      pound

    • 基于工作的協議層次劃分:

      • 四層、傳輸層(通用):(DPORT)

        • lvs
          nginx:(stream module)
          haproxy:(mode tcp)
      • 七層、應用層(專用):(自定義的請求模型分類)

        • http:nginx(http_upstream module), httpd, haproxy(mode http), …
          fastcgi:nginx, httpd, …
          mysql:ProxySQL, …
      • 站點指標

        • PV:Page View
          UV:Unique Vistor
          IP
    • 會話保持:

      1. session sticky會話綁定
        Source IP:sh,persistence
        Cookie
      2. session replication;
        session cluster:服務器之間采用的是組播方式同步,不適合于較大規模的場景
      3. session server此時,該位置處于單點
        memcached
        redis
  • lvs:Linux Virtual Server

    • VS: Virtual Server
      RS: Real Server

    • VS:根據請求報文的目標IP和目標協議及端口將其調度轉發至某RealServer,根據調度算法來挑選RS;

    • iptables/netfilter:

      • iptables:用戶空間的管理工具;
      • netfilter:內核空間上的框架;

        • 流入:PREROUTING –> INPUT
        • 流出:OUTPUT –> POSTROUTING
        • 轉發:PREROUTING –> FORWARD –> POSTROUTING
      • DNAT:目標地址轉換; PREROUTING;

      • SNAT:源地址轉換;POSTROUTING;
    • lvs: ipvsadm/ipvs

      • ipvsadm:用戶空間的命令行工具,規則管理器,用于管理集群服務及相關的RealServer;
      • ipvs:工作于內核空間的netfilter的INPUT鉤子之上的框架;
    • lvs集群類型中的術語:

      • vs:Virtual Server, Director, Dispatcher, Balancer
      • rs:Real Server, upstream server, backend server
      • CIP:Client IP,
      • VIP: Virtual serve IP,
      • RIP: Real server IP,
      • DIP: Director IP
    • lvs集群的類型:
      lvs-nat:修改請求報文的目標IP;多目標IP的DNAT;
      lvs-dr:操縱封裝新的MAC地址;
      lvs-tun:在原請求IP報文之外新加一個IP首部;
      lvs-fullnat:修改請求報文的源和目標IP;

      • lvs-nat:

        多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發;
        
          (1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP;
          (2)請求報文和響應報文都必須經由Director轉發;Director要打開核心轉發功能;Director易于成為系統瓶頸;
          (3)支持端口映射,可修改請求報文的目標PORT;
          (4)vs必須是Linux系統,rs可以是任意系統;
      • lvs-dr:Direct Routing,直接路由;

        通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變;
        
          Director和各RS都得配置使用VIP;
        
          (1) 確保前端路由器將目標IP為VIP的請求報文發往Director:
              (a) 在前端網關做靜態綁定;
              (b) 在RS上使用arptables;
              (c) 在RS上修改內核參數以限制arp通告及應答級別;
                  解決地址沖突的方式有三種:
                      (1) 在前端網關做靜態綁定;
                      (2) 在各RS使用arptables;
                      (3) 在各RS修改內核參數,來限制arp響應和通告的級別;
                          限制響應級別:arp_ignore
                              0:默認值,表示可使用本地任意接口上配置的任意地址進行響應;
                              1: 僅在請求的目標IP配置在本地主機的接收到請求報文接口上時,才給予響應;
                          限制通告級別:arp_announce
                              0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
                              1:盡量避免向非直接連接網絡進行通告;
                              2:必須避免向非本網絡通告;
        
                          此處解決沖突:arp_ignore為1、arp_announce為2
        
          (2) RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director;
          (3) RS跟Director要在同一個物理網絡;
          (4) 請求報文要經由Director,但響應不能經由Director,而是由RS直接發往Client;
          (5) 不支持端口映射;
      • lvs-tun:

        轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP);
        
        (1) DIP, VIP, RIP都應該是公網地址;
        (2) RS的網關不能,也不可能指向DIP;
        (3) 請求報文要經由Director,但響應不能經由Director;
        (4) 不支持端口映射;
        (5) RS的OS得支持隧道功能;
      • lvs-fullnat:

        通過同時修改請求報文的源IP地址和目標IP地址進行轉發;
          CIP <--> DIP 
          VIP <--> RIP 
        
        (1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP;
        (2) RS收到的請求報文源地址是DIP,因此,只能響應給DIP;但Director還要將其發往Client;
        (3) 請求和響應報文都經由Director;
        (4) 支持端口映射;
        
        注意:此類型內核內默認是不支持;
      • 總結:

        • lvs-nat, lvs-fullnat:請求和響應報文都經由Director;

          lvs-nat:RIP的網關要指向DIP;
          lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信;
        • lvs-dr, lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client;

          lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發;
          lvs-tun:通過在原IP報文之外封裝新的IP首部實現轉發,支持遠距離通信;
  • ipvs scheduler:
    根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種:

    • 靜態方法:僅根據算法本身進行調度;

      RR:roundrobin,輪詢;
      WRR:Weighted RR,加權輪詢;
      SH:Source Hashing,實現session sticky,源IP地址hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定;
      DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡;
    • 動態方法:主要根據每RS當前的負載狀態及調度算法進行調度;

      LC:least connections
        Overhead=activeconns*256+inactiveconns
      WLC:Weighted LC
        Overhead=(activeconns*256+inactiveconns)/weight
      SED:Shortest Expection Delay
        Overhead=(activeconns+1)*256/weight
      NQ:Never Queue
      
      LBLC:Locality-Based LC,動態的DH算法;
      LBLCR:LBLC with Replication,帶復制功能的LBLC;
  • ipvsadm/ipvs:

    • 集群和集群之上的各RS是分開管理的;

      • 集群定義
      • RS定義
    • ipvs:

      • ~]# grep -i -C 10 “ipvs” /boot/config-VERSION-RELEASE.x86_64
        支持的協議:TCP, UDP, AH, ESP, AH_ESP, SCTP;

      • ipvs集群:
        集群服務
        服務上的RS

    • ipvsadm:

      • 程序包:ipvsadm
        Unit File: ipvsadm.service
        主程序:/usr/sbin/ipvsadm
        規則保存工具:/usr/sbin/ipvsadm-save
        規則重載工具:/usr/sbin/ipvsadm-restore
        配置文件:/etc/sysconfig/ipvsadm-config

      • ipvsadm命令:

        • 核心功能:
          集群服務管理:增、刪、改;
          集群服務的RS管理:增、刪、改;
          查看:

          ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
          ipvsadm -D -t|u|f service-address
          ipvsadm -C
          ipvsadm -R
          ipvsadm -S [-n]
          ipvsadm -a|e -t|u|f service-address -r server-address [options]
          ipvsadm -d -t|u|f service-address -r server-address
          ipvsadm -L|l [options]
          ipvsadm -Z [-t|u|f service-address]
        • 管理集群服務:增、改、刪;

          • 增、改:
            ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

          • 刪:
            ipvsadm -D -t|u|f service-address

          • service-address:

            -t|u|f:
              -t: TCP協議的端口,VIP:TCP_PORT
              -u: UDP協議的端口,VIP:UDP_PORT
              -f:firewall MARK,是一個數字;
          • [-s scheduler]:指定集群的調度算法,默認為wlc;
        • 管理集群上的RS:增、改、刪;

          • 增、改:
            ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

          • 刪:
            ipvsadm -d -t|u|f service-address -r server-address

          • server-address:rip[:port]

          • lvs類型:

            -g: gateway, dr類型
            -i: ipip, tun類型
            -m: masquerade, nat類型
          • -w weight:權重;
        • 清空定義的所有內容:ipvsadm -C

        • 查看:

          ipvsadm -L|l [options]
            --numeric, -n:numeric output of addresses and ports 
            --exact:expand numbers (display exact values)
          
            --connection, -c:output of current IPVS connections
            --stats:output of statistics information
            --rate :output of rate information
        • 保存和重載:

          ipvsadm -S = ipvsadm-save
          ipvsadm -R = ipvsadm-restore
  • FWM:FireWall Mark

    • netfilter:

      • target: MARK, This target is used to set the Netfilter mark value associated with the packet.
        –set-mark value
    • 借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度;

    • 打標記方法(在Director主機):
      ~]# iptables -t mangle -A PREROUTING -d $vip -p $proto –dport $port -j MARK –set-mark NUMBER

    • 基于標記定義集群服務:
      ~]# ipvsadm -A -f NUMBER [options]

  • lvs persistence:持久連接

    • 脫離算法的持久連接,ipvs自己的持久連接模板
    • 持久連接模板:實現無論使用任何調度算法,在一段時間內(timeout指定的時間),能夠實現將來自同一個地址的請求始終發往同一個RS;

    • ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

    • port Affinity:

      • 每端口持久:每個端口對應定義為一個集群服務,每集群服務單獨調度;
      • 每防火墻標記持久:基于防火墻標記定義集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity;
      • 每客戶端持久:基于0端口定義集群服務,即將客戶端對所有應用的請求統統調度至后端主機,必須定義為持久模式;
  • 保存及重載規則:

    • 保存:建議保存至/etc/sysconfig/ipvsadm

      ipvsadm-save > /PATH/TO/IPVSADM_FILE
      ipvsadm -S > /PATH/TO/IPVSADM_FILE
      systemctl stop ipvsadm.service
    • 重載:

      ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
      ipvsadm -R < /PATH/FROM/IPVSADM_FILE
      systemctl restart ipvsadm.service
  • 高可用問題

    • Director不可用,整個系統將不可用;SPoF

      • 解決方案:高可用
        keepalived
        heartbeat/corosync
    • 某RS不可用時,Director依然會調度請求至此RS;

      • 解決方案:對各RS的健康狀態做檢查,失敗時禁用,成功時啟用;

        • keepalived(核心功能是對Director進行冗余的,還可以對后端主機的健康狀態進行檢測)
        • ldirectord(只對后端主機進行健康狀態檢測)
      • 檢測方式:
        (a) 網絡層檢測;
        (b) 傳輸層檢測,端口探測;ncat、nmap
        (c) 應用層檢測,請求某關鍵資源;
    • ldirectord:

      • Daemon to monitor remote services and control Linux Virtual Server. ldirectord is a daemon to monitor and administer real servers in a cluster of load balanced virtual servers. ldirectord typically is started from heartbeat but can also be run from the command line.

      • 配置示例:

        checktimeout=3
        checkinterval=1
        fallback=127.0.0.1:80
        autoreload=yes
        logfile="/var/log/ldirectord.log"
        quiescent=no
        virtual=5
          real=172.16.0.7:80 gate 2
          real=172.16.0.8:80 gate 1
          fallback=127.0.0.1:80 gate
          service=http
          scheduler=wrr
          checktype=negotiate
          checkport=80
          request="index.html"
          receive="CentOS"

原創文章,作者:s,如若轉載,請注明出處:http://www.www58058.com/78442

(0)
ss
上一篇 2017-06-23
下一篇 2017-06-24

相關推薦

  • nginx實現代理服務器功能

    nginx實現代理服務器功能1: #環境: 172.16.253.223 #CentOS7.3,安裝nginx作為代理服務器 172.16.253.224 #CentOS7.3,安裝httpd作為服務器 172.16.253.188 #CentOS6.8,咱莊httpd作為圖片服務器 #223主機: yum install nginx vim /etc/ng…

    Linux干貨 2017-06-28
  • hello 小伙伴們

    一起跟著馬哥,努力向前!不管多么累、不管有多忙,不要間斷、不要放棄,為了實現我們心中所想的,努力吧,騷年們!

    Linux干貨 2016-08-08
  • 網絡基礎總結

    這周南老師出差了,由王老師給我們代課,這周我們主要學習了網絡基礎,相比著之前,主要是理論加理解。下面我總結一下。 處于21世紀的我們,互聯網時代,網絡在我們身邊的各個角落,覆蓋了我們的衣食住行,帶來 很多方便;首先什么是網絡, 家庭辦公室,移動用戶,總部,分支機構。。。都在用互聯網相連著,省去了許多麻煩,時間,加快了辦公效率; 資源共享的功能和優點:數據和應…

    2017-09-02
  • Linux基礎知識之忘記root密碼

    學習之后修改linux用戶密碼:(物理機端才能修改) ①在讀秒時按下任意鍵一下即可;       ②在下面的界面,選擇敲a鍵,進入命令行模式;       ③在下面的界面的末尾輸入 1(表示進入單用戶模式);      …

    Linux干貨 2016-07-22
  • shell編程if及find查找作業

    寫一個腳本/root/bin/createuser.sh,實現如下功能:使用一個用戶名做為參數,如果指定參數的用戶存在,就顯示其存在,否則添加之;顯示添加的用戶的id號等信息 [root@www sh.log]# cat createuser.sh  #!/bin/bash #author #使用一個用戶名作為參數,如…

    Linux干貨 2016-08-16
  • Linux中的cut、sort、uniq以及用戶(組)管理類指令應用示例

    Linux中的cut、sort、uniq指令 列出當前系統上所有已經登錄的用戶的用戶名,注意:同一用戶登錄多次,只顯示一次。 解決思路: 先使用who指令顯示出所有已登錄的用戶。然后對who指令的輸出進行切割得到想要的第一列內容,即只包含用戶名??梢允褂胏ut指令。最后對cut的結果進行排序并去重??梢允褂胹ort指令。   借助管道符,可以方便的…

    Linux干貨 2016-11-13
欧美性久久久久