LB Cluster 負載均衡集群 —-lvs 配置詳解

lvs :

ipvs scheduler:

根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法和動態方法兩種:

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

  • RR:roundrobin,輪詢;

  • WRR:Weighted RR,加權輪詢;

  • SH:Source Hashing,實現session sticy,源IP地址hash;將來自于同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定;

  • DH:Destination Hashing;目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS;

2、動態方法:主要根據每RS當前的負載狀態及調度算法進行調度;

Overhead=

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:

ipvs:
查看系統是不是已經編譯了ipvs

~]# grep -i -C 10 "ipvs" /boot/config-3.10.0-327.el7.x86_64

支持的協議工作在傳輸層:TCP, UDP, AH, ESP, AH_ESP, SCTP;

定義ipvs集群:

  • 定義集群服務

       定義哪一類請求(協議)是屬于負載均衡集群,要根據協議的目標IP和端口,
       來判定集群類型!
  • 添加服務上的RS

ipvsadm命令:

1.管理集群服務:增、改、刪;

  • 增A、改E:

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

ipvsadm -D -t|u|f service-address

service-address:定義的集群服務本身的地址。
    -t|u|f:
        -t: TCP協議的端口,VIP:TCP_PORT
        -u: TCP協議的端口,VIP:UDP_PORT
        -f:firewall MARK,定義在PREROUTING,是一個數字,用來打標記;以便于定義多個端口的服務為一個集群!

[-s scheduler]:指定集群的調度算法,默認為wlc;

2.管理集群上的RS:增、改、刪;

  • 增a、改e:

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:
    Rserver rip[:port]

選項:
    lvs類型:
        -g: gateway, dr類型
        -i: ipip, tun類型
        -m: masquerade, nat類型

    -w weight:權重;

3.清空定義的所有內容:

ipvsadm -C

這就能清空所有的集群服務!

4.查看:

ipvsadm -L|l [options]
     --numeric, -n:顯示端口不要去解析
     --exact:顯示精確值,不要做單位換算

     --connection, -c:顯示每一個主機上當前連接的數量
     --stats:統計數據
     --rate :output of rate information

5.保存和重載:

ipvsadm -S == ipvsadm-save

ipvsadm -R == ipvsadm-restore

實例1.lvs-net模式實驗

1.實驗前提
(1)調度器:centos6.8,雙網卡 eth0 10.1.6.68;eth1為vmnet1模式 192.168.0.1;安裝ipvsadm打開核心轉發功能
~]# echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig eth1 192.168.22.1/24 up
(2)RealServer:均為centos7.2安裝好相應的服務網卡為vmnet1模式ip 192.168.22.11 ip 192.168.22.22
添加默認路由
route add default gw 192.168.22.1

2、測試

RealServer開通web服務并添加測試頁面
LB Cluster 負載均衡集群 ----lvs 配置詳解
用10.1.6.68主機測試發現正常

3.添加集群服務
LB Cluster 負載均衡集群 ----lvs 配置詳解

4.測試
LB Cluster 負載均衡集群 ----lvs 配置詳解

5.換個算法再測試一下
LB Cluster 負載均衡集群 ----lvs 配置詳解

LB Cluster 負載均衡集群 ----lvs 配置詳解

負載均衡集群的設計要點:

(1) 是否需要會話保持;
(2) 是否需要共享存儲;
    共享存儲:NAS, SAN, DS(分布式存儲)
    數據同步:

        課外作業:rsync+inotify實現數據同步

lvs-nat:

設計要點:
    (1) RIP與DIP在同一IP網絡, RIP的網關要指向DIP;
    (2) 支持端口映射;

實踐作業(博客):負載均衡一個php應用;
    測試:(1) 是否需要會話保持;(2) 是否需要共享存儲;

lvs-dr:

LB Cluster 負載均衡集群 ----lvs 配置詳解
這種模型就是負載均衡器接收到報文時在報文的首部添加一層MAC地址,再通過交換機(這里只能是交換機)轉發到后端主機,后端主機接收到報文拆解后發現目標地址是lo上的地址就經lo進入input鏈進行響應,響應的結果就又從lo接口出去,這樣就保證了源ip為請求ip,發送到路由器到客戶端。這里可以不經過交換機。

dr模型中,各主機上均需要配置VIP,解決地址沖突的方式有三種:

  • (1) 在前端網關做靜態綁定;

  • (2) 在各RS使用arptables;

  • (3) 在各RS修改內核參數,來限制arp響應和通告的級別;
    限制響應級別:arp_ignore

      0:默認值,表示可使用本地任意接口上配置的任意地址進行響應;
      1: 僅在請求的目標IP配置在本地主機的接收到請求報文接口上時,才給予響應;

    限制通告級別:arp_announce

      0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
      1:盡量避免向非直接連接網絡進行通告;
      2:必須避免向非本網絡通告;

RS的預配置腳本:個Rs均適用

#!/bin/bash
#
vip=10.1.0.5
mask='255.255.255.255'

case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ifconfig lo:0 $vip netmask $mask broadcast $vip up
    route add -host $vip dev lo:0
    ;;
stop)
    ifconfig lo:0 down

    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

    ;;
    *) 
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac

測試web

  • V server配置

LB Cluster 負載均衡集群 ----lvs 配置詳解

  • 客戶端測試
    LB Cluster 負載均衡集群 ----lvs 配置詳解

測試mysql
LB Cluster 負載均衡集群 ----lvs 配置詳解

LB Cluster 負載均衡集群 ----lvs 配置詳解

LB Cluster 負載均衡集群 ----lvs 配置詳解

LB Cluster 負載均衡集群 ----lvs 配置詳解
VS的配置腳本:

#!/bin/bash
#
vip='10.1.0.5'
iface='eno16777736:0'
mask='255.255.255.255'
port='80'
rs1='10.1.0.7'
rs2='10.1.0.8'
scheduler='wrr'
type='-g'

case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
    iptables -F

    ipvsadm -A -t ${vip}:${port} -s $scheduler
    ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
    ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
    ;;
stop)
    ipvsadm -C
    ifconfig $iface down
    ;;
*)
    echo "Usage $(basename $0) start|stop"
    exit 1
    ;;
esac    


課外擴展作業:vip與dip/rip不在同一網段的實驗環境設計及配置實現; 

博客作業:lvs的詳細應用
    講清楚類型、調度方法;并且給出nat和dr類型的設計拓撲及具體實現;

FWM:FireWall Mark

借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度;

打標記方法(在Director主機):

    # iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER 

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

環境為之前環境
LB Cluster 負載均衡集群 ----lvs 配置詳解
不過這樣兩個集群是分離的

定義為同一個集群,利用iptables
LB Cluster 負載均衡集群 ----lvs 配置詳解

LB Cluster 負載均衡集群 ----lvs 配置詳解

我們一般建議http和https兩個集群綁定在一塊

lvs persistence:持久連接

持久連接模板:實現無論使用任何算法,在一段時間內,實現將來自同一個地址的請求始終發往同一個RS;

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

port Affinity:
每端口持久:每集群服務單獨定義,并定義其持久性;
每防火墻標記持久:基于防火墻標記定義持久的集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity;
每客戶端持久:基于0端口定義集群服務,即將客戶端對所有應用的請求統統調度至后端主機,而且可使用持久連接進行綁定;這種0端口只能適用于持久連接 -p。

保存及重載規則:

因為在此服務在centos中有系統啟動腳本用rpm -ql 就能看到 /usr/lib/systemd/system/ipvsadm.service
,要是啟動不了可能是沒有/etc/sysconfig/ipvsadm文件 touch一下就好了
保存:建議保存至/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

考慮:

    (1) Director不可用,整個系統將不可用;SPoF
        解決方案:高可用 
            keepalived :在用到ipvs時用這個
            heartbeat/corosync
    (2) 某RS不可用時,Director依然會調度請求至此RS;
        解決方案:對各RS的健康狀態做檢查,失敗時禁用,成功時啟用;
            keepalived
            heartbeat/corosync, ldirectord

        檢測方式:
            (a) 網絡層檢測;意味著ping通
            (b) 傳輸層檢測,端口探測;掃描端口。
            (c) 應用層檢測,請求某關鍵資源;

            ok --> failure
            failure --> ok

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

(0)
qzxqzx
上一篇 2016-10-30 22:28
下一篇 2016-10-30 23:30

相關推薦

  • CentOS7下的網絡配置管理

    一、讓配置永久有效的辦法:修改配置文件 與網卡相關(課配置網卡的IP,掩碼,網關,DNS)     /etc/sysconfig/network-scripts/ifcfg-INTERFACE 字段解釋: TYPE        &nbsp…

    Linux干貨 2016-03-28
  • 基于haproxy實現wordpress動靜分離

    環境:centos 6.8 注:此處省略對于各服務器的IP配置。 一:圖示講解      用戶訪問vip,通過haproxy代理得到服務器的資源。此架構下基于keepalived對haproxy做負載均衡(此種兩種軟件裝在同一臺服務器),基于haproxy對Nginx和apache做負載均衡,Nginx和Apache使用共享存儲…

    2017-05-18
  • 夢想走向現實的地方

    曾經羨慕打字快的同學指尖能在鍵盤上優雅地跳舞,于是我有努力練習打字。 曾經羨慕同事能很神奇地把一個交換機的端口關閉,讓那端口下面的人都不能上網,于是我努力學習交換機、路由。 現在我羨慕一個人能管很多服務器的人,于是我開始學習linux了。 努力成為一個也能管很多服務器的人,因為我也想別人叫我運維工程師

    Linux干貨 2016-10-25
  • M20-1 8月3號 –權限、用戶和組的管理

    一、權限管理:            ls -l                  rwxrwxrwx:               &nb…

    Linux干貨 2016-08-08
  • Nginx基礎

    Nginx基礎 目錄 Nginx概述 Nginx的優點 Nginx相比Apache 編譯安裝Nginx Nginx配置文件講解 ngx_http_access_module模塊 ngx_http_auth_basic_module模塊 ngx_http_log_module模塊 ngx_http_stub_status_module模塊 Nginx概述 En…

    Linux干貨 2016-11-01
  • rsyslog將日志記錄于MySQL中,并用loganalyzer進行分析日志

    1、首先來安裝lamp環境的支持,與其相關的軟件包      # yum -y install rsyslog-mysql mariadb-server php php-mysql php-gd httpd       說明:rsyslog-mysql在數據庫中生成一個庫文件,但這個文件需…

    Linux干貨 2016-10-23
欧美性久久久久