糾正:報文進入內核空間后,當到達input鏈時發現是一個集群服務時,則直接發送到postrouting鏈,不經過forward鏈。
調度算法:
1、靜態方法:
rr:輪詢,即依照次序從所有RS中進行挑選
wrr:加權輪詢,按照權重在RS中進行輪詢
sh:source hashing,源地址哈希,即對來自相同客戶端的請求發送至同一RS,這樣會破壞負載均衡效果。可以基于cookie實現session綁定。
dh:destination hash,目標地址哈希,將同樣的請求發給同一個RS。可以提高緩存命中率。
2、動態方法:
lc:最少連接。(活動連接數*256+非活動連接數),誰的最小就是誰。
wlc:加權最少連接。(活動連接數*256+非活動連接數)/weight,誰的最小就是誰。
sed:最少期望延遲。不再考慮非活動連接。(活動連接數+1)*256/weight,誰的最小就是誰。
nq:最少隊列調度,改進的sed算法,也不考慮非活動連接數。無需隊列。如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。
lblc:基于本地的最少連接。和dh一樣,考慮cache的連接數。可能破壞緩存命中率。
lblcr:基于本地的帶復制功能的最少連接。如果一臺服務器的訪問過高,可以將緩存復制給其他服務器前面的緩存服務器,然后由其他服務器提供服務。緩存服務器之間會部分復制緩存。
生產環境中比較理想的是wlc,因為非活動連接可能是無法忽略的。
安裝ipvsadm及命令詳解:
yum直接安裝ipvsadm即可。
grep -i 'vs' /boot/config-2.6.32-504.el6.x86_64 #即可查看ipvsadm的相關算法等信息
主要功能:
1、管理集群服務: 添加:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] -t|u|:tcp|udp service-address:ip:port -f:防火墻標記 service-address:mark number 默認使用wlc算法 修改:同上 刪除:ipvsadm -D -t|u|f service-address 2、管理集群中RS: 添加:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower] service-address:先定義的集群服務 -r server-address:RS地址,在NAT模型中可以使用ip:port來做端口映射 [-g|i|m]:g,DR模型;i,TUN模型;m,地址偽裝NAT模型,默認為DR模型 -w weight:權重,若集群不指定權重,則此處無意義 修改:同上 刪除:ipvsadm -d -t|u|f service-address -r server-address 3、查看 -L|l:查看 -n:數字格式顯示ip和端口 --stats:顯示統計信息 --rate:顯示速率 --timeout:顯示tcp,tcpfin,udp超時 --daemon:顯示多播等信息 --sort:排序 -c:顯示連接狀態 -Z:清空計數器 -C:清空所有集群服務 保存規則: -S > 文件(使用輸出重定向) 或者service ipvsadm save,自動保存至/etc/sysconfig/ipvsadm中 導入規則: -R < 文件(使用輸入重定向)
實驗:
前提:
1、時間得同步。尤其是以后的高可用模型對時間同步要求很嚴格。
2、改主機名
3、directory(調度器)的兩塊網卡之間得打開轉發功能
IP規劃如上圖
開啟網卡轉發功能:
Directory網絡配置(eth0設置為橋接,eth1設置為僅主機模式):
RS網絡設置
RS1:(網卡設置為僅主機模式)
RS2:(網卡設置為僅主機模式)
添加集群服務并查看
在RS中添加默認網頁:
echo “RS1” > /var/www/html/index.html echo “RS2” > /var/www/html/index.html
再RS中啟動httpd服務:service httpd start
查看一下index.html文件:
(此處未改主機名)
(此處未改主機名)
在網頁中輸入192.168.0.20并刷新
保存規則并查看:
清空規則并查看:
此時已無規則。
導入規則并查看:
DR模型:
Director配置:(配置DIP,VIP,添加路由)
RS1配置:
(此處未改主機名)
[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置vip:
[root@RS1 ~]# ifconfig lo:0 192.168.0.21 broadcast 192.168.0.21 netmask 255.255.255.255 up
添加路由:
[root@RS1 ~]# route add -host 192.168.0.21 dev lo:0
RS2配置:
(此處未改主機名)
[root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
配置VIP:
[root@RS2 ~]# ifconfig lo:0 192.168.0.21 broadcast 192.168.0.21 netmask 255.255.255.255 up
配置路由:
[root@RS2 ~]# route add -host 192.168.0.21 dev lo:0
Director添加集群服務并查看
瀏覽器查看:
原創文章,作者:黑白子,如若轉載,請注明出處:http://www.www58058.com/9488
哈,很不錯,不過最核心的 arp_announce 原理呢?