LVS DR模型配置示例
要讓路由知道哪臺主機是Director,進行選擇:
1、VIP:MAC(Director VIP) —— MAC綁定,但未必可行,例如路由是運營商的。
2、arptables
3、kernel parameter(常用此配置):
????arp_ignore:定義接收到ARP請求時的響應級別;
????????0:默認級別,只要本機配置有相應的地址,就給予響應;
????????1:只有當請求目標地址是請求到達接口上配置的地址,才給予響應;
????arp_announce:定義將自己的地址向外通告時的通告級別;
????????0:默認級別,將本機任何接口上的任何地址向外通告;
????????1:試圖僅向目標網絡通告與其網絡匹配的地址;
????????2:僅向與本地接口上的地址匹配的網絡進行通告;
# 注意:各節點間的時間偏差不應該超出1秒鐘。
# Director配置NTP服務器:
Director:
yum install ntp
/etc/init.d/ntpd start
Client:
/usr/sbin/ntpdate Director_IP
VS/DR拓撲示例:
????????????192.168.101.253
????????????????10.10.10.1
????????????????????Client
????????????????????????|
????????????????????????|
???????????????? ?(router)
????????????192.168.101.254
????????????????????????|
????????????????????????| ? ? ? ? ?VIP=192.168.101.168
????????????????????????| ————— Director
????????????????????????|???????????? ?DIP=10.10.10.10
????????????????????????|
????????????—————————
????????????|????????????????????????????????|
????????????|????????????????????????????????|
RIP=10.10.10.11????????RIP=10.10.10.12
???????? ?RS1????????????????????????????RS2
VIP=192.168.101.168????VIP=192.168.101.168
????????在如上圖的VS/DR或VS/TUN應用的一種模型中(所有機器都在同一個物理網絡),所有機器(包括Director和RealServer)都使用了一個額外的IP地址VIP。當一個客戶端向VIP發出一個連接請求時,此請求必須要連接至Director的VIP,而不能是RealServer的。因為,LVS的主要目標就是要Director負責調度這些連接請求至RealServer的。
????????因此,在Client發出至VIP的連接請求后,只能由Director將其MAC地址響應給客戶端(也可能是直接與Director連接的路由設備),而Director則會相應的更新其ipvsadm table以追蹤此連接,然后將其轉發至后端的RealServer之一。
????????如果Client在請求建立至VIP的連接時由某RealServer響應了其請求,則Client會在其MAC table中建立起一個VIP至RealServer的對應關系,并以至進行后面的通信。此時,在Client看來只有一個RealServer而無法意識到其它服務器的存在。
????????為了解決此問題,可以通過在路由器上設置其轉發規則來實現。當然,如果沒有權限訪問路由器并做出相應的設置,則只能通過傳統的本地方式來解決此問題。這些方法包括:
1、禁止RealServer響應對VIP的ARP請求;
2、在RealServer上隱藏VIP,使得它們無法獲知網絡上的ARP請求;
3、基于"透明代理(Transparent Proxy)"或者"fwmark (firewall mark)";
4、禁止ARP請求發往RealServer。
????????傳統認為,解決ARP問題可以基于網絡接口,也可以基于主機來實現。Linux采用了基于主機的方式,因為其可以在大多場景中良好的工作,但LVS卻并不屬于這些場景之一,因此,過去實現此功能相當麻煩?,F在可以通過設置arp_ignore和arp_announce,這變得相對簡單的多。
????????Linux 2.2和2.4(2.4.26之前的版本)的內核解決"ARP問題"的方法各不相同,且比較麻煩。幸運的是,2.4.26和2.6的內核中引入了兩個新的調整ARP棧的標志(device flags):arp_announce和arp_ignore。基于此,在DR/TUN的環境中,所有IPVS相關的設定均可使用arp_announce=2和arp_ignore=1/2/3來解決"ARP問題”。
VS/DR配置示例:
Director:
????eth0, DIP:10.10.10.10/24
????eth1, VIP:192.168.101.168/24????gw:192.168.101.254
RS1:
????eth0, RIP:10.10.10.11/24????????gw:10.10.10.1
????lo:0, VIP:192.168.101.168/32
RS2:
????eth0, RIP:10.10.10.12/24????????gw:10.10.10.1
????lo:0, VIP:192.168.101.168/32
Client:
????IP1:192.168.101.253/24
????IP2:10.10.10.1/24
# 注意:這里物理機(Client)VM8網卡配置兩個IP地址,一個192.168.101.253,一個10.10.10.1;RS配置網關指向物理機的10.10.10.1。
1、Director安裝ipvsadm
# yum install ipvsadm
2、RS1安裝httpd
# yum install httpd
# echo "rs1.redhat.com" > /var/www/html/index.html
# service httpd start
3、RS2安裝httpd
# yum install httpd
# echo "rs2.redhat.com" > /var/www/html/index.html
# service httpd start
4、解決ARP問題
# 注意:RS需先配置關閉arp請求響應arp_ignore或arp_announce,然后再配置VIP
# RS1、RS2配置相同:
# 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
5、RS1配置IP及路由
# ifconfig lo:0 192.168.101.168 broadcast 192.168.101.168 netmask 255.255.255.255 up
# route add -host 192.168.101.168 dev lo:0
6、RS2配置IP及路由
# ifconfig lo:0 192.168.101.168 broadcast 192.168.101.168 netmask 255.255.255.255 up
# route add -host 192.168.101.168 dev lo:0
7、Director配置VS/DR(調度算法:WLC)
# ifconfig eth1 192.168.101.168 broadcast 192.168.101.255 netmask 255.255.255.0 up
# route add default gw 192.168.101.254
# ipvsadm -A -t 192.168.101.168:80 -s wlc
# ipvsadm -a -t 192.168.101.168:80 -r 10.10.10.11 -g -w 2
# ipvsadm -a -t 192.168.101.168:80 -r 10.10.10.12 -g -w 1
8、瀏覽器訪問:http://192.168.101.168
VS/DR Script:
### Director ###
#!/bin/bash
#
# chkconfig: - 90 10
# description: LVS Script for VS/DR.
#
VIP=192.168.101.168
RIP1=10.10.10.11
RIP2=10.10.10.12
GW=192.168.101.254
CSTATUS1() {
????[ -e /var/lock/subsys/ipvsadm.lock ] && echo -e "\033[32mipvsadm is running...\033[0m" && exit 1
}
CSTATUS2() {
????[ ! -e /var/lock/subsys/ipvsadm.lock ] && echo -e "\033[32mipvsadm is not running...\033[0m" && exit 2
}
case "$1" in
? start)
????CSTATUS1
????echo -e "\033[32mStart VS/DR of Director Server...\033[0m"
????# Set the Virtual IP address.
????/sbin/ifconfig eth1 $VIP broadcast $VIP netmask 255.255.255.0 up
????/sbin/route add -host $VIP dev eth1
????/sbin/route add default gw $GW
????# Director must open packet forwarding.
????#echo 1 > /proc/sys/net/ipv4/ip_forward
????# Clean all iptables rules.
????/sbin/iptables -F
????# Reset iptables counters.
????/sbin/iptables -Z
????# Clean all ipvsadm rules/services.
????/sbin/ipvsadm -C
????# Set VS/DR, Scheduling is Weighted Least Connection.
????/sbin/ipvsadm -A -t $VIP:80 -s wlc
????/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 2
????/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 1
????# Show VS/DR status.
????/sbin/ipvsadm -L -n
????/bin/touch /var/lock/subsys/ipvsadm.lock
????;;
? stop)
????CSTATUS2
????echo -e "\033[32mStop VS/DR of Director Server...\033[0m"
????# Reset ipvsadm.
????/sbin/ipvsadm -C
????# Close VIP interface.
????/sbin/ifconfig eth1 down &> /dev/null
????# Close packet forwarding.
????#echo 0 > /proc/sys/net/ipv4/ip_forward
????/bin/rm -f /var/lock/subsys/ipvsadm.lock
????;;
? status)
????[ -e /var/lock/subsys/ipvsadm.lock ] && echo -e "\033[32mipvsadm is running...\033[0m" || echo -e "\033[32mipvsadm is not running...\033[0m"
????;;
? *)
????echo -e "\033[32mUsage: $0 {start|stop|status}\033[0m"
????;;
esac
### RealServer ###
#!/bin/bash
#
# description: VS/DR Real Server.
#
VIP=192.168.101.168
GW=10.10.10.1
case "$1" in
? start)
????echo -e "\033[32mStart VS/DR of Real Server...\033[0m"
????/sbin/ifconfig lo down
????/sbin/ifconfig lo up
????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
????/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
????/sbin/route add -host $VIP dev lo:0
????#/sbin/route add default gw $GW
????;;
?stop)
????echo -e "\033[32mStop VS/DR of Real Server...\033[0m"
????/sbin/ifconfig lo:0 down &> /dev/null
????#/sbin/route del default gw $GW
????echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
????echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
????echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
????echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
????;;
? status)
????CHECKLO=`/sbin/ifconfig lo:0 | grep $VIP`
????CHECKRO=`netstat -nr | grep lo | grep $VIP`
????if [ ! "$CHECKLO" -o ! "$CHECKRO" ];then
????????echo -e "\033[32mReal Server VS/DR is not running...\033[0m"
????else
????????echo -e "\033[32mReal Server VS/DR is Running...\033[0m"
????fi
????;;
? *)
????echo -e "\033[32mUsage: $0 {start|stop|status}\033[0m"
????;;
esac
轉載于:https://blog.51cto.com/yuyucat/1656191
總結
以上是生活随笔為你收集整理的LVS DR模型配置示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 透过浏览器看HTTP缓存(转)
- 下一篇: 简单易懂的现代魔法——Play Fram