1. NAT部署
网络拓扑

Client无法直接访问lvs后端的Real Server。
后端Real Server的网关为Director的DIP
环境准备
配置
Real Server。主要目的是通过httpd服务测试最终效果。[root@RS1 ~]# dnf install httpd [root@RS1 ~]# echo "RS1 192.168.194.131" > /var/www/html/index.html [root@RS1 ~]# systemctl start httpd [root@RS2 ~]# dnf install httpd [root@RS2 ~]# echo “RS2 192.168.194.141” > /var/www/html/index.html [root@RS2 ~]# systemctl start httpd准备
Director环境#安装lvs的rpm包 [root@Director ~]# yum install ipvsadm #启用内核的转发功能 [root@Director ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
在
director上面配置lvs[root@Director ~]# ipvsadm -A -t 10.10.88.128 -s rr [root@Director ~]# ipvsadm -a -t 10.10.88.128:80 -r 192.168.194.131 -m [root@Director ~]# ipvsadm -a -t 10.10.88.128:80 -r 192.168.194.141 -m [root@Director ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.10.88.128:80 rr -> 192.168.194.131:80 Masq 1 0 3 -> 192.168.194.141:80 Masq 1 0 4测试结果
root@Client:~# curl 10.10.88.128 “RS2 192.168.194.141” root@Client:~# curl 10.10.88.128 RS1 192.168.194.131 root@Client:~# curl 10.10.88.128 “RS2 192.168.194.141” [root@Director ~]# cat /proc/net/ip_vs_conn Pro FromIP FPrt ToIP TPrt DestIP DPrt State Expires PE Name PEData TCP 0A0A5802 A456 0A0A5880 0050 C0A8C28D 0050 TIME_WAIT 84 TCP 0A0A5802 A454 0A0A5880 0050 C0A8C283 0050 TIME_WAIT 82 TCP 0A0A5802 A452 0A0A5880 0050 C0A8C28D 0050 TIME_WAIT 81 #修改调度算法为WRR [root@Director ~]# ipvsadm -E -t 10.10.88.128:80 -s wrr #修改后端real server的端口 [root@Director ~]# ipvsadm -d -t 10.10.88.128:80 -r 192.168.194.131:80 [root@Director ~]# ipvsadm -a -t 10.10.88.128:80 -r 192.168.194.131:8080 -m -w 3 #修改权重 [root@Director ~]# ipvsadm -e -t 10.10.88.128:80 -r 192.168.194.131:8080 -m -w 2
2. DR单网段部署
网络部署

环境准备
配置后端RS
[root@RS1 ~]# dnf install httpd [root@RS1 ~]# echo "RS1 192.168.194.131" > /var/www/html/index.html [root@RS1 ~]# systemctl start httpd [root@RS1 ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.194.253 0.0.0.0 UG 100 0 0 ens160 192.168.194.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160 [root@RS2 ~]# dnf install httpd [root@RS2 ~]# echo “RS2 192.168.194.141” > /var/www/html/index.html [root@RS2 ~]# systemctl start httpd RSVIP配置[root@RS1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@RS1 ~]# ifconfig lo: 192.168.194.100 netmask 255.255.255.255 [root@RS1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.194.100/32 scope global lo: valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:29:62:df brd ff:ff:ff:ff:ff:ff inet 192.168.194.131/24 brd 192.168.194.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe29:62df/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@RS2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@RS2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@RS2 ~]# ifconfig lo: 192.168.194.100 netmask 255.255.255.255 [root@RS2 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.194.100/32 scope global lo: valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:df:65:14 brd ff:ff:ff:ff:ff:ff inet 192.168.194.141/24 brd 192.168.194.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fedf:6514/64 scope link noprefixroute valid_lft forever preferred_lft forever LVSVIP配置[root@Director ~]# ifconfig lo:1 192.168.194.100 netmask 255.255.255.255 [root@Director ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 192.168.194.100/32 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:5c:67 brd ff:ff:ff:ff:ff:ff inet 192.168.194.144/24 brd 192.168.194.255 scope global noprefixroute ens36 valid_lft forever preferred_lft forever inet6 fe80::761f:737e:60c0:e36a/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@Director ~]# ipvsadm -A -t 192.168.194.100:80 -s rr [root@Director ~]# ipvsadm -a -t 192.168.194.100:80 -r 192.168.194.131:80 -g [root@Director ~]# ipvsadm -a -t 192.168.194.100:80 -r 192.168.194.141:80 -g [root@Director ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.194.100:80 rr -> 192.168.194.131:80 Route 1 0 0 -> 192.168.194.141:80 Route 1 0 0
注: lo上的VIP掩码最好设置为32位。如果VIP设置的网段中包含了网关的会导致网络通信有问题。
例:VIP设置为192.168.194.100/24 , 并配置在lo上。由于RS的网关为192.168.194.253。当虚拟机访问网关时,流量会直接从lo口出去访问,导致无法正常访问RS。
其实lo口上配置的VIP: 192.168.194.100/24, 即使该RS所在的整个网络里面没有192.168.194.0/24这个网段的IP。这台linux同样可以直接ping通192.168.194.1-192.168.194.254所有的IP。这个算是lo口的一个特性了。
3. DR多网段部署
这里所说的多网段部署,是指VIP与RS的物理网口不在同一个网段。
网络部署

与单网段配置相比,多网段的唯一区别就是将VIP改成了其他网段的IP
网络配置
router配置
root@router:~# ifconfig ens33:1 172.0.0.254/24 root@router:~# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.194.2 0.0.0.0 UG 102 0 0 ens33 10.10.88.0 0.0.0.0 255.255.255.0 U 101 0 0 ens37 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 ens33 172.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33 192.168.194.0 0.0.0.0 255.255.255.0 U 102 0 0 ens33 director配置
[root@Director ~]# ifconfig lo:1 172.0.0.100 netmask 255.255.255.255 [root@Director ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.194.253 0.0.0.0 UG 100 0 0 ens36 192.168.194.0 0.0.0.0 255.255.255.0 U 100 0 0 ens36 [root@Director ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet 172.0.0.100/32 scope global lo:1 valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:44:5c:67 brd ff:ff:ff:ff:ff:ff inet 192.168.194.144/24 brd 192.168.194.255 scope global noprefixroute ens36 valid_lft forever preferred_lft forever inet6 fe80::761f:737e:60c0:e36a/64 scope link noprefixroute valid_lft forever preferred_lft forever RS配置
[root@RS1 ~]# ifconfig lo:1 172.0.0.100 netmask 255.255.255.255 [root@RS2 ~]# ifconfig lo:1 172.0.0.100 netmask 255.255.255.255LVS配置
[root@Director ~]# ipvsadm -A -t 172.0.0.100:80 -s rr [root@Director ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.0.0.100:80 rr [root@Director ~]# ipvsadm -a -t 172.0.0.100:80 -r 192.168.194.131:80 [root@Director ~]# ipvsadm -a -t 172.0.0.100:80 -r 192.168.194.141:80 [root@Director ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.0.0.100:80 rr -> 192.168.194.131:80 Route 1 0 0 -> 192.168.194.141:80 Route 1 0 0测试
root@Client:~# curl 172.0.0.100 RS2 192.168.194.141 root@Client:~# curl 172.0.0.100 RS1 192.168.194.131 root@Client:~# curl 172.0.0.100 RS2 192.168.194.141 root@Client:~# curl 172.0.0.100 RS1 192.168.194.131
LVS配置脚本
#!/bin/bash
#Author:wangxiaochun
#Date:2017-08-13
vip='172.0.0.100'
iface='lo:1'
mask='255.255.255.255'
port='80'
rs1='192.168.194.131'
rs2='192.168.194.141'
scheduler='wrr'
type='-g'
rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null
case $1 in
start)
ifconfig $iface $vip netmask $mask #broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
echo "The VS Server is Ready!"
;;
stop)
ipvsadm -C
ifconfig $iface down
echo "The VS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esacRS配置脚本
#!/bin/bash
#Author:wangxiaochun
#Date:2017-08-13
vip=172.0.0.100
mask='255.255.255.255'
dev=lo:1
#rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null
#service httpd start &> /dev/null && echo "The httpd Server is Ready!"
#echo "`hostname -I`" > /var/www/html/index.html
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask #broadcast $vip up
echo "The RS Server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "The RS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac