1. 程式人生 > >負載均衡集群介紹,LVS介紹,LVS的調度算法,LVSNAT模式搭建

負載均衡集群介紹,LVS介紹,LVS的調度算法,LVSNAT模式搭建

alt 幾種算法 修改 數據包 sbin 模型 處理 tina 客戶

負載均衡集群介紹
  • 主流開源軟件LVS、keepalived、haproxy、nginx等
  • 其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既可以認為是4層,也可以當做7層使用
  • keepalived的負載均衡功能其實就是lvs
  • lvs這種4層的負載均衡是可以分發除80外的其他端口通信的,比如MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種
  • 相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求

    LVS介紹

  • LVS是由國人章文嵩開發
  • 流行度不亞於apache的httpd,基於TCP/IP做的路由和轉發,穩定性和效率很高
  • LVS最新版本基於Linux內核2.6,有好多年不更新了
  • LVS有三種常見的模式:NAT、DR、IP Tunnel
  • LVS架構中有一個核心角色叫做分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)
  • LVS NAT模式
    技術分享圖片
    • 這種模式借助iptables的nat表來實現
    • 用戶的請求到分發器後,通過預設的iptables規則,把請求的數據包轉發到後端的rs上去
    • rs需要設定網關為分發器的內網ip
    • 用戶請求的數據包和返回給用戶的數據包全部經過分發器,所以分發器成為瓶頸,所以請求量不能太大,一般十來臺,除非萬兆光纖荷藕高配置
    • 在nat模式中,rs和分發器之間通過內網通信,只需要分發器有公網ip即可,所以比較節省公網ip資源
  • LVS IP Tunnel模式
    技術分享圖片
    • 這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip
    • 客戶端請求的目標IP為vip,分發器接收到請求數據包後,會對數據包做一個加工,會把目標IP改為rs的IP,這樣數據包就到了rs上
    • rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己,直接返回給用戶,不需要經過分發器
  • LVS DR模式
    技術分享圖片
    • 這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip
    • 和IP Tunnel不同的是,它會把數據包的MAC地址修改為rs的MAC地址
    • rs接收數據包後,會還原原始數據包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己,直接返回給用戶,不需要經過分發器

      LVS調度算法

  • 輪詢 Round-Robin 簡稱rr,用戶請求過來,均衡的分發到rs
  • 加權輪詢 Weight Round-Robin wrr,權重高的rs多分發
  • 最小連接 Least-Connection lc,鏈接數少的,優先分發
  • 加權最小連接 Weight Least-Connection wlc
  • 基於局部性的最小連接 Locality-Based Least Connections lblc
  • 帶復制的基於局部性最小連接 Locality-Based Least Connections with Replication lblcr
  • 目標地址散列調度 Destination Hashing dh
  • 源地址散列調度 Source Hashing sh

    LVS NAT模式搭建

  • 準備工作
    • 三臺機器
    • 分發器,也叫調度器(簡寫為dir)
    • 內網:21.128,外網:110.130(vmware僅主機模式)
    • rs1
    • 內網:21.129,設置網關為21.128
    • rs2
    • 內網:21.130,設置網關為21.128
    • 三臺機器上都執行執行
    • systemctl stop firewalld; systemc disable firewalld
    • yum install -y iptables-services
    • systemctl start iptables-service; iptables -F; service iptables save
  • NAT模式搭建
    • 在dir上安裝ipvsadm
    • yum install -y ipvsadm
    • 在dir上編寫腳本,vim /usr/local/sbin/lvs_nat.sh//內容如下
      #! /bin/bash
      # director 服務器上開啟路由轉發功能
      echo 1 > /proc/sys/net/ipv4/ip_forward
      # 關閉icmp的重定向
      echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
      echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
      # 註意區分網卡名字,阿銘的兩個網卡分別為ens33和ens37
      echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
      echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
      # director 設置nat防火墻
      iptables -t nat -F
      iptables -t nat -X
      iptables -t nat -A POSTROUTING -s 192.168.21.0/24  -j MASQUERADE
      # director設置ipvsadm
      IPVSADM=‘/usr/sbin/ipvsadm‘
      $IPVSADM -C
      $IPVSADM -A -t 192.168.110.130:80 -s wlc -p 3
      $IPVSADM -a -t 192.168.110.130:80 -r 192.168.21.129:80 -m -w 1
      $IPVSADM -a -t 192.168.110.130:80 -r 192.168.21.130:80 -m -w 1
      [root@akuilinux01 ~]# sh /usr/local/sbin/lvs_nat.sh
  • 測試
    • 兩臺rs上都安裝nginx
    • 設置兩臺rs的主頁,做一個區分,也就是說直接curl兩臺rs的ip時,得到不同的結果
      [root@akuilinux02 ~]# vim /usr/share/nginx/html/index.html
      [root@akuilinux02 ~]# curl localhost
      akuilinux-02
      [root@akuilinux03 ~]# vim /usr/share/nginx/html/index.html
      [root@akuilinux03 ~]# curl localhost
      akuilinux-03
    • 瀏覽器裏訪問192.168.142.147,多訪問幾次看結果差異
      [root@akuilinux01 ~]# curl 192.168.110.130
      akuilinux-02
      [root@akuilinux01 ~]# curl 192.168.110.130
      akuilinux-02
      [root@akuilinux01 ~]# curl 192.168.110.130
      akuilinux-03
      [root@akuilinux01 ~]# curl 192.168.110.130
      akuilinux-02
      [root@akuilinux01 ~]# curl 192.168.110.130
      akuilinux-03

      擴展

  • lvs 三種模式詳解
  • vs幾種算法
  • 關於arp_ignore和 arp_announce
  • lvs原理相關的

負載均衡集群介紹,LVS介紹,LVS的調度算法,LVSNAT模式搭建