Linux Cluster之LVS

一、Linux Cluster 基礎:

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

Linux Cluster類型:

LB(Load Banlancing):負載均衡

HA(High Availability):高可用。提高服務可用性,避免出現單點故障

HP(High Performance):高性能

可用性衡量公式:

A=MTBF/(MTBF+MTTR)

MTBF:平均無故障時間

MTTR:平均故障修復時間

A的取值范圍(0,1)

系統擴展方式:

Scale UP:向上擴展。提升設備性能

Scale Out:向外擴展。

二、LB CLuster:

1、LB Cluster的實現:

硬件:

F5 Big-IP

Citrix Netscaler

A10 A10

軟件:

lvs:Linux Virtual Server

nginx

haproxy

ats:apache traffic server

perlbal

pound

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

傳輸層(通用):基于DIP Dport分發,類似于四層交換機。主要根據目標端口

lvs

nginx:基于stream機制模擬

haproxy:基于mode tcp機制模擬

應用層(專用):根據請求的內容進行分發

proxy server:

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

fastcgi:nginx, httpd, …

mysql:mysql-proxy, …

ats、perball、pound

用戶的會話保持:

(1) session sticky

在服務器端維護session會話表

Source IP

Cookie

(2) session replication;

session cluster

(3) session server

三、LVS:Linux Virtual Server

VS:Virtual Server,Director,Dispatcher,Balancer

RS:Real Server,Upstream Server,backend server

clip_image001

VS:工作在TCP/IP第四層。其作用為根據請求報文的目標IP和目標協議及端口將其調度轉發至某Real Server,遵循調度算法來挑選RS

LVS:ipvsadm/ipvs

ipvsadm:用戶空間的命令行工具,規則管理器,用于管理集群服務及Real Server;

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

clip_image002

CIP<–>VIP==DIP<–>RIP

在VS上需要開啟ipv4的端口轉發功能

四、LVS集群的類型:

1)、lvs-nat:類似于多目標的DNAT,修改請求報文的目標IP

2)、lvs-dr:在原請求之外,通過封裝新的mac首部進行轉發

3)、lvs-tun:ipip隧道。在原請求ip報文之外新加一個IP首部

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

1、lvs-nat:多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的Rip和Port實現轉發。

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

(2)請求報文和響應報文都必須經由Director抓發;Director易于稱為系統瓶頸。

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

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

clip_image003

2、lvs-dr:Direct Routing

通過為請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是挑選出來的RS的RIP所在的接口的MAC地址;源IP/PORT以及目標IP/PORT均保持不變。

clip_image004

DR的最初目的:

客戶的請求到達VR之后,由VS挑選出一個RS進行直接響應,此響應不再經由VR。由此,可以增加VR的并發請求。要實現此目的:需要在每個RS上配置一個VIP,但需確保RS上的VIP不發送廣播報文,因此RS上的VIP需配置在lo接口上。

1)確保前段路由器將目標IP為VIP的請求報文發往VS。如何實現VIP地址不沖突。

a)在前端網關做靜態綁定

b)在RS上使用arptables

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

arp_announce

arp_ignore

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

3)RS跟VS需要在同一物理網絡

4)請求報文經由VS,但響應報文不能經由VS,即RIP的網關不能為DIP,而是由RS直接法網Client

5)不支持端口映射

3、lvs-tun:實現跨互聯網通信。VS與RS不在同一網絡。

轉發方式:不修改請求報文的IP首部(CIP:VIP),而是在原IP報文之外在封裝一個IP首部(DIP:RIP),再將報文發送給挑選出的RS。

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

2)RS的網關不能執行DIP

3)請求報文經由VS,但響應不經由VS,而是RS直接發送給客戶端

4)不支持端口映射

5)RS需支持隧道功能

4、lvs-fullnat:

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

CIP –> DIP

VIP –> RIP

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

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

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

(4) 支持端口映射;

注意:此類型默認不支

五、LVS調度方法

ipvs scheduler:根據其調度時是否考慮各RS當前的負載狀態,可分為靜態方法及動態方法

1、靜態方法:

RR:RoundRorbin,輪詢

WRR:Weighted RR。加權輪詢。權重越大,意味著其負載能力越強。

SH:Source Hashing,實現session sticky,源地址hash;將來自同一個ip地址的請求始終發往第一次挑中的RS,從而實現會話綁定。應用場景:實現會話綁定

DH:Destination Hash,目標地址hash,將發往同一目標地址的請求始終發至第一次挑中的RS。應用場景:緩存服務器

2、動態方法:主要根據每RS當前的負載狀態及調度算法進行調度

LC(Least Connections):最少連接。

Overhead=activeconns*256+inactiveconns

overhead值小的獲勝

WLC:Weighted LC

Overhead=(activeconns*256+inactiveconns)/weight

overhead值小的獲勝

SED:Shortest Expection Delay

Overhead=((activeconns+1)*256)/weight

NQ:Never Queue

每臺RS先接受一個請求,之后再按SED算法進行挑選。

LBLC:Locally-Based LC,動態的DH算法

LBLCR:LBLC with Replication,帶復制功能的LBLC

六、使用ipvsadm管理lvs

1、管理集群服務:增、改、刪;

增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] 刪:ipvsadm -D -t|u|f service-address

service-address: VR服務器地址

-t|u|f:

-t: TCP協議的端口,VIP:TCP_PORT

-u: TCP協議的端口,VIP:UDP_PORT

-f:firewall MARK,是一個數字;

[-s scheduler]:指定集群的調度算法,默認為wlc;

2、管理集群上的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]

選項:

設定lvs類型:

-g: gateway, dr類型

-i: ipip, tun類型

-m: masquerade, nat類型

-w weight:設定權重;

3、清空定義的所有內容:ipvsadm -C

4、查看:

ipvsadm -L|l [options]

–numeric, -n:numeric output of addresses and ports

–exact:expand numbers (display exact values)

–connection, -c:output of current IPVS connections

–stats:output of statistics information

–rate :output of rate information

5、保存和重載:

ipvsadm -S = ipvsadm-save

ipvsadm -R = ipvsadm-restore

七、配置lvs-nat示例

實驗環境:

VS CentOS6.8 interface:vmnet1,橋接網絡 DIP:192.168.40.90 VIP:10.1.154.166

RS1 CentOS6.8 interface:vmnet1 RIP:192.168.40.100

RS2 CentOS6.8 interface:vmnet1 RIP:192.168.40.101

配置步驟:

1、確保RS1、RS2、VS三臺服務器的時間是同步的。

2、在RS1配置IP地址,配置httpd服務,指定默認路由為DIP;RS2上同樣的配置。

3、在VS上開啟端口轉發功能,安裝ipvsadm,配置ipvsadm。

ipvsadm -A -t 10.1.154.166:80 -s rr

ipvsadm -a -t 10.1.154.166 -r 192.168.40.100:80 -m

ipvsadm -a -t 10.1.154.166 -r 192.168.40.101:80 -m

clip_image006

4、其他查看示例

clip_image008

clip_image010

clip_image012

八、負載均衡集群設計要點

1、是否需要會話保持

2、是否需要共享存儲

共享存儲解決方案:NAS、SAN、DS(分布式存儲)

數據同步:rsync(不適用于數據量較大場景)+inotify實現數據同步

九、LVS-DR的實現

1、DR模型中,VR和SR上均需要配置VIP,解決地址沖突的方式有三種:

(1) 在前端網關做靜態綁定;

(2) 在各RS使用arptables;

(3) 在各RS修改內核參數,來限制arp響應和通告的級別;

限制響應級別:arp_ignore

0:默認值,表示可使用本地任意接口上配置的任意地址進行響應;

1: 僅在請求的目標IP配置在本地主機的接收到請求報文接口上時,才給予響應;

限制通告級別:arp_announce

0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;

1:盡量避免向非直接連接網絡進行通告;

2:必須避免向非本網絡通告;

clip_image013

2、LVS-DR實驗1:DIP、VIP、RIP屬于同一網絡

a、網絡結構

clip_image014

b、在RS1上的配置:

1)配置內核參數,限制arp響應及通告。

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/lo/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

2)在lo網卡上配置VIP

ifconfig lo:0 192.168.154.200 netmask 255.255.255.255

3)配置主機路由

route add -host 192.168.154.200 lo

4)開啟httpd服務

c、RS2上的配置同RS1

d、在VS上配置:

1)配置VIP

ifconfig eth1:0 192.168.154.200 netmask 255.255.255.255

2)配置ipvsadm

ipvsadm -A -t 192.168.154.200:80 -s wrr

ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.127:80 -g -w 1

ipvsadm -a -t 192.168.154.200:80 -r 192.168.154.128:80 -g -w 2

e、在客戶端上做測試

clip_image016

十、基于FWM配置集群服務

在RS1、RS2上新增mysql服務,將其定義為一個集群。

clip_image018

clip_image020

此時http與mysql集群并不會被當作一個集群服務進行調度,如何實現將多個服務使用同一個集群服務來調度。需要用到FWM

FWM:FireWall Mark

借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度;

配置步驟

1、在防火墻上打標記

iptables -t mangle -A PREROUTING -d 192.168.154.200 -p tcp -m multiport –dports 80,3306 -j MARK –set-mark 11

2、基于標記配置ipvs

ipvsadm -A -f 11 -s wrr

ipvsadm -a -f 11 -r 192.168.154.127 -g -w 1

ipvsadm -a -f 11 -r 192.168.154.128 -g -w 1

clip_image022

十一:LVS持久鏈接(Persistence)

持久連接模板:實現無論使用任何算法,在一定時間之內,實現將來自同一個ip地址的請求始終發往同一個RS。

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

clip_image024

測試

clip_image025

mysql服務連接的也是RS2

clip_image027

port Affinity:

每端口持久:每集群服務單獨定義,并定義其持久性;

每防火墻標記持久:基于防火墻標記定義持久的集群服務;可實現將多個端口上的應用統一調度,即所謂的port Affinity;

每客戶端持久:基于0端口定義集群服務,即將客戶端對所有應用的請求統統調度至后端主機,而且可使用持久連接進行綁定;

十二:ipvsadm規則的保存與重載

1、保存:建議保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

2、重載:

ipvsadm-restore < /PATH/FROM/IPVSADM_FILE

ipvsadm -R < /PATH/FROM/IPVSADM_FILE

systemctl restart ipvsadm.service

考慮:

(1) Director不可用,整個系統將不可用;SPoF單點故障

解決方案:高可用

keepalived

heartbeat/corosync

(2) 某RS不可用時,Director依然會調度請求至此RS;

解決方案:對各RS的健康狀態做檢查,失敗時禁用,成功時啟用;

keepalived

heartbeat/corosync, ldirectord

檢測方式:

(a) 網絡層檢測;ping

(b) 傳輸層檢測,端口探測;

(c) 應用層檢測,請求某關鍵資源;

測試多次,間隔測試,多次失敗,判斷失敗

請求超時時間,請求時間間隔,請求次數。

ok –> failure

failure –> ok

但,director無法完成健康狀態檢測,需要keepalived來配合完成。

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/57004

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-11-02
下一篇 2016-11-02

相關推薦

  • TCP/IP五層模型

    1、簡述osi七層模型和TCP/IP五層模型 網絡的七層模型是由OSI和CITT一起制定的開放系統互連參考模型: TCP/IP 五層模型可以分為:應用層,傳輸層,網絡層,數據鏈路層,物理層。 2、簡述ip route家族命令 語法:ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT={link ,addr,rout…

    2018-01-05
  • N22-第十一周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。 (1)數字簽名 A與B通信,B發給A一段數據,為了證明數據確實是B發送過來的,B首先會用單向加密算法從數據中提取一段特征碼,然后用自己的私鑰加密這段特征碼和原始數據后,發送給A;A接受到數據,首先用B的公鑰解密,獲取到特征碼和原始數據;然后用同樣的單向加密算法從原始數據中提取一段特征碼,與之前用公鑰解密得到的特…

    Linux干貨 2016-11-01
  • shell腳本總結

    shell進階:列表生成方式:列表生成方式:(1) 直接給出列表 以空白為間隔(2) 整數列表:(a) {start..end}(b) $(seq [start [step]] end)(3) 返回列表的命令$(COMMAND)(4) 使用glob,如:.sh(5) 變量引用;$@, $while read line(用法)(用于遍歷文件,進行處理…

    Linux干貨 2017-07-10
  • ntp時間服務器搭建實例

    ntp時間服務器采用stratum分級架構來處理時間同步;舉例說明:你搭建了一臺ntp服務器,然后同步的server為stratum-1,你的ntp則為stratum-2,你的下級ntp則為tratum-3。依此類推,最多為15層。 1.ntp server安裝: [root@localhost ~]# yum -y …

    Linux干貨 2015-11-10
  • Linux Cluster之Keepalived + Nginx的實現

      一、實驗環境 http server1與http server2組成web集群,由nginx服務器實現負載均衡代理,使用keepalived保證nginx服務的高可用。通過虛擬IP192.168.154.177對外提供web服務。 實驗目的: 1)當Nginx server1上的nginx服務異常時,由nginx server2提供反帶服務。 …

    2016-11-02
  • mitaka版本openstack網絡之open vSwitch

    作者:【吳業亮】 博客:http://blog.csdn.net/wylfengyujiancheng 一、硬件配置及服務拓撲1. controller節點:一塊網卡2. 網絡節點:四塊網卡。3. 計算節點:三塊網卡 controller節點1. 運行 neutron數據庫2. 運行消息隊列服務3. 運行認證。4. 運行OpenStack計算nova相關網絡…

    2018-01-22
欧美性久久久久