VPS测评 VPS推荐 VPS优惠
Linux运维

LVS的DR模式搭建

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

  1. 在前端网关做静态绑定
  2. 在各RS使用arptables
  3. 在各RS修改内核参数,来限制arp响应和通告的级别

限制响应级别:arp_ignore

  • 0:默认值,响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址)
  • 1:只响应目的IP地址为接收网卡上的本地地址的arp请求

限制通告级别:arp_announce

  • 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
  • 1:尽量避免将接口信息向非直接连接网络进行通告
  • 2:必须避免将接口信息向非本网络进行通告 RS 一般至少两个端口 两个ip,eth0 有ip,lo: 0也绑定了一个VIP。 根据arp协议,arp 请求包中必须包含源主机的IP地址和Mac地址,对方收到请求包后,记录下该源地址和Mac地址,建立一对一的映射,那么对于这种多IP的情况,RS发送arp请求报的时候该如何取舍,将哪个ip作为源地址? 参数arp_anonunce 正好是用来解决这个问题的,arp_announce=2 官方表述为使用最适当的本地地址,其实就是将eth0上的IP作为源地址。如果将VIP作为源地址,对方就会将VIP与RS的mac地址映射起来,导致请求包都发给RS,而不经过LVS

配置要点

  1. Director 服务器采用双IP桥接网络,一个是VIP,一个DIP
  2. Web服务器采用和DIP相同的网段和Director连接
  3. 每个Web服务器配置VIP
  4. 每个web服务器可以出外网
LVS DR 模式

环境准备

客户端

eth0: 仅主机 192.168.10.6/24 GW:192.168.10.200

路由器

eth0: NAT 10.0.0.200/24
eth1: 仅主机 192.168.10.200/24
启用 IP_FORWARD

LVS

eth0: NAT DIP 10.0.0.8/24 GW: 10.0.0.200
lo: VIP 10.0.0.100/32

RS1

eth0: NAT 10.0.0.7/24 GW:10.0.0.200
lo: VIP 10.0.0.100/32

RS2

eth0: NAT 10.0.0.17/24 GW:10.0.0.200
lo: VIP 10.0.0.100/32

网络配置

centos 网卡配置文件:/etc/sysconfig/network-scripts

客户端

ifcfg-eth0

BOOTPROTO=static
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.10.6
PREFIX=24
GATEWAY=192.168.10.200

路由器

ifcfg-eth0

DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=24
ONBOOT=yes
GATEWAY=10.0.0.2

ifcfg-eth1

DEVICE=eth1
NAME=eth1
BOOTPROTO=static
IPADDR=192.168.10.200
PREFIX=24
ONBOOT=yes

LVS

ifcfg-eth0

DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.8
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes

RS1

DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes

RS2

DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.17
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes

服务配置

LVS

-g 表示DR模式(默认)

ifconfig lo:1 10.0.0.100/32
yum -y install ipvsadm
ipvsadm -A -t 10.0.0.100:80 -s rr
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7:80 -g
ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17:80 -g

路由器

开启ip_forward

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p

RS1

yum -y install httpd
echo rs1 10.0.0.7 >/var/www/html/index.html 
systemctl start httpd
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 lo:1 10.0.0.100/32

RS2

yum -y install httpd
echo rs2 10.0.0.17 >/var/www/html/index.html 
systemctl start httpd
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 lo:1 10.0.0.100/32

测试访问

while :;do curl 10.0.0.100;sleep 0.5;done
测试访问成功

快速配置VIP的shell脚本

直接把变量修改下就能用

lvs_dr_rs.sh

#!/bin/bash
#Author: qinwa
vip=10.0.0.100
mask='255.255.255.255'
dev=lo:1
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
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
未经允许不得转载:青蛙主机 » LVS的DR模式搭建

VPS相关常用工具

PING测试工具自用毛子接码站