LVS詳解及基于LVS實現web服務器負載均衡

前言

LVS(Linux Virtual Server)Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。通過LVS提供的負載均衡技術和Linux操作系統可實現一個高性能、高可用的服務器群集,從而以低成本實現最優的服務性能。

集群基礎

集群簡介

集群(Cluster)是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。集群系統的主要優點:高可擴展性、高可用性、高性能、高性價比。

集群類型

LB:Load Balancing 高可拓展,伸縮集群

HA:High Availability 高可用集群

HP:High Performance 高性能集群

集群方案

LB:

    硬件級:F5 BIG-IP、Citrix Netscaler、 A10 A10、Array、Redware

    軟件級:lvs (傳輸層)、haproxy, nginx (應用層)

HA:

    heartbeat 、corosync + pacemaker、 cman + rgmanager、cman + pacemaker、keepalived

HP:

    hadoop

LVS詳解

LVS組成

ipvsadm:用于管理集群服務的命令行工具,工作于Linux系統中的用戶空間。

ipvs:為lvs提供服務的內核模塊,工作于內核空間 

LVS術語

VIP:Director用來向外部提供服務的IP地址,也就是DNS通過域名解析到的IP

RIP:集群節點(后臺真正提供服務的服務器)所使用的IP地址

DIP:Director用來和RIP進行交互的IP地址

CIP:客戶端使用的IP或公網IP

RS:集群節點服務器Real server

LVS類型

LVS-NAT:Network Address Translation 網絡地址轉換

LVS-DR:Direct Routing 直連路由

LVS-TUN:Tunneling 隧道

LVS各類型特性

NAT類型的特性:

①RS應用使用私有地址,RS的網關必須指向DIP

②請求和響應都要經過Director,高負載場景中,Director易成為性能瓶頸

③支持端口映射

④RS可以使用任意OS

DR類型的特性:

①保證前端路由將目標地址為VIP的報文統統發往Directory,而不能是RS

解決方案:

(1) 靜態地址綁定:在前端路由器上操作

前提:必須要有路由操作權限

(2) aprtables

(3) 修改RS上內核參數,將RS上的VIP配置在lo接口的別名上,并限制其不能響應對VIP地址解析請求

②RS可以使用私有地址,但也可以使用公網地址,此時可通過互聯網通過RIP對其直接訪問

③RS跟Directory必須在同一物理網絡中

④請求報文經由Director,但響應報文必須不能經過Director

⑤不支持端口映射

⑥RS可以是大多數常見的OS

⑦RS的網關絕不允許指向DIP

TUN類型的特性:

①RIP、VIP、DIP全部是公網地址

②RS的網關不會也不可能指向DIP

③請求報文經由Director,但響應報文必須不能經過Director

④不支持端口映射

⑤RS的OS必須支持隧道功能

LVS調度算法

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

rr: round robin,輪流,輪詢,輪叫
wrr: weighted round robin, 加權輪詢
sh:source hashing,session綁定
dh: destination hashing, 目標地址hash

動態方法:根據算法及各RS當前的負載狀況進行調度

lc: least connection,最少連接
wlc: weighted lc,加權最少連接
sed: shortest expection delay,最少期望延遲
nq: never queue,永不排隊
lblc: Locality-Based Least Connection,基于局部性的最少連接
lblcr:Replicated lblc,基于局部性的帶復制功能的最少連接

LVS配置(ipvsadm)

命令格式

ipvsadm -A|E -t|u|f service-address [-s scheduler]
              [-p [timeout]] [-M netmask]
      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
              [-g|i|m] [-w weight] [-x upper] [-y lower]
      ipvsadm -d -t|u|f service-address -r server-address
      ipvsadm -L|l [options]
      ipvsadm -Z [-t|u|f service-address]
      ipvsadm --set tcp tcpfin udp
      ipvsadm --start-daemon state [--mcast-interface interface]
              [--syncid syncid]
      ipvsadm --stop-daemon state
      ipvsadm -h

命令詳解

定義集群服務:
-A 添加一個集群服務
-D 刪除一個集群服務 
-E 修改一個集群服務
-t VIP:端口 定義集群服務的類型為TCP的某個端口
-u VIP:端口 定義集群服務的類型為UDP的某個端口
-f 防火墻標記 定義集群服務的類型為防火墻標記
-s 調度算法 指定集群服務的調度算法 
定義集群節點:
-a 添加一個節點到集群服務
-d 從集群服務中刪除一個節點
-e 修改集群服務器中的節點
-r 節點IP:端口  定義節點的IP及類型
-m 定義為NAT模型
-g 定義為DR模型
-i 定義為TUN模型
-w 權重 定義服務器的權重
查看已經定義的集群服務及RS:
ipvsadm -L -n
    -c: 查看各連接
    --stats: 統計數據
    --rate: 速率
    --exact: 精確值
從集群服務中刪除RS:
ipvsadm -d -t|u|f service-address -r server-address
刪除集群服務:
ipvsadm -D -t|u|f service-address
清空所有的集群服務:
ipvsadm -C 
保存集群服務定義:
ipvsadm -S > /path/to/some_rule_file
ipvsadm-save > /path/to/some_rule_file
讓規則文件中的規則生效:
ipvsadm -R < /path/from/some_rule_file
ipvsadm-restore < /path/from/some_rule_file

LVS-NAT模型

LVS-NAT.jpg

配置過程

#以下實驗都是臨時性配置,若要永久生效,請自行配置
Real Server 1
#ifconfig eth0 172.16.10.100/16 up
#route add default gw 172.16.10.12
Real Server 2
#ifconfig eth0 172.16.10.212/16 up
#route add default gw 172.16.10.12
Director Server
#ifconfig eth0 192.168.1.10/24 up
#ifconfig eth1 172.16.10.12/16 up
#yum -y install ipvsadm 
#echo 1 > /proc/sys/net/ipv4/ip_forward
#ipvsadm -A -t 192.168.1.10:80 -s rr
#ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -m 
#ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -m

LVS-DR模型

上面說了NAT模型的實現方式,但NAT模型有個缺陷,因為進出的每個數據包都要經過Director Server,當集群系統負載過大的時候Director Server將會成為整個集群系統的瓶頸,而DR模型就避免了這樣的情況發生,DR模型在只有請求的時候才會經過Director Server, 回應的數據包由Real Server 直接響應用戶不需要經過Director Server。

LVS-DR.jpg

配置過程

內核參數:
arp_ignore: 定義接收到ARP請求時的響應級別
0:只要本地配置的有相應地址,就給予響應
1:僅在請求的目標地址配置請求到達的接口上的時候,才給予響應
arp_announce:定義將自己地址向外通告時的通告級別
0:將本地任何接口上的任何地址向外通告
1:試圖僅向目標網絡通告與其網絡匹配的地址
2:僅向與本地接口上地址匹配的網絡進行通告
Real Server 1
#ifconfig eth0 172.16.10.100/16 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#route add -host 192.168.1.10 dev lo:0
Real Server 2
#ifconfig eth0 172.16.10.212/16 up
#echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
#ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#route add -host 192.168.1.10 dev lo:0
Director Server
#ifconfig eth0 172.16.10.12/16 up
#ifconfig eth0:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up
#echo 1 > /proc/sys/net/ipv4/ip_forward
#route add -host 192.168.1.10 dev eth0:0
#yum install ipvsadm -y
#ipvsadm -A -t 192.168.1.10:80 -s rr
#ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -g 
#ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -g

基于LVS實現web服務器負載均衡

實驗拓撲

基于LVS實現web負載均衡.jpg

環境介紹

系統環境:CentOS6.6

Director Server:192.168.1.10(VIP) 172.16.10.12(DIP) 

Real Server 1:192.168.1.10(VIP) 172.16.10.100(RIP )

Real Server 2:192.168.1.10(VIP) 172.16.10.212(RIP ) 

PHP服務器:172.16.10.110 

NFS服務器:172.16.10.110

數據庫服務器:172.16.10.211

要求:web服務器上部署discuz,基于LVS實現負載均衡

NFS服務器配置

創建共享目錄,并設置權限

1.jpg

編輯配置文件,設置共享目錄及客戶端

[root@scholar ~]# vim /etc/exports 

/web/discuz     172.16.10.100(rw,sync) 172.16.10.212(rw,sync)

站點文件準備

[root@scholar ~]# unzip Discuz_7.2_FULL_SC_GBK.zip
[root@scholar ~]# chmod -R 777 upload 
[root@scholar ~]# mv upload/* /web/discuz/
[root@scholar ~]# chown -R apache.apache /web/discuz

啟動服務,設置開機自啟

2.jpg

數據庫服務器配置

3.jpg

RS1和RS2配置

配置VIP

4.jpg

配置虛擬主機

[root@RS1 ~]# vim /etc/httpd24/extra/httpd-vhosts.conf 

<VirtualHost *:80>
    DocumentRoot "/web/discuz"
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://172.16.10.110:9000/web/discuz/$1
</VirtualHost>

掛載共享目錄

5.jpg

#可設置開機自動掛載
[root@scholar ~]# vim /etc/fstab 
 
172.16.10.110:/web/discuz  /web/discuz             nfs     defaults,_netdev 0 0

檢查語法,啟動服務

6.jpg

Director Server配置

配置VIP

7.jpg

定義集群

8.jpg

安裝測試及訪問測試

9.jpg

10.jpg

11.jpg

12.png

安裝完成,我們來發一個帖子測試一下

13.jpg

過一會兒,刷新一下頁面

14.jpg

此過程中是否實現了負載均衡,我們在Director Server上查看一下是哪臺服務器響應的請求就知道了

15.jpg

由此可見,基于LVS實現web服務器的負載均衡功能已完成

The end

OK,基于LVS的負載均衡就說到這里了,負載均衡集群的配置還是比較簡單的,幾條命令就搞定了,不要因為簡單看一眼就略過,只有理解原理結合實踐才能真正掌握知識,配置過程中遇到問題可留言呦。以上僅為個人學習整理,如有錯漏,大神勿噴~~~

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

(0)
書生書生
上一篇 2015-06-01 19:14
下一篇 2015-06-01 19:17

相關推薦

  • 磁盤管理

    磁盤管理

    Linux干貨 2017-10-27
  • N22-第六周博客作業

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; :%s@^[[:space:]]\+[^[:space:]]@#\1@g 或 :%s@^[[:space:]]\+[^[:space:]]@#&a…

    Linux干貨 2016-09-26
  • LAMP編譯安裝

    所謂的LAMP是指構建在Linux之上經典的一種web架構方式,其中L指的是Linux,A指的是Apache的httpd,M指的是Mysql或MariaDB,P指的是PHP,這種組合方式的基本工作模式是有httpd負責接收和相應用戶的請求,然后將需要處理的php頁面交由后端的php應用程序處理,而php應用程序處理php頁面時的數據存儲在Mysql數據庫中,…

    Linux干貨 2016-12-19
  • 利用keepalived搭建高可用集群

    在一個系統中,常常存在一些單點服務器,為了提高整個系統的穩定性,我們常常需要對這些單點服務做高可用配置;keepalived即為一種常用的高可用配置服務; Keepalived的工作模式有以下兩種: 1、 主/備:即單虛擬路徑器,僅配置一個VIP; 2、 主/主:即多個虛擬路徑器,配置多個VIP,每個虛擬路徑器作為其中某個VIP的的master虛擬路徑器; …

    Linux干貨 2016-11-01
  • Linux 用戶, 組和權限

    用戶, 組和權限 Linux登陸需要用戶名、密碼。/etc/passwd 文件保存用戶名。登錄linux時,Linux 先查找 /etc/passwd 文件中是否有這個用戶名,沒有則跳出,有則讀取用戶名的user ID 、 group ID 、用戶名對應的根目錄路徑以及所使用的 shell ,最后在 /etc/shadow 中核對該 UI…

    2017-07-22
  • Linux Basics–part6

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; tmp]# cp /etc/rc.d/init.d/rc.sysinit /tmp/rc.sysinit tmp]# vim rc.sysinit : 進入末行模式 %s@^[[:space:]]\+@#@g 2…

    Linux干貨 2017-08-24

評論列表(5條)

  • stanley
    stanley 2015-06-01 19:17

    精彩的博客無需解釋

  • […] 轉載自:http://www.www58058.com/archives/4855 […]

  • jy00278439
    jy00278439 2015-06-03 17:50

    請問你用的是什么拓撲圖軟件?

    • stanley
      stanley 2015-06-03 21:27

      @jy00278439應該是visio

    • 書生
      書生 2015-06-20 12:31

      @jy00278439不好意思 評論提示郵件都去垃圾箱了 沒及時看到 畫圖軟件是一款在線編輯器Cacoo

欧美性久久久久