LB-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/78556

(0)
ss
上一篇 2017-06-25 23:42
下一篇 2017-06-25 23:44

相關推薦

  • 計算機基礎知識(第一天)

    一、計算機的硬件組成         馮諾依曼體系結構:             CPU、存儲器、輸入設備、輸出設備       &nbsp…

    Linux干貨 2016-07-26
  • Vim編輯工具用法的總結

    描述:    Vim是一款強大的命令行界面的文本編輯器,是vi的高級版本,先說下學習它的原因:  1,所有的UNIX Like 系統都會內置vi文本編輯器,其他的文本編輯器則不一定會存在;  2,很多軟件的編輯接口都會主動調用vi  3,vim具有程序編輯的能力,可以主動以字體顏色辨別語法的正確性,方便程序設…

    Linux干貨 2016-08-11
  • SecureCRT 8.0的安裝及Linux基本命令介紹

    在CentOS虛擬中安裝并打開圖形界面后,可以在圖形界面和命令行界面之間任意切換。在打開終端后輸入init3可以切換至命令行界面,輸入init5返回到圖形界面。 這里我們用SecureCRT 8.0來遠程的對虛擬機進行操作,對于SecureCRT 8.0的安裝步驟就不詳細介紹,簡單介紹下如何連接到CentOS。 1. 2.點擊完成。   &nbsp…

    2017-07-13
  • SElinux配置httpd

    一、啟用SELinux策略并安裝httpd服務,改變網站的默認主目錄為/website,添加SELinux文件標簽規則,使網站可訪問     1、修改selinux策略并重啟 [root@localhost ~]# vim /etc/selinux/config# This file controls the stat…

    Linux干貨 2016-09-19
  • N25-第二周總結

    linux bassic The second week of blogging 一、linux中的文件,及文件操作管理命令 1. 文件概念 存儲空間存儲的一段流式數據,對數據可以做到按名存取。 linux中的文件具有的特點是:可通過操作系統或者程序對外提供信息,也能對內輸入信息,可以被創建,刪除。linux中,文件有特別重要的意義,他們為操作系統和設備提供…

    Linux干貨 2016-12-11
  • 引導加載程序grub的使用詳解

    引導加載程序grub的使用詳解 為運行于虛擬機上的CentOS 6添加一個新硬件,提供兩個主分區 為硬盤建兩個主分區;并為其安裝grub 為硬盤的第一個主分區提供內核和ramdisk文件;為第二個分區提供rootfs 為rootfs提供bash、ls、cat程序以及所依賴的庫文件 為grub提供配置文件 將新的硬盤設置為第一啟動項并能夠正常啟動目標主機 1.…

    Linux干貨 2017-09-04
欧美性久久久久