LVS介紹及工作原理

LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

本節索引:

一、Cluster集群概念

二、LVS介紹

三、LVS模式與算法

四、ipvsadm命令

 

一、Cluster集群概念

集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況

下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中

的核心技術。

 

系統擴展方式:

Scale UP:向上擴展,增強

Scale Out:向外擴展,增加設備,調度分配問題,Cluster

Cluster:集群,為解決某個特定問題將多臺計算機組合起來形成的單個系統

Linux Cluster類型:

LB:Load Balancing,負載均衡

HA:High Availiablity,高可用,SPOF(single Point Of failure)

MTBF:Mean Time Between Failure 平均無故障時間

MTTR:Mean Time To Restoration( repair)平均恢復前時間

A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%

HPC:High-performance computing,高性能 www.top500.org

 

分布式系統:

分布式存儲:云盤

分布式計算:hadoop,Spark

分布式文件系統:fastfs

 

集群與分布式:

簡單來說集群是解決高可用的,而分布式是解決高性能、高并發的

集群:同一個業務,部署在多個服務器上

分布式:一個業務分拆多個子業務,部署在不同的服務器上

 

 

Cluster分類

LB Cluster的實現

硬件

F5 Big-IP

Citrix Netscaler

A10 A10

軟件

lvs:Linux Virtual Server

nginx:支持七層調度

haproxy:支持七層調度

ats:apache traffic server,yahoo捐助

perlbal:Perl 編寫

pound

 

 

基于工作的協議層次劃分:

傳輸層(通用):DPORT

LVS:

nginx:stream

haproxy:mode tcp

應用層(專用):針對特定協議,自定義的請求模型分類

proxy server:

http:nginx, httpd, haproxy(mode http), …

fastcgi:nginx, httpd, …

mysql:mysql-proxy, …

 

會話保持:負載均衡

(1)session sticky:同一用戶調度固定服務器

Source IP:LVS sh算法(對某一特定服務而言)

Cookie

(2)session replication:每臺服務器擁有全部session

session multicast cluster

(3)session server:專門的session服務器

Memcached,Redis

 

HA集群實現方案

keepalived:vrrp協議

ais:應用接口規范

heartbeat

cman+rgmanager(RHCS)

coresync_pacemaker

 

 

二、LVS介紹

LVS:Linux Virtual Server,負載調度器,集成內核 章文嵩 阿里

官網http://www.linuxvirtualserver.org/

VS:Virtual Server,負責調度

RS:Real Server,負責真正提供服務

L4:四層路由器或交換機

工作原理:VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度

算法來挑選RS

iptables/netfilter:

iptables:用戶空間的管理工具

netfilter:內核空間上的框架

流入:PREROUTING –> INPUT

流出:OUTPUT –> POSTROUTING

轉發:PREROUTING –> FORWARD –> POSTROUTING

DNAT:目標地址轉換; PREROUTING

 

LVS集群的通用結構:

1

 

LVS工作原理

LVS集群類型中的術語:

VS:Virtual Server,Director Server(DS),Dispatcher(調度器),Load Balancer

RS:Real Server(lvs), upstream server(nginx),backend server(haproxy)

CIP:Client IP

VIP: Virtual serve IP VS外網的IP

DIP: Director IP VS內網的IP

RIP: Real server IP

訪問流程:CIP <–> VIP == DIP <–> RIP

 

lvs:ipvsadm/ipvs

ipvsadm:用戶空間的命令行工具,規則管理器

用于管理集群服務及RealServer

ipvs:工作于內核空間netfilter的INPUT鉤子上的框架

 

lvs集群的類型:

lvs-nat:修改請求報文的目標IP,多目標IP的DNAT(重點)

lvs-dr:操縱封裝新的MAC地址(重點)

lvs-tun:在原請求IP報文之外新加一個IP首部

lvs-fullnat:修改請求報文的源和目標IP

 

三、LVS模式與調度算法

lvs-nat模式

本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑

出的RS的RIP和PORT實現轉發

LVS-NAT的體系結構如下圖所示:

2

(1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP

(2)請求報文和響應報文都必須經由Director轉發,Director易于成為系統瓶頸

(3)支持端口映射,可修改請求報文的目標PORT

(4)VS必須是Linux系統,RS可以是任意OS系統

 

LVS-NAT數據流程時序圖:

2-2

 

 

LVS-DR模式

LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過為請求報文重新

封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出

的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

LVS-DR的體系結構如下圖所示:

3

(1) Director和各RS都配置有VIP

(2) 確保前端路由器將目標IP為VIP的請求報文發往Director

在前端網關做靜態綁定VIP和Director的MAC地址

在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP

arptables -A OUT -s $VIP -j mangle –mangle-ip-s $RIP

在RS上修改內核參數以限制arp通告及應答級別

/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

(3)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;

RIP的網關不能指向DIP,以確保響應報文不會經由Director

(4)RS和Director要在同一個物理網絡

(5)請求報文要經由Director,但響應報文不經由Director,而由RS直接發往

Client

(6)不支持端口映射(端口不能修?。?/p>

(7)RS可使用大多數OS系統

 

LVS-DR數據流程時序圖:

3-2

 

lvs-tun模式

轉發方式:不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而在原IP報文

之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標

RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)

LVS-TUN的體系結構如圖所示:

4

(1) DIP, VIP, RIP都應該是公網地址

(2) RS的網關一般不能指向DIP

(3) 請求報文要經由Director,但響應不能經由Director

(4) 不支持端口映射

(5) RS的OS須支持隧道功能

 

LVS-TUN數據流程時序圖:

4-2

 

 

LVS-FULLNAT模式

lvs-fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉發

CIP –> DIP

VIP –> RIP

(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,

RIP的網關一般不會指向DIP

(2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還

要將其發往Client

(3) 請求和響應報文都經由Director

(4) 支持端口映射

注意:此類型kernel默認不支持

 

 

 

三種 主要IP 負載均衡技術比較:

優缺點

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頭實現轉發,支持遠距離通信

 

lvs-nat 的優點是服務器可以運行任何支持 TCP/IP 的操作系統,它只需要

一個 IP 地址配置在調度器上,服務器組可以用私有的 IP 地址。缺點是它的伸縮

能力有限,當服務器結點數目升到 20 時,調度器本身有可能成為系統的新瓶頸,

因為在 lvs-nat 中請求和響應報文都需要通過負載調度器。

 

lvs-dr優點是負載調度器可以處理大量的請求,因為調度器只處理客戶到服

務器端的連接,響應數據可以直接從獨立的網絡路由返回給客戶,這可以極大地

提高 LVS 集群系統的伸縮性。缺點是要求負載調度器與實際服務器都有一塊網

卡連在同一物理網段上,服務器網絡設備(或者設備別名)不作 ARP 響應,或

者能將報文重定向(Redirect)到本地的 Socket 端口上。

 

lvs-tun 的優點是負載調度器可以處理大量的請求,它甚至可以調度百臺以

上的服務器(同等規模的服務器),而它不會成為系統的瓶頸,因為負載調度器

只將請求調度到不同的后端服務器,后端服務器將應答的數據直接返回給用戶。

 

 

LVS的調度算法

輪訓算法 加權輪訓算法 最小連接算法 加權最下連接算法 …..

LVS Scheduling Method LVS的調度方法:

1.Fixed Scheduling Method? 靜態調度方法

(1).RR??? ? ? ?輪詢

(2).WRR??? 加權輪詢

(3).SH???? ? ? 源地址hash;實現session sticky,源IP地址hash;將來自于同一

個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定

(4).DH? ? ? ? 目標地址hash;目標地址哈希,將發往同一個目標地址的請求始終轉

發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均

衡,如:寬帶運營商

2.Dynamic Scheduling Method 動態調度方法

(1).LC??? ? ? ?最少連接;適用于長連接應用

? ? ? ? ? Overhead=activeconns*256+inactiveconns

(2).WLC? ? 加權最少連接(默認調度方法)

? Overhead=(activeconns*256+inactiveconns)/weight?

(3).SED?? ? ?最少期望延遲

Overhead=(activeconns+1)*256/weight

(4).NQ?? ? ? 第一輪均勻分配,后續SED

(5).LBLC?? 基于本地的最少連接;動態的DH算法,使用場景:根據負載狀態實現正向代理

(6).LBLCR? 帶復制的基于本地的最少連接;帶復制功能的LBLC解決LBLC負載不均衡

問題,從負載重的復制到負載輕的RS

 

 

四、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] 如省略port,不作端口映射

選項:

lvs類型:

-g: gateway, dr類型,默認

-i: ipip, tun類型

-m: masquerade, nat類型

-w weight:權重

 

清空定義的所有內容:ipvsadm –C

清空計數器:ipvsadm -Z [-t|u|f service-address]

查看:ipvsadm -L|l [options]

–numeric, -n:以數字形式輸出地址和端口號

–exact:擴展信息,精確值

–connection,-c:當前IPVS連接輸出

–stats:統計信息

–rate :輸出速率信息

ipvs規則: /proc/net/ip_vs

ipvs連接:/proc/net/ip_vs_conn

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/102230

(0)
wangxczwangxcz
上一篇 2018-07-03
下一篇 2018-07-04

相關推薦

  • 第二周作業

    1,Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示
    2,bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示
    3,使用命令行展開功能來完成以下練習

    2018-06-28
  • Linux巧用dd密令測試磁盤的讀寫能力

    dd if=/dev/zero of=/data/test.txt bs=4k count=100000
    dd if=/dev/sda1 of=/dev/null bs=4k count=1000000000
    只是粗略計算方法!

    Linux筆記 2018-03-31
  • 進程和計劃任務

    進程和計劃任務 進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等 Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限,通常從執行進程的用戶來繼承 存在生命周期 task str…

    2018-05-03
  • 軟件包管理 {C語言源代碼編譯安裝三步驟}

    本文主要記錄 centos7 編譯安裝 httpd2.4.25 過程,加深記憶及備忘

    2018-04-22
  • 初學者;Linux小總結

    本文關于命令;個人筆記;

    2018-04-01
  • LVS負載調度器,

    ?集群概念 ?LVS介紹 ?LVS實現 ?ldirectord

    Linux筆記 2018-07-01
欧美性久久久久