云计算百科
云计算领域专业知识百科平台

LVS(Linux virual server)四层负载均衡实验

LVS简介

LVS 全称 Linux Virtual Server,是 Linux 内核层实现的高性能、高可用 的负载均衡集群技术,由章文嵩博士开发,目前是 Linux 内核的标准模块 之一。它的核心作用是将前端的请求流量分发到后端多台真实服务器 (Real Server)上,从而提升服务的并发处理能力和可用性。

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基 于LVS+keepalived实现 LVS

官网: http://www.linuxvirtualserver.org/

LVS 相关术语

VS: Virtual Server,负责调度

RS:RealServer,负责真正提供服务

lvs集群的类型

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP

NAT模式实验主机环境搭建

VS主机配置

RS1配置

RS2配置

验证是否配置成功(在vs主机上测试)

NAT模式实现方法

#开启内核路由功能

#编写策略

注意执行以上指令时出现【未找到命令时】需要安装 ipvsadm

[root@vsssnnode ~]# yum install ipvsadm -y
[root@vsssnnode ~]# ipvsadm -C        清空服务器上所有已配置的 LVS 规则
[root@vsssnnode ~]# ipvsadm -A -t 172.25.254.100:80 -s wrr  创建一个对外提供服务的 LVS 虚拟节点(VIP),指定用 “加权轮询” 算法分发请求。
[root@vsssnnode ~]# ipvsadm -A -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
Illegal 'real-server' option with the 'add-service' command
[root@vsssnnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
[root@vsssnnode ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1

把后端真实服务器(192.168.0.10/20:80)加入刚才创建的 LVS 虚拟服务,指定用 NAT 模式转发,权重为 1。
[root@vsssnnode ~]# ipvsadm -Ln       查看当前配置好的所有 LVS 规则(验证配置是否生效)
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 wrr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0    

测试结果

利用自定义文件进行持久化

[root@vsnode ~]# ipvsadm-save -n
-A -t 172.25.254.100:80 -s wrr
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
[root@vsnode ~]# ipvsadm-save -n > /mnt/ipvs.rule
[root@vsnode ~]# ipvsadm -C


[root@vsnode ~]# ipvsadm-restore < /mnt/ipvs.rule

利用守护进程进行规则持久化

[root@vsnode ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm
[root@vsnode ~]# ipvsadm -C


[root@vsnode ~]# systemctl enable –now ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

DR模式实验

环境设定

#在路由器中配置

[root@router ~]# systemctl disable –now ipvsadm.service
Removed "/etc/systemd/system/multi-user.target.wants/ipvsadm.service".
[root@router ~]# ipvsadm -C

#在路由器中

[root@router ~]# vmset.sh eth0 172.25.254.100 vsnode
[root@router ~]# vmset.sh eth1 192.168.0.100 vsnode noroute、

#设定内核路由功能

[root@router ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
[root@router ~]# sysctl  -p
net.ipv4.ip_forward = 1

#数据转发策略

[root@router ~]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to-source 192.168.0.100
[root@vsnode ~]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 172.25.254.100

vsnode 调度器配置

[root@vsnode ~]# vmset.sh  eth0 192.168.0.50 vsnode  norouter
[root@vsnode ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1==192.168.0.50/24,192.168.0.100

[root@vsnode ~]# cd  /etc/NetworkManager/system-connections/
[root@vsnode system-connections]#  cp -p eth0.nmconnection lo.nmconnection
[root@vsnode system-connections]# vim lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo

[ipv4]
method=manual
address1==127.0.0.1/8
address2=192.168.0.200/32

[root@RS1 system-connections]# nmcli connection reload
[root@RS1 system-connections]# nmcli connection up eth0
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/7)
[root@RS1 system-connections]# nmcli connection up  lo
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)

检测

客户机配置

root@client xia]# vim /etc/NetworkManager/system-connections/eth0.nmconnection

[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
method=manual
address1=172.25.254.99/24,172.25.254.100
dns=8.8.8.8;
 

RS1配置

RS2配置

[root@rs2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore        设置所有网卡的 arp_ignore 参数为 1,让服务器只响应目标 IP 是本机网卡配置的 IP 的 ARP 请求。
[root@rs2 system-connections]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore          单独给回环网卡(lo)设置 arp_ignore=1,强化对 VIP 的 ARP 响应限制(因为 LVS DR 模式下 VIP 通常配置在 lo 网卡上)。
[root@rs2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce      设置回环网卡的 arp_announce 参数为 2,让服务器发送 ARP 包时,只使用目标网段匹配的网卡 IP 作为源 IP,不暴露 VIP。
[root@rs2 system-connections]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce      让所有网卡生效 arp_announce=2,全局限制 ARP 包的源 IP 选择,避免 VIP 被对外暴露
 

利用火墙标记解决轮询错误

1.在rs主机中同时开始http和https两种协议
#在RS1和RS2中开启https

RS1
[root@RS1 ~]# dnf install mod_ssl -y
[root@RS1 ~]# systemctl restart httpd
[root@RS1~]# systemctl restart httpd

RS2

[root@RS2 ~]# dnf install mod_ssl -y
[root@RS2 ~]# systemctl restart httpd
[root@RS2~]# systemctl restart httpd

2.在vsnode中添加https的轮询策略
[root@vsnode ~]# ipvsadm -A -t 192.168.0.200:80  -s rr                          创建 80 端口虚拟服务
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20 -g     添加 80 端口后端 RS2
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10 -g     添加 80 端口后端 RS1
[root@vsnode ~]#  ipvsadm -A -t 192.168.0.200:443 -s rr                        创建 443 端口虚拟服务
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g  添加 443 端口后端 RS1
[root@vsnode ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g   添加 443 端口后端 RS2
[root@vsnode ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80              Route   1      0          0         
TCP  192.168.0.200:443 rr
  -> 192.168.0.10:443             Route   1      0          0         
  -> 192.168.0.20:443             Route   1      0          0        
 

3.轮询错误展示

[root@client ~]# curl  192.168.0.200;curl -k https://192.168.0.200
RS2 – 192.168.0.20
RS2 – 192.168.0.20

解决方案:使用火墙标记访问vip的80和443的所有数据包,设定标记为6666,然后对此标记进行负载

[root@vsnode ~]#  iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport –dports 80,443 -j MARK –set-mark  6666   给 80/443 流量打 6666 标记
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr             创建基于 6666 标记的 LVS 虚拟服务
[root@vsnode ~]# ipvsadm  -a -f 6666 -r 192.168.0.10 -g  添加后端节点 192.168.0.10(DR 模式)
[root@vsnode ~]# ipvsadm  -a -f 6666 -r 192.168.0.20 -g  添加后端节点 192.168.0.20(DR 模式)
测试

利用持久连接实现会话粘滞

1.设定ipvs调度策略
  [root@vsnode ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport –dports 80,443 -j MARK –set-mark 6666

对所有访问 192.168.0.100 的 80/443   端口流量打「6666」标记,然后 LVS 对带这个标记的流量做「轮询 + 1 秒会话保持」的 DR 模式负载均衡。
[root@vsnode ~]# ipvsadm -A -f 6666 -s rr -p 1

[root@vsnode ~]#  ipvsadm -Ln     告诉 LVS:要处理 6666 标记的流量,用轮询方式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
FWM  6666 rr
  -> 192.168.0.10:0               Route   1      0          2         
  -> 192.168.0.20:0               Route   1      0          0  
 

测试

观察变化动向

赞(0)
未经允许不得转载:网硕互联帮助中心 » LVS(Linux virual server)四层负载均衡实验
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!