keepalived
同類軟件 heartbeat
硬件設備:F5 netscaler radware
lvs
同類軟件 haproxy nginx
硬件設備:F5 netscaler radware
ARP 協議
考點:
1.什么是ARP協議,ARP協議的工作原理
全稱 "Address Resolution Protocol" 地址解析協議。 使用ARP協議可以通過ip地址獲取物理地址(MAC地址) 局域網中第一次通訊,ARP廣播尋找目標主機,並緩存ip對應的MAC到本機的ARP表中。通訊的雙方必須在一個網段。
2. ARP帶來的實際問題
利用arp緩存表進行arp欺騙,當有一台主機使用arp欺騙偽造網關mac地址導致不能上網,該如何排查 - 設備接入時進行mac地址登記
3.遷移網關和高可用服務器后無法上網
arping廣播自己的mac地址 /sbin/arping -I eth0 -c 3 -s 10.0.0.162 10.0.0.253 /sbin/arping -U -I eth0 10.0.0.162
4.命令
arp -a 查看arp緩存表 arp -d 清空arp緩存表
5.應用場景
lvs DR 模式
——————————————————————————————————————————————
- lvs(linux virtual server) 可以代理TCP和UDP,並發量幾萬到10萬
——————————————————————————————————————————————
項目介紹
集群的體系結構
集群中的ip負載均衡技術
集群中的負載調度
——————————————————————————————————————————————
2.術語
——————————————————————————————————————————————
VIP
virtual ip address 虛擬ip地址
RIP
real server ip address 真實的ip節點,web的地址
DIP
director ip address 負載均衡器的內網ip
CIP
client ip address 客戶端的ip
——————————————————————————————————————————————
3.工作模式
——————————————————————————————————————————————
NAT模式 network address translation
TUN模式 tunneling
DR模式 direct routing 直接路由
FULLNAT模式 full network address translation
——————————————————————————————————————————————
3.1.DR模式direct routing 直接路由
——————————————————————————————————————————————
請求過程
1.請求數據攜帶CIP和VIP 到達LVS, LVS通過調度算法選擇一台后端主機並修改ARP表中VIP對應的mac地址轉發到該realserver上。
2.realserver 核驗VIP和MAC,realserver 發現MAC地址是自己的但是VIP不是自己的,這時間會丟棄請求的數據包(通過在 realserver 上配置VIP解決該問題)
3.局域網中同時配置多個VIP 會導致IP沖突,爭搶路由廣播(通過在lo 上配置vip,並通過內核抑制realserver的接收路由廣播)
4.realserver處理完畢經路由直接將結果發送給CIP
特點
1.要求在同一局域網內
2.負載均衡器只做了mac地址的轉發,因此只能代理相同端口
3.webserver需要外網ip
4.優點:並發很高
客戶端CIP--->lvs --->分發到RIP--->直接將結果返回到客戶端
|
|
修改ARP中的mac地址為web物理地址
a.在真實的web機器上綁定ifconfig lo:0 vip/24 up
b.抑制ARP
——————————————————————————————————————————————
3.2.NAT模式 network address translation
——————————————————————————————————————————————
請求時改目標ip,數據返回時修改源IP
請求過程
1.請求數據到達LVS(CIP:VIP)
2.LVS廣播轉發請求到一台RIP,並將數據包的目標ip修改成該RIP(CIP:RIP) prerouting
3.RIP 處理后將數據包發送給網關(RIP網關必須為DIP)(RIP:CIP)
4.LVS 轉換源ip地址后轉發給CIP(VIP:CIP) postroting
特點:
1.支持端口轉化
2.realserver 可以是內網
3.對LVS 壓力大
2.負載均衡開啟內核轉發 net.ipv.ip_forward=1
fullnat Lvs同時修改源和目標地址,返回時同時修改源和目標地址。這樣lvs可以是多台,在多台lvs之前的的路由器上使用OSPF技術聚合
——————————————————————————————————————————————
3.3.TUN模式 tunneling
——————————————————————————————————————————————
二次封裝數據包
1.數據到達LVS ,LVS進行二次封裝,在目標地址中添加新的IP指向RIP
2.到達RIP,webserver進行解包,獲取到VIP(需要在webserver lo上添加輔助ip,同時抑制vip。類似DR模式)
3.直接返回數據到客戶端
4.與DR模式相比可以跨網段,跨機房
——————————————————————————————————————————————
4.調度算法 有8種調度算法,常用4種
——————————————————————————————————————————————
rr round-robin 輪詢算法 靜態
wrr weight round-robin 加權輪詢 靜態
dh destination hashing 目標地址hash算法
sh source hashing 原地址hash 算法
wlc weight least-connect 加權最小連接數調度 動態
lc
lblc Locality-Based Least Connections 基於局部性的最少鏈接
LCLCR Locality-Based Least Connections with Replication 帶復制的基於局部性最少鏈接
sed:最短預期延遲(Shortest Expected Delay)
nq never queue schedure 永不排隊
——————————————————————————————————————————————
5.DR模式安裝配置
——————————————————————————————————————————————
環境
+++++++++++++++++++++++++++++++++++++++++++++
192.168.0.2 DIP
192.168.0.3 RIP
192.168.0.4 RIP
192.168.0.20 VIP
+++++++++++++++++++++++++++++++++++++++++++++
內核環境檢查
lsmod |grep ip_vs 查看內核模塊是否安裝ip_vs(內核調度模塊)
#如果有多個/usr/src/kernels/2.6.32 要與uname -r 一致
#如果沒有要yum install kernel-devel
ln -s /usr/src/kernels/2.6.32-300.10.1.el5uek/ /usr/src/linux
安裝ipvsadmin
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
tar xf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
#不需要configure,報錯需要安裝: yum install libnl* popt* -y
#rpm -ivh popt-static-1.13-7.el6.x86_64.rpm
make && make install
把ip_vs 加載到內核 /sbin/ipvsadm 或者 modprobe ip_vs
檢查內核如果出現ip_vs表示安裝成功 lsmd|grep ip_vs
另一種方法通過yum 安裝ipvsadm
vi /root/ipvs.sh
#!/bin/bash
ipvs_mods_dir="/usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs"
for i in $(ls $ipvs_mods_dir|grep -o "^[^.]*")
do
/sbin/modinfo -F filename $i &>/dev/null
if [ $? -eq 0 ];then
/sbin/modprobe $i
fi
done
#加載ipvs內核模塊
sh /root/ipvs.sh
lsmod | grep ip_vs
#
yum install ipvsadm -y
#
ipvsadm -Ln
#
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0
sysctl -p
6.配置
6.1負載均衡端配置
#配置vip lvs 上執行
ifconfig eth0:0 192.168.0.20/24 up
route add -host 192.168.0.20 dev eth0
6.2webserver 端配置
#在各個webserverd端綁定vip
#在 lo上配置,掩碼32
ifconfig lo:0 192.168.0.20/32 up
route add -host 192.168.0.20 dev lo
6.3 抑制webserver 端APR響應
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
#參數
arp_ignore 整數
外來ip請求的arp回應限制
0(默認):只要網卡上有配的ip,ARP廣播全部應答
1 :只回答接有網線的網卡上配置的IP
arp_announce 整數
對本地ip發出的arp回應作出相應級別的限制
0(默認) 在任意網絡接口上的任何地址回應
快速啟動
ipvsadm -A -t 192.168.0.20:80 -s rr -p 20 添加虛擬主機
ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.3 -g -w 1 添加web節點
ipvsadm -a -t 192.168.0.20:80 -r 192.168.0.4 -g -w 1 添加web節點
ipvsadm -L -n --stats
——————————————————————————————————————————————
9.ipvsadm 命令常用參數
——————————————————————————————————————————————
ipvsadm --help
ipvsadm -C 清空原有配置
ipvsadm --set 20 5 60 # tcp tcpfin udp 超時時間
#刪除虛擬主機
ipvsadm -D -t 192.168.0.20:80
-A 添加虛擬主機
-t 指定VIP
-s 指定算法
-p 會話保持
#刪除節點
#ipvsadm -d -t 192.168.0.20:80 -r 192.168.0.4
-a 添加web節點
-r 添加節點
-g DR模式
-w 指定權重
ipvsadm -L -n 查看配置信息
ipvsadm -Ln --stats
ipvsadm -Lnc 查看鏈接數及鏈接狀態
ipvsadm -Ln --threshods
ipvsadm -Ln --timeout
ipvsadm
ipvsadm - Linux Virtual Server administration
有兩種基本的格式:
- ipvsadm COMMAND [protocol] service-address [scheduling-method] [persistence options]
- ipvsadm command [protocol] service-address server-address [packet-forwarding-method] [weight options]
格式1,用於維護 Virtual Server
格式2,用於維護RealServer
command 大寫用於維護 virtual server,小寫用於維護real server
短命令 | 長命令 | 解釋 |
---|---|---|
-A | --add-service | 添加virtual server |
-E | --edit-service | 編輯virtual server |
-D | --delete-service | 刪除virtual server 及相關的real server |
-C | --clear | 清空virtual server |
-R | --restore | 從標准輸入加載 |
-S | --save | 保存到標注輸出 |
-a | --add-server | 添加real server |
-e | --edit-server | 編輯real server |
-d | --delete-server | 刪除real server |
-L,-l | --list | -Lnc 192.168.0.1 |
-Z | --zero | 清空匹配的包 |
--set tcp tcpfin udp | 指定超時時間 | |
--start-daemon master | 主 | |
--start-daemon backup | 備 |
短命令 | 長命令 | 解釋 |
---|---|---|
-t | --tcp-service | tcp協議service |
-u | --udp-service | udp協議service |
-f | --fwmark-service | |
-p | --persistent [timeout] | 回話保持,timeout 默認300s |
-r | --real-server | |
-g | --gatewaying | direct routing |
-i | --ipip | tunneling |
-m | --masquerading | NAT |
-w | --weight |
scheduling-method
短命令 | 長 命 令 | |
---|---|---|
-s | --scheduler | rr round-robin |
wrr weighted-round-robin | ||
lc least-connection | ||
wlc weighted-least-connection | ||
lblc 相同客戶端訪問相同的服務,如果服務沒有超負荷 | ||
lblcr | ||
dh - Destination Hashing | ||
sh Source hashing | ||
sed - Shortest Expected Delay 最小延遲 | ||
nq Never Queue 1.優先分配到一個閑置的real server 、或最快的real server 2.如果都繁忙使用sed 調度算法 |
查詢指令
短命令 | 長命令 | 解釋 |
---|---|---|
-c | --connection | 當前ipvs的 連接情況 |
--stats | 輸出狀態信息 | |
--rate | 速率信息 | |
--thresholds | 輸出real server的閾值信息 | |
--persistent-conn | 輸出會話保持的信息 | |
--sort | 排序輸出 | |
--nosort | 不排序 | |
-n | --numeric | 不解析域名 |
--exact | 精確的字節信息 |
事例
ipvsadm -A -t 207.175.44.110:80 -s rr
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m
Alternatively, this could be achieved in a single ipvsadm command.
echo "
-A -t 207.175.44.110:80 -s rr
-a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
-a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
-a -t 207.175.44.110:80 -r 192.168.10.3:80 -m
-a -t 207.175.44.110:80 -r 192.168.10.4:80 -m
-a -t 207.175.44.110:80 -r 192.168.10.5:80 -m
" | ipvsadm -R