1. 程式人生 > >LVS負載均衡簡單配置

LVS負載均衡簡單配置

loading -a 源地址 5.0 gdi 但是 -s table 之一

LVS的安裝與使用

第1章 LVS原理及介紹

1.1 LVS簡介

LVSLinux Virtual Server的簡寫,意思就是Linux虛擬服務器,是一個虛擬的服務器集群系統,可以在UNIX/LINUX平臺下實現負載均衡集群功能。該項目在19985月由章文嵩博士組織成立,是中國國內最早出現的自由軟件項目之一。

LVS項目介紹:

LVS項目主頁:http://www.linuxvirtualserver.org/

LVS項目介紹:http://www.linuxvirtualserver.org/zh/lvs1.html

LVS集群的體系結構:http://www.linuxvirtualserver.org/zh/lvs2.html

LVS集群中的IP負載均衡技術:http://www.linuxvirtualserver.org/zh/lvs3.html

LVS集群的負載調度:http://www.linuxvirtualserver.org/zh/lvs4.html

LVS負載均衡調度技術是在Linux內核中實現的,因此,被稱之為Linux虛擬服務器(Linux Virtual Server)。我們使用該軟件配置LVS時候,不能直接配置內核中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理。

q LVS技術點小結:

1、真正實現調度的工具是IPVS,工作在Linux內核層面。

2、LVS自帶的IPVS命令行管理工具是ipvsadm

3、keepalived實現管理IPVS及負載均衡器的高可用。

4、Red hat工具Piranha WEB管理實現調度的工具IPVS

1.2 簡單術語介紹

術語簡寫

術語含義

CIP

客戶端的IP地址,client ip

DIP

負載均衡器對應的實際IP地址

VIP

需在均衡器提供服務的地址

RIP

提供服務的節點地址

LB

負載均衡服務器

RS

節點服務器,Real Server

1.3 DR模式介紹(Direct Routing

1、通過在調度器LB上修改數據包的目的MAC地址實現轉發,註意,源IP地址任然是CIP,目的地址任然是VIP

2、請求報文經過調度器,而RS響應處理後的報文無需經過調度器LB,因此,並發訪問量大時使用效率很高(和

NAT模式比)。

3、因DR模式是通過MAC地址的改寫機制實現的轉發,因此,所有的RS節點和調度器LB只能在一個局域網LAN中(小缺點)。

4、需要註意RS節點的VIP的綁定(lo:vip/32,lo1:vip/32)和ARP抑制問題。

5、強調下:RS節點的默認網關不需要是調度器LBDIP,而是直接IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的情況),理論講:只要RS可以出網即可,不是必須要配置外網IP

6、由於DR模式的調度器僅進行了目的的MAC地址的改寫,因此,調度器LB無法改變請求報文的目的端口(和NAT要區別)。

7、當前,調度器LB支持幾乎所有的UNIXLINUX系統,但目前不支持WINDOWS系統。真實服務器RS節點可以是WINDOWS系統。

8、總的來說DR模式效率很高,但是配置也比較麻煩,因此,訪問量不是特別大的情況下可以用haproxy或者nginx取代。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或並發1萬以下都可以考慮使用haproxy/nginxLVS NAT模式)。

9、直接對外的訪問業務,例如:web服務做RS節點,RS最好用公網IP地址。如果不直接對外的業務,例如:MySQL,存儲系統RS節點,最好只用內部IP地址。

註:直接路由,最大的特點是不更改源IP和目標IP,改變的是MAC地址

1.4 LVS集群算法

算法

說明

rr

輪循調度(Round-Robin,它將請求依次分配不同的RS節點,也就是在RS節點中均攤請求。這種算法很簡單,但是只適合於RS節點處理性能相差不大的情況。

wrr

加權輪循調度(Weighted Round-Robin,它將依據不同的RS節點的權值分配任務。權值較高的RS將優先獲得任務,並且分配到的連接數將比權值較低的RS節點更多。相同權值的RS得到相同數目的連接數。

wlc

加權最小連接數調度(Weighted Least-Connection)假設各臺RS的權值依次為WiI=1..n),當前的TCP連接次數依次為TiI=1..n),依次選取Ti/Wi為最小的RS作為下一個分配的RS

dh

目的地址哈希調度,以目的地址為關鍵字查找一個靜態hash表來獲得需要的RS

sh

源地址哈希調度,以源地址為關鍵字查找一個靜態hash表來獲得需要的RS

第2章 LVS的安裝與配置

2.1 服務規劃

2.1.1 服務器規劃表

LVS服務器

2

負載轉發四層TCP請求

HTTP服務器

2

負載提供HTTP服務

說明:總共需要4臺服務器完成本次項目

2.1.2 主機IP規劃表

服務器說明

IP地址

主機名稱規則

LVS服務器

10.0.0.18/24

lb01

LVS服務器

10.0.0.19/24

lb02

Nginx服務器

10.0.0.16/24

nginx

Apache服務器

10.0.0.17/24

apache


10.0.0.21/24

虛擬IP地址

2.1.3 主機名解析

172.16.1.16 nginx

172.16.1.17 apache

172.16.1.18 lb01

172.16.1.19 lb02

2.2 安裝環境

q 操作系統版本

[root@server ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@server ~]# uname -r
2.6.32-431.el6.x86_64
[root@server ~]# uname -m
x86_64

q LVS軟件版本

[root@lb02 ~]# rpm -qa ipvsadm
ipvsadm-1.26-4.el6.x86_64

2.3 軟件安裝

2.3.1 安裝LVS服務

LVS可以通過yum命令安裝,或者通過源碼編譯的方式安裝,在此選擇yum安裝。分別在兩臺LVS服務器安裝LVS服務,安裝過程如下:

q 查看是否已安裝inotify

[root@lb02 ~]# rpm -qa ipvsadm
[root@lb02 ~]#

#<==這裏如果沒有任何返回值就表明沒有安裝

q 使用yum命令安裝軟件

[root@nginx ~]# yum -y install ipvsadm
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
*****自動安裝過程略****  
Installed:
  ipvsadm.x86_64 0:1.26-4.el6                                                                                                                                                
 
Complete!    #<==安裝完成
[root@lb01 ~]# ln -s /usr/src/kernels/2.6.32-431.el6.x86_64/ /usr/src/linux    #<==創立軟鏈接
[root@lb01 ~]# ll /usr/src/linux

註:如果沒有/usr/src/kernels/2.6.32-431.el6.x86_64路徑,可能是因為缺少kernel-devel-2.6.18-164.el5軟件包,可以通過命令yum -y install kernerl-devel 安裝。

q 檢測是否安裝完畢

[root@lb02 ~]# rpm -qa ipvsadm
ipvsadm-1.26-4.el6.x86_64

q 查看內核是否有ip_vs服務運行

[root@lb01 ~]# lsmod | grep ip_vs
ip_vs                 125220  0
libcrc32c               1246  1 ip_vs
ipv6                  317340  285 ip_vs

註:如果沒有以上三個輸出,可以使用命令ipvsadm或者modprobe ip_vs重新加載。

2.3.2 安裝其他服務

1)nginx服務器安裝nginx服務,能正常提供訪問;

2)apache服務器安裝apache服務,能正常提供訪問;

3)lb01lb02安裝keepalived服務。

[root@lb02 ~]# curl nginx
www
[root@lb02 ~]# curl apache
apache.www

第3章 配置LVS集群

3.1 手動配置LVS服務

3.1.1 服務端配置

LVS服務器添加一個虛擬IP地址:

ip addr add 10.0.0.21/24 dev eth0 label eth0:0

清空以前的舊配置:

ipvsadm --help          #<==查看ipvsadm的配置參數
ipvsadm -C              #<==清空所有配置

添加一個虛擬vserver

ipvsadm -A -t 10.0.0.21:80 -s wrr

參數說明:

-A--add-service,表示添加一個虛擬服務器

-t--tcp-service,指定這是一個tcp的虛擬服務器

-u--udp-service,指定這是一個udp的虛擬服務器

10.0.0.21:80:表示提供服務的ip地址以及端口號

-s--scheduler,指定調度器,“rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq”選擇一種,默認是wlc

為服務器添加real server

ipvsadm -a -t 10.0.0.21:80 -r 10.0.0.16:80 -g -w 1
ipvsadm -a -t 10.0.0.21:80 -r 10.0.0.17:80 -g -w 1

3.1.2 節點端配置

需要添加到LVS負載均衡器的節點都需做如下配置:

q 綁定VIP

在網卡lo綁定虛擬IP,該虛擬IPLVS服務器的虛擬IP,即10.0.0.21/24

ip addr add 10.0.0.21/32 dev lo label lo:0
route add -host 10.0.0.21 dev lo

q 設置ARP抑制

echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce

q 抑制參數說明

arp_ignore:定義目標地址為本地IPARP詢問不同的應答模式

0

默認值,回應任何網絡接口上對任何本地IP地址的arp查詢請求

1

只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求

2

只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內。

3

不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應。

4-7

保留未使用。

8

不回應所有(本地地址)的arp查詢

arp_announce:對網絡接口上,本地IP地址發出的,ARP回應,作出相應級別的限制。確定不同程序的限制,宣布對來自本地源IP地址發出的ARP請求接口。

0

默認值,在任意網絡接口(eth0,eth1,lo)上任何本地地址。

1

盡量避免不在該網絡子網段的地址作出arp回應。當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用,此時會檢查來訪IP是否為所有接口上的子網段內IP之一。如果該來訪者IP不屬於各個網絡接口上的子網段內,那麽將采用級別2的方式來進行處理。

2

對查詢目標使用最適當的本地地址,在此模式下忽略這個IP數據包的源地址並嘗試選擇能與該地址通信的本地地址,首要是選擇所有網絡接口的子網中外出訪問子網中包目標IP地址的本地地址。如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP回應的網絡接口來進行發送,限制了使用本地VIP地址作為優先的網絡接口

3.1.3 結果服務驗證

訪問10.0.0.21:80,查看結果是否輪循。

[root@lb02 ~]# curl 10.0.0.21:80
apache.www
[root@lb02 ~]# curl 10.0.0.21:80
www
[root@lb02 ~]# curl 10.0.0.21:80
apache.www
[root@lb02 ~]# curl 10.0.0.21:80
www

3.2 keepalived配置LVS服務

除了手動配置LVS服務器之外,使用keepalived管理LVS是一種更好的選擇。keepalived默認就集成了管理LVS的功能,其配置LVS虛擬服務器內容如下:

###############################
#      LVS的配置部分        #
###############################
virtual_server 10.0.0.21 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP
 
    real_server 10.0.0.16 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
          }
        }
 
    real_server 10.0.0.17 80 {
        weight 1
        TCP_CHECK {
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
          }
        }
}


LVS負載均衡簡單配置