工作原理

  1. 客户端发送请求到 Director Server (负载均衡器 DS),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间,Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输
  2. 内核空间判断数据包的目标IP是本机IP,此时LVS比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源IP地址与目标IP地址没有改变,然后将数据包发送给 Real Server 1
  3. 到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP 为CIP),将响应报文通过IO接口传送给物理网卡然后向外发出,Real server 1 直接将响应报文传送到客户端

CentOS 7 搭建 LVS集群 DR模式_vim

环境

IP

服务

192.168.2.200

虚拟IP(VIP)

192.168.2.100

lvs调度器(DS)

192.168.2.111

web服务器1(RS)

192.168.2.112

web服务器2(RS)

一、lvs 调度器安装 

1、安装ipvsadm工具

# 安装
yum install ipvsadm

# 启动
systemctl start ipvsadm

2、创建IP别名,一个网卡配置多个IP

# 临时创建
ifconfig ens33:0 192.168.2.200 netmask 255.255.255.0


# 永久创建
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0

# 修改NAME,DEVICE名称,删除UUID,DNS,网关
vim ifcfg-ens33:0

NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.2.200
NETMASK=255.255.255.0

3、重启网络服务

systemctl restart network

4、调整 proc 响应参数 

# 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址
# 需要关闭 ICMP 的重定向,不充当路由器
cat <<EOF > /etc/sysctl.d/lvs-dr.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
EOF

# 动态加载ip_vs模块
modprobe ip_vs

# 刷新配置
sysctl -p /etc/sysctl.d/lvs-dr.conf

5、配置策略

# 清空策略 
ipvsadm -C

-A: 添加虚拟服务器
-a:添加节点
-t:指定vip及tcp端口
-s:指定算法
rr:轮询
-r:指定节点ip及端口
-g:表示使用DR模式
-w:设置权重

ipvsadm -A -t 192.168.2.200:80 -s rr
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.111:80 -g -w 1
ipvsadm -a -t 192.168.2.200:80 -r 192.168.2.112:80 -g -w 1

# 保存
ipvsadm-save > /etc/sysconfig/ipvsadm

# 查看策略
ipvsadm -ln

二、Web 服务器安装(2台都要安装)

1、安装并启动 httpd

yum install httpd -y
systemctl start httpd

2、修改主页内容

# 修改 web 服务器 1
vim /var/www/html/index.html
this is 192.168.2.111

# 修改 web 服务器 2
vim /var/www/html/index.html
this is 192.168.2.112

3、添加回环网卡

cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0

# 修改回环网卡名,IP地址,子网掩码
vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.2.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
#NAME=loopback

# 重启网络服务
systemctl restart network

4、设置路由

route add -host 192.168.2.200 dev lo:0
route -n

# 开机启动
vim /etc/rc.d/rc.local
/usr/sbin/route add -host 192.168.2.200 dev lo:0

chmod +x /etc/rc.d/rc.local

5、调整 proc 响应参数 

# 系统只响应目的IP为本地IP的ARP请求
# 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

cat <<EOF > /etc/sysctl.d/lvs-dr.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF

# 刷新配置
sysctl -p /etc/sysctl.d/lvs-dr.conf

6、访问

CentOS 7 搭建 LVS集群 DR模式_linux_02

CentOS 7 搭建 LVS集群 DR模式_服务器_03