企业集群的应用 LVS-DR 集群

发布时间 2023-07-06 02:39:20作者: m_zhuang

一、LVS - DR 数据包的流向分析

(1)客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP)到达内核空间。

(2)Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。

(3)内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改变,然后将数据包发送给 Real Server。

(4)到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理网卡然后向外发出。

(5)Real Server 直接将响应报文传送到客户端。

二、LVS - DR 中 ARP 问题

(1)ARP 广播 导致所有节点服务器和调度器的VIP响应

解决方法:arp _ingore=1

防止网关路由发送ARP广播时调度器和节点服务器都进行响应,导致ARP缓存紊乱,不对非本地物理网卡IP的ARP请求进行响应,应为VIP是承载 lo:0

(2)导致 VIP 的调度器失效:arp_annouce=2

解决方案:系统不响应数据包的源IP地址(VIP)来作为本机进行ARP报文的源IP地址,而是用发送报文的物理网卡IP地址作为ARP请求报文的源IP地址,这样可以防止网关路由器接受到的源IP地址为VIP的请求报文后又更新ARP缓存表,导致外网再发送请求时数据包达到不了调度器

三、LVS - DR 特性

(1)LVS - DR 模式需要注意的是:保证前端路由将目标地址为VIP报文系统发给调度器(DS),而不是节点服务器(RS)

解决方案:修改 RS 上内核参数(arp_ingore 和 arp_annouce)将节点服务器上VIP地址配置在lo接口的别名上,并限制其能不能响应对VIP地址解析请求

arp_ingore=1 表示系统只响应目的IP地址的ARP请求

arp_annouce=2 表示系统不使用IP包的源地址来设置的ARP请求的源地址,而选择发送接口的IP地址

(2)LVS - DR 优点

DR 模式的特点:
(1)Director Server 和 Real Server 必须在同一个物理网络中。
(2)Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对 RIP 进行直接访问。
(3)Director Server作为群集的访问入口,但不作为网关使用。
(4)所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
(5)Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
(6)Real Server 上的 lo 接口配置 VIP 的 IP 地址。

缺点:

这种方式需要所有的负载均衡和节点服务器都在同一广播域;不支持异地容灾

四、案例 构建 LVS - DR 集群部署

LVS - DR 集群 案例架构图

image-20230705153814380

1. 案例环境

(1)共享存储服务器

ens33

IP:192.168.23.20/24

(2)LVS -DR 服务器:

ens33

IP:192.168.23.5/24

ens33:0

VIP:192.168.23.100/32

(3)web1-server 服务器

ens33

IP:192.168.23.10/24

ens33:0

VIP:192.168.23.100/32

(4)web2 -server 服务器

ens33

IP:192.168.23.15/24

ens33:0

VIP:192.168.23.100/32

2. 部署负载调度器

LVS-DR服务器:192.168.23.5/24

(1)安装 LVS 管理工具

# 启用 ip_vs 内置模块
modprobe ip_vs

# 查看 ip_vs 版本
cat /proc/net/ip_vs

# 安装 LVS 管理工具
yum -y install ipvsadm

echo "nameserver 218.2.135.1" >> /etc/resolv.conf
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo

image-20230705161353011

image-20230705161611585

(2)配置虚拟 IP 地址

VIP:192.168.23.100

# 配置ens33:0虚拟网卡
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.23.100
NETMASK=255.255.255.255

:wq!

# 启用ens33:0虚拟网卡
ifup ens33:0

# 重启网络服务
systemctl restart network

# 查看虚拟网卡 ens33:0
ifconfig ens33:0

image-20230705163535039

(3)关闭 icmp 重定向

由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。

# 调整 proc 响应参数,关闭路由器功能
vim /etc/sysctl.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

# 启用 sysctl
sysctl -p

image-20230705164633141

(4)部署负载分配策略

# 启动 ipvsadm 服务前必须备份负载分配策略配置,否则会报错
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm

# 清空原有策略
ipvsadm -C
# 添加虚拟服务器
ipvsadm -A -t 192.168.23.100:80 -s rr
# 添加真实服务器(后端服务器)
ipvsadm -a -t 192.168.23.100:80 -r 192.168.23.10:80 -g
ipvsadm -a -t 192.168.23.100:80 -r 192.168.23.15:80 -g

# 启动策略
ipvsadm

# 查看已配置的策略
ipvsadm -ln

image-20230705181738646

3. 部署共享服务器

(1)安装 NFS 服务

yum -y install nfs-utils rpcbind

image-20230705182922442

(2)创建共享目录

mkdir /opt/web1 /opt/web2
chmod 777 /opt/web1 /opt/web2

image-20230705183015806

(3)设置共享目录

vim /etc/exports
/usr/share *(ro,sync)
/opt/web1 192.168.23.0/24(rw,sync,no_root_squash)
/opt/web2 192.168.23.0/24(rw,sync,no_root_squash)

:wq!

# 发布共享目录
exportfs -rv

# 重启服务
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs

image-20230705184425116

4. 部署节点服务器

web1-server:192.168.23.10

web2-server:192.168.23.15

部署 web1-server 服务器

(1)配置虚拟 VIP

# 配置虚拟 VIP 地址
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.23.100
NETMASK=255.255.255.255 

:wq!

# 启动 lo:0 网卡
ifup lo:0

# 查看 lo:0 网卡信息
ifconfig

# 向 lo:0 网卡中添加路由
route add -host 192.168.23.100 dev lo:0

# 设置开机自动将路由添加到 lo:0 网卡
echo "/sbin/route add -host 192.168.23.100 dev lo:0" >> /etc/rc.local

image-20230705190423115

image-20230705191045225

(2)调整内核的 ARP 响应参数

调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突

vim /etc/sysctl.conf

# 系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1

# 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.lo.arp_announce = 2		
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

:wq!

# 启用路由设置
sysctl -p

image-20230705192908597

(3)部署 Apache服务及共享服务

yum -y install nfs-utils rpcbind httpd
# 开启服务并设置开机自起
systemctl start rpcbind
systemctl start httpd
systemctl enable rpcbind
systemctl enable httpd

image-20230705193334480

image-20230705193552470

(4)创建 web 应用

image-20230705200034563

# 永久挂载共享目录
echo "192.168.23.20:/opt/web1 /var/www/html nfs defaults 0 0" >> /etc/fstab
mount -a

# 创建web应用
echo "this is web1-erver" > /var/www/html/index.html

image-20230705214623384

image-20230705215214916

部署 web2-server 服务器

(1)配置虚拟 VIP

# 配置虚拟 VIP 地址
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.23.100
NETMASK=255.255.255.255 

:wq!

# 启动 lo:0 网卡
ifup lo:0

# 查看 lo:0 网卡信息
ifconfig

# 向 lo:0 网卡中添加路由
route add -host 192.168.23.100 dev lo:0

# 设置开机自动将路由添加到 lo:0 网卡
echo "/sbin/route add -host 192.168.23.100 dev lo:0" >> /etc/rc.local

image-20230705215726909

image-20230705220406930

调整内核的 ARP 响应参数

调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突

vim /etc/sysctl.conf

# 系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1

# 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.lo.arp_announce = 2		
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

:wq!

# 启用路由设置
sysctl -p

image-20230705220638832

(3)部署 Apache服务及共享服务

yum -y install nfs-utils rpcbind httpd
# 开启服务并设置开机自起
systemctl start rpcbind
systemctl start httpd
systemctl enable rpcbind
systemctl enable httpd

image-20230705220758372

(4)创建 web 应用

image-20230705220904224

# 永久挂载共享目录
echo "192.168.23.20:/opt/web2 /var/www/html nfs defaults 0 0" >> /etc/fstab
mount -a

# 创建web应用
echo "this is web2-erver" > /var/www/html/index.html

image-20230705221333163

5. 测试

在客户端使用浏览器访问 http://192.168.23.100/