LVS介紹
根據請求報文的IP和目標協議以及端口進行調度;
VIP:對外提供的一個虛擬IP地址;
DIP:與後端服務器通訊的IP地址;
CIP:客戶端IP地址;
RIP:後端服務器IP地址;
RS:後端提供服務的服務器;
VS:調度器服務器;
CIP --> VIP == DIP --> RIP
LVS集群類型
1 lvs-nat:修改請求報文的目標IP,多目標IP的DNAT,調度器發送到後方RS的時候會變化目標IP地址換為RS的IP地址;,返回的時候目標IP是CIP,到達VS服務器的時候源IP會變為VIP
2 lvs-dr:封裝新的MAC地址(默認模式),返回報文的時候走新的線路,這樣的話VS壓力會變小,並且VS服務器只有一個網卡,上面有VIP和DIP,RS服務器都要配置VIP地址,防止地址沖突所以配置以下內容
RS服務器的內核中要更改以下配置:
"/proc/sys/net/ipv4/conf/lo/arp_ignore"設置為1,配置在回環網卡和all上;
0:默認值,表示可使用本地任意接口上配置的任一地址進行響應
1:不給予回應
"/proc/sys/net/ipv4/conf/lo/arp_announce
0:默認值,將本機所有接口的信息向每個接口的網絡進行通告
1:盡量避免將接口信息向非直接連接網絡進行通告
2:避免對外宣稱接口信息
可以安裝"kernel-doc"包來查看幫助
less /usr/share/doc/kernel-doc-3.10.0/Documention/networking/ip-sysctl.txt #查看幫助搜索arp_ignore查看
3 lvs-tun(隧道模型):在源請求IP頭部添加一個新的IP頭部(源地址為DIP,目標地址為RIP地址,RS服務器也要添加一個VIP,但不怕沖突因為新的報文與RS之間可以添加路由,跨網絡DIP,VIP,RIP都應該是公網地址);
4 lvs-fullnat:修改請求報文的源和目標IP;
CIP --> DIP
VIP --> RIP
調度算法:
靜態調度(不考慮後端服務器狀態):
1 RR(roundrobin):輪詢算法
2 WRR(Weighted RR):加權輪詢
3 SH(Source Hashing):實現session sticky,源IP地址hash;將來自於同一個IP地址的請求始終發往第一次挑中的RS,實現會話綁定
4 DH(Destination Hashing):目標地址哈希,將發往同一個目標地址的請求始終轉發至第一次挑中的RS,正向代理緩存比較常用
動態調度(會考慮後端服務器狀態):
1 LC(least connections):將新的請求調度到負載少的機器上;
負載量=當前活動連接x256+非活動連接
2 WLC(Weighted LC):默認調度方法,也是調度到負載少的機器上;
負載量=(當前活動連接x256+非活動連接)/weight
3 SED(Shortest Expection Delay):初始化連接的時候,高權重優先;
負載量=(當前活動連接+1)x256/weight
4 NQ(Nver Queue):第一次請求均勻分配,之後使用SED;
5 LBLC(Locality-Based LC):動態DH算法,根據負載的狀態實現正向代理;
6 LBLCR(LBLC with Replication):將負載重的相應的信息復制到新的服務器上,每個機器都有了之後就有可能調度到後端其他主機上;
LVS工具
ipvsadm/ipvs
ipvs:
grep -i ipvs -A 15 /boot/config-xxxxxxxxxxxxx #查看調度算法
ipvsadm
程序包:ipvsadm
安裝:yum install ipvsadm
查看:yum info ipvsadm
含帶工具:/usr/sbin/ipvsadm #進行操作的工具
/etc/sysconfig/ipvsadm-config #ipvsadm工具的配置文件
/usr/lib/systemd/system/ipvsadm.service #ipvsadm服務
/usr/sbin/ipvsadm-restore #負責將文件中的規則加載到內存中的工具
功能以及用法:
對VS服務器做管理:增、刪、改、查
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p[timeout]]
-A:增加
-E:更改
ipvsadm -D -t|u|f service-address
-D:刪除
service-address(服務地址格式按照後方格式寫)VIP:TCP_PORT
-t|u|f:
-u:UDP協議的端口 VIP:UDP_PORT
-f:firewall MARK(防火墻標簽iptables的mangel表當中修改數據包,比如可以將http與https打一個標簽兒就相當於認為是一個服務了)
[-s scheduler]:指定調度算法,不寫的話默認是wlc;
對RS服務器的管理:增、刪、改、查
增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
選項:
lvs類型:
-g:gateway,dr類型(默認)
-i:ip,tun類型
-m:masquerade,nat類型
-w weight:權重
刪:ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port]:如果省略port,則不做端口映射
ipvsadm查看:
ipvsad -L | l [options]
options:
--numeric,-n:以數字的形式輸出地址和端口號,一般情況與l一起用(ipvsadm -ln)
--exact:擴展信息
--connection,-c:當前IPVS連接輸出
--stats:統計信息
Conns :總的連接數
InPkts :進來的數據包
OutPkts :出去的數據包
InBytes :進來的字節數
OutBytes:出去的字節數
--rate:輸出速率信息
CPS :每秒的連接數
InPPS :每秒進來的數據包
OutPPS :每秒出去的數據包
InBPS :每秒進來的字節數
OutBPS :每秒出去的字節數
ipvs規則:
cat /proc/net/ip_vs
當前連接的ipvs情況:
cat /proc/net/ip_vs_conn
清零當前計數器中的信息:
ipvsadm -Z
將所有規則清空:
ipvsadm -C
LVS介紹