(实验)LVS-DR
1、实验环境
(在实际虚拟机中eth0 为enp0s3)
三台机器:
Director节点: (eth0 192.168.56.103 vip eth0:0 192.168.56.111)
Real server1: (eth0 192.168.56.201 vip lo:0 192.168.56.111)
Real server2: (eth0 192.168.56.202 vip lo:0 192.168.56.111)
2、安装
所有机器上安装net-tools(ifconfig、route等命令才好用)
# yum install -y net-tools
两个 real server 上都安装 nginx 服务
# yum install -y nginx
Director 上安装 ipvsadm
# yum install -y ipvsadm
3、Director 上配置脚本
# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward #开启路由转发,0为不转发
ipv=/sbin/ipvsadm
vip=192.168.56.111
rs1=192.168.56.201
rs2=192.168.56.202
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s wrr #定义一个集群服务,策略为wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 3 #
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
-A:规定发往本机哪个IP:PORT的报文是需要被调度的
-a:为某个调度规则添加Real Server
-t:tcp协议请求
-s:定义调度规则
-m:表示采用lvs-nat工作模式,默认为lvs-dr工作模式
-w:调度规则是wrr(带权重的轮询)用-w 定义Real Server的权重
执行脚本:
# bash /usr/local/sbin/lvs_dr.sh
4、在2台 rs 上配置脚本:
# vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=192.168.56.111
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0 #貌似这个命令有问题
#ip route add $vip/32 dev lo:0 #加路由也可使用这条命令
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
0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
4-7 - 保留未使用
8 -不回应所有(本地地址)的arp查询
arp_announce:
对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口
0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.
rs 上分别执行脚本:
bash /usr/local/sbin/lvs_dr_rs.sh
# ipvsadm -L -n #查看ipvs定义的规则列表
# cat /proc/sys/net/ipv4/ip_forward #查看Linux是否开启路由转发功能
0
# echo 1 > /proc/sys/net/ipv4/ip_forward #启动Linux的路由转发功能
# cat /proc/sys/net/ipv4/ip_forward
另外,# sysctl -w net.ipv4.ip_forward = 1 也是开启转发的命令
ip route show 查看路由添加情况
5、实验测试
测试方式同上,浏览器访问 http://192.168.56.111
注意:在 DR 模式下,2台 rs 节点的 gateway 不需要设置成 dir 节点的 IP 。