高負載集羣實戰之lvs負載均衡-技術流ken

 

lvs簡介

LVS的英文全稱是Linux Virtual Server,即Linux虛擬服務器。html

特色

跨平臺:window,linux前端

做用

實現負載均衡linux

核心組件

ip_vslinux的內核功能模塊,工做在內核,依賴該內核模塊實現負載均衡功能web

ipvsadm:應用層程序,該程序能夠和內核中的ip_vs模塊通訊,實現對負載均衡的管理和控制算法

優勢

LVS主要用於多服務器的負載均衡。它工做在網絡層,能夠實現高性能,高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一塊兒造成一個超級服務器。它易用,配置很是簡單,且有多種負載均衡的方法。它穩定可靠,即便在集羣的服務器中某臺服務器沒法正常工做,也不影響總體效果。另外可擴展性也很是好。後端

補充

keepalived也能夠對ip_vs進行管理centos

 

相關術語

1. DS:Director Server。指的是前端負載均衡器節點。
2. RS:Real Server。後端真實的工做服務器。
3. VIP:向外部直接面向用戶請求,做爲用戶請求的目標的IP地址。
4. DIP:Director Server IP,主要用於和內部主機通信的IP地址。
5. RIP:Real Server IP,後端服務器的IP地址。
6. CIP:Client IP,訪問客戶端的IP地址。瀏覽器

 

LVS的工做模式

DR安全

NAT服務器

TUN

FULLNAT

 

LVS的調度算法

【所謂的算法:DR按照什麼規則來從多個RS中篩選出來一個給用戶提供服務】

動態算法:DR會實時的檢測後端的RS的負載狀況,將新用戶的請求調度到一個負載較少的RS之上

靜態算法:不管後端的RS當前的服務器負載狀況怎麼樣,都安裝固定的方式來給RS分配用戶請求

靜態算法

rrRound Bobin,輪詢,將客戶端的請求交替分配給RS

wrrWeighted Round Bobin,加權輪詢,根據RS的性能不一樣,讓他們來承擔不一樣比例的用戶請求

dhDestination Hashing,目標地址哈希調度,基於用戶所請求的地址作哈希表

做用:實現將對於相同的地址(rs)的請求調度到同一個RS之上

使用場景:適應於前端是一個DR,後端是多個cache的時候

shSource Hashing,源地址的哈希調度,基於用戶的ip地址作哈希表

做用:實現將同一個客戶端調度到相同的RS之上

動態算法

lcLeast Connection,最小鏈接數調度,本質是調度到當前負載最低的主機上

overhead=active*256+inactive

wlcWeighted Least Connection,加權最小鏈接數調度,本質是調度到當前負載最低的主機上

overhead=(active*256+inactive)/weight

SED:是wlc補充,爲了下降overhead出現重複的狀況

overhead=((active+1)*256+inactive))/weight

NQNever queue,算法基本和sed相同,爲了不性能差的RS長時間處於空閒狀態

lblc:基於目標地址的最小鏈接數調度,這種算法那是lcdh的組合,適應於cache場景

lblcr:帶有複製功能的lblc

 

ipvsadm的使用格式

ipvsadm的使用格式 ipvsadm -A|E -t|u|f service-address:port [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]    <<添加一個lvs服務器 ipvsadm -D -t|u|f service-address                  <<刪除一個lvs服務器 ipvsadm -C <<清空規則表 ipvsadm -R <<從標準輸入恢復規則表 ipvsadm -S [-n]                          <<使用service ipvsadm save便可 ipvsadm -a|e -t|u|f service-address -r server-address [options] <<添加一個後端web服務 ipvsadm -d -t|u|f service-address -r server-address          <<刪除一個後端web服務 ipvsadm -L|l [options]                              << 顯示lvs中的規則表 ipvsadm -Z [-t|u|f service-address] ipvsadm --set tcp tcpfin udp ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid] ipvsadm --stop-daemon state ipvsadm -h

 

ipvsad的選項參數

-A:添加一個虛擬服務(添加vip)[至關於負載均衡哪一個服務器] -E:編輯修改一個虛擬服務 -D:刪除虛擬服務 -C:清空規則表 -R:從標準輸入恢復規則表 --save|-S:將當前內存中的規則保存到標準輸出 -a:指定在虛擬服務中添加RS節點 [添加後端的web服務器] -e:指定在虛擬服務中編輯修改RS節點 -d:指定在虛擬服務中刪除RS節點 -L|-l:顯示lvs中的規則表 << ipvsadm -L -n --stats -Z:將計數器清零 -t service-address[:port]:該規則是對tcp協議的請求作調度 -u service-address[:port]:該規則是對udp協議的請求作調度 -f:表示這個請求是通過iptables所標記過的服務類型 -r: 指定真實服務器的地址(remote) -s scheduler:指定該規則要用的調度算法(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq) -p [time]:指定在屢次時間之內,將相同的客戶端調度到相同的後端節點之上,默認時間300s -w:設置RS節點的權重 -g:指定用DR模式(默認) -i:指定用tunnel模式 -m:指定用nat模式

 

ipvsadm主要配置文件

說明:lvs主要文件說明

/etc/rc.d/init.d/ipvsadmsysV風格服務管理腳本

/etc/sysconfig/ipvsadm-config:配置文件

/sbin/ipvsadm:用於配置lvs規則的工具

/sbin/ipvsadm-restore:恢復或者讀取規則到內存的工具

/sbin/ipvsadm-save:保存內存中的規則的工具

【默認狀況下,所配置的規則都是保存在內存中的】

 

LVS的DR模式實戰

1.準備環境

centos7.5

DR1  172.20.10.2/28

WEB1 172.20.10.8/28

WEB2 172.20.10.8/28

VIP  172.20.10.11/28

 2.配置服務器端

安裝依賴包

[root@ken ~]# yum install libnl* popt* kernel-devel -y

給安裝的內核開發庫作鏈接

[root@ken ~]# ln -s /usr/src/kernels/3.10.0-862.el7.x86_64/ /usr/src/linux/

安裝lvs

[root@ken ~]# yum install ipvsadm -y

添加一個vip

[root@ken ~]# ip a a 172.20.10.11/28 dev eth0

添加一個虛擬服務器

[root@ken ~]# ipvsadm -A -t 172.20.10.11:80 -s rr

在虛擬服務器中添加後端服務器

[root@ken ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.9:80 -w 1 -g [root@ken ~]# ipvsadm -a -t 172.20.10.11:80 -r 172.20.10.8:80 -w 1 -g

查看規則

[root@ken ~]# ipvsadm -L -n --stats IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 172.20.10.11:80                     0        0        0        0        0
  -> 172.20.10.8:80                      0        0        0        0        0
  -> 172.20.10.9:80                      0        0        0        0        0

3.配置客戶端

兩臺客戶端配置保持徹底相同,除了測試文件以外。

安裝配置web服務器

[root@ken ~]# yum install httpd -y [root@ken ~]# echo "this is 172.20.10.9 for test" >/var/www/html/index.html [root@ken ~]# systemctl restart http

給RS綁定虛擬IP

[root@ken ~]# ip a a 172.20.10.11/32 dev lo:0

在RS作ARP抑制

[root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore [root@ken ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore [root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce [root@ken ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

 

關閉安全服務

[root@ken ~]# setenforce 0 [root@ken ~]# iptables -F

 

瀏覽器測試

輸入VIP地址

進行刷新測試

測試完成!

 

補充

關於arp抑制

做用:設置不對某些arp請求作應答

實現原理:修改內核參數 /proc/sys/net/ipv4/conf/

 

控制方式1arp_ignore

0:默認,表示的當該主機收到arp請求,只有該主機有所請求的哪一個IP地址,就會給對方作成應答

1:只對哪些請求的目標IP是當前主機的網卡接口(這個接口就是插着網線的接口)上的地址的時候,纔會作出應答

 

控制方式2arp_announced

做用:限制當前主機作arp應該的條件(也就是限制當用戶所請的ip是哪一個IP的時候,才作arp應答)

0:默認值,表示在任意網絡接口上的IP均可以作arp應答

1:優先使用本地的接口作arp應答

2:優先使用子接口作arp應答

相關文章
相關標籤/搜索