lvs

調度算法:
rr,wrr

hardware:
F5,BIGIP
Citrix,Netscaler
A10
software:
四層:lvs
七層反向代理:nginx(http,smtp,pop3,imap),hapoxy(http,tcp(mysql,smtp))

iptables/netfilter
netfilter,rule,iptables
lvs:
ipvsadm:管理集羣服務命令行工具
ipvs:內核
lvs(Linux virtual server)四層
director,realserver
lvs和iptables不能同時運行

DNAT:多目標

三種模式:
NAT:地址轉換
DR:直接路由
TUN:隧道

NAT(必須要有兩塊網卡):集羣節點跟director必須在同一IP網絡中;
rip通常是私有地址,僅用於各集羣節點的通信;
director位於client和real server之間,並負責處理進出的所有通信;
readserver必須將網關指向DIP;
支持端口映射;
realserver可以使用任意OS;
較大規模應用場景中,director易成爲系統瓶頸;

DR(一塊網卡就可以):
集羣節點跟director必須在同一個物理網絡中;
rip可以使用公網地址,實現便捷的流程管理和監控;
director僅負責處理進入站請求,響應報文則有realserver直接發往客戶端;
realserver不能將網關指向DIP;
director不支持端口映射;

TUN(一塊網卡就可以):
集羣可以跨越互聯網;
rip必須是公網地址;
director僅負責處理進入站請求,響應報文則有realserver直接發往客戶端;
realserver不能將網關指向director;
只有支持隧道功能的OS才能用於realserver;
不支持端口映射;

LB
HA
HP

LB:
hardware:
F5,BIG-IP
Citrix netscaler
A10
software:
四層:
LVS
七層:
nginx
haproxy

LVS:Linux virtual server

type:
NAT:類似DNAT
DR
TUN

固定調度
rr:輪叫,輪詢
wrr:weight,加權
sh:source hash,源地址hash

http stateless
cookie(在客戶端)
session(在服務器端保存用戶的信息)
session affinity(session綁定)

四種靜態:
rr:
wrr:
dh:
sh:

動態調度算法:
lc:最小連接
active256+innative
誰的小,挑誰
wlc:加權最小連接
(active
256+inactive)/weight
sed:最短期望延遲
(active+1)*256/weight
nq:never queue
lblc:基於本地的最小連接
lblcr:基於本地的帶複製功能的最小連接

默認方法:wlc

調度算法:
rr(輪叫,輪詢):依次分發
wrr(權重輪詢):按權重的大小進行分發
sh(來源地址hash):如果某一客戶端通過調度器分發到一臺服務器上面,則當客戶再次訪問的時候,同樣被分發到上一次訪問過的服務器上面。
dh(目標地址hash):當很多客戶端訪問通過調度器訪問相同的資源時,就被分發到同一臺服務器
lc(最小連接):誰連接數少就用那臺服務器
wlc(權重):按權重(active*256+inactive)/weight
sed:最短期望延遲(inactive+1)/weight
ng:never queue
lblc:基於本地的最小連接
lblcr:基於本地帶複製功能的最小連接

ipvsadm:管理集羣服務的命令行工具
ipvs:內核模塊

grep -i ‘vs’/boot/config-2.6.18-308.e15

yum install ipvsadm

ipvsadm:
定義集羣服務(可以理解爲定義分發器):
添加:-A -t|u|f service=address [-s schedluer]
-t:TCP協議的集羣
-u:UDP協議的集羣
service-address:IP:PORT
-f:FWM防火牆標記
service-address:mark number
修改:-E
刪除:-D -t|u|f service-address

ipvsadm -A -t 172.16.100.1:80 -s rr

管理集羣服務中的RS
    添加:-a -t|u|f service=address -r server-address [-g|i|m] [-w weight]
    -t|u|f server-address:事先定義好的某集羣服務
            -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT實現端口映射
  [-g|i|m]:lvs類型
    -g:DR
    -i:TUN
    -m:NAT
   [-w weight]:定義服務器權重
    修改:-e
    刪除:-d -t|u|f service-address -r server-address

ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m
查看:-L|l
-n:數字格式顯示主機地址和端口
--stats:統計數據
--rate:速率
--timeout:顯示tcp,tcpfin和tcp的會話超時時長
-c:顯示當前的ipvs連接狀況

ipvsadm -L -n --stats
ipvsadm -L -n --rate
ipvsadm -L -n --timeout
ipvsadm -L -n --damon
ipvsadm -L -n -c

刪除所有集羣服務 :
-C:清空ipvs規則
保存規則:
-S:ipvsadm -S > /path/to/somefile
載入此前的規則:
-R:ipvsadm -R > /path/form/somefile

各節點之間的時間偏差不應該超出1秒鐘
NTP:network time protocol
ntpdate serverip

ipvsadm -A -t 172.16.100.1:80 -s rr
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

ipvsadm -L -n

ipvsadm -E -t 172.16.100.1:80 -s wrr
ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.8 -m -w 3
ipvsadm -e -t 172.16.100.1:80 -r 192.168.10.9 -m -w 1

ab -n 1000 -c 100 http://172.16.100.1/index.html

service ipvsadm save

LVS:ipvsadm/ipvs
input:-->postrouting

ipvsadm:
管理服務:
-A
-E
-D
管理RS:
-a
-e
-d
查看:
-L|l
-n
--stats
--rate
--timeout
--sort
--daemon
規則管理:
-C
-S
-R

DR:
vip:mac(dvip)
arptables:
kernel paraneter:
arp_ignore:定義接收到ARP請求時的響應級別;
0:只要本地配置有相應地址,就給予響應
1:僅在請求的目標地址配置請求到達的接口上的時候,纔給予響應

arp_announce:定義將自己地址向外通告級別;
    0:將本地任何接口上的任何地址向外通告
    1:試圖僅向目標網絡通告與其網絡匹配的地址
    2:僅向與本地接口上地址的網絡進行通告

VIP:172.16.100.1
DIP:172.16.100.2
RIP:172.16.100.8

director:
eth0,DIP:172.16.100.2
eth0:0,vip:172.16.100.1
route add -host 172.16.100.1 dev eth0:0

RS1:
eth0,rip:172.16.100.7
lo:0,vip:172.16.100.1

RS2:
eth0,rip:172.16.100.8
lo:0,vip:172.16.100.1

必須要先關閉arp_ignore和arp_annoce之後才能配置vip地址

sysctl -w net.ipv4.conf.eth0.arp_announce=2
sysctl -w net.ipv4.conf.eth0.all.arp_announce=2

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

ifconfig lo:0 172.16.100.1 broadcast 172.16.100.1 netmask 255.255.255.255
route add -host 172.16.100.1 dev lo:0

ipvsadm -A -t 172.16.100.1:80 -s wlc
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.7 -g -w 2
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.8 -g -w 1

iptables -A INPUT -p tcp --dport 88 -j REJECT

DR:
vip:192.168.10.3
dip:192.168.10.5

RS1:
192.168.10.7
RS2:
192.168.10.8

service ipvsadm save
ipvsadm -S

VIP,路由

elinks -dump http://192.168.10.7
echo $?

curl --connect-timeout 1 http://192.168.10.7

數組索引
array_name[index]
array_name=("element1" "element2")

array_name[0]="element1"
array_name[1]="element2"

echo ${RS[0]}
echo ${RS[1]}
echo $RS
echo ${#RS}
echo ${#RS[]}
echo ${RS[
]}

腳本實現lvs後端服務健康狀態檢查:
vim health_check
#! /bin/bash
#
vip=192.168.10.3
cport=80
fall_back=127.0.0.1
rs=(192.168.10.7 192.168.10.8)
rstatus=(1 1)
rw=(2 1)
rport=80
let count=0
type=g

add() {
ipvsadm -a -t $vip:$cport -r $1:$rport
[ $? -eq 0 ] && return 0 || return 1
}

del() {
ipvsadm -d -t $vip:$port -r $1:$rport -$type -w $2
[ $? -eq 0 ] && return 0 || return 1
}

while :; do
let count=0
for i in ${RS[*]}; do
if curl --connect-timeout 1 http://$i &> /dev/null; then
if [ ${rstatus[$count]} -eq 0 ]; then
add $i $rw{[$count]}
[ $? -eq 0 ] && rstatus[$count]=1
fi
else
if [ ${rstatus[$count]} -eq 1 ]; then
del $i
[$? -eq 0 ] && rstatus[$count]=0
fi
fi
done
sleep 5
done

DR:
arp_ignore=1
arp_announce=2

數組:變量陣列
array_name=(“” “” “”)

declare -a A

lvs持久連接:
無論使用何種算來自同一客戶端請求派發至此前選定rs。

持久連接模板(內存緩存區域)
每一個客戶端 及分配給他的rs映射關係。

ipvsadm -A|-E ... -p timeout:
timeout:持久連接時長,默認300秒:單位是秒

使用命令ipvsadm -A .... -p timeout
timeout: 持久連接時長,默認300秒:單位是秒;

在基於SSL,需要用到持久連接:
PPC:將來自於同一個客戶端對於一個集羣服務的請求,始終定向至此前選定的rs;持久端口連接
ipvsadm -A -t 192.168.10.3:80 -s rr -p 600
ipvsadm -E -t 192.168.10.3:80 -s rr
ipvsadm -L -n --persistent
ipvsadm -A -t 192.168.10.3:23 -s rr -p 3600

PCC:將來自於同一客戶端對所有端口的請求,始終定向至此前選定的rs;持久客戶端連接:ipvsadm -A -t 192.168.10.3:0 -s rr -p 600 注意端口一定要是零
ipvsadm -a -t 192.168.10.3:0 -r 192.168.10.7 -g -w 2
ipvsadm -a -t 192.168.10.3:0 -r 192.168.10.8 -g -w 2

把所有端口統統定義爲集羣服務,一律向同一rs轉發
PNMPP:持久防火牆標記連接:iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -d 192.168.10.3 -i eth0 -p tcp --dport 23 -j MARK --set-mark 8
ipvsadm -A -f 8 -s rr -p 600
ipvsadm -a -f 8 -r 192.168.10.7 -g -w 2
ipvsadm -a -f 8 -r 192.168.10.8 -g -w 5
選擇幾個端口定義爲集羣服務:要採用防火牆的標記功能。

rsync server(inotify+rsync server)
sersync:多線程同步

DR模型中如果羣節點跟director不在同一個物理網絡中;
例如:director IP地址爲:202.1.1.1 VIP:202.1.1.2
realserver IP地址:192.168.1.25 VIP:202.1.1.2
如果是這樣的情況就意味着路由器就必須要有兩個網絡接口;一個爲:202.1.1.3 另一個爲:192.168.1.20

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章