LVS-DR模式
DR模式工作原理
1、客户端发送请求至VIP,也就是访问服务,请求报文源地址是CIP,目标地址为VIP;
2、LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是我们配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;
3、因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。
环境准备
LVS(调度器) 10.0.0.5 vip 10.0.0.3
web01 10.0.0.7
web02 10.0.0.8
LVS调度器
1、安装ipvsadm
yum -y install ipvsadm
2、在lvs调度器上配置vip和路由
临时配置,重启就消失
ifconfig eth0:0 10.0.0.3/24 broadcast 10.0.0.255 netmask 255.255.255.0 up
route add -host 10.0.0.3 dev eth0:0
永久配置
\cp /etc/sysconfig/network-scripts/ifcfg-eth{0,0:0}
cd /etc/sysconfig/network-scripts
sed -ri 's/NAME="eth0"/NAME="eth0:0"/' ifcfg-eth0:0
sed -ri '/^DEVICE=/cDEVICE="eth0:0"' ifcfg-eth0:0
sed -ri '/^IPADDR/cIPADDR=10.0.0.3' ifcfg-eth0:0
ifup ifcfg-eth0:0
3、配置路由转发
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0 #禁止转发重定向报文
net.ipv4.conf.eth0.send_redirects = 0 #禁止eth0转发重定向报文
net.ipv4.conf.default.send_redirects = 0 #禁止转发默认重定向报文
4、配置lvs集群
[root@LVS~]# ipvsadm -C #清空所有规则
[root@LVS~]# ipvsadm -A -t 10.0.0.3:80 -s rr #定义LVS服务,并指定负责均衡策略为rr,即轮询;
[root@LVS~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g #添加一台后端web服务器,作为负载均衡节点,并指定为DR模式。
[root@LVS~]# ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g #添加一台后端web服务器,作为负载均衡节点,并指定为DR模式。
[root@LVS~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@LVS ~]# systemctl start ipvsadm
[root@LVS ~]# systemctl enable ipvsadm
ipvsadm基本命令参数
-A 指定添加的LVS负载均衡虚拟服务
-t 指定虚拟服务器的IP地址和端口
-s 指定调度算法,ss为轮询,wrr为加权轮询,dh为目标地址散列,sh为源地址散列,lc为最少链接等
-a 在对应的VIP下添加RS节点
-g 指定LVS的工作模式为DR模式
-l 指定LVS的工作模式为tunnel模式
-m 指定LVS的工作模式为NAT模式
查看LVS对应的均衡规则
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.1.5:80 rr
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 1 0 0
后端RS配置
1、安装nginx
yum -y install nginx
2、修改网页内容
[root@web01 ~]# cat /usr/share/nginx/html/index.html
web01
[root@web02 ~]# cat /usr/share/nginx/html/index.html
web02
3、开启web服务
systemctl start nginx
systemctl enable nginx
4、将两台web服务器的lo网卡地址修改成vip(掩码必须是32位)
临时配置
ifconfig lo:0 10.0.0.3/32
永久配置
\cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}
cd /etc/sysconfig/network-scripts
sed -ri '/^#/d' ifcfg-lo:0
sed -ri '/^DEVICE/cDEVICE=lo:0' ifcfg-lo:0
sed -ri '/^NAME/cNAME=lo:0' ifcfg-lo:0
sed -ri '/^IPADDR/cIPADDR=10.0.0.3' ifcfg-lo:0
sed -ri '/^NETWORK/cNETWORK=10.0.0.3' ifcfg-lo:0
sed -ri '/^NETMASK/cNETMASK=255.255.255.255' ifcfg-lo:0
sed -ri '/^BROADCAST/cBROADCAST=10.0.0.3' ifcfg-lo:0
ifup ifcfg-lo:0
5、给web服务器的设置内核参数
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp响应,不允许接收
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #为了让vip可以发包出去,允许转发
测试
[root@web03 ~]# curl http://10.0.0.3
web02
[root@web03 ~]# curl http://10.0.0.3
web01
[root@web03 ~]# curl http://10.0.0.3
web02
[root@web03 ~]# curl http://10.0.0.3
web01
#显示的结果满足轮询策略