Linux Load Balancing之NAT与DR模型
溫馨提示:集群的基礎知識請點擊此鏈接
---本文大綱
-
定義集群的命令(ipvsadm)
-
NAT模型演示
-
DR模型演示
-
持久連接演示
一、定義集群的命令
命令格式:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ipvsadm -A|E -t|u|f service-address [-s scheduler] ??????????????[-p [timeout]] [-M netmask] ??????ipvsadm -D -t|u|f service-address ??????ipvsadm -C ??????ipvsadm -R ??????ipvsadm -S [-n] ??????ipvsadm -a|e -t|u|f service-address -r server-address ??????????????[-g|i|m] [-w weight] [-x upper] [-y lower] ??????ipvsadm -d -t|u|f service-address -r server-address ??????ipvsadm -L|l [options] ??????ipvsadm -Z [-t|u|f service-address] ??????ipvsadm --set?tcp tcpfin udp ??????ipvsadm --start-daemon state [--mcast-interface interface] ??????????????[--syncid syncid] ??????ipvsadm --stop-daemon state ??????ipvsadm -h |
常用選項
(1).管理集群服務
添加
-t :tcp協議的集群?service-address后面必須寫成ip:port
-u :udp協議的集群?service-address后面必須寫成ip:port
-f :防火墻的標記?service-address后面必須寫成mark numbe
-s :指定調試算法
-p :保存session會話?-p ?times
修改
ipvsadm -E -t|u|f server-adddress
-E: (實例中會有說明)
刪除
ipvsadm -D -t|u|f server-adddres
-D:刪除集群服務
(2).管理集群服務中的realserver
-t|u|f service-address?實現定義好的某集群服務
-r server-address?某rs的地址在nat模型中可使用ip:port實現端口映射
-g : DR(所使用的模型)
-i : TUN
-m : NAT
[-w weight]?指定權重(此處為數值)
修改
ipvsadm -e -t|u|f server-adddress ? ?
刪除
ipvsadm -d -t|u|f server-adddress
(3).查看
-n?顯示主機地址和端口為數字格
--stats?顯示進出站數據
--rate?顯示速率
--timeout?顯示每一個tcp tcpfin udp 的超時時間值
--deamon?顯示進程信息
--sort?顯示排序規則 默認是升序的
-c?顯示多少個客戶連接進來
(4).刪除所有集群服務
ipvsadm -C
(5).保存定義的規則
service ipvsadm save(默認保存于/etc/sysconfig/ipvsadm文件中,當中沒有集群服務,只有轉發記錄)
ipvsadm -S > /path/to/somefile
(6).載入此前的規則
ipvsadm -R(以默認文件/etc/sysconfig/ipvsadm為模板)
ipvsadm -R < /path/to/somefile
二、NAT模型演示
注:
NAT原理請參閱DNAT原理
1、資源分配
| 服務類型 | 軟件版本/服務/說明 | IP地址 |
| OS | Centos6.5.x86_64 | 無 |
| Director | ipvsadm | vip:192.168.1.111 dip:172.16.32.111 |
| real server 1 | http | rip:172.16.32.110 |
| real server 2 | http | rip:172.16.32.112 |
2、實驗拓撲圖
3、配置過程
第一步、Director
VIP(eth0):192.168.1.111
DIP(eth1):172.16.32.111/16
配置命令
1、配置外網IP(VIP)
2、配置內網IP(DIP)
3、開啟路由間轉發功能
4、安裝ipvsadm程序包
| 1 2 3 4 5 | #ifconfig eth0 192.168.1.111 netmask 255.255.255.0 up #ifconfig eth1 172.16.32.111 netmask 255.255.0.0 up #sysctl -w net.ipv4.ip_forward=1 #sysctl -p #yum install -y ipvsadm |
第二步、rs1
rip(eth0):172.16.32.110
配置命令
1、配置內網IP
2、添加默認網關
3、安裝http服務
4、設置默認頁面
5、啟動http服務
| 1 2 3 4 5 | #ifconfig eth0? 172.16.32.110 netmask 255.255.0.0 up #route add default gw 172.16.32.111 #yum install -y http #echo "172.16.32.110" > /var/www/html/index.html #service httpd start |
第三步、rs2
rip(eth0):172.16.32.112
配置命令
1、配置內網IP
2、添加默認網關
3、安裝http服務
4、設置默認頁面
5、啟動http服務
| 1 2 3 4 5 | #ifconfig eth0? 172.16.32.112 netmask 255.255.0.0 up #route add default gw 172.16.32.111 #yum install -y http #echo "172.16.32.112" > /var/www/html/index.html #service httpd start |
第四步、配置集群服務
配置命令
| 1 2 3 4 | #ipvsadm -C #ipvsadm -A -t 192.168.1.111:80 -s rr #ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.110:80 -m #ipvsadm -a -t 192.168.1.111:80 -r 172.16.32.112:80 -m |
第五步、測試
====================================NAT模型演示完畢======================================
三、DR模型演示
1、資源分配
| 服務類型 | 軟件版本/服務/說明 | IP地址 |
| OS | Centos6.5.x86_64 | 無 |
| Director | ipvsadm | vip(eth0:0):192.168.1.10 dip(eth0):192.168.1.11 |
| real server 1 | http | vip(lo:0):192.168.1.10 rip(eth0):192.168.1.21 |
| real server 2 | http | vip(lo:0):192.168.1.10 rip(eth0):192.168.1.31 |
2、實驗拓撲圖
3、配置過程
第一步、配置Director
| 1 2 | #ifconfig eth0 192.168.1.11 netmask 255.255.255.0 up #ifconfig eth0:0 192.168.1.10 netmask 255.255.255.0 up |
第二步、配置RS1
| 1 2 3 4 5 6 7 8 9 | #ifconfig eth0 192.168.1.21 netmask 255.255.255.0 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #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/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #yum install -y http #echo "192.168.1.21" >/var/www/html/index.html #service httpd restart |
第三步、配置RS2
| 1 2 3 4 5 6 7 8 9 | #ifconfig eth0 192.168.1.31 netmask 255.255.255.0 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #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/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #yum install -y http #echo "192.168.1.31" >/var/www/html/index.html #service httpd restart |
說明:
arp_ignore: 定義接收到ARP請求時的響應級別;
0:只要本地配置的有相應地址,就給予響應;
1:僅在請求的目標地址配置請求到達的接口上的時候,才給予響應;
arp_ignore = 1
arp_announce:定義將自己地址向外通告時的通告級別;
0:將本地任何接口上的任何地址向外通告;
1:試圖僅向目標網絡通告與其網絡匹配的地址;
2:僅向與本地接口上地址匹配的網絡進行通告;
arp_announce = 2
第四步、增加主機路由
Director
| 1 | #route add -host 192.168.1.10 dev eth0:0 |
RS1
| 1 | #route add -host 192.168.1.10 dev lo:0 |
RS2
| 1 | #route add -host 192.168.1.10 dev lo:0 |
第五步、配置集群服務
| 1 2 3 | #ipvsadm -A -t 192.168.1.10:80 -s rr #ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g #ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g |
第六步、測試
注:
如果反復刷新只有一個頁面,可能是有緩存,過一會再刷新就可能切換到另一個頁面了。
=================================DR模式演示完畢=====================================
四、持久連接演示
說明
盡管我們選擇了LVS的分發方法,但是大多時候我們要保證返回給客戶端的所有響應請求必須來自于同一臺Real Server,這里我們就要用到LVS Persistence(持久性)。
1、LVS?持久連接和類型
-
PCC?來自同一客戶端所有服務的請求都被重定向到同一臺Real Server上,以IP地址為準。
-
PPC?來自同一服務的請求都被重定向到同一臺Real Server上,以端口號為準。
-
PNMP?基于防火墻標記的持久連接,根據iptables 的規則,將對于某類服務幾個不同端口的訪問定義為一類
2、PCC?演示
PCC是一個虛擬服務沒有端口號(或者端口號為0),以"-p" 來標識服務。
缺陷:定向所有服務,期望訪問不同的Real Server無法實現。
| 1 2 3 4 5 6 7 8 9 10 | # ipvsadm -A -t 192.168.1.10:0 -s rr -p 200 # ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.21 -g # ipvsadm -a -t 192.168.1.10:0 -r 192.168.1.31 -g # ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags ??-> RemoteAddress:Port?????????? Forward Weight ActiveConn InActConn TCP? 192.168.1.10:0 rr persistent 200 ??-> 192.168.1.21:0?????????????? Route?? 1????? 0????????? 0????? ??-> 192.168.1.31:0?????????????? Route?? 1????? 0????????? 0 |
用ssh連接到192.168.1.10
3、PPC?演示
缺陷:期望訪問不同的端口到同一臺RS上,無法實現。
| 1 2 3 | #ipvsadm -A -t 192.168.1.10:80 -s rr -p 600 #ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.21:80 -g #ipvsadm -a -t 192.168.1.10:80 -r 192.168.1.31:80 -g |
4、PNMP?演示
先對某一特定類型的數據包打上標記,然后再將基于某一類標記的服務送到后臺的Real Server上去,后臺的Real Server 并不識別這些標記。將持久和防火墻標記結合起來就能夠實現端口姻親功能,只要是來自某一客戶端的對某一特定服務(需要不同的端口)的訪問都定義到同一臺 Real Server上去。假設這樣一種場景:一個用戶在訪問購物網站時同時使用HTTP(80)和HTTPS(443)兩種協議,我們需要將其定義到同一臺 Real Server上,而其他的服務不受限制。
| 1 2 3 4 5 | #iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 80 -j MARK --set-mark 3 #iptables -t mangle -A PREROUTING -d 192.168.1.10 -i eth0 -p tcp --dport 443 -j MARK --set-mark 3 #ipvsadm -A -f 3 -s rr -p 600 #ipvsadm -a -f 3 -r 192.168.1.21 -g #ipvsadm -a -f 3 -r 192.168.1.31 -g |
五、ipvs集群內生性不足
1、后端RS的健康狀態檢測?
補救方法
? ?⑴、腳本
? ?⑵、ldirectord
2、Director自身的可用性
補救方法
? ?⑴、ldirectord(heartbeat,corosync)
? ?⑵、keekalived
===============================完=================================================
本文轉自 jinlinger 51CTO博客,原文鏈接:http://blog.51cto.com/essun/1398868,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Linux Load Balancing之NAT与DR模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF实例秀——如何获取UI元素的图像
- 下一篇: 针对CDP协议攻击分析及安全防护